@roomle/embedding-lib 9.0.0-alpha.1 → 9.0.0-alpha.2

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.
@@ -1,99 +1,252 @@
1
- ## 9.0.0-alpha.1 (2026-10-21)
1
+ ## 9.0.0-alpha.2 (2026-10-21)
2
2
 
3
- * Merge branch 'fix/wall-selectability-on-undo' of https://github.com/roomle-dev/roomle-ui into fix/wa ([1e7609b](https://github.com/roomle-dev/roomle-ui/commit/1e7609b))
4
- * Merge branch 'master' into feat/assistant-chat ([361e923](https://github.com/roomle-dev/roomle-ui/commit/361e923))
5
- * Merge branch 'master' into feat/assistant-chat ([10e57dd](https://github.com/roomle-dev/roomle-ui/commit/10e57dd))
6
- * Merge branch 'master' into feat/assistant-chat ([2e41cb8](https://github.com/roomle-dev/roomle-ui/commit/2e41cb8))
7
- * Merge branch 'master' into feat/hi-mcp-api-refactoring ([dea1d4d](https://github.com/roomle-dev/roomle-ui/commit/dea1d4d))
8
- * Merge branch 'master' into feat/hi-mcp-api-refactoring ([aa8d49e](https://github.com/roomle-dev/roomle-ui/commit/aa8d49e))
9
- * Merge branch 'master' into fix/headless-crash-glbs-on-burst ([4091ff5](https://github.com/roomle-dev/roomle-ui/commit/4091ff5))
10
- * Merge branch 'master' into fix/traa-artifacts ([b70138c](https://github.com/roomle-dev/roomle-ui/commit/b70138c))
11
- * Merge branch 'master' into fix/traa-artifacts ([d216ba9](https://github.com/roomle-dev/roomle-ui/commit/d216ba9))
12
- * Merge branch 'master' into fix/wall-selectability-on-undo ([5bbc9d3](https://github.com/roomle-dev/roomle-ui/commit/5bbc9d3))
13
- * Merge branch 'master' into fix/wall-selectability-on-undo ([11de224](https://github.com/roomle-dev/roomle-ui/commit/11de224))
14
- * Merge branch 'master' into fix/wall-selectability-on-undo ([6e1a58f](https://github.com/roomle-dev/roomle-ui/commit/6e1a58f))
15
- * Merge branch 'master' into fix/wall-selectability-on-undo ([50957df](https://github.com/roomle-dev/roomle-ui/commit/50957df))
16
- * Merge branch 'master' into fix/wall-selectability-on-undo ([3caae04](https://github.com/roomle-dev/roomle-ui/commit/3caae04))
17
- * Merge branch 'master' into fix/wall-selectability-on-undo ([1f62c28](https://github.com/roomle-dev/roomle-ui/commit/1f62c28))
18
- * Merge pull request #2863 from roomle-dev/fix/wall-selectability-on-undo ([7ae85c6](https://github.com/roomle-dev/roomle-ui/commit/7ae85c6)), closes [#2863](https://github.com/roomle-dev/roomle-ui/issues/2863)
19
- * Merge pull request #3093 from roomle-dev/fix/wall-selectability-on-undo--delete-walls ([3611501](https://github.com/roomle-dev/roomle-ui/commit/3611501)), closes [#3093](https://github.com/roomle-dev/roomle-ui/issues/3093)
20
- * Merge pull request #3108 from roomle-dev/fix/traa-artifacts ([3cb7308](https://github.com/roomle-dev/roomle-ui/commit/3cb7308)), closes [#3108](https://github.com/roomle-dev/roomle-ui/issues/3108)
21
- * Merge pull request #3119 from roomle-dev/feat/hi-mcp-api-refactoring ([6beecf3](https://github.com/roomle-dev/roomle-ui/commit/6beecf3)), closes [#3119](https://github.com/roomle-dev/roomle-ui/issues/3119)
22
- * Merge pull request #3126 from roomle-dev/fix/headless-crash-glbs-on-burst ([20c37ad](https://github.com/roomle-dev/roomle-ui/commit/20c37ad)), closes [#3126](https://github.com/roomle-dev/roomle-ui/issues/3126)
23
- * Merge pull request #3127 from roomle-dev/feat/assistant-chat ([6d56a9f](https://github.com/roomle-dev/roomle-ui/commit/6d56a9f)), closes [#3127](https://github.com/roomle-dev/roomle-ui/issues/3127)
24
- * Merge pull request #3129 from roomle-dev/upgraded-by-ci/core-3.2.0-alpha.1 ([a4aee8f](https://github.com/roomle-dev/roomle-ui/commit/a4aee8f)), closes [#3129](https://github.com/roomle-dev/roomle-ui/issues/3129)
25
- * Merge pull request #3130 from roomle-dev/feat/additional-hi-mcp-api ([4af649b](https://github.com/roomle-dev/roomle-ui/commit/4af649b)), closes [#3130](https://github.com/roomle-dev/roomle-ui/issues/3130)
26
- * Merge pull request #3137 from roomle-dev/chore/backmerge-rapi-v2-fallback ([ea83806](https://github.com/roomle-dev/roomle-ui/commit/ea83806)), closes [#3137](https://github.com/roomle-dev/roomle-ui/issues/3137)
27
- * Merge pull request #3148 from roomle-dev/feat/hi-mcp-tools-in-embedding-lib-RML-18196 ([4dd3343](https://github.com/roomle-dev/roomle-ui/commit/4dd3343)), closes [#3148](https://github.com/roomle-dev/roomle-ui/issues/3148)
28
- * Merge pull request #3150 from roomle-dev/upgraded-by-ci/core-3.2.0-alpha.2 ([80fa9ff](https://github.com/roomle-dev/roomle-ui/commit/80fa9ff)), closes [#3150](https://github.com/roomle-dev/roomle-ui/issues/3150)
29
- * feat(planner): add floor deletion with shared-wall preservation and single-step undo ([f9d7fb8](https://github.com/roomle-dev/roomle-ui/commit/f9d7fb8))
30
- * feat: add the ai planning assistant window with its prompt callback and output api ([72a04b6](https://github.com/roomle-dev/roomle-ui/commit/72a04b6))
31
- * feat: add transactional interior fitting tools ([6617bcd](https://github.com/roomle-dev/roomle-ui/commit/6617bcd))
32
- * feat: answer the hi layout load per input group and pair the groups by it ([17b7545](https://github.com/roomle-dev/roomle-ui/commit/17b7545))
33
- * feat: calculate the article templates for the hi plan context ([17b4c88](https://github.com/roomle-dev/roomle-ui/commit/17b4c88))
34
- * feat: carry the geometry of every article in the hi plan context ([3482a4a](https://github.com/roomle-dev/roomle-ui/commit/3482a4a))
35
- * feat(hi): give merge-article-into-group the row hints of the row edits ([2db2983](https://github.com/roomle-dev/roomle-ui/commit/2db2983))
36
- * feat: name the root modules of a library change by article and count, one not-loaded error per cause ([48f8a26](https://github.com/roomle-dev/roomle-ui/commit/48f8a26))
37
- * feat: open and close hi groups and articles through the tool commands ([975e9f0](https://github.com/roomle-dev/roomle-ui/commit/975e9f0))
38
- * feat: provide the hi mcp tools from the embedding-lib ([b0140c9](https://github.com/roomle-dev/roomle-ui/commit/b0140c9))
39
- * feat: report electric plugs and water connections as installation elements in the plan context ([47f7fd0](https://github.com/roomle-dev/roomle-ui/commit/47f7fd0))
40
- * feat: run an hi tool call as one undo step and answer it without follow-ups ([8b464d3](https://github.com/roomle-dev/roomle-ui/commit/8b464d3))
41
- * feat: run the ai planning assistant in the hi presets example ([a15c54d](https://github.com/roomle-dev/roomle-ui/commit/a15c54d))
42
- * feat: run the hi mcp tools as group commands of the planner ([1686386](https://github.com/roomle-dev/roomle-ui/commit/1686386))
43
- * feat: serve the agent prompts of the hi chat from the glue logic ([55f94e7](https://github.com/roomle-dev/roomle-ui/commit/55f94e7))
44
- * feat: show the ai planning assistant window in the configurator ([c287eed](https://github.com/roomle-dev/roomle-ui/commit/c287eed))
45
- * feat(core): upgrade to version 3.2.0-alpha.1 ([c8173d7](https://github.com/roomle-dev/roomle-ui/commit/c8173d7))
46
- * feat(core): upgrade to version 3.2.0-alpha.2 ([86b579c](https://github.com/roomle-dev/roomle-ui/commit/86b579c))
47
- * fix(test): add setElementCustomDataJson mock and correct deleted flag logic ([3f7ae0e](https://github.com/roomle-dev/roomle-ui/commit/3f7ae0e))
48
- * fix: address planning assistant review feedback ([8e5f813](https://github.com/roomle-dev/roomle-ui/commit/8e5f813))
49
- * fix(planner): address PR review comments for manual wall visibility, preloaded configuration data, a ([ea06c41](https://github.com/roomle-dev/roomle-ui/commit/ea06c41))
50
- * fix: address the review of the ai planning assistant window ([871b75c](https://github.com/roomle-dev/roomle-ui/commit/871b75c))
51
- * fix: answer a hi tool that failed after it changed the plan with its undo steps ([80c379f](https://github.com/roomle-dev/roomle-ui/commit/80c379f))
52
- * fix: answer a hi tool whose placement-frame conversion fails with its undo step ([92449f0](https://github.com/roomle-dev/roomle-ui/commit/92449f0))
53
- * fix(hi): arrange a merged root module against the group before the merge ([87bfe7c](https://github.com/roomle-dev/roomle-ui/commit/87bfe7c))
54
- * fix(hi): close the review findings of the tool commands ([29596d4](https://github.com/roomle-dev/roomle-ui/commit/29596d4))
55
- * fix: discover replacements in occupied interiors ([404a81f](https://github.com/roomle-dev/roomle-ui/commit/404a81f))
56
- * fix: drop a new hi group the layout load leaves out from the group map ([84b6e56](https://github.com/roomle-dev/roomle-ui/commit/84b6e56))
57
- * fix(planner): hide invisible-wall helper line for deleted fallback walls while keeping it for manual ([3d6bdb5](https://github.com/roomle-dev/roomle-ui/commit/3d6bdb5))
58
- * fix: keep every library calculation and only log failed root modules ([5bca7ea](https://github.com/roomle-dev/roomle-ui/commit/5bca7ea))
59
- * fix: keep explicit fitting settings and installed child fittings on move and replace ([64fff8b](https://github.com/roomle-dev/roomle-ui/commit/64fff8b))
60
- * fix(planner): keep outer wall thickness when deleting a room wall ([17ef1f1](https://github.com/roomle-dev/roomle-ui/commit/17ef1f1))
61
- * fix(hi): keep the article template whose root the library could not calculate ([f1a940b](https://github.com/roomle-dev/roomle-ui/commit/f1a940b))
62
- * fix: keep zod out of the public declarations of the hi mcp tools ([afafb0e](https://github.com/roomle-dev/roomle-ui/commit/afafb0e))
63
- * fix: leave the collision box out of the anchor frame of a hi placement ([7f13b44](https://github.com/roomle-dev/roomle-ui/commit/7f13b44))
64
- * fix: let the adjust icon take the fill of its button ([68e0407](https://github.com/roomle-dev/roomle-ui/commit/68e0407))
65
- * fix: let the hi mcp tools that read the plan wait for a running change ([c3aab4d](https://github.com/roomle-dev/roomle-ui/commit/c3aab4d))
66
- * fix: measure and place interior fittings where their parts are ([ba70c7b](https://github.com/roomle-dev/roomle-ui/commit/ba70c7b))
67
- * fix(hi): name the offsetMm that keeps a corner group clear of the adjoining wall's window ([7e084d0](https://github.com/roomle-dev/roomle-ui/commit/7e084d0))
68
- * fix: read the installation elements from the plan objects, not the object DTO ([bca4849](https://github.com/roomle-dev/roomle-ui/commit/bca4849))
69
- * fix(planner): rebind wall handlers when invisible wall becomes visible again on undo ([2c0c8b9](https://github.com/roomle-dev/roomle-ui/commit/2c0c8b9))
70
- * fix(hi): recognise upper-row roots by their layout and keep carrier links on a replace ([1db06b1](https://github.com/roomle-dev/roomle-ui/commit/1db06b1))
71
- * fix: resolve a wall side label to the wall face, openings included ([612c10f](https://github.com/roomle-dev/roomle-ui/commit/612c10f))
72
- * fix(planner): restore wall visibility toggle in flying menu and drawer ([23e6dca](https://github.com/roomle-dev/roomle-ui/commit/23e6dca))
73
- * fix: tobuffer JIT fix ([3a463c9](https://github.com/roomle-dev/roomle-ui/commit/3a463c9))
74
- * fix: traa artifacts caused by fog render order ([463555c](https://github.com/roomle-dev/roomle-ui/commit/463555c))
75
- * refactor(planner): clean up wall deletion leftovers ([f9bfebb](https://github.com/roomle-dev/roomle-ui/commit/f9bfebb))
76
- * refactor: move the planning assistant into the embedding-lib ([38f7eb1](https://github.com/roomle-dev/roomle-ui/commit/38f7eb1))
77
- * refactor(planner): remove wall visibility toggle from UI in favor of wall deletion ([67c0efa](https://github.com/roomle-dev/roomle-ui/commit/67c0efa))
78
- * docs: describe the measured placement of interior fittings ([a4b9c7f](https://github.com/roomle-dev/roomle-ui/commit/a4b9c7f))
79
- * docs: describe the obstacle and installation-element sections of the plan context ([137d569](https://github.com/roomle-dev/roomle-ui/commit/137d569))
80
- * docs: document the hi tool commands and the article selector ([a824ba2](https://github.com/roomle-dev/roomle-ui/commit/a824ba2))
81
- * chore: delete doors as well on deleting walls ([e101afb](https://github.com/roomle-dev/roomle-ui/commit/e101afb))
82
- * chore(fix): end drawing issue and update floor square meter after deleting room ([e4c983e](https://github.com/roomle-dev/roomle-ui/commit/e4c983e))
83
- * chore: formatting ([3b487eb](https://github.com/roomle-dev/roomle-ui/commit/3b487eb))
84
- * chore: merge release/test back into master ([51bc9b3](https://github.com/roomle-dev/roomle-ui/commit/51bc9b3))
85
- * chore: merge release/test back into master ([11c456b](https://github.com/roomle-dev/roomle-ui/commit/11c456b))
86
- * chore: update quality settings ([c138124](https://github.com/roomle-dev/roomle-ui/commit/c138124))
87
- * chore: webgpu debug modes and cleanup ([b631f2c](https://github.com/roomle-dev/roomle-ui/commit/b631f2c))
88
- * test(planner-core): add regression test for wall handler rebinding on undo ([ddba94a](https://github.com/roomle-dev/roomle-ui/commit/ddba94a))
89
- * test: fix playwright test for manual drawing ([100d294](https://github.com/roomle-dev/roomle-ui/commit/100d294))
90
- * test: fix sdk failing tests ([c8c25df](https://github.com/roomle-dev/roomle-ui/commit/c8c25df))
91
- * test: isolate configurator component tests with automatic cleanup ([1fb983e](https://github.com/roomle-dev/roomle-ui/commit/1fb983e))
92
- * style(planner): format plan-view-model test file ([897d6ae](https://github.com/roomle-dev/roomle-ui/commit/897d6ae))
93
-
94
- ### BREAKING CHANGE
95
-
96
- * the example takes the plan id from the id query parameter
97
- instead of plan_id.
98
-
99
- Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3
+ * Merge branch 'chore/ai-chat-merge-prep' into fix/ai-gen-prompt ([b5e74f3](https://github.com/roomle-dev/roomle-ui/commit/b5e74f3))
4
+ * Merge branch 'feat/ai-chat-follow-up-chips' into feat/ai-chat-follow-up-session-context ([872b132](https://github.com/roomle-dev/roomle-ui/commit/872b132))
5
+ * Merge branch 'fix/ai-gen-prompt' into feat/ai-chat-alpha-backend ([fbab132](https://github.com/roomle-dev/roomle-ui/commit/fbab132))
6
+ * Merge branch 'master' into fix/ai-gen-prompt ([0c516e0](https://github.com/roomle-dev/roomle-ui/commit/0c516e0))
7
+ * Merge pull request #3110 from roomle-dev/fix/ai-gen-prompt ([40bd440](https://github.com/roomle-dev/roomle-ui/commit/40bd440)), closes [#3110](https://github.com/roomle-dev/roomle-ui/issues/3110)
8
+ * Merge pull request #3117 from roomle-dev/fix/ai-gen-prompt-followup ([f0584c2](https://github.com/roomle-dev/roomle-ui/commit/f0584c2)), closes [#3117](https://github.com/roomle-dev/roomle-ui/issues/3117)
9
+ * Merge pull request #3128 from roomle-dev/feat/ai-staging ([8d2765e](https://github.com/roomle-dev/roomle-ui/commit/8d2765e)), closes [#3128](https://github.com/roomle-dev/roomle-ui/issues/3128)
10
+ * Merge pull request #3132 from roomle-dev/feat/ai-chat-staging ([a14414b](https://github.com/roomle-dev/roomle-ui/commit/a14414b)), closes [#3132](https://github.com/roomle-dev/roomle-ui/issues/3132)
11
+ * Merge pull request #3138 from roomle-dev/feat/ai-chat-no-flicker ([4985710](https://github.com/roomle-dev/roomle-ui/commit/4985710)), closes [#3138](https://github.com/roomle-dev/roomle-ui/issues/3138)
12
+ * Merge pull request #3140 from roomle-dev/fix/ai-chat-review-followups ([3838dbd](https://github.com/roomle-dev/roomle-ui/commit/3838dbd)), closes [#3140](https://github.com/roomle-dev/roomle-ui/issues/3140) [#3132](https://github.com/roomle-dev/roomle-ui/issues/3132)
13
+ * Merge pull request #3141 from roomle-dev/feat/ai-chat-alpha-backend ([f8b9dd1](https://github.com/roomle-dev/roomle-ui/commit/f8b9dd1)), closes [#3141](https://github.com/roomle-dev/roomle-ui/issues/3141)
14
+ * Merge pull request #3142 from roomle-dev/feat/ai-chat-follow-up-chips ([0996bc8](https://github.com/roomle-dev/roomle-ui/commit/0996bc8)), closes [#3142](https://github.com/roomle-dev/roomle-ui/issues/3142)
15
+ * Merge pull request #3143 from roomle-dev/feat/ai-chat-follow-up-session-context ([d5d5b5e](https://github.com/roomle-dev/roomle-ui/commit/d5d5b5e)), closes [#3143](https://github.com/roomle-dev/roomle-ui/issues/3143)
16
+ * Merge pull request #3144 from roomle-dev/docs/ai-render-path-traced-input ([4d2bd2e](https://github.com/roomle-dev/roomle-ui/commit/4d2bd2e)), closes [#3144](https://github.com/roomle-dev/roomle-ui/issues/3144)
17
+ * Merge pull request #3145 from roomle-dev/feat/ai-chat-abort-on-reset ([4962d8f](https://github.com/roomle-dev/roomle-ui/commit/4962d8f)), closes [#3145](https://github.com/roomle-dev/roomle-ui/issues/3145)
18
+ * Merge pull request #3147 from roomle-dev/docs/ai-render-demo-test ([e9ea51a](https://github.com/roomle-dev/roomle-ui/commit/e9ea51a)), closes [#3147](https://github.com/roomle-dev/roomle-ui/issues/3147)
19
+ * Merge remote-tracking branch 'origin/master' into fix/ai-gen-prompt ([360c763](https://github.com/roomle-dev/roomle-ui/commit/360c763))
20
+ * docs(ai-chat): add labelled example renders from the ten-scene run ([7bf5d23](https://github.com/roomle-dev/roomle-ui/commit/7bf5d23))
21
+ * docs(ai-chat): add the labelled runs and a handover for Dash ([4361e90](https://github.com/roomle-dev/roomle-ui/commit/4361e90))
22
+ * docs(ai-chat): add the Nano Banana vs. Sunburst report for HOMAG ([f181e67](https://github.com/roomle-dev/roomle-ui/commit/f181e67))
23
+ * docs(ai-chat): add the PDF of the HOMAG report ([8dd8aac](https://github.com/roomle-dev/roomle-ui/commit/8dd8aac))
24
+ * docs(ai-chat): add window-light, reference and destroyed-scene examples to the HOMAG report ([273769d](https://github.com/roomle-dev/roomle-ui/commit/273769d))
25
+ * docs(ai-chat): backend phase, a model parameter on /v1/img-gen ([e08fdd3](https://github.com/roomle-dev/roomle-ui/commit/e08fdd3))
26
+ * docs(ai-chat): bird's-eye and edge-case staging runs, not yet labelled ([24a2119](https://github.com/roomle-dev/roomle-ui/commit/24a2119))
27
+ * docs(ai-chat): bird's-eye run with staging-limits, glitch test for later ([47c830a](https://github.com/roomle-dev/roomle-ui/commit/47c830a))
28
+ * docs(ai-chat): chat integration of staging, light and Sunburst in flow, plan and progress ([9edf1ee](https://github.com/roomle-dev/roomle-ui/commit/9edf1ee))
29
+ * docs(ai-chat): deployed backend by stage, alpha state and the demo URL ([d2c7804](https://github.com/roomle-dev/roomle-ui/commit/d2c7804))
30
+ * docs(ai-chat): depth-tested staging corridors, paste-back re-run ([4e57f63](https://github.com/roomle-dev/roomle-ui/commit/4e57f63))
31
+ * docs(ai-chat): drop the merged branch name from PROGRESS ([be44342](https://github.com/roomle-dev/roomle-ui/commit/be44342))
32
+ * docs(ai-render): eval of the follow-up chips ([dfbd9b7](https://github.com/roomle-dev/roomle-ui/commit/dfbd9b7))
33
+ * docs(ai-chat): exact counts in the step 2 label table ([2c7f5a0](https://github.com/roomle-dev/roomle-ui/commit/2c7f5a0))
34
+ * docs(ai-chat): findings from the option matrix and the follow-up turns on the OpenAI host ([5a5f85c](https://github.com/roomle-dev/roomle-ui/commit/5a5f85c))
35
+ * docs(ai-render): findings of the demo test before the HOMAG pitch ([274006d](https://github.com/roomle-dev/roomle-ui/commit/274006d))
36
+ * docs(ai-chat): flow for capture-scene.ts and the RAPI step after the restore ([b6feefe](https://github.com/roomle-dev/roomle-ui/commit/b6feefe))
37
+ * docs(ai-chat): flow for the generateImage options and the error texts ([7221bd7](https://github.com/roomle-dev/roomle-ui/commit/7221bd7))
38
+ * docs(ai-chat): follow-up chips in the flow, the plan and the progress ([af018d2](https://github.com/roomle-dev/roomle-ui/commit/af018d2))
39
+ * docs(ai-chat): Georg's review of the step 8 round ([ae4c8c1](https://github.com/roomle-dev/roomle-ui/commit/ae4c8c1))
40
+ * docs(ai-chat): German shows empty chat labels, demo URLs set locale=en ([a6a886e](https://github.com/roomle-dev/roomle-ui/commit/a6a886e))
41
+ * docs(ai-chat): keep each example of the HOMAG report on one PDF page ([739fd11](https://github.com/roomle-dev/roomle-ui/commit/739fd11))
42
+ * docs(ai-chat): labelled results of staging step 2 ([e07a51f](https://github.com/roomle-dev/roomle-ui/commit/e07a51f))
43
+ * docs(ai-chat): light chips without the repeated wording, review fixes of the session context ([dde2200](https://github.com/roomle-dev/roomle-ui/commit/dde2200))
44
+ * docs(ai-chat): mark the eval image cleanup done in PROGRESS ([c98a58c](https://github.com/roomle-dev/roomle-ui/commit/c98a58c))
45
+ * docs(ai-chat): next step, the deployed backend replaces the URL-key path ([8dc2ded](https://github.com/roomle-dev/roomle-ui/commit/8dc2ded))
46
+ * docs(ai-chat): note that only unit tests gate this experimental branch ([57b4e18](https://github.com/roomle-dev/roomle-ui/commit/57b4e18))
47
+ * docs(ai-chat): off-screen photo camera built and checked ([74f6758](https://github.com/roomle-dev/roomle-ui/commit/74f6758))
48
+ * docs(ai-chat): plan a fittings-facts experiment with the data found so far ([da79be8](https://github.com/roomle-dev/roomle-ui/commit/da79be8))
49
+ * docs(ai-chat): plan for follow-up chips bound to the session state ([b10db81](https://github.com/roomle-dev/roomle-ui/commit/b10db81))
50
+ * docs(ai-chat): plan for session context on every follow-up ([cfe2d60](https://github.com/roomle-dev/roomle-ui/commit/cfe2d60))
51
+ * docs(ai-chat): plan step 19, counts from the plan as an exact add-list ([358f740](https://github.com/roomle-dev/roomle-ui/commit/358f740))
52
+ * docs(ai-chat): plan step 2 of the staging experiment ([e7bf6fe](https://github.com/roomle-dev/roomle-ui/commit/e7bf6fe))
53
+ * docs(ai-chat): plan step 3 of the staging experiment ([a402a2b](https://github.com/roomle-dev/roomle-ui/commit/a402a2b))
54
+ * docs(ai-chat): plan the chat integration of staging, light and Sunburst ([bbb3f77](https://github.com/roomle-dev/roomle-ui/commit/bbb3f77))
55
+ * docs(ai-chat): plan the staging experiment for the HOMAG requirement ([92525c8](https://github.com/roomle-dev/roomle-ui/commit/92525c8))
56
+ * docs(ai-chat): plan to render the photo camera without the view switch ([707c6fc](https://github.com/roomle-dev/roomle-ui/commit/707c6fc))
57
+ * docs(ai-chat): polish the HOMAG report and call the severity just no-go ([f8304a9](https://github.com/roomle-dev/roomle-ui/commit/f8304a9))
58
+ * docs(ai-chat): progress after steps 10 to 15, open points for Monday ([3efc43f](https://github.com/roomle-dev/roomle-ui/commit/3efc43f))
59
+ * docs(ai-render): real alpha run of the follow-up chips ([abc8c9d](https://github.com/roomle-dev/roomle-ui/commit/abc8c9d))
60
+ * docs(ai-chat): record A10 and the Sunburst comparison in the progress notes ([8984d70](https://github.com/roomle-dev/roomle-ui/commit/8984d70))
61
+ * docs(ai-chat): record speed, cost, look and the catalogue-photo finding ([925e593](https://github.com/roomle-dev/roomle-ui/commit/925e593))
62
+ * docs(ai-chat): record that Sunburst rejects input_fidelity ([6ab0a35](https://github.com/roomle-dev/roomle-ui/commit/6ab0a35))
63
+ * docs(ai-chat): record the model comparison on the ten-scene set ([16f7264](https://github.com/roomle-dev/roomle-ui/commit/16f7264))
64
+ * docs(ai-chat): record the second labelling round and the systematic errors ([1a52f93](https://github.com/roomle-dev/roomle-ui/commit/1a52f93))
65
+ * docs(ai-chat): reset stops a running generation ([653b9e9](https://github.com/roomle-dev/roomle-ui/commit/653b9e9))
66
+ * docs(ai-chat): root cause of density and plant counts, with the eval variants used ([9a878d0](https://github.com/roomle-dev/roomle-ui/commit/9a878d0))
67
+ * docs(ai-chat): session context on follow-ups, chained run and More objects eval ([ce475b0](https://github.com/roomle-dev/roomle-ui/commit/ce475b0))
68
+ * docs(ai-chat): settings and demo guide for the AI image chat ([5aee321](https://github.com/roomle-dev/roomle-ui/commit/5aee321))
69
+ * docs(ai-chat): smaller staging volumes, paste-back re-run ([ed0d905](https://github.com/roomle-dev/roomle-ui/commit/ed0d905))
70
+ * docs(ai-render): spike idea for a path-traced first-turn input ([74ab765](https://github.com/roomle-dev/roomle-ui/commit/74ab765))
71
+ * docs(ai-chat): split the progress notes into ai-render-docs ([f34dbf3](https://github.com/roomle-dev/roomle-ui/commit/f34dbf3))
72
+ * docs(ai-chat): staging labels by Georg, numbers per variant ([b223470](https://github.com/roomle-dev/roomle-ui/commit/b223470))
73
+ * docs(ai-chat): staging state and next steps on separate lines ([39581bf](https://github.com/roomle-dev/roomle-ui/commit/39581bf))
74
+ * docs(ai-chat): staging status report for HOMAG ([1a6bb4f](https://github.com/roomle-dev/roomle-ui/commit/1a6bb4f))
75
+ * docs(ai-chat): staging step 2 runs, not yet labelled ([8f01548](https://github.com/roomle-dev/roomle-ui/commit/8f01548))
76
+ * docs(ai-chat): step 10, themes, density, auto and open doors ([0fd1540](https://github.com/roomle-dev/roomle-ui/commit/0fd1540))
77
+ * docs(ai-chat): step 13, packed density, stools at islands for later ([223b81a](https://github.com/roomle-dev/roomle-ui/commit/223b81a))
78
+ * docs(ai-chat): step 14, packed with everyday objects ([3a36f86](https://github.com/roomle-dev/roomle-ui/commit/3a36f86))
79
+ * docs(ai-chat): step 15, plant limit and shelf amounts ([5386743](https://github.com/roomle-dev/roomle-ui/commit/5386743))
80
+ * docs(ai-chat): step 16, final round after the light changes ([40048b1](https://github.com/roomle-dev/roomle-ui/commit/40048b1))
81
+ * docs(ai-chat): step 17, dramatic daylight next to soft ([f913232](https://github.com/roomle-dev/roomle-ui/commit/f913232))
82
+ * docs(ai-chat): step 19 findings, the slot counts against step 18 ([cade4f5](https://github.com/roomle-dev/roomle-ui/commit/cade4f5))
83
+ * docs(ai-chat): step 2 labels, art direction and the step 3/4 staging plan ([073b3c4](https://github.com/roomle-dev/roomle-ui/commit/073b3c4))
84
+ * docs(ai-chat): step 20 findings, looser plant and picture slots ([af319af](https://github.com/roomle-dev/roomle-ui/commit/af319af))
85
+ * docs(ai-chat): step 21 findings, sill and table plants down to 2 of 60 ([8dac1b3](https://github.com/roomle-dev/roomle-ui/commit/8dac1b3))
86
+ * docs(ai-chat): step 3 runs and Claude's pre-screen ([5f064d7](https://github.com/roomle-dev/roomle-ui/commit/5f064d7))
87
+ * docs(ai-chat): step 4 quick run, Georg's review and causes ([1ebd987](https://github.com/roomle-dev/roomle-ui/commit/1ebd987))
88
+ * docs(ai-chat): step 5 hybrid test, facts blocks and Claude's pre-screen ([2bb3587](https://github.com/roomle-dev/roomle-ui/commit/2bb3587))
89
+ * docs(ai-chat): steps 6 to 8, open staging, themes, limits; pre-screen ([d7f690c](https://github.com/roomle-dev/roomle-ui/commit/d7f690c))
90
+ * docs(ai-chat): the first turn is a render step, the chat starts after the first image ([b27e106](https://github.com/roomle-dev/roomle-ui/commit/b27e106))
91
+ * docs(ai-chat): the legend in prompt and context, the origins alpha accepts ([33dd68e](https://github.com/roomle-dev/roomle-ui/commit/33dd68e))
92
+ * docs(ai-chat): update the handover now that the follow-up is merged ([1f9bfb7](https://github.com/roomle-dev/roomle-ui/commit/1f9bfb7))
93
+ * docs(ai-chat): warm evening accepted with its under-cabinet lights ([e8b67dc](https://github.com/roomle-dev/roomle-ui/commit/e8b67dc))
94
+ * chore(ai-chat): add a local page to label evaluation renders ([4d09875](https://github.com/roomle-dev/roomle-ui/commit/4d09875))
95
+ * chore(ai-chat): add a page to compare the look of two models pair by pair ([777d0d0](https://github.com/roomle-dev/roomle-ui/commit/777d0d0))
96
+ * chore(ai-chat): add an A11 variant asking for window light and chrome reflections ([2b58f92](https://github.com/roomle-dev/roomle-ui/commit/2b58f92))
97
+ * chore: add conditional kitchen prompt ([f76fc79](https://github.com/roomle-dev/roomle-ui/commit/f76fc79))
98
+ * chore: add results ([439fcd2](https://github.com/roomle-dev/roomle-ui/commit/439fcd2))
99
+ * chore(ai-chat): add scripts to rebuild the report figures and PDF ([227f829](https://github.com/roomle-dev/roomle-ui/commit/227f829))
100
+ * chore(ai-chat): capture evaluation scenes reproducibly from a scene list ([2503f4b](https://github.com/roomle-dev/roomle-ui/commit/2503f4b))
101
+ * chore(ai-chat): capture evaluation scenes with a level 55 degree camera ([2ec1f5b](https://github.com/roomle-dev/roomle-ui/commit/2ec1f5b))
102
+ * chore(ai-chat): compare OpenAI image models on Azure in the render evaluation ([48a6ffa](https://github.com/roomle-dev/roomle-ui/commit/48a6ffa))
103
+ * chore: create material legend for the generator to read ([ae227bf](https://github.com/roomle-dev/roomle-ui/commit/ae227bf))
104
+ * chore: expand presets based on homag data ([625f26f](https://github.com/roomle-dev/roomle-ui/commit/625f26f))
105
+ * chore(ai-chat): export labelled renders and keep the ten-scene labels ([1e06389](https://github.com/roomle-dev/roomle-ui/commit/1e06389))
106
+ * chore: fix typo ([2ae3ae1](https://github.com/roomle-dev/roomle-ui/commit/2ae3ae1))
107
+ * chore: lights final results ([d5a53f9](https://github.com/roomle-dev/roomle-ui/commit/d5a53f9))
108
+ * chore: lint ([1b42f6e](https://github.com/roomle-dev/roomle-ui/commit/1b42f6e))
109
+ * chore: lint ([424d309](https://github.com/roomle-dev/roomle-ui/commit/424d309))
110
+ * chore(ai-chat): log input tokens and allow sequential timing in the render evaluation ([ec362a5](https://github.com/roomle-dev/roomle-ui/commit/ec362a5))
111
+ * chore: merge findings from georg's PR ([2992145](https://github.com/roomle-dev/roomle-ui/commit/2992145))
112
+ * chore(ai-chat): merge fix/ai-gen-prompt into feat/ai-staging ([c61f500](https://github.com/roomle-dev/roomle-ui/commit/c61f500))
113
+ * chore(ai-chat): merge the light-facts work into the report branch ([5d4ed34](https://github.com/roomle-dev/roomle-ui/commit/5d4ed34))
114
+ * chore(ai-render-eval): remove eval images before master ([7cdca6f](https://github.com/roomle-dev/roomle-ui/commit/7cdca6f))
115
+ * chore(ai-chat): remove the browser-only early copy of the legend collector ([a7e8a4a](https://github.com/roomle-dev/roomle-ui/commit/a7e8a4a)), closes [#3138](https://github.com/roomle-dev/roomle-ui/issues/3138)
116
+ * chore(ai-render-eval): rewrap the annotate header comment ([bfc61b9](https://github.com/roomle-dev/roomle-ui/commit/bfc61b9))
117
+ * chore: try a more strict prompt ([55b7d3f](https://github.com/roomle-dev/roomle-ui/commit/55b7d3f))
118
+ * chore: tweaking the lighting prompts ([c5bba2e](https://github.com/roomle-dev/roomle-ui/commit/c5bba2e))
119
+ * chore: update progress, add gemini prompt maker ([e2008b3](https://github.com/roomle-dev/roomle-ui/commit/e2008b3))
120
+ * fix(ai-chat): a chip's light and theme apply only once its image is back ([d5cbc51](https://github.com/roomle-dev/roomle-ui/commit/d5cbc51))
121
+ * fix(ai-chat): a host without /models leaves the key unknown, no fake edit request ([6e178dc](https://github.com/roomle-dev/roomle-ui/commit/6e178dc))
122
+ * fix(ai-chat): an error page without status text says so ([1db4a5f](https://github.com/roomle-dev/roomle-ui/commit/1db4a5f))
123
+ * fix(ai-chat): an HTML error page shows the status text, long error texts are cut ([8d8511b](https://github.com/roomle-dev/roomle-ui/commit/8d8511b))
124
+ * fix(ai-chat): an unknown imageGenConfig.stage goes to live ([7fec811](https://github.com/roomle-dev/roomle-ui/commit/7fec811))
125
+ * fix(sdk): apply a pending render-loop function before pausing drawing ([3f6a221](https://github.com/roomle-dev/roomle-ui/commit/3f6a221))
126
+ * fix(ai-chat): close ImageBitmaps after use ([2002583](https://github.com/roomle-dev/roomle-ui/commit/2002583))
127
+ * fix(ai-chat): depth-tested staging corridors ([e1a9bd4](https://github.com/roomle-dev/roomle-ui/commit/e1a9bd4))
128
+ * fix(ai-chat): describe only visible materials in the scene legend ([9dc59ec](https://github.com/roomle-dev/roomle-ui/commit/9dc59ec))
129
+ * fix(ai-chat): dining zone is the furniture, not the free floor ([53debde](https://github.com/roomle-dev/roomle-ui/commit/53debde))
130
+ * fix(ai-chat): encode the upload once at 0.85 ([0de10d2](https://github.com/roomle-dev/roomle-ui/commit/0de10d2))
131
+ * fix(ai-chat): follow-up presets only in the planner, the configurator keeps its presets ([60cd7a3](https://github.com/roomle-dev/roomle-ui/commit/60cd7a3))
132
+ * fix(ai-render-eval): follow-ups after a light turn keep that turn's light ([4947d3b](https://github.com/roomle-dev/roomle-ui/commit/4947d3b))
133
+ * fix(ai-chat): free floor inside an L-shaped worktop counts for the dining table ([1c247f6](https://github.com/roomle-dev/roomle-ui/commit/1c247f6))
134
+ * fix(ai-chat): give the image link an accessible name ([bb18b51](https://github.com/roomle-dev/roomle-ui/commit/bb18b51))
135
+ * fix(ai-chat): give the theme select room for its long labels on mobile ([5fe4e0c](https://github.com/roomle-dev/roomle-ui/commit/5fe4e0c))
136
+ * fix(ai-chat): keep the focus in the chat after choosing a theme ([4b653bc](https://github.com/roomle-dev/roomle-ui/commit/4b653bc))
137
+ * fix(sdk): keep the render clock running during paused frames ([41a99e3](https://github.com/roomle-dev/roomle-ui/commit/41a99e3))
138
+ * fix(sdk): keys typed into a field no longer move the first-person camera ([b95e739](https://github.com/roomle-dev/roomle-ui/commit/b95e739))
139
+ * fix(ai-chat): look-compare serves only run files, keys answers by images ([e1e596e](https://github.com/roomle-dev/roomle-ui/commit/e1e596e))
140
+ * fix(ai-chat): measure doors and windows without what the 2D view leaves on them ([45fb644](https://github.com/roomle-dev/roomle-ui/commit/45fb644))
141
+ * fix(ai-chat): one look-compare column per run when runs share a variant ([588a980](https://github.com/roomle-dev/roomle-ui/commit/588a980))
142
+ * fix(ai-chat): plant walkway from the nearest wall, not the mesh's proportions ([14f2232](https://github.com/roomle-dev/roomle-ui/commit/14f2232))
143
+ * fix(ai-chat): reconcile the eye-level scene with the view at restore time ([5329f2a](https://github.com/roomle-dev/roomle-ui/commit/5329f2a))
144
+ * fix(sdk): render eye-level captures in 3D quality and keep the image renderer's mode current ([fc5b24f](https://github.com/roomle-dev/roomle-ui/commit/fc5b24f))
145
+ * fix(ai-chat): reset also ends a pending Sunburst key check and an aborted answer read ([61fd25f](https://github.com/roomle-dev/roomle-ui/commit/61fd25f))
146
+ * fix(ai-chat): reset stops a running generation ([adc38a6](https://github.com/roomle-dev/roomle-ui/commit/adc38a6))
147
+ * fix(ai-chat): sample the scene in the paused window, build the legend after it ([9c316b8](https://github.com/roomle-dev/roomle-ui/commit/9c316b8))
148
+ * fix(ai-chat): show a focus ring on the chips for keyboard users ([a0c9aff](https://github.com/roomle-dev/roomle-ui/commit/a0c9aff))
149
+ * fix(sdk): show the products the orbit camera cuts away in eye-level captures ([c509d19](https://github.com/roomle-dev/roomle-ui/commit/c509d19))
150
+ * fix(ai-chat): single chips keep the focus in the chat too ([16ea434](https://github.com/roomle-dev/roomle-ui/commit/16ea434))
151
+ * fix(ai-chat): smaller follow-up uploads, no idle scrollbar, short prompt bubbles ([650f595](https://github.com/roomle-dev/roomle-ui/commit/650f595))
152
+ * fix(ai-chat): the first planner capture always collects the plan limits ([56fb788](https://github.com/roomle-dev/roomle-ui/commit/56fb788))
153
+ * fix(ai-chat): the light chips word their light only in the LIGHT block ([bbb2a18](https://github.com/roomle-dev/roomle-ui/commit/bbb2a18))
154
+ * fix(ai-chat): the reason of a 401 stays visible above the login form ([a022f85](https://github.com/roomle-dev/roomle-ui/commit/a022f85))
155
+ * fix(sdk): the scene manager forwards key-ups from fields, as the input manager does ([dbc3307](https://github.com/roomle-dev/roomle-ui/commit/dbc3307))
156
+ * fix(ai-chat): the staging debug pill is a button with aria-pressed ([2ef4faa](https://github.com/roomle-dev/roomle-ui/commit/2ef4faa))
157
+ * fix(ai-chat): the zone block's closing sentence allows its rug and pendant ([a5bac0b](https://github.com/roomle-dev/roomle-ui/commit/a5bac0b))
158
+ * fix(ai-chat): worktop decor in two spots, not over the whole top ([3ed25ca](https://github.com/roomle-dev/roomle-ui/commit/3ed25ca))
159
+ * refactor(sdk): drop the redundant camera-facing reset after an eye-level capture ([d0fd5f7](https://github.com/roomle-dev/roomle-ui/commit/d0fd5f7))
160
+ * refactor(ai-chat): generateImage takes context, model and stage as options ([8f24309](https://github.com/roomle-dev/roomle-ui/commit/8f24309))
161
+ * refactor(ai-chat): ImageFrame, FULL_FRAME and ndcRectOf in image-frame.ts ([b0f969b](https://github.com/roomle-dev/roomle-ui/commit/b0f969b))
162
+ * refactor(sdk): keep the drawing pause in the scene manager, trim withEyeLevelScene ([b3e02bb](https://github.com/roomle-dev/roomle-ui/commit/b3e02bb))
163
+ * refactor(ai-chat): make the camera a required argument of the scene collectors ([26c9e39](https://github.com/roomle-dev/roomle-ui/commit/26c9e39))
164
+ * refactor(ai-chat): one frameAspect helper for the visible aspect of a frame ([af44b75](https://github.com/roomle-dev/roomle-ui/commit/af44b75))
165
+ * refactor(ai-chat): one function per staging slot kind, wall machinery in staging-wall-slots.ts ([2b0f341](https://github.com/roomle-dev/roomle-ui/commit/2b0f341))
166
+ * refactor(ai-chat): one light choice per session, the LIGHT wording derived from it ([6be7d15](https://github.com/roomle-dev/roomle-ui/commit/6be7d15))
167
+ * refactor(ai-chat): one stage union, from the public config type; one default ([610895f](https://github.com/roomle-dev/roomle-ui/commit/610895f))
168
+ * refactor(sdk): read the camera image through _readFrameAndClear ([1508635](https://github.com/roomle-dev/roomle-ui/commit/1508635))
169
+ * refactor(ai-chat): staging keeps only the open block and the plan's limits ([4bfcdbd](https://github.com/roomle-dev/roomle-ui/commit/4bfcdbd))
170
+ * refactor(ai-chat): the collectors take the frame as a required argument ([f4bbe36](https://github.com/roomle-dev/roomle-ui/commit/f4bbe36))
171
+ * refactor(ai-chat): the planner capture moves to capture-scene.ts, RAPI after the eye-level scene ([ebcc3f7](https://github.com/roomle-dev/roomle-ui/commit/ebcc3f7))
172
+ * test(ai-chat): drop the follow-up preset count assertions ([3943a6d](https://github.com/roomle-dev/roomle-ui/commit/3943a6d))
173
+ * test(ai-chat): follow-up chip tests assert the second generation ([c91e102](https://github.com/roomle-dev/roomle-ui/commit/c91e102))
174
+ * test(ai-render-eval): follow-up chip variants on earlier results ([4b76d84](https://github.com/roomle-dev/roomle-ui/commit/4b76d84))
175
+ * test(ai-render-eval): follow-up variants carry the session context ([c4f38e0](https://github.com/roomle-dev/roomle-ui/commit/c4f38e0))
176
+ * feat(ai-chat): add decor, ceiling spots and planned materials to the kitchen prompt ([155a7d1](https://github.com/roomle-dev/roomle-ui/commit/155a7d1))
177
+ * feat(ai-chat): align the capture onto pass 1 and measure the residual ([ac3e2ed](https://github.com/roomle-dev/roomle-ui/commit/ac3e2ed))
178
+ * feat(ai-chat): art direction for staging as one decor block ([26c6d0e](https://github.com/roomle-dev/roomle-ui/commit/26c6d0e))
179
+ * feat(ai-chat): big-room-1-photo, the photo camera for step 3 ([aab9955](https://github.com/roomle-dev/roomle-ui/commit/aab9955))
180
+ * feat(ai-chat): bird's-eye captures of five bigger rooms ([850e8db](https://github.com/roomle-dev/roomle-ui/commit/850e8db))
181
+ * feat(ai-chat): check the Sunburst key once at startup and block send when it is rejected ([569d07a](https://github.com/roomle-dev/roomle-ui/commit/569d07a))
182
+ * feat(ai-chat): chip row and style tray after the first planner image ([2368575](https://github.com/roomle-dev/roomle-ui/commit/2368575))
183
+ * feat(ai-chat): collect the staging facts with the scene while staging is on ([488a540](https://github.com/roomle-dev/roomle-ui/commit/488a540))
184
+ * feat(ai-chat): countable density levels, open fronts keep their state ([bef0541](https://github.com/roomle-dev/roomle-ui/commit/bef0541))
185
+ * feat(ai-chat): crop the capture to 3:2 or 2:3 and describe that crop in the facts ([ddcc264](https://github.com/roomle-dev/roomle-ui/commit/ddcc264))
186
+ * feat(ai-chat): decor themes and furniture minimums for staging-open ([430e483](https://github.com/roomle-dev/roomle-ui/commit/430e483))
187
+ * feat(ai-chat): define "kitchen changed" on the side-by-side page ([26180d1](https://github.com/roomle-dev/roomle-ui/commit/26180d1))
188
+ * feat(ai-chat): density decides how full, not the base staging block ([029ca5f](https://github.com/roomle-dev/roomle-ui/commit/029ca5f))
189
+ * feat(ai-chat): deployed backend by imageGenConfig.stage, backend errors shown ([f60261e](https://github.com/roomle-dev/roomle-ui/commit/f60261e))
190
+ * feat(ai-chat): door clearance for the stool area, room for a table lamp ([57faa3a](https://github.com/roomle-dev/roomle-ui/commit/57faa3a))
191
+ * feat(ai-chat): dramatic daylight as an option of the light facts ([58f1c74](https://github.com/roomle-dev/roomle-ui/commit/58f1c74))
192
+ * feat(ai-chat): floor plants further from doors and off the kitchen walkway, with a place word ([a7d7d54](https://github.com/roomle-dev/roomle-ui/commit/a7d7d54))
193
+ * feat(ai-chat): floor-plant slots against the walls: corners and beside the kitchen's ends ([a90170c](https://github.com/roomle-dev/roomle-ui/commit/a90170c))
194
+ * feat(ai-chat): follow-up chips compose their request from the session state ([6df40ba](https://github.com/roomle-dev/roomle-ui/commit/6df40ba))
195
+ * feat(ai-chat): ID render of the plan objects at capture ([01c974c](https://github.com/roomle-dev/roomle-ui/commit/01c974c))
196
+ * feat(ai-chat): imageGenConfig with the chat's start values in the init data ([a24ff0c](https://github.com/roomle-dev/roomle-ui/commit/a24ff0c))
197
+ * feat(ai-chat): imageGenConfig.model, sent as model to /v1/img-gen with the legend in the prompt ([ef9cc15](https://github.com/roomle-dev/roomle-ui/commit/ef9cc15))
198
+ * feat(ai-chat): kitchen rug back in staging-open, no trailing plants ([40a1f35](https://github.com/roomle-dev/roomle-ui/commit/40a1f35))
199
+ * feat(ai-chat): label staging runs and compare N variants ([1d78f5c](https://github.com/roomle-dev/roomle-ui/commit/1d78f5c))
200
+ * feat(ai-chat): legend, light and plan limits carry into every follow-up ([5ff7c9a](https://github.com/roomle-dev/roomle-ui/commit/5ff7c9a))
201
+ * feat(ai-chat): let the legend, light and staging facts take a camera ([1cec8a4](https://github.com/roomle-dev/roomle-ui/commit/1cec8a4))
202
+ * feat(ai-chat): look-compare shows chosen variants of a run folder ([11e5361](https://github.com/roomle-dev/roomle-ui/commit/11e5361))
203
+ * feat(ai-chat): measure the framing offset for the staging paste-back ([392ac8c](https://github.com/roomle-dev/roomle-ui/commit/392ac8c))
204
+ * feat(ai-chat): no plants on sills and table, said next to the surface counts ([6ba8c96](https://github.com/roomle-dev/roomle-ui/commit/6ba8c96))
205
+ * feat(ai-chat): note field in the per-sample look review ([de40c7b](https://github.com/roomle-dev/roomle-ui/commit/de40c7b))
206
+ * feat(ai-chat): one plant limit for every level, household-sized shelves ([5c3c6db](https://github.com/roomle-dev/roomle-ui/commit/5c3c6db))
207
+ * feat(ai-chat): open a generated image full size in a new tab on click ([1271c0b](https://github.com/roomle-dev/roomle-ui/commit/1271c0b))
208
+ * feat(ai-chat): openai: models in the realism eval, run in parallel ([86ab3a3](https://github.com/roomle-dev/roomle-ui/commit/86ab3a3))
209
+ * feat(ai-chat): packed density, no stools at islands without overhang ([4d182d8](https://github.com/roomle-dev/roomle-ui/commit/4d182d8))
210
+ * feat(ai-chat): packed fills with everyday objects, not more plants ([60e2cb4](https://github.com/roomle-dev/roomle-ui/commit/60e2cb4))
211
+ * feat(ai-chat): paste back over several pass 2 runs ([a4cf2d9](https://github.com/roomle-dev/roomle-ui/commit/a4cf2d9))
212
+ * feat(ai-chat): paste back with crops from another folder ([509d32a](https://github.com/roomle-dev/roomle-ui/commit/509d32a))
213
+ * feat(ai-chat): paste the planned kitchen back over the staged image ([ad3234d](https://github.com/roomle-dev/roomle-ui/commit/ad3234d))
214
+ * feat(ai-chat): per-sample side-by-side review in look-compare ([86e84b4](https://github.com/roomle-dev/roomle-ui/commit/86e84b4))
215
+ * feat(ai-chat): picture slots on the free stretch beside a window ([03c2005](https://github.com/roomle-dev/roomle-ui/commit/03c2005))
216
+ * feat(ai-chat): pulled-back staging cameras and zone-aware crops ([b1250ab](https://github.com/roomle-dev/roomle-ui/commit/b1250ab))
217
+ * feat(sdk): render a camera off-screen with the scene at eye level ([838aa7b](https://github.com/roomle-dev/roomle-ui/commit/838aa7b))
218
+ * feat(ai-chat): render from an automatic photo camera outside the first-person view ([6eac7ca](https://github.com/roomle-dev/roomle-ui/commit/6eac7ca))
219
+ * feat(ai-chat): render the photo camera off-screen, no view switch ([d3fe9a6](https://github.com/roomle-dev/roomle-ui/commit/d3fe9a6))
220
+ * feat(ai-chat): restraint in staging-open, no photographs as wall art ([735a949](https://github.com/roomle-dev/roomle-ui/commit/735a949))
221
+ * feat(ai-chat): richer staging vocabulary in the zone block ([353c6bc](https://github.com/roomle-dev/roomle-ui/commit/353c6bc))
222
+ * feat(ai-chat): staging as one optional block of the A11 prompt ([ae58a64](https://github.com/roomle-dev/roomle-ui/commit/ae58a64))
223
+ * feat(ai-chat): staging controls only with imageGenConfig.staging=debug ([4040a25](https://github.com/roomle-dev/roomle-ui/commit/4040a25))
224
+ * feat(ai-chat): staging facts without positions (hybrid test) ([9ba9e8f](https://github.com/roomle-dev/roomle-ui/commit/9ba9e8f))
225
+ * feat(ai-chat): staging fixes from the step 4 review ([e94e69b](https://github.com/roomle-dev/roomle-ui/commit/e94e69b))
226
+ * feat(ai-chat): staging prompt variants for the three-variant experiment ([7e2c78f](https://github.com/roomle-dev/roomle-ui/commit/7e2c78f))
227
+ * feat(ai-chat): staging variants with the window facts as LIGHT block ([b9d14ff](https://github.com/roomle-dev/roomle-ui/commit/b9d14ff))
228
+ * feat(ai-chat): staging zones from plan data ([626803c](https://github.com/roomle-dev/roomle-ui/commit/626803c))
229
+ * feat(ai-chat): staging-facts variant from the captured facts.json ([7ca2443](https://github.com/roomle-dev/roomle-ui/commit/7ca2443))
230
+ * feat(ai-chat): staging-limits, open staging with only the plan's limits ([5e5cfcf](https://github.com/roomle-dev/roomle-ui/commit/5e5cfcf))
231
+ * feat(ai-chat): staging-open, inviting staging with the plan facts as minimum ([49797c8](https://github.com/roomle-dev/roomle-ui/commit/49797c8))
232
+ * feat(ai-chat): staging, light and Sunburst keys in the chat store ([dce383f](https://github.com/roomle-dev/roomle-ui/commit/dce383f))
233
+ * feat(ai-chat): staging, theme, density and light choice in the planner chat ([29df2c0](https://github.com/roomle-dev/roomle-ui/commit/29df2c0))
234
+ * feat(ai-chat): step 4 variants share the art-direction block ([fea0394](https://github.com/roomle-dev/roomle-ui/commit/fea0394))
235
+ * feat(ai-chat): Sunburst images/edits from the browser on the OpenAI and HOMAG Foundry hosts ([a165f77](https://github.com/roomle-dev/roomle-ui/commit/a165f77))
236
+ * feat(ai-chat): ten staging themes, density levels, open-door captures ([109e07d](https://github.com/roomle-dev/roomle-ui/commit/109e07d))
237
+ * feat(ai-chat): the chat defaults to the alpha backend ([524e8d4](https://github.com/roomle-dev/roomle-ui/commit/524e8d4))
238
+ * feat(ai-chat): the first turn sends the evaluation's request, staged or not ([94924b4](https://github.com/roomle-dev/roomle-ui/commit/94924b4))
239
+ * feat(ai-chat): the planner's first turn is a render card, the chat starts after the first image ([69c4aee](https://github.com/roomle-dev/roomle-ui/commit/69c4aee))
240
+ * feat(ai-chat): the staging block is an exact add-list from the plan's slots ([7db6053](https://github.com/roomle-dev/roomle-ui/commit/7db6053))
241
+ * feat(ai-chat): the staging collector counts slots: table, stools, plants, pictures, sills, worktop r ([ee217ba](https://github.com/roomle-dev/roomle-ui/commit/ee217ba))
242
+ * feat(ai-chat): three framing edge cases for the staging test ([b09e267](https://github.com/roomle-dev/roomle-ui/commit/b09e267))
243
+ * feat(ai-chat): three staging arms, no plan data, free places, facts ([896891c](https://github.com/roomle-dev/roomle-ui/commit/896891c))
244
+ * feat(ai-chat): tighter crops of the bird's-eye scenes ([99254bc](https://github.com/roomle-dev/roomle-ui/commit/99254bc))
245
+ * feat(ai-chat): upload the screenshot as JPEG 0.85 at most 2048 px on the long edge ([c7f92ce](https://github.com/roomle-dev/roomle-ui/commit/c7f92ce))
246
+ * style(ai-chat): braces on the ifs #3132 added, and all of img-gen.ts ([deadd9d](https://github.com/roomle-dev/roomle-ui/commit/deadd9d)), closes [#3132](https://github.com/roomle-dev/roomle-ui/issues/3132)
247
+ * style(sdk): format the eye-level scene tests ([0075717](https://github.com/roomle-dev/roomle-ui/commit/0075717))
248
+ * style(ai-chat): prettier on the branch's files ([4a4699f](https://github.com/roomle-dev/roomle-ui/commit/4a4699f))
249
+ * style(ai-chat): prettier on the dramatic daylight variants and test ([1ae86f9](https://github.com/roomle-dev/roomle-ui/commit/1ae86f9))
250
+ * style(ai-chat): prettier on the staging and evaluation files ([9e7db2d](https://github.com/roomle-dev/roomle-ui/commit/9e7db2d))
251
+ * style(ai-chat): prettier on the staging facts collector and its spec ([50e41a1](https://github.com/roomle-dev/roomle-ui/commit/50e41a1))
252
+ * style(ai-chat): the card's Render button is the chat's outlined pill, centred ([052464e](https://github.com/roomle-dev/roomle-ui/commit/052464e))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roomle/embedding-lib",
3
- "version": "9.0.0-alpha.1",
3
+ "version": "9.0.0-alpha.2",
4
4
  "description": "This is a small library which can be used to communicate with the Roomle Configurator. ES modules only (browser-compatible).",
5
5
  "type": "module",
6
6
  "main": "./roomle-embedding-lib.js",
@@ -97,6 +97,12 @@ var t = class {
97
97
  }, c = /* @__PURE__ */ function(e) {
98
98
  return e.BOTTOM_BAR = "bottom_bar", e.PARTLIST_BOUNDS = "partlist_bounds", e.INTERACTION_NOTES = "interaction_notes", e.PARAMETER_GROUPS = "parameter_groups", e;
99
99
  }({}), l = (e) => JSON.parse(JSON.stringify(e)), u = {
100
+ staging: !1,
101
+ theme: "scandinavian",
102
+ density: "balanced",
103
+ light: "soft",
104
+ stage: "alpha"
105
+ }, d = {
100
106
  mobileLandscape: !0,
101
107
  floorMaterialRootTag: "materials_root",
102
108
  buttons: {
@@ -124,35 +130,36 @@ var t = class {
124
130
  openCloseAnimation: !0,
125
131
  localExport3d: !1
126
132
  },
133
+ imageGenConfig: u,
127
134
  configuratorZoom: !1,
128
135
  rotationSnapDegrees: 10,
129
136
  interactionsCollapsed: !1
130
- }, d = (e) => (p(e), e?.customApiUrl && (e.customApiUrl = decodeURIComponent(e.customApiUrl)), e.shareUrl && (e.deeplink = e.shareUrl.replace(h, g)), e), f = (e) => e.trim() !== "" && Number.isFinite(Number(e.trim())), p = (e) => {
137
+ }, f = (e) => (m(e), e?.customApiUrl && (e.customApiUrl = decodeURIComponent(e.customApiUrl)), e.shareUrl && (e.deeplink = e.shareUrl.replace(g, _)), e), p = (e) => e.trim() !== "" && Number.isFinite(Number(e.trim())), m = (e) => {
131
138
  if (!e || typeof e != "object") return;
132
139
  let t = Object.keys(e);
133
140
  for (let n of t) {
134
141
  let t = e[n];
135
- if (!Array.isArray(t) && typeof t == "object" && t && p(t), Array.isArray(t)) for (let e of t) p(e);
136
- t === "true" || t === "false" ? e[n] = t === "true" : typeof t == "string" && f(t) && (e[n] = Number(t));
142
+ if (!Array.isArray(t) && typeof t == "object" && t && m(t), Array.isArray(t)) for (let e of t) m(e);
143
+ t === "true" || t === "false" ? e[n] = t === "true" : typeof t == "string" && p(t) && (e[n] = Number(t));
137
144
  }
138
- }, m = () => {
139
- let t = l(u);
145
+ }, h = () => {
146
+ let t = l(d);
140
147
  t.locale ||= e(null, !0), t.id === "(idle)" && delete t.id;
141
148
  let n = i();
142
149
  return n && a(n) && (t.configuratorId = "demoConfigurator"), t.customApiUrl = "https://rubens.alpha.roomle.com/api/v2", t.emails = !1, t;
143
- }, h = "<CONF_ID>", g = "#CONFIGURATIONID#", _ = (e) => {
150
+ }, g = "<CONF_ID>", _ = "#CONFIGURATIONID#", v = (e) => {
144
151
  let t = e.featureFlags;
145
152
  if (!t || typeof t != "object" || Array.isArray(t)) return;
146
153
  let n = t;
147
154
  "enableTwoLevelCatalog" in n && typeof n.enableTwoLevelCatalog == "boolean" && (e.enableTwoLevelCatalog === !1 || e.enableTwoLevelCatalog === void 0) && (e.enableTwoLevelCatalog = n.enableTwoLevelCatalog), "webGpu" in n && typeof n.webGpu == "boolean" && (e.webGpu === !1 || e.webGpu === void 0) && (e.webGpu = n.webGpu);
148
- }, v = (e) => {
155
+ }, y = (e) => {
149
156
  e.featureFlags ||= {}, typeof e.featureFlags.realPartList != "boolean" && (e.featureFlags.realPartList = !0), typeof e.featureFlags.globalCallbacks != "boolean" && (e.featureFlags.globalCallbacks = !0), typeof e.featureFlags.mocAr != "boolean" && (e.featureFlags.mocAr = !1);
150
- }, y = (e, t) => {
151
- let n = l(t), r = m();
152
- v(r);
157
+ }, b = (e, t) => {
158
+ let n = l(t), r = h();
159
+ y(r);
153
160
  let i = o(o(r, e.settings || {}), n);
154
- return i.configuratorId = e.id, !i.overrideTenant && e.tenant && (i.overrideTenant = e.tenant), _(i), i;
155
- }, b = () => /(android)/i.test(navigator.userAgent), x = class {
161
+ return i.configuratorId = e.id, !i.overrideTenant && e.tenant && (i.overrideTenant = e.tenant), v(i), i;
162
+ }, x = () => /(android)/i.test(navigator.userAgent), S = class {
156
163
  _messageHandler = null;
157
164
  isSetupDone = !1;
158
165
  viewName = "main";
@@ -216,7 +223,7 @@ var t = class {
216
223
  }
217
224
  }));
218
225
  }
219
- }, S = () => {
226
+ }, C = () => {
220
227
  let e, t;
221
228
  return {
222
229
  promise: new Promise((n, r) => {
@@ -229,7 +236,7 @@ var t = class {
229
236
  //#endregion
230
237
  //#region packages/common/src/utils/rapi-version.ts
231
238
  (/* @__PURE__ */ "/items./items/{id}./items/{id}/renderings./items/{id}/conversions./items/{id}/3d-exports./items/{id}/perspectiveImage./items/{id}/perspectiveImageHD./items/{id}/topImage./items/{id}/tags./items/{id}/tagConnections./items/{id}/additionalContents./items/{id}/assetProcessings./items/{id}/3dAssets/{format}./items/{id}/3dAssets/{format}/{dummyFileName}./configurations./configurations/{id}./configurations/{id}/shares./configurations/{id}/renderings./configurations/{id}/3d-exports./configurations/{id}/3dAssets/{format}./configurations/{id}/3dAssets/{format}/{dummyFileName}./auth/signin./auth/signout./auth/reset./auth/reset/confirm./auth/change/pwd./auth/context./assets/analyze./version".split(".")).map((e) => RegExp("^" + e.replace(/\{[^}]+\}/g, "[^/]+") + "/?$"));
232
- var C = /\/v[23]\/?$/, w = (e, t) => C.test(e) ? e.replace(C, "/v2") + t : e + t, T = {
239
+ var w = /\/v[23]\/?$/, T = (e, t) => w.test(e) ? e.replace(w, "/v2") + t : e + t, E = {
233
240
  SDK: "extended",
234
241
  CONFIGURATOR_SDK: "configurator",
235
242
  CALLBACKS: "callbacks",
@@ -237,22 +244,22 @@ var C = /\/v[23]\/?$/, w = (e, t) => C.test(e) ? e.replace(C, "/v2") + t : e + t
237
244
  ANALYTICS: "analytics",
238
245
  GLOBAL: "global",
239
246
  RAPI: "rapi"
240
- }, E = ".", D = T.SDK + "." + T.CALLBACKS, O = {
247
+ }, D = ".", O = E.SDK + "." + E.CALLBACKS, k = {
241
248
  REQUEST_BOOT: "requestBoot",
242
249
  SETUP: "setup",
243
250
  WEBSITE_READY: "websiteReady"
244
- }, k = {
251
+ }, A = {
245
252
  GET_METHODS: "getMethods",
246
253
  RETURN_METHODS: "returnMethods",
247
254
  REGISTER_CUSTOM_VIEW: "registerCustomView",
248
255
  REGISTER_CUSTOM_VIEW_DONE: "registerCustomViewDone"
249
- }, A = ["constructor", "callbacks"], j = (e) => e[0] !== "_" && !A.includes(e), M = (e, t, n = !1) => {
256
+ }, j = ["constructor", "callbacks"], M = (e) => e[0] !== "_" && !j.includes(e), N = (e, t, n = !1) => {
250
257
  if (!e) return [];
251
- let r = Object.getOwnPropertyNames(e), i = n ? T.CALLBACKS + "." : "";
252
- return r.filter(j).map((e) => t + "." + i + e);
253
- }, N = async (e, t) => {
258
+ let r = Object.getOwnPropertyNames(e), i = n ? E.CALLBACKS + "." : "";
259
+ return r.filter(M).map((e) => t + "." + i + e);
260
+ }, P = async (e, t) => {
254
261
  if (typeof e != "string") throw Error("Configurator ID is not a string type: \"" + typeof e + "\"");
255
- let n = t.customApiUrl ? t.customApiUrl : "https://api.roomle.com/v2", r = t.overrideTenant || 9, i = w(n, "/configurators/" + e), a = "03-" + window.btoa((/* @__PURE__ */ new Date()).toISOString() + ";anonymous;roomle_portal_v2"), o = new Request(i, {
262
+ let n = t.customApiUrl ? t.customApiUrl : "https://api.roomle.com/v2", r = t.overrideTenant || 9, i = T(n, "/configurators/" + e), a = "03-" + window.btoa((/* @__PURE__ */ new Date()).toISOString() + ";anonymous;roomle_portal_v2"), o = new Request(i, {
256
263
  method: "GET",
257
264
  headers: new Headers({
258
265
  apiKey: "roomle_portal_v2",
@@ -267,7 +274,7 @@ var C = /\/v[23]\/?$/, w = (e, t) => C.test(e) ? e.replace(C, "/v2") + t : e + t
267
274
  cache: "default"
268
275
  }), { configurator: s } = await (await fetch(o)).json();
269
276
  return s;
270
- }, P = "data-rml-interaction-container", F = (e, t, n) => {
277
+ }, F = "data-rml-interaction-container", I = (e, t, n) => {
271
278
  let r = null;
272
279
  Object.defineProperty(e, t, {
273
280
  get() {
@@ -277,28 +284,28 @@ var C = /\/v[23]\/?$/, w = (e, t) => C.test(e) ? e.replace(C, "/v2") + t : e + t
277
284
  e?.mute ? r = e.value : (console.warn("You override Roomle defined behaviour. To disalbe this warning pass in an object with the following properties"), console.warn("{ mute: true, value: () => void }"), r = e);
278
285
  }
279
286
  });
280
- }, I = () => window.innerHeight * .01 + "px", L = (e) => {
281
- e && setTimeout(() => e.style.setProperty(B, I()), 0);
282
- }, R = "rml-styles", z = 450, B = "--rml-full-height", V = {
287
+ }, L = () => window.innerHeight * .01 + "px", R = (e) => {
288
+ e && setTimeout(() => e.style.setProperty(V, L()), 0);
289
+ }, z = "rml-styles", B = 450, V = "--rml-full-height", H = {
283
290
  CONTAINER: "rml-container",
284
291
  FILL: "rml-fill",
285
292
  POSITION: "rml-pos",
286
293
  TRANSITION: "rml-transition",
287
294
  ANDROID_HEIGHT: "rml-android-height",
288
295
  OVERFLOW_HIDDEN: "rml-overflow-hidden"
289
- }, H = /* @__PURE__ */ new Map(), U = class extends x {
296
+ }, U = /* @__PURE__ */ new Map(), W = class extends S {
290
297
  static createPlanner(e, t, n, r = []) {
291
298
  return this._create(e, t, n, r);
292
299
  }
293
300
  static async connect(e, n = []) {
294
- let r = new x();
301
+ let r = new S();
295
302
  r.viewName = e;
296
- let { resolve: i, promise: a } = S(), { resolve: o, promise: s } = S(), c = new t("custom-view-" + e, window, window.parent, ({ message: e, args: t }) => {
303
+ let { resolve: i, promise: a } = C(), { resolve: o, promise: s } = C(), c = new t("custom-view-" + e, window, window.parent, ({ message: e, args: t }) => {
297
304
  switch (e) {
298
- case k.REGISTER_CUSTOM_VIEW_DONE:
305
+ case A.REGISTER_CUSTOM_VIEW_DONE:
299
306
  i();
300
307
  break;
301
- case k.RETURN_METHODS:
308
+ case A.RETURN_METHODS:
302
309
  r.handleSetup(t[0]), o();
303
310
  break;
304
311
  default: if (r.isSetupDone) return r.executeMessage({
@@ -309,7 +316,7 @@ var C = /\/v[23]\/?$/, w = (e, t) => C.test(e) ? e.replace(C, "/v2") + t : e + t
309
316
  });
310
317
  r.setMessageHandler(c);
311
318
  let l = [e];
312
- return c.sendMessage(k.REGISTER_CUSTOM_VIEW, l), await a, c.sendMessage(k.GET_METHODS, l), await s, r.setupPlugins(n, document.body, "custom-view"), await Promise.allSettled(r.pluginsLoaded), r;
319
+ return c.sendMessage(A.REGISTER_CUSTOM_VIEW, l), await a, c.sendMessage(A.GET_METHODS, l), await s, r.setupPlugins(n, document.body, "custom-view"), await Promise.allSettled(r.pluginsLoaded), r;
313
320
  }
314
321
  static createConfigurator(e, t, n, r = []) {
315
322
  return this._create(e, t, n, r);
@@ -323,10 +330,10 @@ var C = /\/v[23]\/?$/, w = (e, t) => C.test(e) ? e.replace(C, "/v2") + t : e + t
323
330
  static async _create(e, t, n, r) {
324
331
  return new Promise(async (i, a) => {
325
332
  try {
326
- let a = d(n), s = m();
327
- v(s);
328
- let c = await N(e, o(s, a));
329
- n = y(c, a);
333
+ let a = f(n), s = h();
334
+ y(s);
335
+ let c = await P(e, o(s, a));
336
+ n = b(c, a);
330
337
  let l = new this(c, t, n, r, i);
331
338
  return await Promise.allSettled(l.pluginsLoaded), l;
332
339
  } catch (e) {
@@ -341,51 +348,51 @@ var C = /\/v[23]\/?$/, w = (e, t) => C.test(e) ? e.replace(C, "/v2") + t : e + t
341
348
  _iframe;
342
349
  constructor(e, n, r, i, a) {
343
350
  if (super(), !e || typeof e.id != "string") throw Error("Please provide a correct configuratorId, you get the correct ID from your Roomle Contact Person");
344
- if (H.has(n)) throw Error("There is already an instance on this DOM element");
345
- if (!document.getElementById(R)) {
351
+ if (U.has(n)) throw Error("There is already an instance on this DOM element");
352
+ if (!document.getElementById(z)) {
346
353
  let e = r.zIndex || 9999999, t = document.createElement("style");
347
- t.type = "text/css", t.id = R;
348
- let n = "transition:all ease-in-out " + z + "ms;", i = ["-webkit-", "-o-"].reduce((e, t) => e += t + n, "") + n, a = I();
354
+ t.type = "text/css", t.id = z;
355
+ let n = "transition:all ease-in-out " + B + "ms;", i = ["-webkit-", "-o-"].reduce((e, t) => e += t + n, "") + n, a = L();
349
356
  t.innerHTML = `
350
- .${V.CONTAINER}{${B}:${a};}
351
- .${V.POSITION}{position:fixed;top:0;left:0;z-index:${e};opacity:0}
352
- .${V.TRANSITION}{${i}}
353
- .${V.FILL}{width:100%;height:100%;opacity:1}
354
- .${V.ANDROID_HEIGHT}{height:calc(var(${B},1vh)*100)}
355
- .${V.OVERFLOW_HIDDEN}{overflow:hidden}
357
+ .${H.CONTAINER}{${V}:${a};}
358
+ .${H.POSITION}{position:fixed;top:0;left:0;z-index:${e};opacity:0}
359
+ .${H.TRANSITION}{${i}}
360
+ .${H.FILL}{width:100%;height:100%;opacity:1}
361
+ .${H.ANDROID_HEIGHT}{height:calc(var(${V},1vh)*100)}
362
+ .${H.OVERFLOW_HIDDEN}{overflow:hidden}
356
363
  `, document.head.appendChild(t);
357
364
  }
358
365
  this._executeMessage = this._executeMessage.bind(this);
359
366
  let o = new t("website", window, null, this._executeMessage);
360
- this.setMessageHandler(o), this._onResize = this._onResize.bind(this), b() && window.addEventListener("resize", this._onResize), this._container = n, this._initData = r, this._configuratorSettings = e;
367
+ this.setMessageHandler(o), this._onResize = this._onResize.bind(this), x() && window.addEventListener("resize", this._onResize), this._container = n, this._initData = r, this._configuratorSettings = e;
361
368
  let s = this._createIframe();
362
- this._onUseFullPage = this._onUseFullPage.bind(this), this._onBackToWebsite = this._onBackToWebsite.bind(this), this._waitForIframe = a, this._container.appendChild(s), this._iframe = s, this.setupPlugins(i, this._iframe), H.set(n, !0);
369
+ this._onUseFullPage = this._onUseFullPage.bind(this), this._onBackToWebsite = this._onBackToWebsite.bind(this), this._waitForIframe = a, this._container.appendChild(s), this._iframe = s, this.setupPlugins(i, this._iframe), U.set(n, !0);
363
370
  }
364
371
  teardown() {
365
- this._container && H.delete(this._container);
372
+ this._container && U.delete(this._container);
366
373
  let e = this._container.querySelector("iframe");
367
374
  e && this._container.removeChild(e), window.removeEventListener("resize", this._onResize);
368
375
  }
369
376
  _createIframe() {
370
377
  let e = document.createElement("iframe"), t = this._configuratorSettings?.url || "https://www.roomle.com/t/cp/";
371
- return this._initData.useLocalRoomle && (t = location.href.replace("embedding.html", "")), location.href.includes("roomle.gitlab.io") && (t = location.href.replace("embedding.html", "index.html")), this._initData.overrideServerUrl && (t = this._initData.overrideServerUrl), e.src = t, e.classList.add(V.CONTAINER), e.classList.add(V.FILL), e;
378
+ return this._initData.useLocalRoomle && (t = location.href.replace("embedding.html", "")), location.href.includes("roomle.gitlab.io") && (t = location.href.replace("embedding.html", "index.html")), this._initData.overrideServerUrl && (t = this._initData.overrideServerUrl), e.src = t, e.classList.add(H.CONTAINER), e.classList.add(H.FILL), e;
372
379
  }
373
380
  _onResize() {
374
- L(this._iframe);
381
+ R(this._iframe);
375
382
  }
376
383
  _onUseFullPage() {
377
- this._iframe.classList.add(V.POSITION), document.documentElement.classList.add(V.OVERFLOW_HIDDEN), window.document.body.classList.add(V.OVERFLOW_HIDDEN), b() && (L(this._iframe), this._iframe.classList.add(V.ANDROID_HEIGHT));
384
+ this._iframe.classList.add(H.POSITION), document.documentElement.classList.add(H.OVERFLOW_HIDDEN), window.document.body.classList.add(H.OVERFLOW_HIDDEN), x() && (R(this._iframe), this._iframe.classList.add(H.ANDROID_HEIGHT));
378
385
  }
379
386
  _onBackToWebsite() {
380
- this._iframe.classList.remove(V.POSITION), this._iframe.classList.remove(V.ANDROID_HEIGHT), document.documentElement.classList.remove(V.OVERFLOW_HIDDEN), window.document.body.classList.remove(V.OVERFLOW_HIDDEN);
387
+ this._iframe.classList.remove(H.POSITION), this._iframe.classList.remove(H.ANDROID_HEIGHT), document.documentElement.classList.remove(H.OVERFLOW_HIDDEN), window.document.body.classList.remove(H.OVERFLOW_HIDDEN);
381
388
  }
382
389
  _executeMessage({ message: e, args: t }, n) {
383
- if (n.source && n.source === this._iframe?.contentWindow) return e === O.REQUEST_BOOT ? this._messageHandler ? (this._messageHandler.setOutgoingMessageBus(n.source), Promise.resolve({ result: this._initData })) : (console.error("MessageHandler not set"), Promise.resolve({ error: "MessageHandler not set" })) : e === O.SETUP ? (this.handleSetup(t[0]), F(this.ui.callbacks, "onUseFullPage", this._onUseFullPage), F(this.ui.callbacks, "onBackToWebsite", this._onBackToWebsite), this._waitForIframe(this), setTimeout(() => {
390
+ if (n.source && n.source === this._iframe?.contentWindow) return e === k.REQUEST_BOOT ? this._messageHandler ? (this._messageHandler.setOutgoingMessageBus(n.source), Promise.resolve({ result: this._initData })) : (console.error("MessageHandler not set"), Promise.resolve({ error: "MessageHandler not set" })) : e === k.SETUP ? (this.handleSetup(t[0]), I(this.ui.callbacks, "onUseFullPage", this._onUseFullPage), I(this.ui.callbacks, "onBackToWebsite", this._onBackToWebsite), this._waitForIframe(this), setTimeout(() => {
384
391
  if (!this._messageHandler) {
385
392
  console.error("MessageHandler not set");
386
393
  return;
387
394
  }
388
- this._messageHandler.sendMessage(O.WEBSITE_READY);
395
+ this._messageHandler.sendMessage(k.WEBSITE_READY);
389
396
  }, 0), Promise.resolve({ result: null })) : this.executeMessage({
390
397
  message: e,
391
398
  args: t
@@ -393,4 +400,4 @@ var C = /\/v[23]\/?$/, w = (e, t) => C.test(e) ? e.replace(C, "/v2") + t : e + t
393
400
  }
394
401
  };
395
402
  //#endregion
396
- export { O as HANDSHAKE_MESSAGES, P as INTERACTION_CONTAINER_SELECTOR, T as NAMESPACE, E as NAMESPACE_SEPARATOR, D as SDK_CALLBACK, k as WELL_KNOWN_MESSAGES, U as default, N as getConfiguratorSettings, M as getMethodNames, j as isExposable };
403
+ export { k as HANDSHAKE_MESSAGES, F as INTERACTION_CONTAINER_SELECTOR, E as NAMESPACE, D as NAMESPACE_SEPARATOR, O as SDK_CALLBACK, A as WELL_KNOWN_MESSAGES, W as default, P as getConfiguratorSettings, N as getMethodNames, M as isExposable };
@@ -102,6 +102,13 @@ var t = class {
102
102
  openCloseAnimation: !0,
103
103
  localExport3d: !1
104
104
  },
105
+ imageGenConfig: {
106
+ staging: !1,
107
+ theme: "scandinavian",
108
+ density: "balanced",
109
+ light: "soft",
110
+ stage: "alpha"
111
+ },
105
112
  configuratorZoom: !1,
106
113
  rotationSnapDegrees: 10,
107
114
  interactionsCollapsed: !1