@plitzi/sdk-shared 0.38.3 → 0.38.5

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 (86) hide show
  1. package/CHANGELOG.md +522 -0
  2. package/dist/actions/functions.d.ts +10 -0
  3. package/dist/actions/functions.mjs +10 -10
  4. package/dist/actions/index.d.ts +1 -1
  5. package/dist/actions/index.mjs +6 -6
  6. package/dist/authoring/elementCallbacks.d.ts +2 -2
  7. package/dist/dataSource/getBindingsDetails.mjs +1 -1
  8. package/dist/devTools/chrome.d.ts +8 -0
  9. package/dist/devTools/chrome.mjs +4 -0
  10. package/dist/devTools/index.d.ts +1 -0
  11. package/dist/devTools/index.mjs +5 -4
  12. package/dist/helpers/images.d.ts +5 -0
  13. package/dist/helpers/images.mjs +2 -2
  14. package/dist/helpers/twigWrapper/inspectTemplate.mjs +14 -7
  15. package/dist/helpers/twigWrapper/processTwig/processTwig.d.ts +4 -3
  16. package/dist/helpers/twigWrapper/processTwig/processTwig.mjs +32 -22
  17. package/dist/history/types.d.ts +4 -4
  18. package/dist/index.mjs +56 -54
  19. package/dist/network/graphql/builder/Mutations/Space/data/SpaceSaveDataMutation.d.ts +10 -0
  20. package/dist/network/graphql/builder/Mutations/Space/data/SpaceSaveDataMutation.mjs +4 -0
  21. package/dist/network/graphql/builder/Mutations/index.d.ts +2 -0
  22. package/dist/network/graphql/builder/Mutations/index.mjs +124 -122
  23. package/dist/network/graphql/builder/Queries/InitQuery.d.ts +1 -3
  24. package/dist/network/graphql/builder/Queries/InitQuery.mjs +1 -1
  25. package/dist/network/graphql/builder/Queries/Space/SpaceDataQuery.d.ts +6 -0
  26. package/dist/network/graphql/builder/Queries/Space/SpaceDataQuery.mjs +4 -0
  27. package/dist/network/graphql/builder/Queries/index.d.ts +2 -0
  28. package/dist/network/graphql/builder/Queries/index.mjs +22 -20
  29. package/dist/network/spaceEvents.d.ts +2 -2
  30. package/dist/plugins/bundle.d.ts +26 -0
  31. package/dist/plugins/bundle.mjs +62 -0
  32. package/dist/plugins/declaration.d.ts +12 -0
  33. package/dist/plugins/declaration.mjs +9 -0
  34. package/dist/queries/queryCache.d.ts +7 -0
  35. package/dist/queries/queryCache.mjs +14 -7
  36. package/dist/queries/useQuery.d.ts +2 -0
  37. package/dist/queries/useQuery.mjs +5 -2
  38. package/dist/schema/anchor.d.ts +11 -0
  39. package/dist/schema/anchor.mjs +6 -2
  40. package/dist/schema/index.mjs +6 -6
  41. package/dist/schema/markdownHeadings.d.ts +13 -0
  42. package/dist/schema/markdownHeadings.mjs +24 -0
  43. package/dist/schema/motion.d.ts +47 -15
  44. package/dist/schema/motion.mjs +208 -32
  45. package/dist/schema/motionReveal.d.ts +10 -0
  46. package/dist/schema/motionReveal.mjs +23 -0
  47. package/dist/schema/pageElements.d.ts +12 -0
  48. package/dist/schema/pageElements.mjs +41 -0
  49. package/dist/schema/wire.mjs +4 -3
  50. package/dist/server/index.mjs +4 -4
  51. package/dist/server/rsc/projectData.d.ts +6 -0
  52. package/dist/server/rsc/projectData.mjs +4 -0
  53. package/dist/server/rsc/refreshRsc.d.ts +18 -5
  54. package/dist/server/rsc/refreshRsc.mjs +80 -20
  55. package/dist/server/rsc/useRscSync.mjs +26 -15
  56. package/dist/server/usePluginRoute.d.ts +18 -0
  57. package/dist/server/usePluginRoute.mjs +14 -0
  58. package/dist/source/export.d.ts +18 -0
  59. package/dist/source/import.d.ts +55 -0
  60. package/dist/source/import.mjs +4 -0
  61. package/dist/source/index.d.ts +2 -0
  62. package/dist/source/index.mjs +3 -2
  63. package/dist/store/index.d.ts +45 -45
  64. package/dist/style/cssLayers.d.ts +18 -0
  65. package/dist/style/cssLayers.mjs +14 -0
  66. package/dist/style/index.d.ts +1 -0
  67. package/dist/style/index.mjs +11 -10
  68. package/dist/style/styleConstants.d.ts +10 -2
  69. package/dist/style/styleConstants.mjs +16 -0
  70. package/dist/style/useDisplayMode.d.ts +11 -0
  71. package/dist/style/useDisplayMode.mjs +18 -0
  72. package/dist/types/ActionTypes.d.ts +3 -3
  73. package/dist/types/ComponentTypes.d.ts +13 -0
  74. package/dist/types/DataTypes.d.ts +36 -0
  75. package/dist/types/InteractionTypes.d.ts +16 -2
  76. package/dist/types/SchemaTypes.d.ts +10 -2
  77. package/dist/types/SchemaTypes.mjs +2 -1
  78. package/dist/types/ServerTypes.d.ts +60 -8
  79. package/dist/types/StoreTypes.d.ts +19 -6
  80. package/dist/types/index.d.ts +1 -2
  81. package/package.json +58 -28
  82. package/setupTests.ts +16 -13
  83. package/dist/types/AITypes.d.ts +0 -80
  84. package/dist/types/McpTypes/index.d.ts +0 -56
  85. package/dist/types/McpTypes/index.mjs +0 -0
  86. /package/dist/types/{AITypes.mjs → DataTypes.mjs} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plitzi/sdk-shared",
