camox 0.29.0 → 0.31.0

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.
@@ -30,6 +30,7 @@ const previewStore = createStore({
30
30
  isAddBlockSheetOpen: false,
31
31
  addBlockSource: null,
32
32
  isAgentChatSheetOpen: false,
33
+ agentChatPageScaffoldContext: null,
33
34
  isCreatePageModalOpen: false,
34
35
  editingPageId: null,
35
36
  isContentLocked: false,
@@ -41,6 +42,7 @@ const previewStore = createStore({
41
42
  peekedPagePathname: null,
42
43
  skipPeekedBlockExitAnimation: false,
43
44
  selection: null,
45
+ pendingAgentBlockFocus: null,
44
46
  iframeElement: null,
45
47
  previewSource: "draft"
46
48
  },
@@ -113,7 +115,8 @@ const previewStore = createStore({
113
115
  }),
114
116
  setSelection: (context, event) => ({
115
117
  ...context,
116
- selection: event.selection
118
+ selection: event.selection,
119
+ pendingAgentBlockFocus: null
117
120
  }),
118
121
  setFocusedBlock: (context, event) => ({
119
122
  ...context,
@@ -121,17 +124,40 @@ const previewStore = createStore({
121
124
  type: "block",
122
125
  blockId: event.blockId
123
126
  },
127
+ pendingAgentBlockFocus: null,
124
128
  peekedBlock: null,
125
129
  peekedBlockPosition: null,
126
130
  isAddBlockSheetOpen: false
127
131
  }),
132
+ focusAgentBlock: (context, event) => ({
133
+ ...context,
134
+ selection: {
135
+ type: "block",
136
+ blockId: event.blockId
137
+ },
138
+ pendingAgentBlockFocus: {
139
+ blockId: event.blockId,
140
+ requestId: (context.pendingAgentBlockFocus?.requestId ?? 0) + 1
141
+ },
142
+ peekedBlock: null,
143
+ peekedBlockPosition: null,
144
+ isAddBlockSheetOpen: false
145
+ }),
146
+ clearPendingAgentBlockFocus: (context, event) => {
147
+ if (context.pendingAgentBlockFocus?.requestId !== event.requestId) return context;
148
+ return {
149
+ ...context,
150
+ pendingAgentBlockFocus: null
151
+ };
152
+ },
128
153
  selectItem: (context, event) => ({
129
154
  ...context,
130
155
  selection: {
131
156
  type: "item",
132
157
  blockId: event.blockId,
133
158
  itemId: event.itemId
134
- }
159
+ },
160
+ pendingAgentBlockFocus: null
135
161
  }),
136
162
  selectBlockField: (context, event) => ({
137
163
  ...context,
@@ -140,7 +166,8 @@ const previewStore = createStore({
140
166
  blockId: event.blockId,
141
167
  fieldName: event.fieldName,
142
168
  fieldType: event.fieldType
143
- }
169
+ },
170
+ pendingAgentBlockFocus: null
144
171
  }),
145
172
  selectItemField: (context, event) => ({
146
173
  ...context,
@@ -150,7 +177,8 @@ const previewStore = createStore({
150
177
  itemId: event.itemId,
151
178
  fieldName: event.fieldName,
152
179
  fieldType: event.fieldType
153
- }
180
+ },
181
+ pendingAgentBlockFocus: null
154
182
  }),
155
183
  selectParent: (context) => {
156
184
  const sel = context.selection;
@@ -181,11 +209,13 @@ const previewStore = createStore({
181
209
  },
182
210
  clearSelection: (context) => ({
183
211
  ...context,
184
- selection: null
212
+ selection: null,
213
+ pendingAgentBlockFocus: null
185
214
  }),
186
215
  setPeekedPage: (context, event) => ({
187
216
  ...context,
188
217
  selection: null,
218
+ pendingAgentBlockFocus: null,
189
219
  peekedPagePathname: event.pathname
190
220
  }),
191
221
  clearPeekedPage: (context) => ({
@@ -212,6 +242,7 @@ const previewStore = createStore({
212
242
  type: "block",
213
243
  blockId: event.blockId
214
244
  },
245
+ pendingAgentBlockFocus: null,
215
246
  isAddBlockSheetOpen: false,
216
247
  peekedBlock: null,
217
248
  peekedBlockPosition: null,
@@ -240,18 +271,28 @@ const previewStore = createStore({
240
271
  ...context,
241
272
  isPageContentSheetOpen: false
242
273
  }),
243
- openAgentChatSheet: (context, _, enqueue) => {
244
- if (context.isAgentChatSheetOpen) return context;
274
+ openAgentChatSheet: (context, event, enqueue) => {
275
+ const pageScaffoldContext = event?.pageScaffoldContext;
276
+ if (context.isAgentChatSheetOpen && !pageScaffoldContext) return context;
245
277
  enqueue.effect(() => trackClientEvent("agent_chat_opened"));
246
278
  return {
247
279
  ...context,
248
- isAgentChatSheetOpen: true
280
+ isAgentChatSheetOpen: true,
281
+ agentChatPageScaffoldContext: pageScaffoldContext ? {
282
+ id: Date.now(),
283
+ nickname: pageScaffoldContext.nickname,
284
+ fullPath: pageScaffoldContext.fullPath
285
+ } : context.agentChatPageScaffoldContext
249
286
  };
250
287
  },
251
288
  closeAgentChatSheet: (context) => ({
252
289
  ...context,
253
290
  isAgentChatSheetOpen: false
254
291
  }),
292
+ clearAgentChatPageScaffoldContext: (context) => ({
293
+ ...context,
294
+ agentChatPageScaffoldContext: null
295
+ }),
255
296
  openCreatePageModal: (context) => ({
256
297
  ...context,
257
298
  isCreatePageModalOpen: true
@@ -10,9 +10,9 @@ import { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, Comma
10
10
  //#region src/features/provider/components/CommandPalette.tsx
11
11
  function CommandPalette() {
12
12
  const $ = c(36);
13
- if ($[0] !== "5f1e8a1c01d480f9776b22a64c8ade21ccf8399f3ce44325bad21e192e883016") {
13
+ if ($[0] !== "85ba0b6dafc30e5e42d7a8100e19fddf7f674f2db2d4daf495b1cb749edf3f68") {
14
14
  for (let $i = 0; $i < 36; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
15
- $[0] = "5f1e8a1c01d480f9776b22a64c8ade21ccf8399f3ce44325bad21e192e883016";
15
+ $[0] = "85ba0b6dafc30e5e42d7a8100e19fddf7f674f2db2d4daf495b1cb749edf3f68";
16
16
  }
17
17
  const isOpen = useSelector(studioStore, _temp);
18
18
  const [search, setSearch] = React.useState("");
@@ -153,6 +153,7 @@ function CommandPalette() {
153
153
  return /* @__PURE__ */ jsx(CommandGroup, {
154
154
  heading: groupLabel_0,
155
155
  children: groupActions.map((action_2) => /* @__PURE__ */ jsxs(CommandItem, {
156
+ keywords: action_2.aliases,
156
157
  onSelect: () => handleSelect(action_2.id),
157
158
  className: "justify-between",
158
159
  children: [action_2.label, action_2.shortcut && /* @__PURE__ */ jsx(CommandShortcut, { children: formatShortcut(action_2.shortcut) })]
@@ -199,9 +200,9 @@ function _temp(state) {
199
200
  }
200
201
  function useCommandPaletteActions() {
201
202
  const $ = c(2);
202
- if ($[0] !== "5f1e8a1c01d480f9776b22a64c8ade21ccf8399f3ce44325bad21e192e883016") {
203
+ if ($[0] !== "85ba0b6dafc30e5e42d7a8100e19fddf7f674f2db2d4daf495b1cb749edf3f68") {
203
204
  for (let $i = 0; $i < 2; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
204
- $[0] = "5f1e8a1c01d480f9776b22a64c8ade21ccf8399f3ce44325bad21e192e883016";
205
+ $[0] = "85ba0b6dafc30e5e42d7a8100e19fddf7f674f2db2d4daf495b1cb749edf3f68";
205
206
  }
206
207
  let t0;
207
208
  if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
@@ -216,6 +217,7 @@ function _temp7() {
216
217
  action: {
217
218
  id: "toggle-command-palette",
218
219
  label: "Toggle command palette",
220
+ aliases: ["Commands", "Search commands"],
219
221
  groupLabel: "Invisible",
220
222
  checkIfAvailable: _temp4,
221
223
  execute: _temp5,
@@ -21,18 +21,24 @@ const links = [{
21
21
  to: "/",
22
22
  title: "Preview",
23
23
  children: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Globe, { className: "h-4 w-4" }), "Preview"] }),
24
- icon: "Globe"
24
+ icon: "Globe",
25
+ aliases: ["Preview", "Website"]
25
26
  }, {
26
27
  to: "/cmx-studio/content",
27
28
  title: "Content",
28
29
  children: /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Database, { className: "h-4 w-4" }), "Content"] }),
29
- icon: "FileText"
30
+ icon: "FileText",
31
+ aliases: [
32
+ "Content",
33
+ "Pages",
34
+ "CMS"
35
+ ]
30
36
  }];
31
37
  const Navbar = () => {
32
38
  const $ = c(24);
33
- if ($[0] !== "8dc1a9bd4bf6bec7a5222000410c137024570dada4eee777e4c30a50b639d928") {
39
+ if ($[0] !== "bee8f3d13dbb280b2de1a82d82a4017e5a4d40d4e5868be00fe289eb0c74361f") {
34
40
  for (let $i = 0; $i < 24; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
35
- $[0] = "8dc1a9bd4bf6bec7a5222000410c137024570dada4eee777e4c30a50b639d928";
41
+ $[0] = "bee8f3d13dbb280b2de1a82d82a4017e5a4d40d4e5868be00fe289eb0c74361f";
36
42
  }
37
43
  const projectSlug = useProjectSlug();
38
44
  let t0;
@@ -158,9 +164,9 @@ const Navbar = () => {
158
164
  };
159
165
  function useNavbarActions() {
160
166
  const $ = c(4);
161
- if ($[0] !== "8dc1a9bd4bf6bec7a5222000410c137024570dada4eee777e4c30a50b639d928") {
167
+ if ($[0] !== "bee8f3d13dbb280b2de1a82d82a4017e5a4d40d4e5868be00fe289eb0c74361f") {
162
168
  for (let $i = 0; $i < 4; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
163
- $[0] = "8dc1a9bd4bf6bec7a5222000410c137024570dada4eee777e4c30a50b639d928";
169
+ $[0] = "bee8f3d13dbb280b2de1a82d82a4017e5a4d40d4e5868be00fe289eb0c74361f";
164
170
  }
165
171
  const navigate = useNavigate();
166
172
  let t0;
@@ -176,7 +182,8 @@ function useNavbarActions() {
176
182
  navigate({ to: link.to });
177
183
  },
178
184
  shortcut: { key: String(index + 1) },
179
- icon: link.icon
185
+ icon: link.icon,
186
+ aliases: link.aliases
180
187
  }));
181
188
  actionsStore.send({
182
189
  type: "registerManyActions",
@@ -15,9 +15,9 @@ function readStoredTheme() {
15
15
  */
16
16
  function useThemeValue() {
17
17
  const $ = c(3);
18
- if ($[0] !== "ae0cc1c225b74076fa89c4e5926593d41740805053ad02469bbe3a3cacd4b93a") {
18
+ if ($[0] !== "fcb6efcbb121aaf74422b01742d77a7520178fc0fe001e78c2f3645c95a1fa7e") {
19
19
  for (let $i = 0; $i < 3; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
20
- $[0] = "ae0cc1c225b74076fa89c4e5926593d41740805053ad02469bbe3a3cacd4b93a";
20
+ $[0] = "fcb6efcbb121aaf74422b01742d77a7520178fc0fe001e78c2f3645c95a1fa7e";
21
21
  }
22
22
  const [theme] = React.useState(readStoredTheme);
23
23
  let t0;
@@ -35,9 +35,9 @@ function useThemeValue() {
35
35
  */
36
36
  function useApplyTheme() {
37
37
  const $ = c(9);
38
- if ($[0] !== "ae0cc1c225b74076fa89c4e5926593d41740805053ad02469bbe3a3cacd4b93a") {
38
+ if ($[0] !== "fcb6efcbb121aaf74422b01742d77a7520178fc0fe001e78c2f3645c95a1fa7e") {
39
39
  for (let $i = 0; $i < 9; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
40
- $[0] = "ae0cc1c225b74076fa89c4e5926593d41740805053ad02469bbe3a3cacd4b93a";
40
+ $[0] = "fcb6efcbb121aaf74422b01742d77a7520178fc0fe001e78c2f3645c95a1fa7e";
41
41
  }
42
42
  const [theme, setTheme] = React.useState(readStoredTheme);
43
43
  const applyTheme = _temp;
@@ -106,9 +106,9 @@ function _temp(themeToApply) {
106
106
  }
107
107
  function useThemeActions() {
108
108
  const $ = c(5);
109
- if ($[0] !== "ae0cc1c225b74076fa89c4e5926593d41740805053ad02469bbe3a3cacd4b93a") {
109
+ if ($[0] !== "fcb6efcbb121aaf74422b01742d77a7520178fc0fe001e78c2f3645c95a1fa7e") {
110
110
  for (let $i = 0; $i < 5; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
111
- $[0] = "ae0cc1c225b74076fa89c4e5926593d41740805053ad02469bbe3a3cacd4b93a";
111
+ $[0] = "fcb6efcbb121aaf74422b01742d77a7520178fc0fe001e78c2f3645c95a1fa7e";
112
112
  }
113
113
  const { theme, setTheme } = useApplyTheme();
114
114
  let t0;
@@ -119,6 +119,11 @@ function useThemeActions() {
119
119
  {
120
120
  id: "change-theme",
121
121
  label: "Change theme",
122
+ aliases: [
123
+ "Theme",
124
+ "Appearance",
125
+ "Color mode"
126
+ ],
122
127
  groupLabel: "Studio",
123
128
  checkIfAvailable: _temp2,
124
129
  hasChildren: true,
@@ -128,6 +133,7 @@ function useThemeActions() {
128
133
  id: "switch-to-light-theme",
129
134
  parentActionId: "change-theme",
130
135
  label: "Switch to light theme",
136
+ aliases: ["Light mode"],
131
137
  groupLabel: "Studio",
132
138
  checkIfAvailable: () => theme !== "light",
133
139
  execute: () => setTheme("light")
@@ -136,6 +142,7 @@ function useThemeActions() {
136
142
  id: "switch-to-dark-theme",
137
143
  parentActionId: "change-theme",
138
144
  label: "Switch to dark theme",
145
+ aliases: ["Dark mode"],
139
146
  groupLabel: "Studio",
140
147
  checkIfAvailable: () => theme !== "dark",
141
148
  execute: () => setTheme("dark")
@@ -144,6 +151,7 @@ function useThemeActions() {
144
151
  id: "switch-to-system-theme",
145
152
  parentActionId: "change-theme",
146
153
  label: "Switch to system theme",
154
+ aliases: ["System mode", "Auto theme"],
147
155
  groupLabel: "Studio",
148
156
  checkIfAvailable: () => theme !== "system",
149
157
  execute: () => setTheme("system")
@@ -154,6 +154,7 @@ function camox(options) {
154
154
  "camox > @shikijs/themes/github-light",
155
155
  "camox > @sinclair/typebox",
156
156
  "camox > @takumi-rs/image-response",
157
+ "camox > @tanstack/ai-react",
157
158
  "camox > @tanstack/react-form",
158
159
  "camox > @xstate/store-react",
159
160
  "camox > better-auth > @better-auth/core/env",
package/dist/lib/auth.js CHANGED
@@ -192,9 +192,9 @@ function createCamoxAuthClient(apiUrl) {
192
192
  */
193
193
  function useProcessOtt(authClient) {
194
194
  const $ = c(5);
195
- if ($[0] !== "576010e4eb39afcae6f9e5e7fcb1b2de7558bf9039ed93e955c51d3fe8a38f1a") {
195
+ if ($[0] !== "97f43c32d646fc292143fe500680f94eb5bc70c14cc8fdf41a809589b231501d") {
196
196
  for (let $i = 0; $i < 5; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
197
- $[0] = "576010e4eb39afcae6f9e5e7fcb1b2de7558bf9039ed93e955c51d3fe8a38f1a";
197
+ $[0] = "97f43c32d646fc292143fe500680f94eb5bc70c14cc8fdf41a809589b231501d";
198
198
  }
199
199
  const [ready, setReady] = React.useState(_temp);
200
200
  let t0;
@@ -237,9 +237,9 @@ function _temp() {
237
237
  const AuthContext = React.createContext(null);
238
238
  function useAuthContext() {
239
239
  const $ = c(1);
240
- if ($[0] !== "576010e4eb39afcae6f9e5e7fcb1b2de7558bf9039ed93e955c51d3fe8a38f1a") {
240
+ if ($[0] !== "97f43c32d646fc292143fe500680f94eb5bc70c14cc8fdf41a809589b231501d") {
241
241
  for (let $i = 0; $i < 1; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
242
- $[0] = "576010e4eb39afcae6f9e5e7fcb1b2de7558bf9039ed93e955c51d3fe8a38f1a";
242
+ $[0] = "97f43c32d646fc292143fe500680f94eb5bc70c14cc8fdf41a809589b231501d";
243
243
  }
244
244
  const ctx = React.useContext(AuthContext);
245
245
  if (!ctx) throw new Error("Missing CamoxProvider");
@@ -247,9 +247,9 @@ function useAuthContext() {
247
247
  }
248
248
  function useProjectSlug() {
249
249
  const $ = c(1);
250
- if ($[0] !== "576010e4eb39afcae6f9e5e7fcb1b2de7558bf9039ed93e955c51d3fe8a38f1a") {
250
+ if ($[0] !== "97f43c32d646fc292143fe500680f94eb5bc70c14cc8fdf41a809589b231501d") {
251
251
  for (let $i = 0; $i < 1; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
252
- $[0] = "576010e4eb39afcae6f9e5e7fcb1b2de7558bf9039ed93e955c51d3fe8a38f1a";
252
+ $[0] = "97f43c32d646fc292143fe500680f94eb5bc70c14cc8fdf41a809589b231501d";
253
253
  }
254
254
  return useAuthContext().projectSlug;
255
255
  }
@@ -263,18 +263,18 @@ function useAuthState() {
263
263
  }
264
264
  function useIsAuthenticated() {
265
265
  const $ = c(1);
266
- if ($[0] !== "576010e4eb39afcae6f9e5e7fcb1b2de7558bf9039ed93e955c51d3fe8a38f1a") {
266
+ if ($[0] !== "97f43c32d646fc292143fe500680f94eb5bc70c14cc8fdf41a809589b231501d") {
267
267
  for (let $i = 0; $i < 1; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
268
- $[0] = "576010e4eb39afcae6f9e5e7fcb1b2de7558bf9039ed93e955c51d3fe8a38f1a";
268
+ $[0] = "97f43c32d646fc292143fe500680f94eb5bc70c14cc8fdf41a809589b231501d";
269
269
  }
270
270
  const { isAuthenticated } = useAuthState();
271
271
  return isAuthenticated;
272
272
  }
273
273
  function useSignInRedirect() {
274
274
  const $ = c(3);
275
- if ($[0] !== "576010e4eb39afcae6f9e5e7fcb1b2de7558bf9039ed93e955c51d3fe8a38f1a") {
275
+ if ($[0] !== "97f43c32d646fc292143fe500680f94eb5bc70c14cc8fdf41a809589b231501d") {
276
276
  for (let $i = 0; $i < 3; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
277
- $[0] = "576010e4eb39afcae6f9e5e7fcb1b2de7558bf9039ed93e955c51d3fe8a38f1a";
277
+ $[0] = "97f43c32d646fc292143fe500680f94eb5bc70c14cc8fdf41a809589b231501d";
278
278
  }
279
279
  const { authenticationUrl } = useAuthContext();
280
280
  let t0;
@@ -295,9 +295,9 @@ function useSignInRedirect() {
295
295
  */
296
296
  function useAuthActions() {
297
297
  const $ = c(5);
298
- if ($[0] !== "576010e4eb39afcae6f9e5e7fcb1b2de7558bf9039ed93e955c51d3fe8a38f1a") {
298
+ if ($[0] !== "97f43c32d646fc292143fe500680f94eb5bc70c14cc8fdf41a809589b231501d") {
299
299
  for (let $i = 0; $i < 5; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
300
- $[0] = "576010e4eb39afcae6f9e5e7fcb1b2de7558bf9039ed93e955c51d3fe8a38f1a";
300
+ $[0] = "97f43c32d646fc292143fe500680f94eb5bc70c14cc8fdf41a809589b231501d";
301
301
  }
302
302
  const { authClient, authenticationUrl } = useAuthContext();
303
303
  let t0;
@@ -309,6 +309,11 @@ function useAuthActions() {
309
309
  actions: [{
310
310
  id: "manage-account",
311
311
  label: "Manage account",
312
+ aliases: [
313
+ "Account settings",
314
+ "Profile",
315
+ "User settings"
316
+ ],
312
317
  groupLabel: "Studio",
313
318
  checkIfAvailable: _temp2,
314
319
  execute: () => {
@@ -317,6 +322,7 @@ function useAuthActions() {
317
322
  }, {
318
323
  id: "log-out",
319
324
  label: "Log out",
325
+ aliases: ["Sign out", "Logout"],
320
326
  groupLabel: "Studio",
321
327
  checkIfAvailable: _temp3,
322
328
  execute: () => authClient.signOut()