@hai3/studio 0.3.0-alpha.2 → 0.4.0-alpha.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.
- package/dist/i18n/ar.json +2 -1
- package/dist/i18n/bn.json +2 -1
- package/dist/i18n/cs.json +2 -1
- package/dist/i18n/da.json +2 -1
- package/dist/i18n/de.json +2 -1
- package/dist/i18n/el.json +2 -1
- package/dist/i18n/en.json +2 -1
- package/dist/i18n/es.json +2 -1
- package/dist/i18n/fa.json +2 -1
- package/dist/i18n/fi.json +2 -1
- package/dist/i18n/fr.json +2 -1
- package/dist/i18n/he.json +2 -1
- package/dist/i18n/hi.json +2 -1
- package/dist/i18n/hu.json +2 -1
- package/dist/i18n/id.json +2 -1
- package/dist/i18n/it.json +2 -1
- package/dist/i18n/ja.json +2 -1
- package/dist/i18n/ko.json +2 -1
- package/dist/i18n/ms.json +2 -1
- package/dist/i18n/nl.json +2 -1
- package/dist/i18n/no.json +2 -1
- package/dist/i18n/pl.json +2 -1
- package/dist/i18n/pt.json +2 -1
- package/dist/i18n/ro.json +2 -1
- package/dist/i18n/ru.json +2 -1
- package/dist/i18n/sv.json +2 -1
- package/dist/i18n/sw.json +2 -1
- package/dist/i18n/ta.json +2 -1
- package/dist/i18n/th.json +2 -1
- package/dist/i18n/tl.json +2 -1
- package/dist/i18n/tr.json +2 -1
- package/dist/i18n/uk.json +2 -1
- package/dist/i18n/ur.json +2 -1
- package/dist/i18n/vi.json +2 -1
- package/dist/i18n/zh-TW.json +2 -1
- package/dist/i18n/zh.json +2 -1
- package/dist/index.cjs +242 -140
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +225 -123
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/en.json","../src/i18n/ar.json","../src/i18n/bn.json","../src/i18n/cs.json","../src/i18n/da.json","../src/i18n/de.json","../src/i18n/el.json","../src/i18n/es.json","../src/i18n/fa.json","../src/i18n/fi.json","../src/i18n/fr.json","../src/i18n/he.json","../src/i18n/hi.json","../src/i18n/hu.json","../src/i18n/id.json","../src/i18n/it.json","../src/i18n/ja.json","../src/i18n/ko.json","../src/i18n/ms.json","../src/i18n/nl.json","../src/i18n/no.json","../src/i18n/pl.json","../src/i18n/pt.json","../src/i18n/ro.json","../src/i18n/ru.json","../src/i18n/sv.json","../src/i18n/sw.json","../src/i18n/ta.json","../src/i18n/th.json","../src/i18n/tl.json","../src/i18n/tr.json","../src/i18n/uk.json","../src/i18n/ur.json","../src/i18n/vi.json","../src/i18n/zh-TW.json","../src/i18n/zh.json","../src/utils/persistence.ts","../src/types.ts","../src/events/studioEvents.ts","../src/effects/persistenceEffects.ts","../src/StudioProvider.tsx","../src/hooks/useDraggable.ts","../src/hooks/useResizable.ts","../src/sections/ThemeSelector.tsx","../src/sections/ScreensetSelector.tsx","../src/sections/LanguageSelector.tsx","../src/sections/ApiModeToggle.tsx","../src/sections/ControlPanel.tsx","../src/StudioPanel.tsx","../src/hooks/useKeyboardShortcut.ts","../src/uikit/composite/GlassmorphicButton.tsx","../src/uikit/icons/StudioIcon.tsx","../src/CollapsedButton.tsx","../src/StudioOverlay.tsx"],"names":["exports","eventBus","I18nRegistry","Language","i18nRegistry","createContext","useContext","useState","useEffect","useCallback","jsx","clamp","useRef","useTheme","useTranslation","upperFirst","jsxs","DropdownMenu","DropdownMenuTrigger","DropdownButton","ButtonVariant","DropdownMenuContent","DropdownMenuItem","DropdownMenuSub","DropdownMenuSubTrigger","DropdownMenuSubContent","LanguageDisplayMode","getLanguageMetadata","Button","SUPPORTED_LANGUAGES","TextDirection","useAppSelector","toggleMockMode","Switch","ScreensetCategory","screensetRegistry","useNavigation","React","Fragment","Card","ButtonSize"],"mappings":"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","file":"index.cjs","sourcesContent":["{\n \"title\": \"HAI3 Studio\",\n \"aria\": {\n \"openButton\": \"Open Studio (Shift+`) or drag to move\",\n \"collapseButton\": \"Collapse Studio panel\",\n \"resizeHandle\": \"Resize Studio panel\"\n },\n \"controls\": {\n \"heading\": \"Development Controls\",\n \"screenset\": \"Screenset:\",\n \"theme\": \"Theme:\",\n \"language\": \"Language:\",\n \"mockApi\": \"Mock API\"\n }\n}\n","{\n \"title\": \"أدوات تطوير HAI3\",\n \"aria\": {\n \"openButton\": \"فتح أدوات التطوير (Shift+`) أو السحب للتحريك\",\n \"collapseButton\": \"طي لوحة أدوات التطوير\",\n \"resizeHandle\": \"تغيير حجم لوحة الأدوات\"\n },\n \"controls\": {\n \"heading\": \"عناصر التحكم في التطوير\",\n \"screenset\": \"مجموعة الشاشات:\",\n \"theme\": \"السمة:\",\n \"language\": \"اللغة:\",\n \"mockApi\": \"واجهة برمجية وهمية\"\n }\n}\n","{\n \"title\": \"HAI3 ডেভেলপমেন্ট টুলস\",\n \"aria\": {\n \"openButton\": \"ডেভেলপমেন্ট টুলস খুলুন (Shift+`) বা সরানোর জন্য টানুন\",\n \"collapseButton\": \"ডেভেলপমেন্ট টুলস প্যানেল সংকুচিত করুন\",\n \"resizeHandle\": \"টুলস প্যানেলের আকার পরিবর্তন করুন\"\n },\n \"controls\": {\n \"heading\": \"উন্নয়ন নিয়ন্ত্রণ\",\n \"screenset\": \"স্ক্রিনসেট:\",\n \"theme\": \"থিম:\",\n \"language\": \"ভাষা:\",\n \"mockApi\": \"মক API\"\n }\n}\n","{\n \"title\": \"Vývojářské nástroje HAI3\",\n \"aria\": {\n \"openButton\": \"Otevřít vývojářské nástroje (Shift+`) nebo přetáhnout pro přesun\",\n \"collapseButton\": \"Sbalit panel vývojářských nástrojů\",\n \"resizeHandle\": \"Změnit velikost panelu nástrojů\"\n },\n \"controls\": {\n \"heading\": \"Vývojářské ovládací prvky\",\n \"screenset\": \"Sada obrazovek:\",\n \"theme\": \"Motiv:\",\n \"language\": \"Jazyk:\",\n \"mockApi\": \"Simulované API\"\n }\n}\n","{\n \"title\": \"HAI3 Udviklingsværktøjer\",\n \"aria\": {\n \"openButton\": \"Åbn Udviklingsværktøjer (Shift+`) eller træk for at flytte\",\n \"collapseButton\": \"Skjul udviklingsværktøjspanelet\",\n \"resizeHandle\": \"Ændre størrelse på værktøjspanelet\"\n },\n \"controls\": {\n \"heading\": \"Udviklingskontrolelementer\",\n \"screenset\": \"Skærmsæt:\",\n \"theme\": \"Tema:\",\n \"language\": \"Sprog:\",\n \"mockApi\": \"Mock-API\"\n }\n}\n","{\n \"title\": \"HAI3 Entwicklerwerkzeuge\",\n \"aria\": {\n \"openButton\": \"Entwicklerwerkzeuge öffnen (Shift+`) oder ziehen zum Verschieben\",\n \"collapseButton\": \"Entwicklerwerkzeuge-Panel einklappen\",\n \"resizeHandle\": \"Größe des Werkzeug-Panels ändern\"\n },\n \"controls\": {\n \"heading\": \"Entwicklungssteuerung\",\n \"screenset\": \"Bildschirmset:\",\n \"theme\": \"Design:\",\n \"language\": \"Sprache:\",\n \"mockApi\": \"Mock-API\"\n }\n}\n","{\n \"title\": \"Εργαλεία Ανάπτυξης HAI3\",\n \"aria\": {\n \"openButton\": \"Άνοιγμα Εργαλείων Ανάπτυξης (Shift+`) ή σύρετε για μετακίνηση\",\n \"collapseButton\": \"Σύμπτυξη πίνακα εργαλείων ανάπτυξης\",\n \"resizeHandle\": \"Αλλαγή μεγέθους πίνακα εργαλείων\"\n },\n \"controls\": {\n \"heading\": \"Στοιχεία Ελέγχου Ανάπτυξης\",\n \"screenset\": \"Σύνολο Οθονών:\",\n \"theme\": \"Θέμα:\",\n \"language\": \"Γλώσσα:\",\n \"mockApi\": \"Mock API\"\n }\n}\n","{\n \"title\": \"Herramientas de Desarrollo HAI3\",\n \"aria\": {\n \"openButton\": \"Abrir Herramientas de Desarrollo (Shift+`) o arrastrar para mover\",\n \"collapseButton\": \"Contraer panel de herramientas de desarrollo\",\n \"resizeHandle\": \"Cambiar tamaño del panel de herramientas\"\n },\n \"controls\": {\n \"heading\": \"Controles de Desarrollo\",\n \"screenset\": \"Conjunto de Pantallas:\",\n \"theme\": \"Tema:\",\n \"language\": \"Idioma:\",\n \"mockApi\": \"API Simulada\"\n }\n}\n","{\n \"title\": \"ابزارهای توسعه HAI3\",\n \"aria\": {\n \"openButton\": \"باز کردن ابزارهای توسعه (Shift+`) یا کشیدن برای جابجایی\",\n \"collapseButton\": \"جمع کردن پنل ابزارهای توسعه\",\n \"resizeHandle\": \"تغییر اندازه پنل ابزارها\"\n },\n \"controls\": {\n \"heading\": \"کنترلهای توسعه\",\n \"screenset\": \"مجموعه صفحهنمایش:\",\n \"theme\": \"پوسته:\",\n \"language\": \"زبان:\",\n \"mockApi\": \"API ساختگی\"\n }\n}\n","{\n \"title\": \"HAI3 Kehitystyökalut\",\n \"aria\": {\n \"openButton\": \"Avaa Kehitystyökalut (Shift+`) tai vedä siirtääksesi\",\n \"collapseButton\": \"Tiivistä kehitystyökalupaneeli\",\n \"resizeHandle\": \"Muuta työkalupaneelin kokoa\"\n },\n \"controls\": {\n \"heading\": \"Kehitysohjaimet\",\n \"screenset\": \"Näyttösarja:\",\n \"theme\": \"Teema:\",\n \"language\": \"Kieli:\",\n \"mockApi\": \"Mock-API\"\n }\n}\n","{\n \"title\": \"Outils de Développement HAI3\",\n \"aria\": {\n \"openButton\": \"Ouvrir les outils de développement (Shift+`) ou glisser pour déplacer\",\n \"collapseButton\": \"Réduire le panneau des outils de développement\",\n \"resizeHandle\": \"Redimensionner le panneau des outils\"\n },\n \"controls\": {\n \"heading\": \"Contrôles de Développement\",\n \"screenset\": \"Ensemble d'Écrans:\",\n \"theme\": \"Thème:\",\n \"language\": \"Langue:\",\n \"mockApi\": \"API Simulée\"\n }\n}\n","{\n \"title\": \"כלי פיתוח HAI3\",\n \"aria\": {\n \"openButton\": \"פתח כלי פיתוח (Shift+`) או גרור להזזה\",\n \"collapseButton\": \"כווץ חלונית כלי פיתוח\",\n \"resizeHandle\": \"שנה גודל חלונית כלים\"\n },\n \"controls\": {\n \"heading\": \"בקרות פיתוח\",\n \"screenset\": \"ערכת מסכים:\",\n \"theme\": \"ערכת נושא:\",\n \"language\": \"שפה:\",\n \"mockApi\": \"API מדומה\"\n }\n}\n","{\n \"title\": \"HAI3 डेवलपमेंट टूल्स\",\n \"aria\": {\n \"openButton\": \"डेवलपमेंट टूल्स खोलें (Shift+`) या स्थानांतरित करने के लिए खींचें\",\n \"collapseButton\": \"डेवलपमेंट टूल्स पैनल को संक्षिप्त करें\",\n \"resizeHandle\": \"टूल्स पैनल का आकार बदलें\"\n },\n \"controls\": {\n \"heading\": \"विकास नियंत्रण\",\n \"screenset\": \"स्क्रीनसेट:\",\n \"theme\": \"थीम:\",\n \"language\": \"भाषा:\",\n \"mockApi\": \"मॉक API\"\n }\n}\n","{\n \"title\": \"HAI3 Fejlesztői Eszközök\",\n \"aria\": {\n \"openButton\": \"Fejlesztői Eszközök megnyitása (Shift+`) vagy húzza az áthelyezéshez\",\n \"collapseButton\": \"Fejlesztői eszközök panel összecsukása\",\n \"resizeHandle\": \"Eszközpanel átméretezése\"\n },\n \"controls\": {\n \"heading\": \"Fejlesztési Vezérlők\",\n \"screenset\": \"Képernyőkészlet:\",\n \"theme\": \"Téma:\",\n \"language\": \"Nyelv:\",\n \"mockApi\": \"Mock API\"\n }\n}\n","{\n \"title\": \"Alat Pengembangan HAI3\",\n \"aria\": {\n \"openButton\": \"Buka Alat Pengembangan (Shift+`) atau seret untuk memindahkan\",\n \"collapseButton\": \"Ciutkan panel alat pengembangan\",\n \"resizeHandle\": \"Ubah ukuran panel alat\"\n },\n \"controls\": {\n \"heading\": \"Kontrol Pengembangan\",\n \"screenset\": \"Set Layar:\",\n \"theme\": \"Tema:\",\n \"language\": \"Bahasa:\",\n \"mockApi\": \"API Tiruan\"\n }\n}\n","{\n \"title\": \"Strumenti di Sviluppo HAI3\",\n \"aria\": {\n \"openButton\": \"Apri Strumenti di Sviluppo (Shift+`) o trascina per spostare\",\n \"collapseButton\": \"Comprimi pannello strumenti di sviluppo\",\n \"resizeHandle\": \"Ridimensiona pannello strumenti\"\n },\n \"controls\": {\n \"heading\": \"Controlli di Sviluppo\",\n \"screenset\": \"Set di Schermate:\",\n \"theme\": \"Tema:\",\n \"language\": \"Lingua:\",\n \"mockApi\": \"API Simulata\"\n }\n}\n","{\n \"title\": \"HAI3 開発ツール\",\n \"aria\": {\n \"openButton\": \"開発ツールを開く (Shift+`) またはドラッグして移動\",\n \"collapseButton\": \"開発ツールパネルを折りたたむ\",\n \"resizeHandle\": \"ツールパネルのサイズを変更\"\n },\n \"controls\": {\n \"heading\": \"開発コントロール\",\n \"screenset\": \"スクリーンセット:\",\n \"theme\": \"テーマ:\",\n \"language\": \"言語:\",\n \"mockApi\": \"モック API\"\n }\n}\n","{\n \"title\": \"HAI3 개발 도구\",\n \"aria\": {\n \"openButton\": \"개발 도구 열기 (Shift+`) 또는 드래그하여 이동\",\n \"collapseButton\": \"개발 도구 패널 접기\",\n \"resizeHandle\": \"도구 패널 크기 조정\"\n },\n \"controls\": {\n \"heading\": \"개발 제어\",\n \"screenset\": \"화면 세트:\",\n \"theme\": \"테마:\",\n \"language\": \"언어:\",\n \"mockApi\": \"모의 API\"\n }\n}\n","{\n \"title\": \"Alat Pembangun HAI3\",\n \"aria\": {\n \"openButton\": \"Buka Alat Pembangun (Shift+`) atau seret untuk alih\",\n \"collapseButton\": \"Runtuhkan panel alat pembangun\",\n \"resizeHandle\": \"Ubah saiz panel alat\"\n },\n \"controls\": {\n \"heading\": \"Kawalan Pembangunan\",\n \"screenset\": \"Set Skrin:\",\n \"theme\": \"Tema:\",\n \"language\": \"Bahasa:\",\n \"mockApi\": \"API Palsu\"\n }\n}\n","{\n \"title\": \"HAI3 Ontwikkeltools\",\n \"aria\": {\n \"openButton\": \"Open Ontwikkeltools (Shift+`) of sleep om te verplaatsen\",\n \"collapseButton\": \"Ontwikkeltools paneel inklappen\",\n \"resizeHandle\": \"Formaat van tools paneel wijzigen\"\n },\n \"controls\": {\n \"heading\": \"Ontwikkelingsbesturing\",\n \"screenset\": \"Schermset:\",\n \"theme\": \"Thema:\",\n \"language\": \"Taal:\",\n \"mockApi\": \"Nep-API\"\n }\n}\n","{\n \"title\": \"HAI3 Utviklingsverktøy\",\n \"aria\": {\n \"openButton\": \"Åpne Utviklingsverktøy (Shift+`) eller dra for å flytte\",\n \"collapseButton\": \"Skjul utviklingsverktøypanelet\",\n \"resizeHandle\": \"Endre størrelse på verktøypanelet\"\n },\n \"controls\": {\n \"heading\": \"Utviklingskontroller\",\n \"screenset\": \"Skjermsett:\",\n \"theme\": \"Tema:\",\n \"language\": \"Språk:\",\n \"mockApi\": \"Mock-API\"\n }\n}\n","{\n \"title\": \"Narzędzia programistyczne HAI3\",\n \"aria\": {\n \"openButton\": \"Otwórz narzędzia programistyczne (Shift+`) lub przeciągnij, aby przenieść\",\n \"collapseButton\": \"Zwiń panel narzędzi programistycznych\",\n \"resizeHandle\": \"Zmień rozmiar panelu narzędzi\"\n },\n \"controls\": {\n \"heading\": \"Kontrolki programistyczne\",\n \"screenset\": \"Zestaw ekranów:\",\n \"theme\": \"Motyw:\",\n \"language\": \"Język:\",\n \"mockApi\": \"Fikcyjne API\"\n }\n}\n","{\n \"title\": \"Ferramentas de Desenvolvimento HAI3\",\n \"aria\": {\n \"openButton\": \"Abrir Ferramentas de Desenvolvimento (Shift+`) ou arrastar para mover\",\n \"collapseButton\": \"Recolher painel de ferramentas de desenvolvimento\",\n \"resizeHandle\": \"Redimensionar painel de ferramentas\"\n },\n \"controls\": {\n \"heading\": \"Controles de Desenvolvimento\",\n \"screenset\": \"Conjunto de Telas:\",\n \"theme\": \"Tema:\",\n \"language\": \"Idioma:\",\n \"mockApi\": \"API Simulada\"\n }\n}\n","{\n \"title\": \"Instrumente de Dezvoltare HAI3\",\n \"aria\": {\n \"openButton\": \"Deschide Instrumente de Dezvoltare (Shift+`) sau trage pentru a muta\",\n \"collapseButton\": \"Restrânge panoul instrumentelor de dezvoltare\",\n \"resizeHandle\": \"Redimensionează panoul instrumentelor\"\n },\n \"controls\": {\n \"heading\": \"Controale de Dezvoltare\",\n \"screenset\": \"Set de Ecrane:\",\n \"theme\": \"Temă:\",\n \"language\": \"Limbă:\",\n \"mockApi\": \"API Simulat\"\n }\n}\n","{\n \"title\": \"Инструменты разработки HAI3\",\n \"aria\": {\n \"openButton\": \"Открыть инструменты разработки (Shift+`) или перетащить для перемещения\",\n \"collapseButton\": \"Свернуть панель инструментов разработки\",\n \"resizeHandle\": \"Изменить размер панели инструментов\"\n },\n \"controls\": {\n \"heading\": \"Элементы управления разработкой\",\n \"screenset\": \"Набор экранов:\",\n \"theme\": \"Тема:\",\n \"language\": \"Язык:\",\n \"mockApi\": \"Фиктивный API\"\n }\n}\n","{\n \"title\": \"HAI3 Utvecklingsverktyg\",\n \"aria\": {\n \"openButton\": \"Öppna Utvecklingsverktyg (Shift+`) eller dra för att flytta\",\n \"collapseButton\": \"Fäll ihop utvecklingsverktygspanelen\",\n \"resizeHandle\": \"Ändra storlek på verktygspanelen\"\n },\n \"controls\": {\n \"heading\": \"Utvecklingskontroller\",\n \"screenset\": \"Skärmuppsättning:\",\n \"theme\": \"Tema:\",\n \"language\": \"Språk:\",\n \"mockApi\": \"Mock-API\"\n }\n}\n","{\n \"title\": \"Zana za Utengenezaji wa HAI3\",\n \"aria\": {\n \"openButton\": \"Fungua Zana za Utengenezaji (Shift+`) au buruta ili kuhamisha\",\n \"collapseButton\": \"Kunja paneli ya zana za utengenezaji\",\n \"resizeHandle\": \"Badilisha ukubwa wa paneli ya zana\"\n },\n \"controls\": {\n \"heading\": \"Vidhibiti vya Maendeleo\",\n \"screenset\": \"Seti ya Skrini:\",\n \"theme\": \"Mandhari:\",\n \"language\": \"Lugha:\",\n \"mockApi\": \"API ya Majaribio\"\n }\n}\n","{\n \"title\": \"HAI3 மேம்பாட்டு கருவிகள்\",\n \"aria\": {\n \"openButton\": \"மேம்பாட்டு கருவிகளைத் திற (Shift+`) அல்லது நகர்த்த இழுக்கவும்\",\n \"collapseButton\": \"மேம்பாட்டு கருவிகள் பலகத்தை மடிக்கவும்\",\n \"resizeHandle\": \"கருவிகள் பலகத்தின் அளவை மாற்றவும்\"\n },\n \"controls\": {\n \"heading\": \"மேம்பாட்டு கட்டுப்பாடுகள்\",\n \"screenset\": \"திரைத் தொகுப்பு:\",\n \"theme\": \"தீம்:\",\n \"language\": \"மொழி:\",\n \"mockApi\": \"போலி API\"\n }\n}\n","{\n \"title\": \"เครื่องมือพัฒนา HAI3\",\n \"aria\": {\n \"openButton\": \"เปิดเครื่องมือพัฒนา (Shift+`) หรือลากเพื่อย้าย\",\n \"collapseButton\": \"ยุบแผงเครื่องมือพัฒนา\",\n \"resizeHandle\": \"ปรับขนาดแผงเครื่องมือ\"\n },\n \"controls\": {\n \"heading\": \"ควบคุมการพัฒนา\",\n \"screenset\": \"ชุดหน้าจอ:\",\n \"theme\": \"ธีม:\",\n \"language\": \"ภาษา:\",\n \"mockApi\": \"API จำลอง\"\n }\n}\n","{\n \"title\": \"Mga Kasangkapan sa Pag-develop ng HAI3\",\n \"aria\": {\n \"openButton\": \"Buksan ang Mga Kasangkapan sa Pag-develop (Shift+`) o i-drag upang ilipat\",\n \"collapseButton\": \"I-collapse ang panel ng mga kasangkapan sa pag-develop\",\n \"resizeHandle\": \"Baguhin ang laki ng panel ng mga kasangkapan\"\n },\n \"controls\": {\n \"heading\": \"Mga Kontrol sa Pag-unlad\",\n \"screenset\": \"Hanay ng Screen:\",\n \"theme\": \"Tema:\",\n \"language\": \"Wika:\",\n \"mockApi\": \"Mock API\"\n }\n}\n","{\n \"title\": \"HAI3 Geliştirici Araçları\",\n \"aria\": {\n \"openButton\": \"Geliştirici Araçlarını Aç (Shift+`) veya taşımak için sürükle\",\n \"collapseButton\": \"Geliştirici araçları panelini daralt\",\n \"resizeHandle\": \"Araç panelini yeniden boyutlandır\"\n },\n \"controls\": {\n \"heading\": \"Geliştirme Kontrolleri\",\n \"screenset\": \"Ekran Seti:\",\n \"theme\": \"Tema:\",\n \"language\": \"Dil:\",\n \"mockApi\": \"Sahte API\"\n }\n}\n","{\n \"title\": \"Інструменти розробки HAI3\",\n \"aria\": {\n \"openButton\": \"Відкрити інструменти розробки (Shift+`) або перетягнути для переміщення\",\n \"collapseButton\": \"Згорнути панель інструментів розробки\",\n \"resizeHandle\": \"Змінити розмір панелі інструментів\"\n },\n \"controls\": {\n \"heading\": \"Елементи керування розробкою\",\n \"screenset\": \"Набір екранів:\",\n \"theme\": \"Тема:\",\n \"language\": \"Мова:\",\n \"mockApi\": \"Фіктивний API\"\n }\n}\n","{\n \"title\": \"HAI3 ڈویلپمنٹ ٹولز\",\n \"aria\": {\n \"openButton\": \"ڈویلپمنٹ ٹولز کھولیں (Shift+`) یا منتقل کرنے کے لیے گھسیٹیں\",\n \"collapseButton\": \"ڈویلپمنٹ ٹولز پینل کو سکیڑیں\",\n \"resizeHandle\": \"ٹولز پینل کا سائز تبدیل کریں\"\n },\n \"controls\": {\n \"heading\": \"ڈویلپمنٹ کنٹرولز\",\n \"screenset\": \"اسکرین سیٹ:\",\n \"theme\": \"تھیم:\",\n \"language\": \"زبان:\",\n \"mockApi\": \"فرضی API\"\n }\n}\n","{\n \"title\": \"Công cụ Phát triển HAI3\",\n \"aria\": {\n \"openButton\": \"Mở Công cụ Phát triển (Shift+`) hoặc kéo để di chuyển\",\n \"collapseButton\": \"Thu gọn bảng công cụ phát triển\",\n \"resizeHandle\": \"Thay đổi kích thước bảng công cụ\"\n },\n \"controls\": {\n \"heading\": \"Điều khiển Phát triển\",\n \"screenset\": \"Bộ Màn hình:\",\n \"theme\": \"Chủ đề:\",\n \"language\": \"Ngôn ngữ:\",\n \"mockApi\": \"API Giả lập\"\n }\n}\n","{\n \"title\": \"HAI3 開發工具\",\n \"aria\": {\n \"openButton\": \"開啟開發工具 (Shift+`) 或拖曳移動\",\n \"collapseButton\": \"收合開發工具面板\",\n \"resizeHandle\": \"調整工具面板大小\"\n },\n \"controls\": {\n \"heading\": \"開發控制項\",\n \"screenset\": \"螢幕集:\",\n \"theme\": \"主題:\",\n \"language\": \"語言:\",\n \"mockApi\": \"模擬 API\"\n }\n}\n","{\n \"title\": \"HAI3 开发工具\",\n \"aria\": {\n \"openButton\": \"打开开发工具 (Shift+`) 或拖动移动\",\n \"collapseButton\": \"折叠开发工具面板\",\n \"resizeHandle\": \"调整工具面板大小\"\n },\n \"controls\": {\n \"heading\": \"开发控制\",\n \"screenset\": \"屏幕集:\",\n \"theme\": \"主题:\",\n \"language\": \"语言:\",\n \"mockApi\": \"模拟 API\"\n }\n}\n","/**\n * Utility functions for persisting Studio state to localStorage\n */\n\n/**\n * Save a value to localStorage with a given key\n * Handles errors gracefully (e.g., quota exceeded, localStorage disabled)\n */\nexport const saveStudioState = <T>(key: string, value: T): void => {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch (e) {\n console.warn(`[Studio] Failed to save state for ${key}:`, e);\n }\n};\n\n/**\n * Load a value from localStorage with a given key\n * Returns defaultValue if key doesn't exist or on error\n */\nexport const loadStudioState = <T>(key: string, defaultValue: T): T => {\n try {\n const item = localStorage.getItem(key);\n return item ? JSON.parse(item) : defaultValue;\n } catch (e) {\n console.warn(`[Studio] Failed to load state for ${key}:`, e);\n return defaultValue;\n }\n};\n","/**\n * Position coordinates for the Studio panel\n */\nexport interface Position {\n x: number;\n y: number;\n}\n\n/**\n * Size dimensions for the Studio panel\n */\nexport interface Size {\n width: number;\n height: number;\n}\n\n/**\n * Studio panel state\n */\nexport interface StudioState {\n collapsed: boolean;\n position: Position;\n size: Size;\n}\n\n/**\n * Constants for panel constraints\n */\nexport const PANEL_CONSTRAINTS = {\n MIN_WIDTH: 320,\n MIN_HEIGHT: 400,\n MAX_WIDTH: 600,\n MAX_HEIGHT: 800,\n DEFAULT_WIDTH: 400,\n DEFAULT_HEIGHT: 500,\n} as const;\n\n/**\n * Collapsed button size (circular)\n */\nexport const BUTTON_SIZE = {\n width: 48,\n height: 48,\n} as const;\n\n/**\n * LocalStorage key prefix for Studio\n */\nexport const STORAGE_PREFIX = 'hai3:studio:' as const;\n\n/**\n * LocalStorage keys (composable with shared prefix)\n */\nexport const STORAGE_KEYS = {\n POSITION: `${STORAGE_PREFIX}position`,\n SIZE: `${STORAGE_PREFIX}size`,\n COLLAPSED: `${STORAGE_PREFIX}collapsed`,\n BUTTON_POSITION: `${STORAGE_PREFIX}buttonPosition`,\n} as const;\n","import type { Position, Size } from '../types';\n\n/**\n * Studio UI Event Payloads\n * These events track changes to Studio UI state (position, size, visibility)\n */\n\nexport interface PositionChangedPayload {\n position: Position;\n}\n\nexport interface SizeChangedPayload {\n size: Size;\n}\n\nexport interface ButtonPositionChangedPayload {\n position: Position;\n}\n\n/**\n * Studio Event Names\n * Namespace: studio/\n */\nexport const StudioEvents = {\n PositionChanged: 'studio/positionChanged',\n SizeChanged: 'studio/sizeChanged',\n ButtonPositionChanged: 'studio/buttonPositionChanged',\n} as const;\n\n/**\n * Module Augmentation\n * Extend EventPayloadMap from @hai3/state for type safety\n */\ndeclare module '@hai3/state' {\n interface EventPayloadMap {\n 'studio/positionChanged': PositionChangedPayload;\n 'studio/sizeChanged': SizeChangedPayload;\n 'studio/buttonPositionChanged': ButtonPositionChangedPayload;\n }\n}\n","import { eventBus } from '@hai3/react';\nimport { StudioEvents } from '../events/studioEvents';\nimport { saveStudioState } from '../utils/persistence';\nimport { STORAGE_KEYS } from '../types';\n\n/**\n * Persistence Effects\n * Listen to Studio UI events and update localStorage\n * Treats localStorage as a \"slice\" for Studio UI state\n */\n\n/**\n * Initialize all persistence effects\n * Call this once when Studio mounts\n */\nexport const initPersistenceEffects = (): (() => void) => {\n // Position changed listener\n const positionSubscription = eventBus.on(\n StudioEvents.PositionChanged,\n ({ position }) => {\n saveStudioState(STORAGE_KEYS.POSITION, position);\n }\n );\n\n // Size changed listener\n const sizeSubscription = eventBus.on(\n StudioEvents.SizeChanged,\n ({ size }) => {\n saveStudioState(STORAGE_KEYS.SIZE, size);\n }\n );\n\n // Button position changed listener\n const buttonPositionSubscription = eventBus.on(\n StudioEvents.ButtonPositionChanged,\n ({ position }) => {\n saveStudioState(STORAGE_KEYS.BUTTON_POSITION, position);\n }\n );\n\n // Return cleanup function to unsubscribe all listeners\n return () => {\n positionSubscription.unsubscribe();\n sizeSubscription.unsubscribe();\n buttonPositionSubscription.unsubscribe();\n };\n};\n","import React, { createContext, useContext, useState, useCallback, useEffect, ReactNode } from 'react';\nimport { I18nRegistry, Language, i18nRegistry } from '@hai3/react';\nimport { saveStudioState, loadStudioState } from './utils/persistence';\nimport { STORAGE_KEYS } from './types';\nimport { initPersistenceEffects } from './effects/persistenceEffects';\n\n/**\n * Studio Translation Loader\n * Registered on module import to ensure translations are available before components render\n */\nconst studioTranslations = I18nRegistry.createLoader({\n [Language.English]: () => import('./i18n/en.json'),\n [Language.Arabic]: () => import('./i18n/ar.json'),\n [Language.Bengali]: () => import('./i18n/bn.json'),\n [Language.Czech]: () => import('./i18n/cs.json'),\n [Language.Danish]: () => import('./i18n/da.json'),\n [Language.German]: () => import('./i18n/de.json'),\n [Language.Greek]: () => import('./i18n/el.json'),\n [Language.Spanish]: () => import('./i18n/es.json'),\n [Language.Persian]: () => import('./i18n/fa.json'),\n [Language.Finnish]: () => import('./i18n/fi.json'),\n [Language.French]: () => import('./i18n/fr.json'),\n [Language.Hebrew]: () => import('./i18n/he.json'),\n [Language.Hindi]: () => import('./i18n/hi.json'),\n [Language.Hungarian]: () => import('./i18n/hu.json'),\n [Language.Indonesian]: () => import('./i18n/id.json'),\n [Language.Italian]: () => import('./i18n/it.json'),\n [Language.Japanese]: () => import('./i18n/ja.json'),\n [Language.Korean]: () => import('./i18n/ko.json'),\n [Language.Malay]: () => import('./i18n/ms.json'),\n [Language.Dutch]: () => import('./i18n/nl.json'),\n [Language.Norwegian]: () => import('./i18n/no.json'),\n [Language.Polish]: () => import('./i18n/pl.json'),\n [Language.Portuguese]: () => import('./i18n/pt.json'),\n [Language.Romanian]: () => import('./i18n/ro.json'),\n [Language.Russian]: () => import('./i18n/ru.json'),\n [Language.Swedish]: () => import('./i18n/sv.json'),\n [Language.Swahili]: () => import('./i18n/sw.json'),\n [Language.Tamil]: () => import('./i18n/ta.json'),\n [Language.Thai]: () => import('./i18n/th.json'),\n [Language.Tagalog]: () => import('./i18n/tl.json'),\n [Language.Turkish]: () => import('./i18n/tr.json'),\n [Language.Ukrainian]: () => import('./i18n/uk.json'),\n [Language.Urdu]: () => import('./i18n/ur.json'),\n [Language.Vietnamese]: () => import('./i18n/vi.json'),\n [Language.ChineseTraditional]: () => import('./i18n/zh-TW.json'),\n [Language.ChineseSimplified]: () => import('./i18n/zh.json'),\n});\n\n// Register translations immediately on module import\ni18nRegistry.registerLoader('studio', studioTranslations);\n\n/**\n * Studio Context Value\n * Includes portal container for high z-index dropdown rendering\n */\ninterface StudioContextValue {\n collapsed: boolean;\n toggleCollapsed: () => void;\n portalContainer: HTMLElement | null;\n setPortalContainer: (container: HTMLElement | null) => void;\n}\n\nconst StudioContext = createContext<StudioContextValue | undefined>(undefined);\n\nexport const useStudioContext = () => {\n const context = useContext(StudioContext);\n if (!context) {\n throw new Error('useStudioContext must be used within StudioProvider');\n }\n return context;\n};\n\ninterface StudioProviderProps {\n children: ReactNode;\n}\n\nexport const StudioProvider: React.FC<StudioProviderProps> = ({ children }) => {\n const [collapsed, setCollapsed] = useState(() =>\n loadStudioState(STORAGE_KEYS.COLLAPSED, false)\n );\n const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n\n // Initialize persistence effects on mount\n useEffect(() => {\n const cleanup = initPersistenceEffects();\n return cleanup;\n }, []);\n\n const toggleCollapsed = useCallback(() => {\n setCollapsed((prev) => {\n const newValue = !prev;\n saveStudioState(STORAGE_KEYS.COLLAPSED, newValue);\n return newValue;\n });\n }, []);\n\n return (\n <StudioContext.Provider\n value={{\n collapsed,\n toggleCollapsed,\n portalContainer,\n setPortalContainer,\n }}\n >\n {children}\n </StudioContext.Provider>\n );\n};\n\nStudioProvider.displayName = 'StudioProvider';\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { clamp } from 'lodash';\nimport { eventBus } from '@hai3/react';\nimport type { Position, Size } from '../types';\nimport { loadStudioState } from '../utils/persistence';\nimport { STORAGE_KEYS } from '../types';\nimport { StudioEvents } from '../events/studioEvents';\n\nconst VIEWPORT_MARGIN = 20;\n\nfunction clampToViewport(pos: Position, size: Size): Position {\n const maxX = Math.max(VIEWPORT_MARGIN, window.innerWidth - size.width - VIEWPORT_MARGIN);\n const maxY = Math.max(VIEWPORT_MARGIN, window.innerHeight - size.height - VIEWPORT_MARGIN);\n return {\n x: clamp(pos.x, VIEWPORT_MARGIN, maxX),\n y: clamp(pos.y, VIEWPORT_MARGIN, maxY),\n };\n}\n\ninterface UseDraggableProps {\n panelSize: Size;\n storageKey?: string;\n}\n\nexport const useDraggable = ({ panelSize, storageKey = STORAGE_KEYS.POSITION }: UseDraggableProps) => {\n // Calculate default position (bottom-right with margin)\n const getDefaultPosition = (): Position => ({\n x: window.innerWidth - panelSize.width - VIEWPORT_MARGIN,\n y: window.innerHeight - panelSize.height - VIEWPORT_MARGIN,\n });\n\n const [position, setPosition] = useState<Position>(() =>\n clampToViewport(loadStudioState(storageKey, getDefaultPosition()), panelSize)\n );\n const [isDragging, setIsDragging] = useState(false);\n const dragStartPos = useRef<Position>({ x: 0, y: 0 });\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n setIsDragging(true);\n dragStartPos.current = {\n x: e.clientX - position.x,\n y: e.clientY - position.y,\n };\n }, [position]);\n\n useEffect(() => {\n if (!isDragging) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n const maxX = Math.max(VIEWPORT_MARGIN, window.innerWidth - panelSize.width - VIEWPORT_MARGIN);\n const maxY = Math.max(VIEWPORT_MARGIN, window.innerHeight - panelSize.height - VIEWPORT_MARGIN);\n const newX = clamp(e.clientX - dragStartPos.current.x, VIEWPORT_MARGIN, maxX);\n const newY = clamp(e.clientY - dragStartPos.current.y, VIEWPORT_MARGIN, maxY);\n\n const newPosition = { x: newX, y: newY };\n setPosition(newPosition);\n\n // Emit appropriate event based on storage key\n const eventName = storageKey === STORAGE_KEYS.BUTTON_POSITION\n ? StudioEvents.ButtonPositionChanged\n : StudioEvents.PositionChanged;\n eventBus.emit(eventName, { position: newPosition });\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n };\n }, [isDragging, panelSize.width, panelSize.height, storageKey]);\n\n useEffect(() => {\n const handleResize = () => {\n setPosition((prev) => {\n const clamped = clampToViewport(prev, panelSize);\n if (clamped.x === prev.x && clamped.y === prev.y) return prev;\n const eventName =\n storageKey === STORAGE_KEYS.BUTTON_POSITION\n ? StudioEvents.ButtonPositionChanged\n : StudioEvents.PositionChanged;\n eventBus.emit(eventName, { position: clamped });\n return clamped;\n });\n };\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [panelSize.width, panelSize.height, panelSize, storageKey]);\n\n return {\n position,\n isDragging,\n handleMouseDown,\n };\n};\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { clamp } from 'lodash';\nimport { eventBus } from '@hai3/react';\nimport type { Size } from '../types';\nimport { loadStudioState } from '../utils/persistence';\nimport { STORAGE_KEYS, PANEL_CONSTRAINTS } from '../types';\nimport { StudioEvents } from '../events/studioEvents';\n\nexport const useResizable = () => {\n const [size, setSize] = useState<Size>(() =>\n loadStudioState(STORAGE_KEYS.SIZE, {\n width: PANEL_CONSTRAINTS.DEFAULT_WIDTH,\n height: PANEL_CONSTRAINTS.DEFAULT_HEIGHT,\n })\n );\n const [isResizing, setIsResizing] = useState(false);\n const resizeStartRef = useRef<{ mouseX: number; mouseY: number; width: number; height: number } | null>(null);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n e.stopPropagation(); // Don't trigger drag\n\n // Store initial mouse position and current size\n resizeStartRef.current = {\n mouseX: e.clientX,\n mouseY: e.clientY,\n width: size.width,\n height: size.height,\n };\n\n setIsResizing(true);\n }, [size.width, size.height]);\n\n useEffect(() => {\n if (!isResizing || !resizeStartRef.current) return;\n\n const startState = resizeStartRef.current;\n\n // Prevent text selection during resize\n document.body.style.userSelect = 'none';\n document.body.style.cursor = 'nwse-resize';\n\n const handleMouseMove = (e: MouseEvent) => {\n // Calculate delta from initial mouse position\n const deltaX = e.clientX - startState.mouseX;\n const deltaY = e.clientY - startState.mouseY;\n\n // Apply delta to initial size\n const newWidth = clamp(\n startState.width + deltaX,\n PANEL_CONSTRAINTS.MIN_WIDTH,\n PANEL_CONSTRAINTS.MAX_WIDTH\n );\n const newHeight = clamp(\n startState.height + deltaY,\n PANEL_CONSTRAINTS.MIN_HEIGHT,\n PANEL_CONSTRAINTS.MAX_HEIGHT\n );\n\n const newSize = { width: newWidth, height: newHeight };\n setSize(newSize);\n eventBus.emit(StudioEvents.SizeChanged, { size: newSize });\n };\n\n const handleMouseUp = () => {\n setIsResizing(false);\n resizeStartRef.current = null;\n // Restore text selection\n document.body.style.userSelect = '';\n document.body.style.cursor = '';\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n // Ensure cleanup on unmount\n document.body.style.userSelect = '';\n document.body.style.cursor = '';\n };\n }, [isResizing]);\n\n return {\n size,\n isResizing,\n handleMouseDown,\n };\n};\n","import React from 'react';\nimport { upperFirst } from 'lodash';\nimport { useTheme, useTranslation } from '@hai3/react';\nimport { ButtonVariant } from '@hai3/uikit';\nimport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownButton,\n} from '@hai3/uikit';\nimport { useStudioContext } from '../StudioProvider';\n\n/**\n * ThemeSelector Component\n * Uses useTheme hook for theme selection using DropdownMenu\n */\n\nexport interface ThemeSelectorProps {\n className?: string;\n}\n\nexport const ThemeSelector: React.FC<ThemeSelectorProps> = ({\n className = '',\n}) => {\n const { currentTheme, themes, setTheme } = useTheme();\n const { portalContainer } = useStudioContext();\n const { t } = useTranslation();\n\n const formatThemeName = (themeName: string): string => {\n return themeName\n .split('-')\n .map(word => upperFirst(word))\n .join(' ');\n };\n\n return (\n <div className={`flex items-center justify-between ${className}`}>\n <label className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {t('studio:controls.theme')}\n </label>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <DropdownButton variant={ButtonVariant.Outline}>\n {formatThemeName(currentTheme || '')}\n </DropdownButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" container={portalContainer} className=\"z-[99999] pointer-events-auto\">\n {themes.map((theme) => (\n <DropdownMenuItem\n key={theme.id}\n onClick={() => setTheme(theme.id)}\n >\n {formatThemeName(theme.name || theme.id)}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n};\n\nThemeSelector.displayName = 'ThemeSelector';\n","import React from 'react';\nimport { upperFirst } from 'lodash';\nimport { ButtonVariant } from '@hai3/uikit';\nimport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n DropdownMenuItem,\n DropdownButton,\n} from '@hai3/uikit';\nimport { useTranslation } from '@hai3/react';\nimport { useStudioContext } from '../StudioProvider';\n\n/**\n * ScreensetSelector Component\n * Redux-aware component for 2-level screenset selection\n * Uses DropdownMenu with DropdownMenuSub for categories\n */\n\nexport interface ScreensetOption {\n category: string;\n screensets: Array<{ id: string; name: string }>;\n}\n\nexport interface ScreensetSelectorProps {\n options: ScreensetOption[];\n currentValue: string; // Format: \"category:screensetId\"\n onChange: (value: string) => void; // Receives \"category:screensetId\"\n className?: string;\n}\n\nexport const ScreensetSelector: React.FC<ScreensetSelectorProps> = ({\n options,\n currentValue,\n onChange,\n className = '',\n}) => {\n const { portalContainer } = useStudioContext();\n const { t, isRTL } = useTranslation();\n\n // Format names\n const formatName = (name: string): string => {\n return name\n .split(/[-_]/)\n .map((word) => upperFirst(word))\n .join(' ');\n };\n\n // Get current display value\n const getCurrentDisplay = (): string => {\n const [category, itemId] = currentValue.split(':');\n if (!category || !itemId) return 'Select';\n const categoryGroup = options.find((opt) => opt.category === category);\n const item = categoryGroup?.screensets.find((i) => i.id === itemId);\n return item ? item.name : 'Select';\n };\n\n const handleItemClick = (category: string, itemId: string): void => {\n onChange(`${category}:${itemId}`);\n };\n\n return (\n <div className={`flex items-center justify-between ${className}`}>\n <label className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {t('studio:controls.screenset')}\n </label>\n <DropdownMenu dir={isRTL ? 'rtl' : 'ltr'}>\n <DropdownMenuTrigger asChild>\n <DropdownButton variant={ButtonVariant.Outline}>\n {formatName(getCurrentDisplay())}\n </DropdownButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" container={portalContainer} className=\"z-[99999] pointer-events-auto\">\n {options.map((categoryGroup) => (\n <DropdownMenuSub key={categoryGroup.category}>\n <DropdownMenuSubTrigger disabled={categoryGroup.screensets.length === 0}>\n {formatName(categoryGroup.category)}\n </DropdownMenuSubTrigger>\n <DropdownMenuSubContent container={portalContainer} className=\"z-[99999] pointer-events-auto\">\n {categoryGroup.screensets.map((item) => (\n <DropdownMenuItem\n key={item.id}\n onClick={() => handleItemClick(categoryGroup.category, item.id)}\n >\n {formatName(item.name)}\n </DropdownMenuItem>\n ))}\n </DropdownMenuSubContent>\n </DropdownMenuSub>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n};\n\nScreensetSelector.displayName = 'ScreensetSelector';\n","import { useTranslation, LanguageDisplayMode, TextDirection, SUPPORTED_LANGUAGES, getLanguageMetadata, type Language } from '@hai3/react';\nimport { ButtonVariant } from '@hai3/uikit';\nimport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n Button,\n} from '@hai3/uikit';\nimport { useStudioContext } from '../StudioProvider';\n\n/**\n * LanguageSelector constants\n */\nconst FALLBACK_SELECT_LANGUAGE_TEXT = 'Select language';\nconst RTL_INDICATOR_SUFFIX = ' (RTL)';\n\nexport interface LanguageSelectorProps {\n /**\n * Show language names in their native script or English\n * @default LanguageDisplayMode.Native\n */\n displayMode?: LanguageDisplayMode;\n}\n\n/**\n * Language Selector Component\n *\n * Allows users to switch between supported languages\n * Changes apply immediately without page reload\n * Automatically updates HTML dir attribute for RTL support\n */\nexport function LanguageSelector({\n displayMode = LanguageDisplayMode.Native\n}: LanguageSelectorProps = {}) {\n const { t, language, setLanguage } = useTranslation();\n const { portalContainer } = useStudioContext();\n\n const currentLanguage = language ? getLanguageMetadata(language) : null;\n\n return (\n <div className=\"flex items-center justify-between\">\n <label className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {t('studio:controls.language')}\n </label>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant={ButtonVariant.Outline}>\n {currentLanguage\n ? (displayMode === LanguageDisplayMode.Native ? currentLanguage.name : currentLanguage.englishName)\n : FALLBACK_SELECT_LANGUAGE_TEXT\n }\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" container={portalContainer} className=\"z-[99999] pointer-events-auto\">\n {SUPPORTED_LANGUAGES.map((lang) => (\n <DropdownMenuItem\n key={lang.code}\n onClick={() => setLanguage(lang.code as Language)}\n >\n {displayMode === LanguageDisplayMode.Native ? lang.name : lang.englishName}\n {lang.direction === TextDirection.RightToLeft && RTL_INDICATOR_SUFFIX}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n","import React from 'react';\nimport { useTranslation, useAppSelector, toggleMockMode, type MockState } from '@hai3/react';\nimport { Switch } from '@hai3/uikit';\n\n/**\n * API Mode Toggle Component\n * Toggles between mock and real API mode via centralized mock state.\n *\n * Dispatches mock toggle event that mockEffects handles.\n * Framework manages ALL mock plugins (global and instance-level) automatically.\n */\n\nexport interface ApiModeToggleProps {\n className?: string;\n}\n\nexport const ApiModeToggle: React.FC<ApiModeToggleProps> = ({\n className,\n}) => {\n const { t } = useTranslation();\n const enabled = useAppSelector((state) => {\n const mockState = (state as { mock?: MockState }).mock;\n return mockState?.enabled ?? false;\n });\n\n const handleToggle = (checked: boolean) => {\n toggleMockMode(checked);\n };\n\n return (\n <div className={`flex items-center justify-between h-9 ${className ?? ''}`}>\n <label\n htmlFor=\"api-mode-toggle\"\n className=\"text-sm text-muted-foreground cursor-pointer select-none whitespace-nowrap\"\n >\n {t('studio:controls.mockApi')}\n </label>\n <Switch\n id=\"api-mode-toggle\"\n checked={enabled}\n onCheckedChange={handleToggle}\n />\n </div>\n );\n};\n\nApiModeToggle.displayName = 'ApiModeToggle';\n","import React, { useState, useEffect } from 'react';\nimport { useNavigation, screensetRegistry, useTranslation, ScreensetCategory } from '@hai3/react';\nimport { ThemeSelector } from './ThemeSelector';\nimport { ScreensetSelector, type ScreensetOption } from './ScreensetSelector';\nimport { LanguageSelector } from './LanguageSelector';\nimport { ApiModeToggle } from './ApiModeToggle';\n\n/**\n * All possible screenset categories\n */\nconst ALL_CATEGORIES: ScreensetCategory[] = [ScreensetCategory.Drafts, ScreensetCategory.Mockups, ScreensetCategory.Production];\n\n/**\n * Build screenset options for selector\n * Returns all categories, even if empty\n */\nconst buildScreensetOptions = (): ScreensetOption[] => {\n const allScreensets = screensetRegistry.getAll();\n return ALL_CATEGORIES.map((category) => ({\n category,\n screensets: allScreensets\n .filter(s => s.category === category)\n .map(s => ({\n id: s.id,\n name: s.name,\n })),\n }));\n};\n\nexport const ControlPanel: React.FC = () => {\n const { currentScreenset, navigateToScreenset } = useNavigation();\n const [screensetOptions, setScreensetOptions] = useState<ScreensetOption[]>([]);\n const { t } = useTranslation();\n\n useEffect(() => {\n const options = buildScreensetOptions();\n setScreensetOptions(options);\n }, []);\n\n // Build current value in \"category:screensetId\" format\n const getCurrentValue = (): string => {\n if (!currentScreenset) return '';\n const screenset = screensetRegistry.get(currentScreenset);\n if (!screenset) return '';\n return `${screenset.category}:${screenset.id}`;\n };\n\n // Handle screenset selection - extract screensetId from \"category:screensetId\"\n const handleScreensetChange = (value: string): void => {\n const [, screensetId] = value.split(':');\n if (screensetId) {\n navigateToScreenset(screensetId);\n }\n };\n\n return (\n <div className=\"space-y-4\">\n <div className=\"space-y-3\">\n <h3 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wider\">\n {t('studio:controls.heading')}\n </h3>\n\n <div className=\"space-y-3\">\n {screensetOptions.length > 0 && (\n <ScreensetSelector\n options={screensetOptions}\n currentValue={getCurrentValue()}\n onChange={handleScreensetChange}\n />\n )}\n <ApiModeToggle />\n <ThemeSelector />\n <LanguageSelector />\n </div>\n </div>\n </div>\n );\n};\n\nControlPanel.displayName = 'ControlPanel';\n","import React from 'react';\nimport { useTranslation } from '@hai3/react';\nimport { Card } from '@hai3/uikit';\nimport { Button, ButtonVariant, ButtonSize } from '@hai3/uikit';\nimport { useDraggable } from './hooks/useDraggable';\nimport { useResizable } from './hooks/useResizable';\nimport { useStudioContext } from './StudioProvider';\nimport { ControlPanel } from './sections/ControlPanel';\nimport { STORAGE_KEYS } from './types';\n\nexport const StudioPanel: React.FC = () => {\n const { toggleCollapsed, setPortalContainer } = useStudioContext();\n const { t } = useTranslation();\n const portalRef = React.useRef<HTMLDivElement>(null);\n\n // Initialize hooks\n const { size, isResizing: _isResizing, handleMouseDown: handleResizeMouseDown } = useResizable();\n\n const { position, isDragging, handleMouseDown: handleDragMouseDown } = useDraggable({\n panelSize: size,\n storageKey: STORAGE_KEYS.POSITION,\n });\n\n // Register portal container with context on mount\n React.useEffect(() => {\n setPortalContainer(portalRef.current);\n return () => setPortalContainer(null);\n }, [setPortalContainer]);\n\n return (\n <>\n {/* High z-index portal container for dropdowns */}\n <div\n ref={portalRef}\n className=\"studio-portal-container fixed z-[99999] pointer-events-none\"\n />\n\n <div\n className=\"studio-panel fixed z-[10000]\"\n style={{\n left: `${position.x}px`,\n top: `${position.y}px`,\n width: `${size.width}px`,\n height: `${size.height}px`,\n }}\n >\n <Card className=\"h-full w-full flex flex-col overflow-hidden bg-white/20 dark:bg-black/50 backdrop-blur-md backdrop-saturate-[180%] border border-white/30 dark:border-white/20 shadow-[0_8px_32px_rgba(0,0,0,0.2)]\">\n {/* Header with drag handle */}\n <div\n className=\"studio-header px-4 py-3 border-b border-border/50 select-none flex items-center justify-between\"\n onMouseDown={handleDragMouseDown}\n style={{ cursor: isDragging ? 'grabbing' : 'grab' }}\n >\n <h2 className=\"text-sm font-semibold text-foreground\">{t('studio:title')}</h2>\n <Button\n variant={ButtonVariant.Ghost}\n size={ButtonSize.Sm}\n onClick={toggleCollapsed}\n className=\"h-7 w-7 p-0\"\n aria-label={t('studio:aria.collapseButton')}\n title={t('studio:aria.collapseButton')}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </Button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto p-4\">\n <ControlPanel />\n </div>\n\n {/* Resize handle */}\n <div\n className=\"studio-resize-handle absolute bottom-1 right-1 w-5 h-5 cursor-nwse-resize\"\n onMouseDown={handleResizeMouseDown}\n role=\"button\"\n aria-label={t('studio:aria.resizeHandle')}\n title={t('studio:aria.resizeHandle')}\n tabIndex={0}\n >\n <svg\n className=\"w-5 h-5 text-muted-foreground/70 hover:text-muted-foreground transition-colors\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M22 22H20V20H22V22ZM22 18H20V16H22V18ZM18 22H16V20H18V22ZM18 18H16V16H18V18ZM14 22H12V20H14V22Z\" />\n </svg>\n </div>\n </Card>\n </div>\n </>\n );\n};\n\nStudioPanel.displayName = 'StudioPanel';\n","import { useEffect } from 'react';\n\n/**\n * Hook to register a keyboard shortcut (Shift+`)\n * Uses physical key location for reliable cross-browser/keyboard detection\n */\nexport const useKeyboardShortcut = (handler: () => void) => {\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n // Use e.code for physical key location (works across all keyboard layouts)\n // Backquote key with Shift modifier\n if (e.shiftKey && e.code === 'Backquote') {\n e.preventDefault(); // Prevent any potential conflicts\n handler();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [handler]);\n};\n","import React from 'react';\nimport { Button, ButtonVariant } from '@hai3/uikit';\n\ninterface GlassmorphicButtonProps {\n icon: React.ReactNode;\n onMouseDown?: (e: React.MouseEvent) => void;\n onClick?: (e: React.MouseEvent) => void;\n title?: string;\n isDragging?: boolean;\n}\n\n/**\n * Glassmorphic Button\n * Circular button with glassmorphic styling (blur, transparency, saturation)\n * Renders content behind it with a frosted glass effect\n */\nexport const GlassmorphicButton: React.FC<GlassmorphicButtonProps> = ({\n icon,\n onMouseDown,\n onClick,\n title,\n isDragging = false,\n}) => {\n return (\n <Button\n variant={ButtonVariant.Ghost}\n onMouseDown={onMouseDown}\n onClick={onClick}\n title={title}\n className=\"w-12 h-12 p-0 rounded-full flex items-center justify-center pointer-events-auto bg-white/20 dark:bg-black/50 backdrop-blur-md backdrop-saturate-[180%] border border-white/30 dark:border-white/20 shadow-[0_8px_32px_rgba(0,0,0,0.2)] hover:bg-white/30 dark:hover:bg-black/60 transition-colors\"\n style={{ cursor: isDragging ? 'grabbing' : 'grab' }}\n >\n {icon}\n </Button>\n );\n};\n\nGlassmorphicButton.displayName = 'GlassmorphicButton';\n","import React from 'react';\n\n/**\n * Studio Icon\n * Settings/controls icon for Studio toggle button\n */\nexport const StudioIcon: React.FC<{ className?: string }> = ({ className = '' }) => {\n return (\n <svg\n className={className}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4\"\n />\n </svg>\n );\n};\n","import React, { useRef } from 'react';\nimport { useTranslation } from '@hai3/react';\nimport { useDraggable } from './hooks/useDraggable';\nimport { BUTTON_SIZE, STORAGE_KEYS } from './types';\nimport { GlassmorphicButton } from './uikit/composite/GlassmorphicButton';\nimport { StudioIcon } from './uikit/icons/StudioIcon';\n\ninterface CollapsedButtonProps {\n toggleCollapsed: () => void;\n}\n\nexport const CollapsedButton: React.FC<CollapsedButtonProps> = ({ toggleCollapsed }) => {\n const { t } = useTranslation();\n const { position, isDragging, handleMouseDown } = useDraggable({\n panelSize: BUTTON_SIZE,\n storageKey: STORAGE_KEYS.BUTTON_POSITION,\n });\n const dragStartPosition = useRef<{ x: number; y: number } | null>(null);\n\n // Handle click vs drag distinction\n const handleButtonMouseDown = (e: React.MouseEvent) => {\n dragStartPosition.current = { x: e.clientX, y: e.clientY };\n handleMouseDown(e);\n };\n\n const handleButtonClick = (e: React.MouseEvent) => {\n // Only toggle if mouse didn't move significantly (< 5px indicates click, not drag)\n if (dragStartPosition.current) {\n const dx = Math.abs(e.clientX - dragStartPosition.current.x);\n const dy = Math.abs(e.clientY - dragStartPosition.current.y);\n if (dx < 5 && dy < 5) {\n toggleCollapsed();\n }\n }\n };\n\n return (\n <div\n className=\"fixed z-[10000]\"\n style={{\n left: `${position.x}px`,\n top: `${position.y}px`,\n }}\n >\n <GlassmorphicButton\n icon={<StudioIcon className=\"w-6 h-6 text-foreground\" />}\n onMouseDown={handleButtonMouseDown}\n onClick={handleButtonClick}\n title={t('studio:aria.openButton')}\n isDragging={isDragging}\n />\n </div>\n );\n};\n\nCollapsedButton.displayName = 'CollapsedButton';\n","import React from 'react';\nimport { StudioProvider, useStudioContext } from './StudioProvider';\nimport { StudioPanel } from './StudioPanel';\nimport { useKeyboardShortcut } from './hooks/useKeyboardShortcut';\nimport { CollapsedButton } from './CollapsedButton';\n\nconst StudioContent: React.FC = () => {\n const { collapsed, toggleCollapsed } = useStudioContext();\n\n // Register keyboard shortcut (Shift + `) - toggles between collapsed button and expanded panel\n useKeyboardShortcut(toggleCollapsed);\n\n if (collapsed) {\n return <CollapsedButton toggleCollapsed={toggleCollapsed} />;\n }\n\n return <StudioPanel />;\n};\n\n// No props - services register their own mocks\nexport const StudioOverlay: React.FC = () => {\n return (\n <StudioProvider>\n <StudioContent />\n </StudioProvider>\n );\n};\n\nStudioOverlay.displayName = 'StudioOverlay';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/i18n/en.json","../src/i18n/ar.json","../src/i18n/bn.json","../src/i18n/cs.json","../src/i18n/da.json","../src/i18n/de.json","../src/i18n/el.json","../src/i18n/es.json","../src/i18n/fa.json","../src/i18n/fi.json","../src/i18n/fr.json","../src/i18n/he.json","../src/i18n/hi.json","../src/i18n/hu.json","../src/i18n/id.json","../src/i18n/it.json","../src/i18n/ja.json","../src/i18n/ko.json","../src/i18n/ms.json","../src/i18n/nl.json","../src/i18n/no.json","../src/i18n/pl.json","../src/i18n/pt.json","../src/i18n/ro.json","../src/i18n/ru.json","../src/i18n/sv.json","../src/i18n/sw.json","../src/i18n/ta.json","../src/i18n/th.json","../src/i18n/tl.json","../src/i18n/tr.json","../src/i18n/uk.json","../src/i18n/ur.json","../src/i18n/vi.json","../src/i18n/zh-TW.json","../src/i18n/zh.json","../src/utils/persistence.ts","../src/types.ts","../src/events/studioEvents.ts","../src/effects/persistenceEffects.ts","../src/hooks/useRestoreStudioSettings.ts","../src/StudioProvider.tsx","../src/hooks/useDraggable.ts","../src/hooks/useResizable.ts","../src/sections/MfePackageSelector.tsx","../src/sections/ThemeSelector.tsx","../src/sections/LanguageSelector.tsx","../src/sections/ApiModeToggle.tsx","../src/sections/ControlPanel.tsx","../src/StudioPanel.tsx","../src/hooks/useKeyboardShortcut.ts","../src/uikit/composite/GlassmorphicButton.tsx","../src/uikit/icons/StudioIcon.tsx","../src/CollapsedButton.tsx","../src/StudioOverlay.tsx"],"names":["exports","eventBus","useRef","useEffect","HAI3_SCREEN_DOMAIN","HAI3_ACTION_MOUNT_EXT","I18nRegistry","Language","i18nRegistry","createContext","useHAI3","useContext","useState","useCallback","jsxs","jsx","clamp","isScreenExtension","useTranslation","useRegisteredPackages","useActivePackage","DropdownMenu","DropdownMenuTrigger","DropdownButton","ButtonVariant","DropdownMenuContent","DropdownMenuItem","useTheme","upperFirst","LanguageDisplayMode","getLanguageMetadata","Button","SUPPORTED_LANGUAGES","TextDirection","useAppSelector","toggleMockMode","Switch","React","Fragment","Card","ButtonSize"],"mappings":"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","file":"index.cjs","sourcesContent":["{\n \"title\": \"HAI3 Studio\",\n \"aria\": {\n \"openButton\": \"Open Studio (Shift+`) or drag to move\",\n \"collapseButton\": \"Collapse Studio panel\",\n \"resizeHandle\": \"Resize Studio panel\"\n },\n \"controls\": {\n \"heading\": \"Development Controls\",\n \"screenset\": \"Screenset:\",\n \"theme\": \"Theme:\",\n \"language\": \"Language:\",\n \"mockApi\": \"Mock API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"أدوات تطوير HAI3\",\n \"aria\": {\n \"openButton\": \"فتح أدوات التطوير (Shift+`) أو السحب للتحريك\",\n \"collapseButton\": \"طي لوحة أدوات التطوير\",\n \"resizeHandle\": \"تغيير حجم لوحة الأدوات\"\n },\n \"controls\": {\n \"heading\": \"عناصر التحكم في التطوير\",\n \"screenset\": \"مجموعة الشاشات:\",\n \"theme\": \"السمة:\",\n \"language\": \"اللغة:\",\n \"mockApi\": \"واجهة برمجية وهمية\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 ডেভেলপমেন্ট টুলস\",\n \"aria\": {\n \"openButton\": \"ডেভেলপমেন্ট টুলস খুলুন (Shift+`) বা সরানোর জন্য টানুন\",\n \"collapseButton\": \"ডেভেলপমেন্ট টুলস প্যানেল সংকুচিত করুন\",\n \"resizeHandle\": \"টুলস প্যানেলের আকার পরিবর্তন করুন\"\n },\n \"controls\": {\n \"heading\": \"উন্নয়ন নিয়ন্ত্রণ\",\n \"screenset\": \"স্ক্রিনসেট:\",\n \"theme\": \"থিম:\",\n \"language\": \"ভাষা:\",\n \"mockApi\": \"মক API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Vývojářské nástroje HAI3\",\n \"aria\": {\n \"openButton\": \"Otevřít vývojářské nástroje (Shift+`) nebo přetáhnout pro přesun\",\n \"collapseButton\": \"Sbalit panel vývojářských nástrojů\",\n \"resizeHandle\": \"Změnit velikost panelu nástrojů\"\n },\n \"controls\": {\n \"heading\": \"Vývojářské ovládací prvky\",\n \"screenset\": \"Sada obrazovek:\",\n \"theme\": \"Motiv:\",\n \"language\": \"Jazyk:\",\n \"mockApi\": \"Simulované API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 Udviklingsværktøjer\",\n \"aria\": {\n \"openButton\": \"Åbn Udviklingsværktøjer (Shift+`) eller træk for at flytte\",\n \"collapseButton\": \"Skjul udviklingsværktøjspanelet\",\n \"resizeHandle\": \"Ændre størrelse på værktøjspanelet\"\n },\n \"controls\": {\n \"heading\": \"Udviklingskontrolelementer\",\n \"screenset\": \"Skærmsæt:\",\n \"theme\": \"Tema:\",\n \"language\": \"Sprog:\",\n \"mockApi\": \"Mock-API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 Entwicklerwerkzeuge\",\n \"aria\": {\n \"openButton\": \"Entwicklerwerkzeuge öffnen (Shift+`) oder ziehen zum Verschieben\",\n \"collapseButton\": \"Entwicklerwerkzeuge-Panel einklappen\",\n \"resizeHandle\": \"Größe des Werkzeug-Panels ändern\"\n },\n \"controls\": {\n \"heading\": \"Entwicklungssteuerung\",\n \"screenset\": \"Bildschirmset:\",\n \"theme\": \"Design:\",\n \"language\": \"Sprache:\",\n \"mockApi\": \"Mock-API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Εργαλεία Ανάπτυξης HAI3\",\n \"aria\": {\n \"openButton\": \"Άνοιγμα Εργαλείων Ανάπτυξης (Shift+`) ή σύρετε για μετακίνηση\",\n \"collapseButton\": \"Σύμπτυξη πίνακα εργαλείων ανάπτυξης\",\n \"resizeHandle\": \"Αλλαγή μεγέθους πίνακα εργαλείων\"\n },\n \"controls\": {\n \"heading\": \"Στοιχεία Ελέγχου Ανάπτυξης\",\n \"screenset\": \"Σύνολο Οθονών:\",\n \"theme\": \"Θέμα:\",\n \"language\": \"Γλώσσα:\",\n \"mockApi\": \"Mock API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Herramientas de Desarrollo HAI3\",\n \"aria\": {\n \"openButton\": \"Abrir Herramientas de Desarrollo (Shift+`) o arrastrar para mover\",\n \"collapseButton\": \"Contraer panel de herramientas de desarrollo\",\n \"resizeHandle\": \"Cambiar tamaño del panel de herramientas\"\n },\n \"controls\": {\n \"heading\": \"Controles de Desarrollo\",\n \"screenset\": \"Conjunto de Pantallas:\",\n \"theme\": \"Tema:\",\n \"language\": \"Idioma:\",\n \"mockApi\": \"API Simulada\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"ابزارهای توسعه HAI3\",\n \"aria\": {\n \"openButton\": \"باز کردن ابزارهای توسعه (Shift+`) یا کشیدن برای جابجایی\",\n \"collapseButton\": \"جمع کردن پنل ابزارهای توسعه\",\n \"resizeHandle\": \"تغییر اندازه پنل ابزارها\"\n },\n \"controls\": {\n \"heading\": \"کنترلهای توسعه\",\n \"screenset\": \"مجموعه صفحهنمایش:\",\n \"theme\": \"پوسته:\",\n \"language\": \"زبان:\",\n \"mockApi\": \"API ساختگی\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 Kehitystyökalut\",\n \"aria\": {\n \"openButton\": \"Avaa Kehitystyökalut (Shift+`) tai vedä siirtääksesi\",\n \"collapseButton\": \"Tiivistä kehitystyökalupaneeli\",\n \"resizeHandle\": \"Muuta työkalupaneelin kokoa\"\n },\n \"controls\": {\n \"heading\": \"Kehitysohjaimet\",\n \"screenset\": \"Näyttösarja:\",\n \"theme\": \"Teema:\",\n \"language\": \"Kieli:\",\n \"mockApi\": \"Mock-API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Outils de Développement HAI3\",\n \"aria\": {\n \"openButton\": \"Ouvrir les outils de développement (Shift+`) ou glisser pour déplacer\",\n \"collapseButton\": \"Réduire le panneau des outils de développement\",\n \"resizeHandle\": \"Redimensionner le panneau des outils\"\n },\n \"controls\": {\n \"heading\": \"Contrôles de Développement\",\n \"screenset\": \"Ensemble d'Écrans:\",\n \"theme\": \"Thème:\",\n \"language\": \"Langue:\",\n \"mockApi\": \"API Simulée\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"כלי פיתוח HAI3\",\n \"aria\": {\n \"openButton\": \"פתח כלי פיתוח (Shift+`) או גרור להזזה\",\n \"collapseButton\": \"כווץ חלונית כלי פיתוח\",\n \"resizeHandle\": \"שנה גודל חלונית כלים\"\n },\n \"controls\": {\n \"heading\": \"בקרות פיתוח\",\n \"screenset\": \"ערכת מסכים:\",\n \"theme\": \"ערכת נושא:\",\n \"language\": \"שפה:\",\n \"mockApi\": \"API מדומה\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 डेवलपमेंट टूल्स\",\n \"aria\": {\n \"openButton\": \"डेवलपमेंट टूल्स खोलें (Shift+`) या स्थानांतरित करने के लिए खींचें\",\n \"collapseButton\": \"डेवलपमेंट टूल्स पैनल को संक्षिप्त करें\",\n \"resizeHandle\": \"टूल्स पैनल का आकार बदलें\"\n },\n \"controls\": {\n \"heading\": \"विकास नियंत्रण\",\n \"screenset\": \"स्क्रीनसेट:\",\n \"theme\": \"थीम:\",\n \"language\": \"भाषा:\",\n \"mockApi\": \"मॉक API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 Fejlesztői Eszközök\",\n \"aria\": {\n \"openButton\": \"Fejlesztői Eszközök megnyitása (Shift+`) vagy húzza az áthelyezéshez\",\n \"collapseButton\": \"Fejlesztői eszközök panel összecsukása\",\n \"resizeHandle\": \"Eszközpanel átméretezése\"\n },\n \"controls\": {\n \"heading\": \"Fejlesztési Vezérlők\",\n \"screenset\": \"Képernyőkészlet:\",\n \"theme\": \"Téma:\",\n \"language\": \"Nyelv:\",\n \"mockApi\": \"Mock API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Alat Pengembangan HAI3\",\n \"aria\": {\n \"openButton\": \"Buka Alat Pengembangan (Shift+`) atau seret untuk memindahkan\",\n \"collapseButton\": \"Ciutkan panel alat pengembangan\",\n \"resizeHandle\": \"Ubah ukuran panel alat\"\n },\n \"controls\": {\n \"heading\": \"Kontrol Pengembangan\",\n \"screenset\": \"Set Layar:\",\n \"theme\": \"Tema:\",\n \"language\": \"Bahasa:\",\n \"mockApi\": \"API Tiruan\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Strumenti di Sviluppo HAI3\",\n \"aria\": {\n \"openButton\": \"Apri Strumenti di Sviluppo (Shift+`) o trascina per spostare\",\n \"collapseButton\": \"Comprimi pannello strumenti di sviluppo\",\n \"resizeHandle\": \"Ridimensiona pannello strumenti\"\n },\n \"controls\": {\n \"heading\": \"Controlli di Sviluppo\",\n \"screenset\": \"Set di Schermate:\",\n \"theme\": \"Tema:\",\n \"language\": \"Lingua:\",\n \"mockApi\": \"API Simulata\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 開発ツール\",\n \"aria\": {\n \"openButton\": \"開発ツールを開く (Shift+`) またはドラッグして移動\",\n \"collapseButton\": \"開発ツールパネルを折りたたむ\",\n \"resizeHandle\": \"ツールパネルのサイズを変更\"\n },\n \"controls\": {\n \"heading\": \"開発コントロール\",\n \"screenset\": \"スクリーンセット:\",\n \"theme\": \"テーマ:\",\n \"language\": \"言語:\",\n \"mockApi\": \"モック API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 개발 도구\",\n \"aria\": {\n \"openButton\": \"개발 도구 열기 (Shift+`) 또는 드래그하여 이동\",\n \"collapseButton\": \"개발 도구 패널 접기\",\n \"resizeHandle\": \"도구 패널 크기 조정\"\n },\n \"controls\": {\n \"heading\": \"개발 제어\",\n \"screenset\": \"화면 세트:\",\n \"theme\": \"테마:\",\n \"language\": \"언어:\",\n \"mockApi\": \"모의 API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Alat Pembangun HAI3\",\n \"aria\": {\n \"openButton\": \"Buka Alat Pembangun (Shift+`) atau seret untuk alih\",\n \"collapseButton\": \"Runtuhkan panel alat pembangun\",\n \"resizeHandle\": \"Ubah saiz panel alat\"\n },\n \"controls\": {\n \"heading\": \"Kawalan Pembangunan\",\n \"screenset\": \"Set Skrin:\",\n \"theme\": \"Tema:\",\n \"language\": \"Bahasa:\",\n \"mockApi\": \"API Palsu\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 Ontwikkeltools\",\n \"aria\": {\n \"openButton\": \"Open Ontwikkeltools (Shift+`) of sleep om te verplaatsen\",\n \"collapseButton\": \"Ontwikkeltools paneel inklappen\",\n \"resizeHandle\": \"Formaat van tools paneel wijzigen\"\n },\n \"controls\": {\n \"heading\": \"Ontwikkelingsbesturing\",\n \"screenset\": \"Schermset:\",\n \"theme\": \"Thema:\",\n \"language\": \"Taal:\",\n \"mockApi\": \"Nep-API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 Utviklingsverktøy\",\n \"aria\": {\n \"openButton\": \"Åpne Utviklingsverktøy (Shift+`) eller dra for å flytte\",\n \"collapseButton\": \"Skjul utviklingsverktøypanelet\",\n \"resizeHandle\": \"Endre størrelse på verktøypanelet\"\n },\n \"controls\": {\n \"heading\": \"Utviklingskontroller\",\n \"screenset\": \"Skjermsett:\",\n \"theme\": \"Tema:\",\n \"language\": \"Språk:\",\n \"mockApi\": \"Mock-API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Narzędzia programistyczne HAI3\",\n \"aria\": {\n \"openButton\": \"Otwórz narzędzia programistyczne (Shift+`) lub przeciągnij, aby przenieść\",\n \"collapseButton\": \"Zwiń panel narzędzi programistycznych\",\n \"resizeHandle\": \"Zmień rozmiar panelu narzędzi\"\n },\n \"controls\": {\n \"heading\": \"Kontrolki programistyczne\",\n \"screenset\": \"Zestaw ekranów:\",\n \"theme\": \"Motyw:\",\n \"language\": \"Język:\",\n \"mockApi\": \"Fikcyjne API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Ferramentas de Desenvolvimento HAI3\",\n \"aria\": {\n \"openButton\": \"Abrir Ferramentas de Desenvolvimento (Shift+`) ou arrastar para mover\",\n \"collapseButton\": \"Recolher painel de ferramentas de desenvolvimento\",\n \"resizeHandle\": \"Redimensionar painel de ferramentas\"\n },\n \"controls\": {\n \"heading\": \"Controles de Desenvolvimento\",\n \"screenset\": \"Conjunto de Telas:\",\n \"theme\": \"Tema:\",\n \"language\": \"Idioma:\",\n \"mockApi\": \"API Simulada\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Instrumente de Dezvoltare HAI3\",\n \"aria\": {\n \"openButton\": \"Deschide Instrumente de Dezvoltare (Shift+`) sau trage pentru a muta\",\n \"collapseButton\": \"Restrânge panoul instrumentelor de dezvoltare\",\n \"resizeHandle\": \"Redimensionează panoul instrumentelor\"\n },\n \"controls\": {\n \"heading\": \"Controale de Dezvoltare\",\n \"screenset\": \"Set de Ecrane:\",\n \"theme\": \"Temă:\",\n \"language\": \"Limbă:\",\n \"mockApi\": \"API Simulat\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Инструменты разработки HAI3\",\n \"aria\": {\n \"openButton\": \"Открыть инструменты разработки (Shift+`) или перетащить для перемещения\",\n \"collapseButton\": \"Свернуть панель инструментов разработки\",\n \"resizeHandle\": \"Изменить размер панели инструментов\"\n },\n \"controls\": {\n \"heading\": \"Элементы управления разработкой\",\n \"screenset\": \"Набор экранов:\",\n \"theme\": \"Тема:\",\n \"language\": \"Язык:\",\n \"mockApi\": \"Фиктивный API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 Utvecklingsverktyg\",\n \"aria\": {\n \"openButton\": \"Öppna Utvecklingsverktyg (Shift+`) eller dra för att flytta\",\n \"collapseButton\": \"Fäll ihop utvecklingsverktygspanelen\",\n \"resizeHandle\": \"Ändra storlek på verktygspanelen\"\n },\n \"controls\": {\n \"heading\": \"Utvecklingskontroller\",\n \"screenset\": \"Skärmuppsättning:\",\n \"theme\": \"Tema:\",\n \"language\": \"Språk:\",\n \"mockApi\": \"Mock-API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Zana za Utengenezaji wa HAI3\",\n \"aria\": {\n \"openButton\": \"Fungua Zana za Utengenezaji (Shift+`) au buruta ili kuhamisha\",\n \"collapseButton\": \"Kunja paneli ya zana za utengenezaji\",\n \"resizeHandle\": \"Badilisha ukubwa wa paneli ya zana\"\n },\n \"controls\": {\n \"heading\": \"Vidhibiti vya Maendeleo\",\n \"screenset\": \"Seti ya Skrini:\",\n \"theme\": \"Mandhari:\",\n \"language\": \"Lugha:\",\n \"mockApi\": \"API ya Majaribio\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 மேம்பாட்டு கருவிகள்\",\n \"aria\": {\n \"openButton\": \"மேம்பாட்டு கருவிகளைத் திற (Shift+`) அல்லது நகர்த்த இழுக்கவும்\",\n \"collapseButton\": \"மேம்பாட்டு கருவிகள் பலகத்தை மடிக்கவும்\",\n \"resizeHandle\": \"கருவிகள் பலகத்தின் அளவை மாற்றவும்\"\n },\n \"controls\": {\n \"heading\": \"மேம்பாட்டு கட்டுப்பாடுகள்\",\n \"screenset\": \"திரைத் தொகுப்பு:\",\n \"theme\": \"தீம்:\",\n \"language\": \"மொழி:\",\n \"mockApi\": \"போலி API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"เครื่องมือพัฒนา HAI3\",\n \"aria\": {\n \"openButton\": \"เปิดเครื่องมือพัฒนา (Shift+`) หรือลากเพื่อย้าย\",\n \"collapseButton\": \"ยุบแผงเครื่องมือพัฒนา\",\n \"resizeHandle\": \"ปรับขนาดแผงเครื่องมือ\"\n },\n \"controls\": {\n \"heading\": \"ควบคุมการพัฒนา\",\n \"screenset\": \"ชุดหน้าจอ:\",\n \"theme\": \"ธีม:\",\n \"language\": \"ภาษา:\",\n \"mockApi\": \"API จำลอง\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Mga Kasangkapan sa Pag-develop ng HAI3\",\n \"aria\": {\n \"openButton\": \"Buksan ang Mga Kasangkapan sa Pag-develop (Shift+`) o i-drag upang ilipat\",\n \"collapseButton\": \"I-collapse ang panel ng mga kasangkapan sa pag-develop\",\n \"resizeHandle\": \"Baguhin ang laki ng panel ng mga kasangkapan\"\n },\n \"controls\": {\n \"heading\": \"Mga Kontrol sa Pag-unlad\",\n \"screenset\": \"Hanay ng Screen:\",\n \"theme\": \"Tema:\",\n \"language\": \"Wika:\",\n \"mockApi\": \"Mock API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 Geliştirici Araçları\",\n \"aria\": {\n \"openButton\": \"Geliştirici Araçlarını Aç (Shift+`) veya taşımak için sürükle\",\n \"collapseButton\": \"Geliştirici araçları panelini daralt\",\n \"resizeHandle\": \"Araç panelini yeniden boyutlandır\"\n },\n \"controls\": {\n \"heading\": \"Geliştirme Kontrolleri\",\n \"screenset\": \"Ekran Seti:\",\n \"theme\": \"Tema:\",\n \"language\": \"Dil:\",\n \"mockApi\": \"Sahte API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Інструменти розробки HAI3\",\n \"aria\": {\n \"openButton\": \"Відкрити інструменти розробки (Shift+`) або перетягнути для переміщення\",\n \"collapseButton\": \"Згорнути панель інструментів розробки\",\n \"resizeHandle\": \"Змінити розмір панелі інструментів\"\n },\n \"controls\": {\n \"heading\": \"Елементи керування розробкою\",\n \"screenset\": \"Набір екранів:\",\n \"theme\": \"Тема:\",\n \"language\": \"Мова:\",\n \"mockApi\": \"Фіктивний API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 ڈویلپمنٹ ٹولز\",\n \"aria\": {\n \"openButton\": \"ڈویلپمنٹ ٹولز کھولیں (Shift+`) یا منتقل کرنے کے لیے گھسیٹیں\",\n \"collapseButton\": \"ڈویلپمنٹ ٹولز پینل کو سکیڑیں\",\n \"resizeHandle\": \"ٹولز پینل کا سائز تبدیل کریں\"\n },\n \"controls\": {\n \"heading\": \"ڈویلپمنٹ کنٹرولز\",\n \"screenset\": \"اسکرین سیٹ:\",\n \"theme\": \"تھیم:\",\n \"language\": \"زبان:\",\n \"mockApi\": \"فرضی API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"Công cụ Phát triển HAI3\",\n \"aria\": {\n \"openButton\": \"Mở Công cụ Phát triển (Shift+`) hoặc kéo để di chuyển\",\n \"collapseButton\": \"Thu gọn bảng công cụ phát triển\",\n \"resizeHandle\": \"Thay đổi kích thước bảng công cụ\"\n },\n \"controls\": {\n \"heading\": \"Điều khiển Phát triển\",\n \"screenset\": \"Bộ Màn hình:\",\n \"theme\": \"Chủ đề:\",\n \"language\": \"Ngôn ngữ:\",\n \"mockApi\": \"API Giả lập\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 開發工具\",\n \"aria\": {\n \"openButton\": \"開啟開發工具 (Shift+`) 或拖曳移動\",\n \"collapseButton\": \"收合開發工具面板\",\n \"resizeHandle\": \"調整工具面板大小\"\n },\n \"controls\": {\n \"heading\": \"開發控制項\",\n \"screenset\": \"螢幕集:\",\n \"theme\": \"主題:\",\n \"language\": \"語言:\",\n \"mockApi\": \"模擬 API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","{\n \"title\": \"HAI3 开发工具\",\n \"aria\": {\n \"openButton\": \"打开开发工具 (Shift+`) 或拖动移动\",\n \"collapseButton\": \"折叠开发工具面板\",\n \"resizeHandle\": \"调整工具面板大小\"\n },\n \"controls\": {\n \"heading\": \"开发控制\",\n \"screenset\": \"屏幕集:\",\n \"theme\": \"主题:\",\n \"language\": \"语言:\",\n \"mockApi\": \"模拟 API\",\n \"gts_package\": \"GTS Package\"\n }\n}\n","/**\n * Utility functions for persisting Studio state to localStorage\n */\n\n/**\n * Save a value to localStorage with a given key\n * Handles errors gracefully (e.g., quota exceeded, localStorage disabled)\n */\nexport const saveStudioState = <T>(key: string, value: T): void => {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch (e) {\n console.warn(`[Studio] Failed to save state for ${key}:`, e);\n }\n};\n\n/**\n * Load a value from localStorage with a given key\n * Returns defaultValue if key doesn't exist or on error\n */\nexport const loadStudioState = <T>(key: string, defaultValue: T): T => {\n try {\n const item = localStorage.getItem(key);\n return item ? JSON.parse(item) : defaultValue;\n } catch (e) {\n console.warn(`[Studio] Failed to load state for ${key}:`, e);\n return defaultValue;\n }\n};\n","/**\n * Position coordinates for the Studio panel\n */\nexport interface Position {\n x: number;\n y: number;\n}\n\n/**\n * Size dimensions for the Studio panel\n */\nexport interface Size {\n width: number;\n height: number;\n}\n\n/**\n * Studio panel state\n */\nexport interface StudioState {\n collapsed: boolean;\n position: Position;\n size: Size;\n}\n\n/**\n * Constants for panel constraints\n */\nexport const PANEL_CONSTRAINTS = {\n MIN_WIDTH: 320,\n MIN_HEIGHT: 400,\n MAX_WIDTH: 600,\n MAX_HEIGHT: 800,\n DEFAULT_WIDTH: 400,\n DEFAULT_HEIGHT: 500,\n} as const;\n\n/**\n * Collapsed button size (circular)\n */\nexport const BUTTON_SIZE = {\n width: 48,\n height: 48,\n} as const;\n\n/**\n * LocalStorage key prefix for Studio\n */\nexport const STORAGE_PREFIX = 'hai3:studio:' as const;\n\n/**\n * LocalStorage keys (composable with shared prefix)\n */\nexport const STORAGE_KEYS = {\n POSITION: `${STORAGE_PREFIX}position`,\n SIZE: `${STORAGE_PREFIX}size`,\n COLLAPSED: `${STORAGE_PREFIX}collapsed`,\n BUTTON_POSITION: `${STORAGE_PREFIX}buttonPosition`,\n THEME: `${STORAGE_PREFIX}theme`,\n LANGUAGE: `${STORAGE_PREFIX}language`,\n MOCK_ENABLED: `${STORAGE_PREFIX}mockEnabled`,\n ACTIVE_PACKAGE_ID: `${STORAGE_PREFIX}activePackageId`,\n} as const;\n","import type { Position, Size } from '../types';\n\n/**\n * Studio UI Event Payloads\n * These events track changes to Studio UI state (position, size, visibility)\n */\n\nexport interface PositionChangedPayload {\n position: Position;\n}\n\nexport interface SizeChangedPayload {\n size: Size;\n}\n\nexport interface ButtonPositionChangedPayload {\n position: Position;\n}\n\n/**\n * Payload when user selects a GTS Package in the control panel.\n * Used for persistence only; framework does not subscribe.\n */\nexport interface ActivePackageChangedPayload {\n activePackageId: string;\n}\n\n/**\n * Studio Event Names\n * Namespace: studio/\n */\nexport const StudioEvents = {\n PositionChanged: 'studio/positionChanged',\n SizeChanged: 'studio/sizeChanged',\n ButtonPositionChanged: 'studio/buttonPositionChanged',\n ActivePackageChanged: 'studio/activePackageChanged',\n} as const;\n\n/**\n * Module Augmentation\n * Extend EventPayloadMap from @hai3/state for type safety\n */\ndeclare module '@hai3/state' {\n interface EventPayloadMap {\n 'studio/positionChanged': PositionChangedPayload;\n 'studio/sizeChanged': SizeChangedPayload;\n 'studio/buttonPositionChanged': ButtonPositionChangedPayload;\n 'studio/activePackageChanged': ActivePackageChangedPayload;\n }\n}\n","import { eventBus } from '@hai3/react';\nimport { StudioEvents } from '../events/studioEvents';\nimport { saveStudioState } from '../utils/persistence';\nimport { STORAGE_KEYS } from '../types';\n\n/**\n * Persistence Effects\n * Listen to Studio UI events and framework events; update localStorage.\n * Treats localStorage as a \"slice\" for Studio UI state and control panel settings.\n */\n\n/**\n * Initialize all persistence effects\n * Call this once when Studio mounts\n */\nexport const initPersistenceEffects = (): (() => void) => {\n // Position changed listener\n const positionSubscription = eventBus.on(\n StudioEvents.PositionChanged,\n ({ position }) => {\n saveStudioState(STORAGE_KEYS.POSITION, position);\n }\n );\n\n // Size changed listener\n const sizeSubscription = eventBus.on(\n StudioEvents.SizeChanged,\n ({ size }) => {\n saveStudioState(STORAGE_KEYS.SIZE, size);\n }\n );\n\n // Button position changed listener\n const buttonPositionSubscription = eventBus.on(\n StudioEvents.ButtonPositionChanged,\n ({ position }) => {\n saveStudioState(STORAGE_KEYS.BUTTON_POSITION, position);\n }\n );\n\n // Theme changed (framework event)\n const themeSubscription = eventBus.on('theme/changed', (payload) => {\n saveStudioState(STORAGE_KEYS.THEME, payload.themeId);\n });\n\n // Language changed (framework event)\n const languageSubscription = eventBus.on('i18n/language/changed', (payload) => {\n saveStudioState(STORAGE_KEYS.LANGUAGE, payload.language);\n });\n\n // Mock toggle (framework event)\n const mockSubscription = eventBus.on('mock/toggle', (payload) => {\n saveStudioState(STORAGE_KEYS.MOCK_ENABLED, payload.enabled);\n });\n\n // GTS Package selection (Studio-only event)\n const activePackageSubscription = eventBus.on(\n StudioEvents.ActivePackageChanged,\n ({ activePackageId }) => {\n saveStudioState(STORAGE_KEYS.ACTIVE_PACKAGE_ID, activePackageId);\n }\n );\n\n // Return cleanup function to unsubscribe all listeners\n return () => {\n positionSubscription.unsubscribe();\n sizeSubscription.unsubscribe();\n buttonPositionSubscription.unsubscribe();\n themeSubscription.unsubscribe();\n languageSubscription.unsubscribe();\n mockSubscription.unsubscribe();\n activePackageSubscription.unsubscribe();\n };\n};\n","import { useEffect, useRef } from 'react';\nimport {\n eventBus,\n HAI3_ACTION_MOUNT_EXT,\n HAI3_SCREEN_DOMAIN,\n type ScreensetsRegistry,\n type Extension,\n type ScreenExtension,\n} from '@hai3/react';\nimport { loadStudioState } from '../utils/persistence';\nimport { STORAGE_KEYS } from '../types';\n\nfunction isScreenExtension(ext: Extension): ext is ScreenExtension {\n return 'presentation' in ext && typeof (ext as ScreenExtension).presentation === 'object';\n}\n\n/**\n * Restore theme, language, and mock mode from localStorage on mount.\n * Emits the framework events that the framework already subscribes to.\n */\nexport const useRestoreStudioSettings = (): void => {\n const restoredRef = useRef(false);\n\n useEffect(() => {\n if (restoredRef.current) return;\n restoredRef.current = true;\n\n const themeId = loadStudioState<string | null>(STORAGE_KEYS.THEME, null);\n if (themeId != null && typeof themeId === 'string' && themeId.length > 0) {\n eventBus.emit('theme/changed', { themeId });\n }\n\n const language = loadStudioState<string | null>(STORAGE_KEYS.LANGUAGE, null);\n if (language != null && typeof language === 'string' && language.length > 0) {\n eventBus.emit('i18n/language/changed', { language });\n }\n\n const mockEnabled = loadStudioState<boolean | null>(STORAGE_KEYS.MOCK_ENABLED, null);\n if (typeof mockEnabled === 'boolean') {\n eventBus.emit('mock/toggle', { enabled: mockEnabled });\n }\n }, []);\n};\n\n/**\n * Restore GTS Package selection when registry becomes available.\n * Mounts the persisted package's first screen extension.\n */\nexport const useRestoreGtsPackage = (registry: ScreensetsRegistry | null | undefined): void => {\n const restoredRef = useRef(false);\n\n useEffect(() => {\n if (restoredRef.current || !registry) return;\n\n const activePackageId = loadStudioState<string | null>(STORAGE_KEYS.ACTIVE_PACKAGE_ID, null);\n if (!activePackageId || typeof activePackageId !== 'string') return;\n\n restoredRef.current = true;\n\n const restore = async (): Promise<void> => {\n try {\n const extensions = registry.getExtensionsForPackage(activePackageId);\n const screenExtensions = extensions.filter(\n (ext: Extension) => ext.domain === HAI3_SCREEN_DOMAIN && isScreenExtension(ext)\n ) as ScreenExtension[];\n\n if (screenExtensions.length === 0) return;\n\n screenExtensions.sort((a, b) => (a.presentation.order ?? 0) - (b.presentation.order ?? 0));\n const firstExtension = screenExtensions[0];\n\n await registry.executeActionsChain({\n action: {\n type: HAI3_ACTION_MOUNT_EXT,\n target: HAI3_SCREEN_DOMAIN,\n payload: { extensionId: firstExtension.id },\n },\n });\n } catch {\n // Skip restore on error (e.g. extension no longer registered)\n }\n };\n\n void restore();\n }, [registry]);\n};\n","import React, { createContext, useContext, useState, useCallback, useEffect, ReactNode } from 'react';\nimport { I18nRegistry, Language, i18nRegistry, useHAI3 } from '@hai3/react';\nimport { saveStudioState, loadStudioState } from './utils/persistence';\nimport { STORAGE_KEYS } from './types';\nimport { initPersistenceEffects } from './effects/persistenceEffects';\nimport { useRestoreStudioSettings, useRestoreGtsPackage } from './hooks/useRestoreStudioSettings';\n\n/**\n * Studio Translation Loader\n * Registered on module import to ensure translations are available before components render\n */\nconst studioTranslations = I18nRegistry.createLoader({\n [Language.English]: () => import('./i18n/en.json'),\n [Language.Arabic]: () => import('./i18n/ar.json'),\n [Language.Bengali]: () => import('./i18n/bn.json'),\n [Language.Czech]: () => import('./i18n/cs.json'),\n [Language.Danish]: () => import('./i18n/da.json'),\n [Language.German]: () => import('./i18n/de.json'),\n [Language.Greek]: () => import('./i18n/el.json'),\n [Language.Spanish]: () => import('./i18n/es.json'),\n [Language.Persian]: () => import('./i18n/fa.json'),\n [Language.Finnish]: () => import('./i18n/fi.json'),\n [Language.French]: () => import('./i18n/fr.json'),\n [Language.Hebrew]: () => import('./i18n/he.json'),\n [Language.Hindi]: () => import('./i18n/hi.json'),\n [Language.Hungarian]: () => import('./i18n/hu.json'),\n [Language.Indonesian]: () => import('./i18n/id.json'),\n [Language.Italian]: () => import('./i18n/it.json'),\n [Language.Japanese]: () => import('./i18n/ja.json'),\n [Language.Korean]: () => import('./i18n/ko.json'),\n [Language.Malay]: () => import('./i18n/ms.json'),\n [Language.Dutch]: () => import('./i18n/nl.json'),\n [Language.Norwegian]: () => import('./i18n/no.json'),\n [Language.Polish]: () => import('./i18n/pl.json'),\n [Language.Portuguese]: () => import('./i18n/pt.json'),\n [Language.Romanian]: () => import('./i18n/ro.json'),\n [Language.Russian]: () => import('./i18n/ru.json'),\n [Language.Swedish]: () => import('./i18n/sv.json'),\n [Language.Swahili]: () => import('./i18n/sw.json'),\n [Language.Tamil]: () => import('./i18n/ta.json'),\n [Language.Thai]: () => import('./i18n/th.json'),\n [Language.Tagalog]: () => import('./i18n/tl.json'),\n [Language.Turkish]: () => import('./i18n/tr.json'),\n [Language.Ukrainian]: () => import('./i18n/uk.json'),\n [Language.Urdu]: () => import('./i18n/ur.json'),\n [Language.Vietnamese]: () => import('./i18n/vi.json'),\n [Language.ChineseTraditional]: () => import('./i18n/zh-TW.json'),\n [Language.ChineseSimplified]: () => import('./i18n/zh.json'),\n});\n\n// Register translations immediately on module import\ni18nRegistry.registerLoader('studio', studioTranslations);\n\n/**\n * Studio Context Value\n * Includes portal container for high z-index dropdown rendering\n */\ninterface StudioContextValue {\n collapsed: boolean;\n toggleCollapsed: () => void;\n portalContainer: HTMLElement | null;\n setPortalContainer: (container: HTMLElement | null) => void;\n}\n\nconst StudioContext = createContext<StudioContextValue | undefined>(undefined);\n\n/**\n * Runs GTS Package restore when registry is available.\n * Must be mounted inside StudioProvider and under HAI3Provider (useHAI3).\n */\nconst RestoreGtsPackageOnMount: React.FC = () => {\n const app = useHAI3();\n useRestoreGtsPackage(app.screensetsRegistry);\n return null;\n};\n\nexport const useStudioContext = () => {\n const context = useContext(StudioContext);\n if (!context) {\n throw new Error('useStudioContext must be used within StudioProvider');\n }\n return context;\n};\n\ninterface StudioProviderProps {\n children: ReactNode;\n}\n\nexport const StudioProvider: React.FC<StudioProviderProps> = ({ children }) => {\n const [collapsed, setCollapsed] = useState(() =>\n loadStudioState(STORAGE_KEYS.COLLAPSED, false)\n );\n const [portalContainer, setPortalContainer] = useState<HTMLElement | null>(null);\n\n // Initialize persistence effects on mount\n useEffect(() => {\n const cleanup = initPersistenceEffects();\n return cleanup;\n }, []);\n\n // Restore theme, language, mock from localStorage\n useRestoreStudioSettings();\n\n const toggleCollapsed = useCallback(() => {\n setCollapsed((prev) => {\n const newValue = !prev;\n saveStudioState(STORAGE_KEYS.COLLAPSED, newValue);\n return newValue;\n });\n }, []);\n\n return (\n <StudioContext.Provider\n value={{\n collapsed,\n toggleCollapsed,\n portalContainer,\n setPortalContainer,\n }}\n >\n <RestoreGtsPackageOnMount />\n {children}\n </StudioContext.Provider>\n );\n};\n\nStudioProvider.displayName = 'StudioProvider';\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport { clamp } from 'lodash';\nimport { eventBus } from '@hai3/react';\nimport type { Position, Size } from '../types';\nimport { loadStudioState } from '../utils/persistence';\nimport { STORAGE_KEYS } from '../types';\nimport { StudioEvents } from '../events/studioEvents';\n\nconst VIEWPORT_MARGIN = 20;\n\nfunction clampToViewport(pos: Position, size: Size): Position {\n const maxX = Math.max(VIEWPORT_MARGIN, window.innerWidth - size.width - VIEWPORT_MARGIN);\n const maxY = Math.max(VIEWPORT_MARGIN, window.innerHeight - size.height - VIEWPORT_MARGIN);\n return {\n x: clamp(pos.x, VIEWPORT_MARGIN, maxX),\n y: clamp(pos.y, VIEWPORT_MARGIN, maxY),\n };\n}\n\ninterface UseDraggableProps {\n panelSize: Size;\n storageKey?: string;\n}\n\nexport const useDraggable = ({ panelSize, storageKey = STORAGE_KEYS.POSITION }: UseDraggableProps) => {\n // Calculate default position (bottom-right with margin)\n const getDefaultPosition = (): Position => ({\n x: window.innerWidth - panelSize.width - VIEWPORT_MARGIN,\n y: window.innerHeight - panelSize.height - VIEWPORT_MARGIN,\n });\n\n const [position, setPosition] = useState<Position>(() =>\n clampToViewport(loadStudioState(storageKey, getDefaultPosition()), panelSize)\n );\n const [isDragging, setIsDragging] = useState(false);\n const dragStartPos = useRef<Position>({ x: 0, y: 0 });\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n setIsDragging(true);\n dragStartPos.current = {\n x: e.clientX - position.x,\n y: e.clientY - position.y,\n };\n }, [position]);\n\n useEffect(() => {\n if (!isDragging) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n const maxX = Math.max(VIEWPORT_MARGIN, window.innerWidth - panelSize.width - VIEWPORT_MARGIN);\n const maxY = Math.max(VIEWPORT_MARGIN, window.innerHeight - panelSize.height - VIEWPORT_MARGIN);\n const newX = clamp(e.clientX - dragStartPos.current.x, VIEWPORT_MARGIN, maxX);\n const newY = clamp(e.clientY - dragStartPos.current.y, VIEWPORT_MARGIN, maxY);\n\n const newPosition = { x: newX, y: newY };\n setPosition(newPosition);\n\n // Emit appropriate event based on storage key\n const eventName = storageKey === STORAGE_KEYS.BUTTON_POSITION\n ? StudioEvents.ButtonPositionChanged\n : StudioEvents.PositionChanged;\n eventBus.emit(eventName, { position: newPosition });\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n };\n }, [isDragging, panelSize.width, panelSize.height, storageKey]);\n\n useEffect(() => {\n const handleResize = () => {\n setPosition((prev) => {\n const clamped = clampToViewport(prev, panelSize);\n if (clamped.x === prev.x && clamped.y === prev.y) return prev;\n const eventName =\n storageKey === STORAGE_KEYS.BUTTON_POSITION\n ? StudioEvents.ButtonPositionChanged\n : StudioEvents.PositionChanged;\n eventBus.emit(eventName, { position: clamped });\n return clamped;\n });\n };\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [panelSize.width, panelSize.height, panelSize, storageKey]);\n\n return {\n position,\n isDragging,\n handleMouseDown,\n };\n};\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { clamp } from 'lodash';\nimport { eventBus } from '@hai3/react';\nimport type { Size } from '../types';\nimport { loadStudioState } from '../utils/persistence';\nimport { STORAGE_KEYS, PANEL_CONSTRAINTS } from '../types';\nimport { StudioEvents } from '../events/studioEvents';\n\nexport const useResizable = () => {\n const [size, setSize] = useState<Size>(() =>\n loadStudioState(STORAGE_KEYS.SIZE, {\n width: PANEL_CONSTRAINTS.DEFAULT_WIDTH,\n height: PANEL_CONSTRAINTS.DEFAULT_HEIGHT,\n })\n );\n const [isResizing, setIsResizing] = useState(false);\n const resizeStartRef = useRef<{ mouseX: number; mouseY: number; width: number; height: number } | null>(null);\n\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n e.stopPropagation(); // Don't trigger drag\n\n // Store initial mouse position and current size\n resizeStartRef.current = {\n mouseX: e.clientX,\n mouseY: e.clientY,\n width: size.width,\n height: size.height,\n };\n\n setIsResizing(true);\n }, [size.width, size.height]);\n\n useEffect(() => {\n if (!isResizing || !resizeStartRef.current) return;\n\n const startState = resizeStartRef.current;\n\n // Prevent text selection during resize\n document.body.style.userSelect = 'none';\n document.body.style.cursor = 'nwse-resize';\n\n const handleMouseMove = (e: MouseEvent) => {\n // Calculate delta from initial mouse position\n const deltaX = e.clientX - startState.mouseX;\n const deltaY = e.clientY - startState.mouseY;\n\n // Apply delta to initial size\n const newWidth = clamp(\n startState.width + deltaX,\n PANEL_CONSTRAINTS.MIN_WIDTH,\n PANEL_CONSTRAINTS.MAX_WIDTH\n );\n const newHeight = clamp(\n startState.height + deltaY,\n PANEL_CONSTRAINTS.MIN_HEIGHT,\n PANEL_CONSTRAINTS.MAX_HEIGHT\n );\n\n const newSize = { width: newWidth, height: newHeight };\n setSize(newSize);\n eventBus.emit(StudioEvents.SizeChanged, { size: newSize });\n };\n\n const handleMouseUp = () => {\n setIsResizing(false);\n resizeStartRef.current = null;\n // Restore text selection\n document.body.style.userSelect = '';\n document.body.style.cursor = '';\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n\n return () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n // Ensure cleanup on unmount\n document.body.style.userSelect = '';\n document.body.style.cursor = '';\n };\n }, [isResizing]);\n\n return {\n size,\n isResizing,\n handleMouseDown,\n };\n};\n","import React from 'react';\nimport {\n useHAI3,\n useRegisteredPackages,\n useActivePackage,\n eventBus,\n HAI3_ACTION_MOUNT_EXT,\n HAI3_SCREEN_DOMAIN,\n type ScreenExtension,\n type Extension,\n} from '@hai3/react';\nimport { ButtonVariant } from '@hai3/uikit';\nimport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownButton,\n} from '@hai3/uikit';\nimport { useStudioContext } from '../StudioProvider';\nimport { useTranslation } from '@hai3/react';\nimport { StudioEvents } from '../events/studioEvents';\n\n/**\n * Type guard to check if an extension is a ScreenExtension.\n * ScreenExtension has a 'presentation' field with an object value.\n */\nfunction isScreenExtension(ext: Extension): ext is ScreenExtension {\n return 'presentation' in ext && typeof (ext as ScreenExtension).presentation === 'object';\n}\n\n/**\n * MfePackageSelector Component\n * Displays a dropdown of registered GTS packages and allows switching between them.\n */\nexport interface MfePackageSelectorProps {\n className?: string;\n}\n\nexport const MfePackageSelector: React.FC<MfePackageSelectorProps> = ({\n className = '',\n}) => {\n const app = useHAI3();\n const registry = app.screensetsRegistry;\n const { portalContainer } = useStudioContext();\n const { t } = useTranslation();\n const packages = useRegisteredPackages();\n const activePackage = useActivePackage();\n\n // Early return guard: screensetsRegistry is optional on HAI3App\n if (!registry) {\n return null;\n }\n\n const handlePackageChange = async (selectedPackageId: string) => {\n // Get all extensions for the selected package\n const extensions = registry.getExtensionsForPackage(selectedPackageId);\n\n // Filter for screen-domain extensions\n const screenExtensions = extensions.filter(\n (ext: Extension) => ext.domain === HAI3_SCREEN_DOMAIN && isScreenExtension(ext)\n ) as ScreenExtension[];\n\n if (screenExtensions.length === 0) {\n console.warn(`No screen extensions found for package: ${selectedPackageId}`);\n return;\n }\n\n // Sort by presentation.order\n screenExtensions.sort((a, b) => (a.presentation.order ?? 0) - (b.presentation.order ?? 0));\n\n // Mount the first screen extension\n const firstExtension = screenExtensions[0];\n await registry.executeActionsChain({\n action: {\n type: HAI3_ACTION_MOUNT_EXT,\n target: HAI3_SCREEN_DOMAIN,\n payload: { extensionId: firstExtension.id },\n },\n });\n eventBus.emit(StudioEvents.ActivePackageChanged, { activePackageId: selectedPackageId });\n };\n\n return (\n <div className={`flex items-center justify-between ${className}`}>\n <label className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {t('studio:controls.gts_package')}\n </label>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <DropdownButton\n variant={ButtonVariant.Outline}\n disabled={packages.length <= 1}\n >\n {activePackage || 'No package'}\n </DropdownButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" container={portalContainer} className=\"z-[99999] pointer-events-auto\">\n {packages.map((pkg) => (\n <DropdownMenuItem\n key={pkg}\n onClick={() => handlePackageChange(pkg)}\n >\n {pkg}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n};\n\nMfePackageSelector.displayName = 'MfePackageSelector';\n","import React from 'react';\nimport { upperFirst } from 'lodash';\nimport { useTheme, useTranslation } from '@hai3/react';\nimport { ButtonVariant } from '@hai3/uikit';\nimport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownButton,\n} from '@hai3/uikit';\nimport { useStudioContext } from '../StudioProvider';\n\n/**\n * ThemeSelector Component\n * Uses useTheme hook for theme selection using DropdownMenu\n */\n\nexport interface ThemeSelectorProps {\n className?: string;\n}\n\nexport const ThemeSelector: React.FC<ThemeSelectorProps> = ({\n className = '',\n}) => {\n const { currentTheme, themes, setTheme } = useTheme();\n const { portalContainer } = useStudioContext();\n const { t } = useTranslation();\n\n const formatThemeName = (themeName: string): string => {\n return themeName\n .split('-')\n .map(word => upperFirst(word))\n .join(' ');\n };\n\n return (\n <div className={`flex items-center justify-between ${className}`}>\n <label className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {t('studio:controls.theme')}\n </label>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <DropdownButton variant={ButtonVariant.Outline}>\n {formatThemeName(currentTheme || '')}\n </DropdownButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" container={portalContainer} className=\"z-[99999] pointer-events-auto\">\n {themes.map((theme) => (\n <DropdownMenuItem\n key={theme.id}\n onClick={() => setTheme(theme.id)}\n >\n {formatThemeName(theme.name || theme.id)}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n};\n\nThemeSelector.displayName = 'ThemeSelector';\n","import { useTranslation, LanguageDisplayMode, TextDirection, SUPPORTED_LANGUAGES, getLanguageMetadata, type Language } from '@hai3/react';\nimport { ButtonVariant } from '@hai3/uikit';\nimport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n Button,\n} from '@hai3/uikit';\nimport { useStudioContext } from '../StudioProvider';\n\n/**\n * LanguageSelector constants\n */\nconst FALLBACK_SELECT_LANGUAGE_TEXT = 'Select language';\nconst RTL_INDICATOR_SUFFIX = ' (RTL)';\n\nexport interface LanguageSelectorProps {\n /**\n * Show language names in their native script or English\n * @default LanguageDisplayMode.Native\n */\n displayMode?: LanguageDisplayMode;\n}\n\n/**\n * Language Selector Component\n *\n * Allows users to switch between supported languages\n * Changes apply immediately without page reload\n * Automatically updates HTML dir attribute for RTL support\n */\nexport function LanguageSelector({\n displayMode = LanguageDisplayMode.Native\n}: LanguageSelectorProps = {}) {\n const { t, language, setLanguage } = useTranslation();\n const { portalContainer } = useStudioContext();\n\n const currentLanguage = language ? getLanguageMetadata(language) : null;\n\n return (\n <div className=\"flex items-center justify-between\">\n <label className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {t('studio:controls.language')}\n </label>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant={ButtonVariant.Outline}>\n {currentLanguage\n ? (displayMode === LanguageDisplayMode.Native ? currentLanguage.name : currentLanguage.englishName)\n : FALLBACK_SELECT_LANGUAGE_TEXT\n }\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" container={portalContainer} className=\"z-[99999] pointer-events-auto\">\n {SUPPORTED_LANGUAGES.map((lang) => (\n <DropdownMenuItem\n key={lang.code}\n onClick={() => setLanguage(lang.code as Language)}\n >\n {displayMode === LanguageDisplayMode.Native ? lang.name : lang.englishName}\n {lang.direction === TextDirection.RightToLeft && RTL_INDICATOR_SUFFIX}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n}\n","import React from 'react';\nimport { useTranslation, useAppSelector, toggleMockMode, type MockState } from '@hai3/react';\nimport { Switch } from '@hai3/uikit';\n\n/**\n * API Mode Toggle Component\n * Toggles between mock and real API mode via centralized mock state.\n *\n * Dispatches mock toggle event that mockEffects handles.\n * Framework manages ALL mock plugins (global and instance-level) automatically.\n */\n\nexport interface ApiModeToggleProps {\n className?: string;\n}\n\nexport const ApiModeToggle: React.FC<ApiModeToggleProps> = ({\n className,\n}) => {\n const { t } = useTranslation();\n const enabled = useAppSelector((state) => {\n const mockState = (state as { mock?: MockState }).mock;\n return mockState?.enabled ?? false;\n });\n\n const handleToggle = (checked: boolean) => {\n toggleMockMode(checked);\n };\n\n return (\n <div className={`flex items-center justify-between h-9 ${className ?? ''}`}>\n <label\n htmlFor=\"api-mode-toggle\"\n className=\"text-sm text-muted-foreground cursor-pointer select-none whitespace-nowrap\"\n >\n {t('studio:controls.mockApi')}\n </label>\n <Switch\n id=\"api-mode-toggle\"\n checked={enabled}\n onCheckedChange={handleToggle}\n />\n </div>\n );\n};\n\nApiModeToggle.displayName = 'ApiModeToggle';\n","import React from 'react';\nimport { useTranslation } from '@hai3/react';\nimport { MfePackageSelector } from './MfePackageSelector';\nimport { ThemeSelector } from './ThemeSelector';\nimport { LanguageSelector } from './LanguageSelector';\nimport { ApiModeToggle } from './ApiModeToggle';\n\nexport const ControlPanel: React.FC = () => {\n const { t } = useTranslation();\n\n return (\n <div className=\"space-y-4\">\n <div className=\"space-y-3\">\n <h3 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wider\">\n {t('studio:controls.heading')}\n </h3>\n\n <div className=\"space-y-3\">\n <MfePackageSelector />\n <ApiModeToggle />\n <ThemeSelector />\n <LanguageSelector />\n </div>\n </div>\n </div>\n );\n};\n\n ControlPanel.displayName = 'ControlPanel';\n","import React from 'react';\nimport { useTranslation } from '@hai3/react';\nimport { Card } from '@hai3/uikit';\nimport { Button, ButtonVariant, ButtonSize } from '@hai3/uikit';\nimport { useDraggable } from './hooks/useDraggable';\nimport { useResizable } from './hooks/useResizable';\nimport { useStudioContext } from './StudioProvider';\nimport { ControlPanel } from './sections/ControlPanel';\nimport { STORAGE_KEYS } from './types';\n\nexport const StudioPanel: React.FC = () => {\n const { toggleCollapsed, setPortalContainer } = useStudioContext();\n const { t } = useTranslation();\n const portalRef = React.useRef<HTMLDivElement>(null);\n\n // Initialize hooks\n const { size, isResizing: _isResizing, handleMouseDown: handleResizeMouseDown } = useResizable();\n\n const { position, isDragging, handleMouseDown: handleDragMouseDown } = useDraggable({\n panelSize: size,\n storageKey: STORAGE_KEYS.POSITION,\n });\n\n // Register portal container with context on mount\n React.useEffect(() => {\n setPortalContainer(portalRef.current);\n return () => setPortalContainer(null);\n }, [setPortalContainer]);\n\n return (\n <>\n {/* High z-index portal container for dropdowns */}\n <div\n ref={portalRef}\n className=\"studio-portal-container fixed z-[99999] pointer-events-none\"\n />\n\n <div\n className=\"studio-panel fixed z-[10000]\"\n style={{\n left: `${position.x}px`,\n top: `${position.y}px`,\n width: `${size.width}px`,\n height: `${size.height}px`,\n }}\n >\n <Card className=\"h-full w-full flex flex-col overflow-hidden bg-white/20 dark:bg-black/50 backdrop-blur-md backdrop-saturate-[180%] border border-white/30 dark:border-white/20 shadow-[0_8px_32px_rgba(0,0,0,0.2)]\">\n {/* Header with drag handle */}\n <div\n className=\"studio-header px-4 py-3 border-b border-border/50 select-none flex items-center justify-between\"\n onMouseDown={handleDragMouseDown}\n style={{ cursor: isDragging ? 'grabbing' : 'grab' }}\n >\n <h2 className=\"text-sm font-semibold text-foreground\">{t('studio:title')}</h2>\n <Button\n variant={ButtonVariant.Ghost}\n size={ButtonSize.Sm}\n onClick={toggleCollapsed}\n className=\"h-7 w-7 p-0\"\n aria-label={t('studio:aria.collapseButton')}\n title={t('studio:aria.collapseButton')}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </Button>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 overflow-y-auto p-4\">\n <ControlPanel />\n </div>\n\n {/* Resize handle */}\n <div\n className=\"studio-resize-handle absolute bottom-1 right-1 w-5 h-5 cursor-nwse-resize\"\n onMouseDown={handleResizeMouseDown}\n role=\"button\"\n aria-label={t('studio:aria.resizeHandle')}\n title={t('studio:aria.resizeHandle')}\n tabIndex={0}\n >\n <svg\n className=\"w-5 h-5 text-muted-foreground/70 hover:text-muted-foreground transition-colors\"\n fill=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M22 22H20V20H22V22ZM22 18H20V16H22V18ZM18 22H16V20H18V22ZM18 18H16V16H18V18ZM14 22H12V20H14V22Z\" />\n </svg>\n </div>\n </Card>\n </div>\n </>\n );\n};\n\nStudioPanel.displayName = 'StudioPanel';\n","import { useEffect } from 'react';\n\n/**\n * Hook to register a keyboard shortcut (Shift+`)\n * Uses physical key location for reliable cross-browser/keyboard detection\n */\nexport const useKeyboardShortcut = (handler: () => void) => {\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n // Use e.code for physical key location (works across all keyboard layouts)\n // Backquote key with Shift modifier\n if (e.shiftKey && e.code === 'Backquote') {\n e.preventDefault(); // Prevent any potential conflicts\n handler();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [handler]);\n};\n","import React from 'react';\nimport { Button, ButtonVariant } from '@hai3/uikit';\n\ninterface GlassmorphicButtonProps {\n icon: React.ReactNode;\n onMouseDown?: (e: React.MouseEvent) => void;\n onClick?: (e: React.MouseEvent) => void;\n title?: string;\n isDragging?: boolean;\n}\n\n/**\n * Glassmorphic Button\n * Circular button with glassmorphic styling (blur, transparency, saturation)\n * Renders content behind it with a frosted glass effect\n */\nexport const GlassmorphicButton: React.FC<GlassmorphicButtonProps> = ({\n icon,\n onMouseDown,\n onClick,\n title,\n isDragging = false,\n}) => {\n return (\n <Button\n variant={ButtonVariant.Ghost}\n onMouseDown={onMouseDown}\n onClick={onClick}\n title={title}\n className=\"w-12 h-12 p-0 rounded-full flex items-center justify-center pointer-events-auto bg-white/20 dark:bg-black/50 backdrop-blur-md backdrop-saturate-[180%] border border-white/30 dark:border-white/20 shadow-[0_8px_32px_rgba(0,0,0,0.2)] hover:bg-white/30 dark:hover:bg-black/60 transition-colors\"\n style={{ cursor: isDragging ? 'grabbing' : 'grab' }}\n >\n {icon}\n </Button>\n );\n};\n\nGlassmorphicButton.displayName = 'GlassmorphicButton';\n","import React from 'react';\n\n/**\n * Studio Icon\n * Settings/controls icon for Studio toggle button\n */\nexport const StudioIcon: React.FC<{ className?: string }> = ({ className = '' }) => {\n return (\n <svg\n className={className}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4\"\n />\n </svg>\n );\n};\n","import React, { useRef } from 'react';\nimport { useTranslation } from '@hai3/react';\nimport { useDraggable } from './hooks/useDraggable';\nimport { BUTTON_SIZE, STORAGE_KEYS } from './types';\nimport { GlassmorphicButton } from './uikit/composite/GlassmorphicButton';\nimport { StudioIcon } from './uikit/icons/StudioIcon';\n\ninterface CollapsedButtonProps {\n toggleCollapsed: () => void;\n}\n\nexport const CollapsedButton: React.FC<CollapsedButtonProps> = ({ toggleCollapsed }) => {\n const { t } = useTranslation();\n const { position, isDragging, handleMouseDown } = useDraggable({\n panelSize: BUTTON_SIZE,\n storageKey: STORAGE_KEYS.BUTTON_POSITION,\n });\n const dragStartPosition = useRef<{ x: number; y: number } | null>(null);\n\n // Handle click vs drag distinction\n const handleButtonMouseDown = (e: React.MouseEvent) => {\n dragStartPosition.current = { x: e.clientX, y: e.clientY };\n handleMouseDown(e);\n };\n\n const handleButtonClick = (e: React.MouseEvent) => {\n // Only toggle if mouse didn't move significantly (< 5px indicates click, not drag)\n if (dragStartPosition.current) {\n const dx = Math.abs(e.clientX - dragStartPosition.current.x);\n const dy = Math.abs(e.clientY - dragStartPosition.current.y);\n if (dx < 5 && dy < 5) {\n toggleCollapsed();\n }\n }\n };\n\n return (\n <div\n className=\"fixed z-[10000]\"\n style={{\n left: `${position.x}px`,\n top: `${position.y}px`,\n }}\n >\n <GlassmorphicButton\n icon={<StudioIcon className=\"w-6 h-6 text-foreground\" />}\n onMouseDown={handleButtonMouseDown}\n onClick={handleButtonClick}\n title={t('studio:aria.openButton')}\n isDragging={isDragging}\n />\n </div>\n );\n};\n\nCollapsedButton.displayName = 'CollapsedButton';\n","import React from 'react';\nimport { StudioProvider, useStudioContext } from './StudioProvider';\nimport { StudioPanel } from './StudioPanel';\nimport { useKeyboardShortcut } from './hooks/useKeyboardShortcut';\nimport { CollapsedButton } from './CollapsedButton';\n\nconst StudioContent: React.FC = () => {\n const { collapsed, toggleCollapsed } = useStudioContext();\n\n // Register keyboard shortcut (Shift + `) - toggles between collapsed button and expanded panel\n useKeyboardShortcut(toggleCollapsed);\n\n if (collapsed) {\n return <CollapsedButton toggleCollapsed={toggleCollapsed} />;\n }\n\n return <StudioPanel />;\n};\n\n// No props - services register their own mocks\nexport const StudioOverlay: React.FC = () => {\n return (\n <StudioProvider>\n <StudioContent />\n </StudioProvider>\n );\n};\n\nStudioOverlay.displayName = 'StudioOverlay';\n"]}
|