3
- "version": "0.38.3",
3
+ "version": "0.38.5",
4
4
  "license": "AGPL-3.0",
5
5
  "files": [
6
6
  "dist",
@@ -254,6 +254,10 @@
254
254
  "types": "./dist/devTools/DevToolsContext.d.ts",
255
255
  "import": "./dist/devTools/DevToolsContext.mjs"
256
256
  },
257
+ "./devTools/chrome": {
258
+ "types": "./dist/devTools/chrome.d.ts",
259
+ "import": "./dist/devTools/chrome.mjs"
260
+ },
257
261
  "./devTools/debugCookie": {
258
262
  "types": "./dist/devTools/debugCookie.d.ts",
259
263
  "import": "./dist/devTools/debugCookie.mjs"
@@ -763,6 +767,10 @@
763
767
  "types": "./dist/network/graphql/builder/Mutations/Space/credentials/SpaceUpdateCredentialMutation.d.ts",
764
768
  "import": "./dist/network/graphql/builder/Mutations/Space/credentials/SpaceUpdateCredentialMutation.mjs"
765
769
  },
770
+ "./network/graphql/builder/Mutations/Space/data/SpaceSaveDataMutation": {
771
+ "types": "./dist/network/graphql/builder/Mutations/Space/data/SpaceSaveDataMutation.d.ts",
772
+ "import": "./dist/network/graphql/builder/Mutations/Space/data/SpaceSaveDataMutation.mjs"
773
+ },
766
774
  "./network/graphql/builder/Mutations/Space/flags/SpacePublishFlagsMutation": {
767
775
  "types": "./dist/network/graphql/builder/Mutations/Space/flags/SpacePublishFlagsMutation.d.ts",
768
776
  "import": "./dist/network/graphql/builder/Mutations/Space/flags/SpacePublishFlagsMutation.mjs"
@@ -979,6 +987,10 @@
979
987
  "types": "./dist/network/graphql/builder/Queries/Space/SpaceCredentialsQuery.d.ts",
980
988
  "import": "./dist/network/graphql/builder/Queries/Space/SpaceCredentialsQuery.mjs"
981
989
  },
990
+ "./network/graphql/builder/Queries/Space/SpaceDataQuery": {
991
+ "types": "./dist/network/graphql/builder/Queries/Space/SpaceDataQuery.d.ts",
992
+ "import": "./dist/network/graphql/builder/Queries/Space/SpaceDataQuery.mjs"
993
+ },
982
994
  "./network/graphql/builder/Queries/Space/SpaceDeploymentsQuery": {
983
995
  "types": "./dist/network/graphql/builder/Queries/Space/SpaceDeploymentsQuery.d.ts",
984
996
  "import": "./dist/network/graphql/builder/Queries/Space/SpaceDeploymentsQuery.mjs"
@@ -1079,6 +1091,14 @@
1079
1091
  "types": "./dist/network/spaceEvents.d.ts",
1080
1092
  "import": "./dist/network/spaceEvents.mjs"
1081
1093
  },
1094
+ "./plugins/bundle": {
1095
+ "types": "./dist/plugins/bundle.d.ts",
1096
+ "import": "./dist/plugins/bundle.mjs"
1097
+ },
1098
+ "./plugins/declaration": {
1099
+ "types": "./dist/plugins/declaration.d.ts",
1100
+ "import": "./dist/plugins/declaration.mjs"
1101
+ },
1082
1102
  "./queries": {
1083
1103
  "types": "./dist/queries/index.d.ts",
1084
1104
  "import": "./dist/queries/index.mjs"
@@ -1135,10 +1155,22 @@
1135
1155
  "types": "./dist/schema/layoutChain.d.ts",
1136
1156
  "import": "./dist/schema/layoutChain.mjs"
1137
1157
  },
1158
+ "./schema/markdownHeadings": {
1159
+ "types": "./dist/schema/markdownHeadings.d.ts",
1160
+ "import": "./dist/schema/markdownHeadings.mjs"
1161
+ },
1138
1162
  "./schema/motion": {
1139
1163
  "types": "./dist/schema/motion.d.ts",
1140
1164
  "import": "./dist/schema/motion.mjs"
1141
1165
  },
1166
+ "./schema/motionReveal": {
1167
+ "types": "./dist/schema/motionReveal.d.ts",
1168
+ "import": "./dist/schema/motionReveal.mjs"
1169
+ },
1170
+ "./schema/pageElements": {
1171
+ "types": "./dist/schema/pageElements.d.ts",
1172
+ "import": "./dist/schema/pageElements.mjs"
1173
+ },
1142
1174
  "./schema/schemaConstants": {
1143
1175
  "types": "./dist/schema/schemaConstants.d.ts",
1144
1176
  "import": "./dist/schema/schemaConstants.mjs"
@@ -1175,6 +1207,10 @@
1175
1207
  "types": "./dist/server/index.d.ts",
1176
1208
  "import": "./dist/server/index.mjs"
1177
1209
  },
1210
+ "./server/rsc/projectData": {
1211
+ "types": "./dist/server/rsc/projectData.d.ts",
1212
+ "import": "./dist/server/rsc/projectData.mjs"
1213
+ },
1178
1214
  "./server/rsc/refreshRsc": {
1179
1215
  "types": "./dist/server/rsc/refreshRsc.d.ts",
1180
1216
  "import": "./dist/server/rsc/refreshRsc.mjs"
@@ -1187,6 +1223,10 @@
1187
1223
  "types": "./dist/server/rsc/useRscSync.d.ts",
1188
1224
  "import": "./dist/server/rsc/useRscSync.mjs"
1189
1225
  },
1226
+ "./server/usePluginRoute": {
1227
+ "types": "./dist/server/usePluginRoute.d.ts",
1228
+ "import": "./dist/server/usePluginRoute.mjs"
1229
+ },
1190
1230
  "./source": {
1191
1231
  "types": "./dist/source/index.d.ts",
1192
1232
  "import": "./dist/source/index.mjs"
@@ -1195,6 +1235,10 @@
1195
1235
  "types": "./dist/source/export.d.ts",
1196
1236
  "import": "./dist/source/export.mjs"
1197
1237
  },
1238
+ "./source/import": {
1239
+ "types": "./dist/source/import.d.ts",
1240
+ "import": "./dist/source/import.mjs"
1241
+ },
1198
1242
  "./source/index": {
1199
1243
  "types": "./dist/source/index.d.ts",
1200
1244
  "import": "./dist/source/index.mjs"
@@ -1287,6 +1331,10 @@
1287
1331
  "types": "./dist/style/breakpoints.d.ts",
1288
1332
  "import": "./dist/style/breakpoints.mjs"
1289
1333
  },
1334
+ "./style/cssLayers": {
1335
+ "types": "./dist/style/cssLayers.d.ts",
1336
+ "import": "./dist/style/cssLayers.mjs"
1337
+ },
1290
1338
  "./style/displayModes": {
1291
1339
  "types": "./dist/style/displayModes.d.ts",
1292
1340
  "import": "./dist/style/displayModes.mjs"
@@ -1335,6 +1383,10 @@
1335
1383
  "types": "./dist/style/styleStates.d.ts",
1336
1384
  "import": "./dist/style/styleStates.mjs"
1337
1385
  },
1386
+ "./style/useDisplayMode": {
1387
+ "types": "./dist/style/useDisplayMode.d.ts",
1388
+ "import": "./dist/style/useDisplayMode.mjs"
1389
+ },
1338
1390
  "./theme": {
1339
1391
  "types": "./dist/theme/index.d.ts",
1340
1392
  "import": "./dist/theme/index.mjs"
@@ -1367,9 +1419,6 @@
1367
1419
  "types": "./dist/types/index.d.ts",
1368
1420
  "import": "./dist/types/index.mjs"
1369
1421
  },
1370
- "./types/AITypes": {
1371
- "types": "./dist/types/AITypes.d.ts"
1372
- },
1373
1422
  "./types/ActionTypes": {
1374
1423
  "types": "./dist/types/ActionTypes.d.ts"
1375
1424
  },
@@ -1394,6 +1443,9 @@
1394
1443
  "./types/DataSourceTypes": {
1395
1444
  "types": "./dist/types/DataSourceTypes.d.ts"
1396
1445
  },
1446
+ "./types/DataTypes": {
1447
+ "types": "./dist/types/DataTypes.d.ts"
1448
+ },
1397
1449
  "./types/DevToolsTypes": {
1398
1450
  "types": "./dist/types/DevToolsTypes.d.ts"
1399
1451
  },
@@ -1409,9 +1461,6 @@
1409
1461
  "./types/InteractionTypes": {
1410
1462
  "types": "./dist/types/InteractionTypes.d.ts"
1411
1463
  },
1412
- "./types/McpTypes/index": {
1413
- "types": "./dist/types/McpTypes/index.d.ts"
1414
- },
1415
1464
  "./types/NavigationTypes": {
1416
1465
  "types": "./dist/types/NavigationTypes.d.ts"
1417
1466
  },
@@ -1482,9 +1531,8 @@
1482
1531
  "build:prod": "vite build && node ./scripts/generate-exports.mjs"
1483
1532
  },
1484
1533
  "dependencies": {
1485
- "@modelcontextprotocol/sdk": "^1.32.0",
1486
1534
  "@plitzi/nexus": "^1.4.0",
1487
- "@plitzi/plitzi-ui": "^1.6.29",
1535
+ "@plitzi/plitzi-ui": "^1.6.31",
1488
1536
  "date-fns": "^4.4.0",
1489
1537
  "immer": "^11.1.21",
1490
1538
  "zod": "^4.6.5"
@@ -1496,33 +1544,17 @@
1496
1544
  },
1497
1545
  "devDependencies": {
1498
1546
  "@apollo/client": "^4.3.1",
1499
- "@babel/cli": "^8.0.6",
1500
- "@babel/core": "^8.0.6",
1501
- "@babel/eslint-parser": "^7.29.9",
1502
- "@babel/plugin-syntax-flow": "^8.0.1",
1503
- "@babel/plugin-transform-react-jsx": "^8.0.1",
1504
- "@babel/preset-env": "^8.0.6",
1505
1547
  "@eslint/js": "^10.0.1",
1506
- "@tailwindcss/forms": "^0.5.11",
1507
1548
  "@testing-library/dom": "^10.4.2",
1508
1549
  "@testing-library/react": "^16.3.3",
1509
- "@testing-library/react-hooks": "^8.0.1",
1510
- "@testing-library/user-event": "^14.6.7",
1511
1550
  "@types/react": "^19.3.0",
1512
1551
  "@types/react-dom": "^19.3.0",
1513
1552
  "@vitejs/plugin-react": "^6.1.1",
1514
1553
  "@vitest/coverage-v8": "^5.0.3",
1515
- "babel-minify": "^0.5.2",
1554
+ "esbuild": "^0.28.2",
1516
1555
  "eslint": "^9.39.5",
1517
- "eslint-config-airbnb": "^19.0.4",
1518
1556
  "eslint-config-prettier": "^10.1.8",
1519
- "eslint-config-turbo": "^2.11.7",
1520
- "eslint-import-resolver-alias": "^1.1.2",
1521
- "eslint-plugin-cypress": "^7.0.2",
1522
- "eslint-plugin-flowtype": "8.0.3",
1523
1557
  "eslint-plugin-import": "^2.32.0",
1524
- "eslint-plugin-jsdoc": "^65.0.2",
1525
- "eslint-plugin-jsx-a11y": "^6.10.2",
1526
1558
  "eslint-plugin-prettier": "^5.5.6",
1527
1559
  "eslint-plugin-react": "^7.37.5",
1528
1560
  "eslint-plugin-react-hooks": "^7.1.1",
@@ -1530,7 +1562,6 @@
1530
1562
  "eslint-plugin-storybook": "^10.6.1",
1531
1563
  "globals": "^17.13.0",
1532
1564
  "jsdom": "^30.1.1",
1533
- "postcss": "^8.5.28",
1534
1565
  "prettier": "^3.9.9",
1535
1566
  "react": "^19.3.0",
1536
1567
  "react-dom": "^19.3.0",
@@ -1540,7 +1571,6 @@
1540
1571
  "typescript-eslint": "^8.71.0",
1541
1572
  "vite": "^8.3.2",
1542
1573
  "vite-plugin-dts": "^5.1.2",
1543
- "vite-plugin-react": "^4.0.1",
1544
1574
  "vitest": "^5.0.3",
1545
1575
  "vitest-fetch-mock": "^0.4.5"
1546
1576
  },
package/setupTests.ts CHANGED
@@ -18,16 +18,19 @@ vi.stubGlobal(
18
18
  }))
19
19
  );
20
20
 
21
- Object.defineProperty(window, 'matchMedia', {
22
- writable: true,
23
- value: vi.fn().mockImplementation((query: unknown) => ({
24
- matches: false,
25
- media: query,
26
- onchange: null,
27
- addListener: vi.fn(),
28
- removeListener: vi.fn(),
29
- addEventListener: vi.fn(),
30
- removeEventListener: vi.fn(),
31
- dispatchEvent: vi.fn()
32
- }))
33
- });
21
+ // Only where there is a window: a file that opts into `@vitest-environment node` (one running a bundler) has none.
22
+ if (typeof window !== 'undefined') {
23
+ Object.defineProperty(window, 'matchMedia', {
24
+ writable: true,
25
+ value: vi.fn().mockImplementation((query: unknown) => ({
26
+ matches: false,
27
+ media: query,
28
+ onchange: null,
29
+ addListener: vi.fn(),
30
+ removeListener: vi.fn(),
31
+ addEventListener: vi.fn(),
32
+ removeEventListener: vi.fn(),
33
+ dispatchEvent: vi.fn()
34
+ }))
35
+ });
36
+ }
@@ -1,80 +0,0 @@
1
- import { Environment } from './CommonTypes';
2
- import { ToolCallEvent } from './McpTypes';
3
- export type PromptRole = 'user' | 'assistant' | 'system';
4
- export type AiMode = 'plan' | 'build';
5
- export type AiRole = 'user' | 'assistant';
6
- export type AiEffort = 'auto' | 'low' | 'medium' | 'high';
7
- export type AIToolStatus = 'running' | 'done' | 'failed' | 'interrupted';
8
- export type AiProviderType = 'openai' | 'anthropic' | 'ollama' | 'openrouter' | 'opencode';
9
- export type AiUsage = {
10
- inputTokens: number;
11
- outputTokens: number;
12
- totalTokens: number;
13
- thinkingTokens?: number;
14
- contextLimit: number;
15
- usedPercent: number;
16
- };
17
- export type AiMessageAttachment = {
18
- type: 'image';
19
- mimeType: string;
20
- data: string;
21
- };
22
- export type AiToolCall = {
23
- id: string;
24
- name: string;
25
- args?: Record<string, unknown>;
26
- result?: unknown;
27
- error?: string;
28
- status: AIToolStatus;
29
- };
30
- export type AiMessageStep = {
31
- type: 'thinking';
32
- text: string;
33
- durationMs?: number;
34
- } | {
35
- type: 'tool';
36
- id: string;
37
- name: string;
38
- args?: Record<string, unknown>;
39
- result?: unknown;
40
- error?: string;
41
- status: AIToolStatus;
42
- } | {
43
- type: 'resource';
44
- name: string;
45
- uri: string;
46
- } | {
47
- type: 'text';
48
- text: string;
49
- };
50
- export type ConversationSummary = {
51
- id: string;
52
- spaceId: number;
53
- messageCount: number;
54
- preview: string;
55
- createdAt: string;
56
- updatedAt: string;
57
- };
58
- export type StreamCallbacks = {
59
- onLog?: (level: 'error' | 'info' | 'debug', content: string) => void;
60
- onChunk?: (text: string) => void;
61
- onThinking?: (text: string) => void;
62
- onUsage?: (usage: Omit<AiUsage, 'usedPercent' | 'contextLimit'> & {
63
- contextLimit?: number;
64
- }) => void;
65
- onBusy?: () => void;
66
- onBeforeTool?: (name: string, args: Record<string, unknown>) => void;
67
- onToolSuccess?: (event: ToolCallEvent) => void;
68
- onToolError?: (event: ToolCallEvent) => void;
69
- onResourceRead?: (name: string, uri: string) => void;
70
- };
71
- export type AiContext = {
72
- userId: number;
73
- spaceId: number;
74
- environment: Environment;
75
- pubSub?: unknown;
76
- mode: AiMode;
77
- currentPageId?: string;
78
- elementSelected?: string;
79
- theme?: 'light' | 'dark';
80
- };
@@ -1,56 +0,0 @@
1
- import { AiContext, AiMode, PromptRole } from '../AITypes';
2
- import { ToolAnnotations } from '@modelcontextprotocol/sdk/types';
3
- import { ZodType } from 'zod';
4
- export type ToolOperationType = 'read' | 'write';
5
- export type McpPromptHandlerResult = {
6
- messages: {
7
- role: Exclude<PromptRole, 'system'>;
8
- content: {
9
- type: 'text';
10
- text: string;
11
- };
12
- }[];
13
- };
14
- export type McpPromptHandler = (args: Record<string, any>, ctx: AiContext) => Promise<McpPromptHandlerResult>;
15
- export type McpTextContent = {
16
- type: 'text';
17
- text: string;
18
- };
19
- export type McpImageContent = {
20
- type: 'image';
21
- data: string;
22
- mimeType: string;
23
- };
24
- export type McpContent = McpTextContent | McpImageContent;
25
- export type McpToolHandlerResult = {
26
- content: McpContent[];
27
- data?: unknown;
28
- structuredContent?: Record<string, unknown>;
29
- isError?: true;
30
- };
31
- export type ToolCallEvent = {
32
- name: string;
33
- args: Record<string, unknown>;
34
- result: unknown;
35
- };
36
- export type McpToolLifecycleHooks = {
37
- can?: (name: string, args: Record<string, unknown>, ctx?: AiContext) => boolean | Promise<boolean>;
38
- before?: (name: string, args: Record<string, unknown>, ctx?: AiContext) => boolean | undefined | Promise<boolean> | Promise<undefined>;
39
- after?: (name: string, args: Record<string, unknown>, result: McpToolHandlerResult, ctx?: AiContext) => void | Promise<void>;
40
- onError?: (name: string, args: Record<string, unknown>, error: Error, ctx?: AiContext) => void | Promise<void>;
41
- };
42
- export type McpToolHandler<T extends Record<string, unknown> = any> = (args: T, ctx: AiContext) => Promise<McpToolHandlerResult> | McpToolHandlerResult;
43
- export type McpTool = {
44
- name: string;
45
- mcpDefinition: {
46
- title?: string;
47
- description: string;
48
- inputSchema?: ZodType<any, any, any>;
49
- outputSchema?: ZodType<any, any, any>;
50
- annotations?: ToolAnnotations;
51
- };
52
- definition: {
53
- allowedModes: AiMode[];
54
- };
55
- handler?: McpToolHandler;
56
- };
File without changes
File without changes