{"hash":"b5957c3d2b8adf17","builtAt":"2026-08-07T14:38:07.176Z","stats":{"documents":468,"ancestors":189,"bytes":4083937},"documents":[{"id":"apps","v":"f519a9a871a660ed","p":"root","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Apps","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"modified":{"at":"2021-03-30T11:45:56+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1617104756448,"ct":1617104756448,"a_depth":0,"a":[],"a_forms":[],"inheritedLocks":[null],"stamps":[],"previous":{"v":"934a2441db88a83d","f":{"id":"folder","v":"initial","text":"Folder"}},"dts":1738944388554},{"id":"system","v":"959c6d4fbbaa1ab6","previous":{"v":"1ba34b3099b510df","f":{"id":"system-folder-form","v":"ab9e900950ea1bbd","text":"System"}},"p":"root","f":{"id":"system-folder-form","v":"f54cc6f019ba1689","text":"System"},"data":{"name":"System","description":"The System Folder contains common `Forms`,`Commands` and other relevant data necessary for the operation of the System."},"locks":[],"created":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"modified":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"t":1707217445495,"ct":1707217445495,"a_depth":0,"a":[],"a_forms":[],"inheritedLocks":[null],"stamps":[],"meta":{"modified":{"at":"2024-02-06T11:04:05+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1738849329451},{"a":[],"a_depth":0,"a_forms":[],"created":{"at":"2025-06-25T11:20:49+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1750850449734,"data":{"description":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Test"},"f":{"id":"folder","text":"Folder","v":"5bc49cc541bc2b80"},"id":"root-test-folder","inheritedLocks":[null],"locks":[],"modified":{"at":"2025-06-25T11:20:57+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"root","previous":{"v":"initial"},"stamps":[],"t":1750850457145,"v":"b355c758ca655795"},{"id":"c9b12874-99d0-40e8-86cc-c3fe0477a15a","v":"f33aba566bbf8baa","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Benachrichtigungen","label":"","description":"","namedIcon":"fas fa-bell","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[{}]},"locks":[],"created":{"at":"2018-12-03T13:31:53+00:00","by":"c5ed555f-cc11-463b-960b-0a60b3118e69","from":"","client":"server"},"modified":{"at":"2021-08-03T11:07:19+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328128,"ct":1721196328128,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"0d2a39a5aeb20f3e","f":{"id":"application-form","v":"494d7694e82e9921","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1737111143549},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2019-04-16T13:17:34+00:00","by":"8e6c22aa-8c69-4ff8-919a-7032841cf636","client":"server","from":""},"ct":1767871732397,"data":{"changes":[{"id":"d50e4079-21f8-400a-82c2-cda38594e773","text":"Such-, Sortier-, Filterleiste","v":"03cc1eadf820d10e"},{"id":"0be3ca30-b011-40d9-a03f-c2726d823bf6","text":"PDF Anzeige","v":"initial"},{"id":"47939799-967d-4117-9269-33dc24b8fdc4","text":"Navigation","v":"initial"},{"id":"a3add107-ea9e-4887-88c5-27d48d30361a","text":"Filterleiste","v":"initial"},{"id":"949024ac-d344-4d69-bbbf-e0164b2f7b04","text":"Menü-Leiste","v":"initial"},{"id":"41067d24-88e1-4125-98b7-ae1dcfd3af2a","text":"Datei-Anzeige","v":"initial"},{"id":"b078e945-3531-42ae-840c-b9bcf94208f0","text":"Kommentare","v":"initial"},{"id":"24b16fed-59b2-4e11-b359-46d32c0acf7e","text":"Referenz-Felder","v":"initial"},{"id":"65ee376c-7189-4339-ba99-b4f3cd54d249","text":"E-Mail Felder","v":"initial"},{"id":"a76a5aa1-bd72-4fbf-8897-15dde597bc9e","text":"Datum & Dauer Felder","v":"initial"},{"id":"cc9802f2-237a-4767-b053-2ef1a911c161","text":"Zeiterfassung","v":"initial"},{"id":"f30592df-8bf5-4d16-b4b3-4e87ca55d2b5","text":"Pings","v":"initial"},{"id":"2cab0a53-9be7-479d-8415-c4beda2701e8","text":"E-Mail Benachrichtigungen","v":"initial"},{"id":"f96bcf41-1e8d-43f5-9125-b47db3ed2c68","text":"Select-Felder","v":"initial"},{"id":"ca6fa776-6e49-4b7b-9171-48dae3faaad5","text":"Pings","v":"initial"},{"id":"a0c8e445-557f-4db0-af0a-b276e16551e9","text":"E-Mail Benachrichtigungen","v":"initial"},{"id":"b5b5400c-7ae6-4365-aac0-e7be8e94b4e7","text":"Dialoge","v":"initial"},{"id":"c0205a6d-f9b3-4129-8176-84f6a3921c44","text":"\"Neu\" zeigt erstelltes Dokument direkt an","v":"initial"},{"id":"0c2e7a59-f044-4e29-93be-4cd596344d6d","text":"Zeiterfassung","v":"initial"},{"id":"d25b9e6e-5e41-42a1-be6d-3751b9f9ab87","text":"Arbeitszeit & Zeiterfassung","v":"initial"}],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":"aeppic-local://64df0064-51b0-4b11-8f76-48e5487b8927/1","fileInfo":{"created":null,"imported":1627649015126,"modified":1627649008691,"read":null},"iconUrl":null,"mediaInfo":{},"name":"Bizpin_Logo_Signet_color_01.svg","sha1":null,"size":1060,"thumbnailUrl":null,"type":"image/svg+xml"},"label":"","name":"Bizpin ","namedIcon":"","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"16dc41cbc8c00e77"},"id":"77ee8815-2c3a-4bb5-abd9-90541a545a24","inheritedLocks":[null,null],"locks":[],"meta":{},"modified":{"at":"2026-01-08T11:30:33+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"apps","previous":{"v":"7a09f5c41b7dd910"},"stamps":[],"t":1767871833680,"v":"3ee67246f6da5d2d"},{"id":"177b1d7c-255c-4d16-b367-e9622b4db575","v":"de4eaa1d48dccd49","p":"system","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Dialogs","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-05-09T13:20:56+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-05-09T13:20:56+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719319448724,"ct":1719319448724,"a_depth":1,"a":["system"],"a_forms":["system-folder-form"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"initial","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"}},"meta":{"modified":{"at":"2024-06-25T14:44:08+02:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1736781459052},{"id":"3d43a3f5-fea4-488d-9fc1-9dee5e694623","v":"cffcf6af92921761","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"DMS","label":"","description":"","namedIcon":"fas fa-folder-open","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[{"id":"6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2","v":"91fa57d6d0cac1e7","text":"Datei"}],"controls":[],"designs":[],"changes":[{"id":"a7c41fd3-1c22-4475-996e-1a840bf72c33","v":"initial","text":"Interaktive Dokumente"},{"id":"e7f1dfec-1434-4d29-9d9b-825983c2ac33","v":"initial","text":"Dateien"},{"id":"40e050f4-31bc-44a9-9bd3-f79c9cc29c0f","v":"initial","text":"Ordner Sortierung"},{"id":"a2a94b59-dc2b-424d-9f13-798d53fea16a","v":"initial","text":"Freigabe Workflow"},{"id":"a82293a6-c7d5-4883-bed9-1e901f6f3568","v":"initial","text":"Datei Thumbnails"},{"id":"7e4d4f55-c72f-4614-851f-377aab788136","v":"initial","text":"Lokale Suche"}]},"locks":[],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"modified":{"at":"2022-03-16T09:40:19+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196327554,"ct":1721196327554,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"fd5859f333820645","f":{"id":"application-form","v":"29335d8d5cd3c1a1","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:27+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1719235414061},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2022-04-21T11:59:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1721196328127,"data":{"changes":[{"id":"6e860436-12c2-4f98-b8e3-59ff73a29ea7","text":"Grundriss & Mieter","v":"initial"},{"id":"b0ae7f74-e145-4c6c-9526-1e98c662341d","text":"Grundriss","v":"initial"},{"id":"124b146e-cccc-432e-a16a-e606c35f1c18","text":"Vertrag + Mieter in Grundriss","v":"initial"},{"id":"b2fc1aa7-f71d-4a54-a962-568ad39db774","text":"Verträge","v":"initial"},{"id":"85613c9e-a4ce-490e-8976-072dcbfbccb4","text":"Verträge","v":"initial"},{"id":"efc15459-b127-4eb8-8273-7e8ef04abee2","text":"Notizen","v":"initial"}],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"7105a939-989c-4154-96e8-44f17f556b2a","text":"Einheit","v":"07617f62d5273aab"},{"id":"b4b13fc6-7d06-4832-93b0-cd27405e269d","text":"Vertrag","v":"3550aa9759487a76"},{"id":"3c0a7011-6a65-4ed3-98e1-06e4f5a314d8","text":"Mieter","v":"c3c15b0253388dae"},{"id":"28527c6d-4f85-4881-8f5d-948021a60ad0","text":"Mängelmeldung","v":"61680ec9e0077b24"},{"id":"39cc8c10-ef0e-4780-bec0-ba6b01b4d200","text":"Geplante Vertrags-Anpassung","v":"a70f9fc245322bf1"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"B/Rooms: Gebäude","namedIcon":"","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"86189c5a-b9f4-445a-879f-d94574960df0","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:04:22+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"5d264102d7c85cfc"},"stamps":[],"t":1758276262403,"v":"36c6d668d4c449bc"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-06-23T12:01:27+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1721196328126,"data":{"changes":[{"id":"1d3f2547-8606-46e4-8a00-064fc310ee5b","text":"Labels","v":"60ab4114a2faaaaa"},{"id":"491dca95-f932-4bfb-9c71-80e925ac1c21","text":"Kommentare und Pings","v":"initial"},{"id":"3d45d76d-8081-4ebd-a663-e5064d588fe6","text":"Datei-Ordner für Teilprojekte","v":"initial"},{"id":"c2c0df2d-de8e-4876-ac1b-5889adb67920","text":"Fällig-Feld","v":"initial"},{"id":"6c4cf076-bed0-4d9d-8ae7-c048d9f0284e","text":"Meilensteine","v":"initial"}],"controls":[{"id":"605b4b46-ddbe-4ed2-99fa-537ec332dbbf","text":"Fallback Controls","v":"initial"}],"description":"","designs":[{"id":"b55eaea8-e746-4fa6-85a8-514c2268f1b8","text":"Fallback Designs","v":"4d0534e3b7fe8e93"},{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"0deb4864-cbb6-420c-99ee-337c7444ab24","text":"Aufgabe","v":"e5c3428719123243"},{"id":"766c24c5-542c-4887-bf65-43ad85e6c476","text":"Meilenstein","v":"initial"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"Projekte","name":"B/Core: Projekte","namedIcon":"fa fa-tasks","namedIconColor":"","related":[],"searchFilters":[{"id":"e0b7bf1c-3d50-401b-b1a6-d22ae74124ae","text":"Aufgaben","v":"initial"}],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"59edbdbc-2cab-426a-bb42-6e57c5158e4f","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-15T14:48:11+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"af637331cfcf4098"},"stamps":[],"t":1757947691592,"v":"b9c396b536e79fc1"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2019-08-22T12:20:26+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1721196328156,"data":{"changes":[{"id":"31f2e6a6-0086-460a-9266-a3f2261e9ec3","text":"Navigation","v":"initial"},{"id":"d688659c-58c3-450b-84c1-0f82e7063481","text":"Sortierung","v":"initial"},{"id":"aa02d207-ef04-4ce6-955b-566913221596","text":"Aktivitäten","v":"initial"},{"id":"b6a470f4-abdc-471f-96ae-14693fc6253b","text":"Aktivitäten","v":"initial"},{"id":"7962f179-ef48-4c4f-b7fc-dc76000b83df","text":"DokuShare","v":"initial"},{"id":"a624e399-ac59-41be-a887-484d033d4610","text":"Leistungen","v":"initial"},{"id":"3ff96342-d8b0-49f3-99c9-d7601c8ab2e3","text":"Zahlungen","v":"initial"},{"id":"02d1f981-7edc-479d-bf8c-6365f2f29803","text":"Projekte und Verträge","v":"initial"},{"id":"96f066e0-62f0-4bea-a21e-e7eb4676ceac","text":"DokuShare","v":"initial"},{"id":"15090134-2f60-4763-a5b4-606e63790a1f","text":"Vertrags-Zahlung","v":"initial"},{"id":"6936bd59-2182-4659-916c-754f73a53b85","text":"Leistungen","v":"initial"},{"id":"772eea42-6158-4a5c-ab41-c9cde0ed3fcb","text":"Planungs-Datum","v":"initial"},{"id":"9ffa9e12-5c50-4612-83bc-75d59a8156a3","text":"Kontakt direkt erstellen","v":"initial"},{"id":"355b821e-5966-441d-ac90-037b33a672b5","text":"Aufgabe (Leistung)","v":"initial"},{"id":"3a4b0f60-c793-4519-9eef-f18f8204f0b4","text":"","v":"initial"},{"id":"2e3a51eb-8936-4e54-8e13-1947263cc0aa","text":"Dokumenten Share","v":"initial"},{"id":"90fc4854-eda0-49d2-b8de-78f25b319c5d","text":"Aufgaben: Zeitanzeige","v":"initial"}],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"125d3e08-d0c5-417c-b4fe-172bf5fade99","text":"Ansprechpartner mit Bestätigung","v":"initial"},{"id":"41da8494-ec0a-4b13-bad7-162f3f1fbba4","text":"Architektur","v":"initial"},{"id":"88b1f60e-71f6-46f5-94ea-3d7bbe972950","text":"Aufgabe (Leistung)","v":"3cac4d3a2643d460"},{"id":"f69da93c-1d0b-4f18-97f4-82e61073e157","text":"Auswertung: Verträge","v":"initial"},{"id":"9f8071fd-6f25-489e-8562-4399701546b0","text":"Blower Door Test","v":"9becf7b028e79a70"},{"id":"281c6bd6-2e24-42ba-868e-b63cbba4254f","text":"Brandschutz","v":"3436195598697301"},{"id":"34d811a8-9de0-4b20-bc24-c55826a06748","text":"Brandschutzleitung","v":"8bc7d92130621bca"},{"id":"c6349b48-9561-4c06-9200-fe9df9b6fb3e","text":"Dokumenten Share","v":"0a0d46f1716e050f"},{"id":"82d9d875-0f38-4201-a44b-8a1fe7a5fefa","text":"Dokumenten Share: E-Mail Token Vorlage *Baustelle*","v":"5d5a4ba0d7a3e967"},{"id":"aba69172-0a71-41ed-8d72-8ef7a3cb016e","text":"Dokumenten Share: E-Mail Token Vorlage *Kunde*","v":"0a5cb89dd6a37d40"},{"id":"11a327ee-c8e6-453a-bcdd-f585877f2fd8","text":"Energieausweis","v":"ee0e4052667eecd6"},{"id":"fa3777b5-bfff-43ac-a5c5-ea15486dd334","text":"ENEV","v":"8a2dc4fcc62236d2"},{"id":"6c501e3a-25c4-43c1-bd96-ec99333f5930","text":"Erfüllungs-Planung","v":"initial"},{"id":"7628f42e-260d-49b9-a2d6-30cb0973c1b6","text":"Förderung","v":"dc21ac0e5789c1e5"},{"id":"10b3d98f-08ea-4423-945a-0d1650321b09","text":"Formulare Senden: E-Mail Token Vorlage","v":"664a2a90c1deef32"},{"id":"8d8f6fdb-6f78-4e2a-b585-bd80f4dbaa1d","text":"Gesprächsnotiz","v":"d724b6a57d142002"},{"id":"9fcbed35-0759-4c2d-848b-aaa1f968f3ff","text":"Gesprächsnotiz Kenntnisnahme: E-Mail Token Vorlage","v":"28b3ebbb512895af"},{"id":"4862401e-e182-451c-a855-ef2e9b9441c5","text":"KFW","v":"208b83e233c20e72"},{"id":"fb822f2f-880c-4676-be8b-cc557e822bc4","text":"Leistungen","v":"5d4724a2b60a5709"},{"id":"59b7188e-1296-4466-a9c2-d6255496e7d6","text":"Mail","v":"7f847e28709c2a05"},{"id":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","text":"Projection: Projekt","v":"57a134726d46332c"},{"id":"98c77209-1245-43d6-90b5-8625183f470c","text":"Projekt","v":"befc083ffe8981f2"},{"id":"3b0389d0-78b1-4e26-adf0-20086c87ae40","text":"Projektdateien","v":"d6cd3f8852d6d658"},{"id":"e10a8072-024c-44a7-80e3-4cd75c6ec1ea","text":"Rechnung","v":"92cc998fbddd97a4"},{"id":"03c16e2b-302e-4c2c-93c1-931679919e0b","text":"Schallschutz","v":"008f81ef891e5b3b"},{"id":"2c01a15d-c14d-44c6-adc5-d9b3fdc692b7","text":"Schallschutz Kontrollen","v":"f6a1cc74ceed6721"},{"id":"328998fb-7e67-4fca-b40b-377d9a07776d","text":"Schallschutzmessung","v":"d557a49e7582048b"},{"id":"5ff471b3-1769-408b-825a-69d6416757c3","text":"Simulation (jeweils separat)","v":"ccfae3f71c637d37"},{"id":"d16936c1-7ccc-40f1-b526-d2d9ce37ebd2","text":"Teambesprechung","v":"fdc78dfed298dc36"},{"id":"859f370d-2f40-4ab0-a841-134f57513254","text":"Vertrag","v":"65fa4ea2af8be5da"},{"id":"5152f88f-3006-46f9-959a-423139accf79","text":"Zu versendende Formulare","v":"39ef9449c38b8887"},{"id":"03d12b14-6ff2-45ea-877e-6b326b319b86","text":"Protokoll der Projektübergabe","v":"f2d61d6e2aa4cba7"},{"id":"f7583ba1-ddbc-4c46-b1fe-f7bb326fded6","text":"Fragebogen: Alle Bauvorhaben","v":"924a15a44217362d"},{"id":"b6e0328c-73b0-4bb9-85b4-d9c54b8c4745","text":"Fragebogen: Brandschutz","v":"a156f261cc15b69a"},{"id":"55e4b86c-4ca0-4f39-878a-a97ba0437e40","text":"Fragebogen: Fördermittel","v":"752dcb31f54c3fa7"},{"id":"177f2216-811f-4fdf-bc4a-c2cfe18cffd7","text":"Fragebogen: Schallschutz","v":"4419e8b74422b82b"},{"id":"73729d8f-7a1f-429a-a198-13efa62ee116","text":"Fragebogen: Wärmeschutz","v":"bd42b9954852afe5"},{"id":"cd95aa7a-c646-4a2b-817c-1d05d7f360ca","text":"Frage und Antwort","v":"a601701ad6614e17"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"Projekte","name":"Energieberater: Projekte","namedIcon":"fa fa-clipboard-list","namedIconColor":"","related":[],"searchFilters":[{"id":"9f8220aa-8fe3-40fd-84f1-0fe5f9707095","text":"Projekte","v":"initial"},{"id":"b672cf47-9663-4249-872b-21161d46994b","text":"Aufgaben","v":"initial"}],"searchableForms":[{"id":"98c77209-1245-43d6-90b5-8625183f470c","text":"Projekt","v":"881422e69e250e5b"}]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"94a64d89-d204-4918-b147-d717914fb03e","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:11:39+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"1e75a4e7de9283e2"},"stamps":[],"t":1758276699755,"v":"390a4a76ef90c06e"},{"id":"1e592f4f-8add-4625-b92c-47dc521fb3e3","v":"faaeb28ff52d0fc7","previous":{"v":""},"p":"system","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"lockRefs":[],"created":{"at":"2017-08-24T10:36:08+02:00","by":"","from":"","client":"6d38103e-eed4-4603-82b6-79fbf34368ec"},"modified":{"at":"2017-08-24T10:36:08+02:00","by":"","from":"","client":"6d38103e-eed4-4603-82b6-79fbf34368ec"},"t":1503563768653,"ct":1503563768653,"a_depth":1,"a":["system"],"a_forms":["system-folder-form"],"inheritedLocks":[null,null],"stamps":[],"dts":1738849329451},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-08-12T08:50:11+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1721196327553,"data":{"changes":[{"id":"3d6b3a0a-81c7-4350-b144-157e4532123d","text":"Detaillierte Änderungen","v":"65a6897d21fcecce"},{"id":"bd9d4c88-662b-4747-a7a1-08aa69b8e5ed","text":"Reduzierte Darstellung","v":"initial"},{"id":"60e84096-8b42-47ff-a66f-35ef869ad222","text":"Reduzierte Darstellung","v":"initial"},{"id":"fd207be9-e71c-4bb8-b062-4ed88e107f39","text":"Anzeige des \"Wo\" vereinfacht","v":"initial"},{"id":"5d8aa40a-a1c8-4474-b2d2-6c6b47bb8fe5","text":"Archiv","v":"initial"}],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"Ereignisse","name":"B/Core: Ereignisse","namedIcon":"","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"441fb0bd-959b-446d-9aee-82f1c8ede628","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:02:30+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"cfb4270aeb4a5de7"},"stamps":[],"t":1758276150461,"v":"d64b541deefcc178"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-10-13T10:11:29+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1721196328174,"data":{"changes":[],"controls":[],"description":"NOT IN USE ANYWHERE. This is the first attempt for an agency app.","designs":[],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Casting Agentur","namedIcon":"fa fa-book-user","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"b090141a-949d-4b35-a5c2-d8f1dd937dcf","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:07:39+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"b726dbaa3525ce59"},"stamps":[],"t":1758276459884,"v":"7259ab448e7976ee"},{"f":{"id":"repository-folder-form","v":"28d007478e6061ed","text":"Repository Folder"},"p":"system","data":{"name":"Forms","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}},"contentsForm":{"text":"Form","id":"form","v":"90e2dc64dd89195a"},"customAddCommand":{"text":"","id":"","v":0},"displayTableColumns":"name,description,semver","displayTableHeaders":",,Version","displayTableDesigns":",,version"},"id":"system-forms","v":"b4a3064c964e3288","t":1469014939085,"ct":1447333257721,"previous":{"v":"4d201d5dd2baf440"},"modified":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null],"a":["system"],"a_forms":["system-folder-form"],"a_depth":1,"stamps":[],"dts":1738764369313},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-05-08T08:51:32+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":""},"ct":1721196328175,"data":{"changes":[{"id":"02fc85f5-af88-47ad-9b42-a4586abcf0dc","text":"Aufgaben","v":"initial"},{"id":"f936bad8-9fa7-4c21-b2cf-c3ca2c7a07ce","text":"Überfällige/Meine Aufgaben","v":"initial"},{"id":"163f3365-1b56-4f29-a5df-82efa7194e76","text":"Benachrichtigungen","v":"initial"},{"id":"19f474da-fdb6-44bd-ab75-db3ce322511d","text":"Überfällige Aufgaben","v":"initial"}],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"90877d25-bbae-421e-9ea7-0631dcbf11c2","text":"Aufgabe","v":"314e110686473d68"},{"id":"544d11b1-a156-4568-aeb3-2a60b2b57807","text":"Aufgabe","v":"7ef0dd2be64c963b"},{"id":"4e338459-2110-4799-8f04-1ead4cc647d0","text":"Aufgaben","v":"3046b3d758ecec8b"},{"id":"65abdd36-c20f-4742-8744-3995211cdd2f","text":"Aufgaben","v":"50b0804a470db09b"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"Persönliches Dashboard","name":"Dashboard (Mobile/Performance optimized)","namedIcon":"fa fa-user-circle","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"599db2de-4e07-4722-98bd-7f42d498b352","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:08:41+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"15decfe68b127718"},"stamps":[],"t":1758276521480,"v":"5eaf31415e487cdd"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"cloneOf":{"id":"ac9bae39-01ed-4684-b320-44da554ae085","text":"[App Template]","v":"ad3f8a0084adc076"},"created":{"at":"2025-03-18T15:52:25+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1742313145901,"data":{"changes":[],"controls":[],"description":"Mit Wartungsplanung","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"},{"id":"02132d06-c73b-4101-bde0-2fe98224a35a","text":"KeepTrack Fallback Design","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"KeepTrack 2.0","namedIcon":"","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"af6c380d-2ab5-409a-802f-46dba2b426e3","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-11-11T10:41:07+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"ac9bae39-01ed-4684-b320-44da554ae085","text":"[App Template]","v":"ad3f8a0084adc076"},"p":"apps","previous":{"v":"4e2e5c933e75337b"},"stamps":[],"t":1762857667938,"v":"2fe1a2eed02483bd"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2019-09-13T09:20:41+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1721196328200,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"9ee77d5e-cff4-42a8-a86e-447a18bbceba","text":"Fallback Design","v":"initial"},{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"f9279010-1935-4139-abbb-82d928aa09dc","text":"Erfasste Zeit","v":"8f7f2a54b77795e6"},{"id":"32db2e83-2e88-4162-b680-698423aef2c3","text":"Arbeitszeit","v":"81d4be3f632aa424"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Zeiterfassung","namedIcon":"far fa-stopwatch","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"0c440c7a-219d-4465-9cbe-2d0eff6ec7ad","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:32:03+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"37708c9468eda8e2"},"stamps":[],"t":1758277923690,"v":"3a9c80be82b23e79"},{"id":"04632e3e-9132-4927-b91d-3c28d1afe3e9","v":"e3c9656461c5180e","p":"system","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Test Bench","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-08-07T12:18:27+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2018-08-07T12:18:27+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719319448800,"ct":1719319448800,"a_depth":1,"a":["system"],"a_forms":["system-folder-form"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"initial","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"}},"meta":{"modified":{"at":"2024-06-25T14:44:08+02:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1719319448511},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2018-11-29T13:57:49+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1721196328175,"data":{"changes":[],"controls":[],"description":"","designs":[],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"xPersönliches Dashboard","namedIcon":"fas fa-user-circle","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"43f84041-0fd7-4ccb-b7b5-7a38f89ada37","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-04T08:15:29+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"68cddd19a9849418"},"stamps":[],"t":1756973729356,"v":"179dc80744a0f666"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2019-09-20T08:59:30+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1721196328179,"data":{"changes":[],"controls":[],"description":"","designs":[],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"xPersönliches Dashboard (reworked, but never used)","namedIcon":"fas fa-user-circle","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"8fa52498-fa07-4bad-87b3-5c8df671aca4","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-04T08:15:33+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"05d667a8a29927ff"},"stamps":[],"t":1756973733206,"v":"0cc7dd67bf994b77"},{"id":"5acfd7a2-33e4-498a-9150-71e1ab772bfc","v":"785e4a707e71137f","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Aufgabenverwaltung","label":"","description":"","namedIcon":"fas fa-tasks","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[{"id":"3d456c38-6282-416e-8c5e-7d20b0517a6e","v":"e4ff88ef22487536","text":"Aufgabe"},{"id":"2e3b1651-047d-47c3-841b-6f098b7bf0ff","v":"8a791c8e159cfddb","text":"Anhang"},{"id":"3ef82fa1-425d-4592-b120-1a6fc967802d","v":"initial","text":"Meilenstein"}],"controls":[],"designs":[],"changes":[{"id":"359d3894-e1dd-4ee9-be7d-ecc8112f0ae9","v":"initial","text":"Aufgabe: Zeitanzeige"}]},"locks":[],"created":{"at":"2018-12-03T15:17:21+00:00","by":"c5ed555f-cc11-463b-960b-0a60b3118e69","from":"","client":"server"},"modified":{"at":"2022-10-19T08:57:47+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328115,"ct":1721196328115,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"4d124e3942d55b4f","f":{"id":"application-form","v":"968f9b39f4549d90","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1666169867199},{"id":"d4581623-f542-4ade-86be-8b3ecec56f0e","v":"8a46a65f62fac57a","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"KeepTrack","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[{"id":"204787ca-59c2-4b11-b866-aa05fa9c9891","v":"8ebfb2cd55f2b559","text":"Arbeits-Eintrag"},{"id":"0dfd4afd-f2ec-4ff0-9a79-811badf4fed5","v":"4b6a68ca48885771","text":"Teil-Eintrag"},{"id":"d7f0c56d-8e0e-4607-911b-b0789c557d40","v":"80b8b3341a987d67","text":"Arbeit"}],"controls":[],"designs":[],"changes":[{"id":"926b4401-ced7-4f37-a152-e14d58891df2","v":"initial","text":"Barcodes & NFC"},{"id":"03f45ef9-179f-4eed-894f-ed6d870cba98","v":"initial","text":"Smartphone Layout"},{"id":"51a290ae-2a59-4437-8e95-ee60c8ca3aa8","v":"initial","text":"Dashboard"},{"id":"bfd5949b-9b67-4e7a-b2f8-f4fb3fd003a4","v":"initial","text":"Dashboard"}]},"locks":[],"created":{"at":"2022-02-28T14:58:40+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-09-05T14:07:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196327555,"ct":1721196327555,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"860fac4fd60c0634","f":{"id":"application-form","v":"29335d8d5cd3c1a1","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:27+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1716385252080},{"id":"deeef973-ce03-4557-bf75-75a059001767","v":"4d39ecfa52628efa","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Maus GmbH","label":"","description":"","namedIcon":"fa fa-tools","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[{"id":"b0e3875f-43ba-475d-9c92-98ed8da7b2ef","v":"0b27b899c3c21ba8","text":"Konstruktion: Beschichtung"},{"id":"164a9d5b-53e9-448e-b9f5-d3bd3f78cbe5","v":"e1ac6235c4c74799","text":"Konstruktion: Bohrzentrierung"},{"id":"a678e4d3-a2c1-4eeb-a106-6d47479692c8","v":"a1990670bed0a6a0","text":"Konstruktion: Drehteil"},{"id":"02eaf357-29bd-45ab-a7ae-7184787bdca1","v":"aac224a9c14fb8e0","text":"Konstruktion: Gesprächsprotokoll"},{"id":"76ccd02e-b3f5-4642-991c-d908db66aa6b","v":"5d0193b079afc216","text":"Konstruktion: Insert"},{"id":"f800b4cd-7ef2-427e-9ce0-f5834126c09d","v":"89e1d288d566acdf","text":"Konstruktion: Losteil"},{"id":"bdd70340-1c59-4f92-8249-caa534e1cb15","v":"00bc29b7f6cf021e","text":"Konstruktion: Rahmen"},{"id":"df424bea-0f38-49bf-b18a-6d6fb36b8d0b","v":"3d59e6e045c6d19f","text":"Konstruktion: Sachlochformer"},{"id":"d5d0723a-5319-4dc9-956c-a39387c6c060","v":"b42fbd5fb620d59b","text":"Beschichtung: Bild Formschale"},{"id":"bf942b55-a17d-49e2-afa5-18c52b8ad324","v":"56a4a3f2d9be62f9","text":"Beschichtung: Formschale Beschichtung"},{"id":"2e9c3a08-10d0-495d-b35a-e1fe4e7f9b44","v":"c59c9aeeda239a39","text":"Bestellungen: Bestellung"},{"id":"11f71072-0815-446f-83b2-ff5662cfa7d3","v":"b90916bcfa974ea3","text":"CAM: Logo/Klebefläche"},{"id":"b9c18d3f-2e85-4aad-ac22-5bee68fc8fb9","v":"7ae76351b4743ffb","text":"CNC: Aufspannung"},{"id":"dbcc416d-bced-4cc4-89b2-7f18ef390e9e","v":"03d8ffef0a6ac859","text":"Formenbau: Formschale"},{"id":"3834e4d0-1de2-460f-b14c-a4b3b3f85e31","v":"42831ced9e314005","text":"Formenbau: Logo und Klebefläche"},{"id":"c2c9bf3d-3127-497a-8d96-cfdca483cb97","v":"19bc220dbe1d8bd5","text":"Formenbau: Standardteil"},{"id":"756a726d-56c8-452c-9a13-d47d4e04954c","v":"876f4107192324ce","text":"Formerei: Gipsherstellung"},{"id":"d886b1d3-42a8-47d7-aa6a-4be2ad2a4357","v":"47879ad354d91a15","text":"Gießerei: Formschale"},{"id":"4da4181d-2bf5-47b9-a0d2-6f0a05dcc702","v":"ad1743c55dce300c","text":"Gussputzerei: Formschalen"},{"id":"857157fa-4c9b-4f7c-bba5-7a49646e849e","v":"01bdc234ce777c46","text":"Rahmenbau: Montierpfosten"},{"id":"530cb8ec-47ef-4d15-9257-1d548798f5fe","v":"09cb6173b5b91033","text":"Vertrieb: Auftragsvorbereitung"},{"id":"a77f917d-0d75-41b5-93e3-4c9da731ddbc","v":"335eaf7393ed91d4","text":"Vertrieb: Beschichtung"}],"controls":[],"designs":[],"changes":[{}]},"locks":[],"created":{"at":"2021-12-15T12:26:36+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-07-19T11:30:42+00:00","by":"427610a9-39dc-4014-9176-5f72aeb23263","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328172,"ct":1721196328172,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"0519907e6b012d8d","f":{"id":"application-form","v":"494d7694e82e9921","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1738311235601},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-12-10T13:06:51+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1766149821169,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Fallback Designs Bizpin","v":"87574c37fe2dfd86"}],"dialogForms":[{"id":"58c8b8e4-315d-4a8a-8ac3-e69d017640a6","text":"Projektlink","v":"d9caa126a84e8ae2"},{"id":"009c0da4-718f-43d0-964a-647e30074d94","text":"Bewerbung","v":"9441d5801f4c3c4b"},{"id":"2168bcf2-5523-4f2f-8053-7e7f8c3ceba8","text":"Agenturkürzel","v":"ca4f6d8824b2aff4"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Casting Agentur 2.0","namedIcon":"fa fa-book-user","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[{"id":"e170bb6c-f326-446d-870a-ada9d9f67230","text":"Projekt","v":"28b16e7b77c4aa83"},{"id":"8fef472f-9220-484b-99cd-bb80f208f795","text":"Rolle","v":"40df810d29107582"},{"id":"009c0da4-718f-43d0-964a-647e30074d94","text":"Bewerbung","v":"b88600afe62d3f8f"}]},"f":{"id":"application-form","text":"Application","v":"16dc41cbc8c00e77"},"id":"3fbe0efd-713a-457a-a34c-3a12aa19d6bb","inheritedLocks":[null,null],"locks":[],"meta":{},"modified":{"at":"2026-01-09T12:20:09+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"apps","previous":{"v":"8a43b8c67fe004e7"},"stamps":[],"t":1767961209224,"v":"f36cd674e733441f"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2021-10-04T11:07:17+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1721196328132,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Boards old","namedIcon":"fa fa-columns","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"089481c4-a42f-4a98-9bc9-12e9f1131f4b","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2026-03-24T13:19:54+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"p":"apps","previous":{"v":"f741ee205d8df226"},"stamps":[],"t":1774358394398,"v":"de1d4a8e831cb3a1"},{"id":"781ff5de-69db-49dc-99f0-f328b308cd7d","v":"725101d05a73c84d","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Products","label":"","description":"","namedIcon":"fas fa-box-heart","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[{"id":"0a401e72-7ef0-40f4-ac90-360b8694a2aa","v":"8b0a6b6bf87280ff","text":"Component"}],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2018-12-07T12:11:00+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-11-02T09:38:31+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328192,"ct":1721196328192,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"ebb51cc1fa3596c3","f":{"id":"application-form","v":"cc7463f7bb2b4de6","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1635845921614},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2019-10-02T14:27:06+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1721196328170,"data":{"changes":[],"controls":[{"id":"55541725-75d7-48c5-9558-f501a9e13040","text":"Controls","v":"initial"}],"description":"","designs":[{"id":"f1899d3b-4673-4033-afa0-2d9c540c326d","text":"Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"IT-Mitbestimmung","namedIcon":"far fa-clipboard-list","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[{"id":"0bb3d600-faf0-4a5c-b49f-7994d234ae76","text":"Antrag","v":"db4a6f28fbadcc39"},{"id":"50c3c7c5-c3d4-460c-b34d-0d61a4cb09ae","text":"Bestandseintrag","v":"0ce86b4dbf1fff41"}]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"009b3a60-72d5-46f6-8dc6-7f9001e03283","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-03-14T15:12:36+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"f6bf962233887952"},"stamps":[],"t":1741965156938,"v":"8300542fe566949f"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2019-01-31T15:06:40+00:00","backedBy":null,"by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","client":"server","from":"","impersonatedBy":null},"ct":1721196328139,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Calendar","namedIcon":"","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"7d22534a-76b5-4f1c-8761-af3d7a1d5111","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:07:11+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"503d51219257f131"},"stamps":[],"t":1758276431021,"v":"54e178dd62d92156"},{"id":"e4a62254-c6ab-4d0d-a9ae-81934093f6e2","v":"f6337359600ca792","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Developer","label":"","description":"","namedIcon":"fa fa-code","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2018-04-18T15:37:55+02:00","by":"","from":"","client":"server"},"modified":{"at":"2020-09-03T07:37:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328156,"ct":1721196328156,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"66d1158338e4525a","f":{"id":"application-form","v":"7afdc5922f8d042f","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1732110798927},{"id":"90340217-c9b1-46fe-9b56-163953318522","v":"fd4516fdf97081a6","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Merge View","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2017-12-22T10:18:56+01:00","by":"","from":"","client":"f850c977-4f2e-4f6c-8389-ad1230848f0e"},"modified":{"at":"2020-05-08T08:52:50+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328174,"ct":1721196328174,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"0db8a62d474c420a","f":{"id":"application-form","v":"7afdc5922f8d042f","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1540904355554},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"cloneOf":{"id":"ac9bae39-01ed-4684-b320-44da554ae085","text":"[Bizpin App Template]","v":"ffe6dc0d762dfff8"},"created":{"at":"2026-01-08T11:43:12+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"ct":1767872592440,"data":{"changes":[],"controls":[],"description":"Aeppic Component Tester","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Epic Pages ","namedIcon":"","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"0af4f8a7-729e-4318-8f82-7e976555004e","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2026-01-08T11:44:32+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"ac9bae39-01ed-4684-b320-44da554ae085","text":"[Bizpin App Template]","v":"ffe6dc0d762dfff8"},"p":"apps","previous":{"v":"88fced03e011634f"},"stamps":[],"t":1767872672924,"v":"0faa2c3c4d13b7c6"},{"id":"2a9f2f9c-28df-4418-8b85-b4158b35ed3d","v":"e11ae056e0619230","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Erinnerungen","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"modified":{"at":"2020-05-08T08:52:49+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328156,"ct":1721196328156,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"c6f2940e745c8c52","f":{"id":"application-form","v":"7afdc5922f8d042f","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1467644265255},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","client":"import","from":""},"ct":1721196328195,"data":{"changes":[],"controls":[],"description":"Not needed anymore.","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Schulungsverwaltung","namedIcon":"","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"3a8b08c2-14ef-48ee-a5b8-2ede237892a9","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:25:59+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"02c60a46671364dc"},"stamps":[],"t":1758277559065,"v":"2b2b46ed1843f5c3"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2023-10-09T14:35:10+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1721196328197,"data":{"changes":[],"controls":[],"description":"Verzeichnisse der Tierkliniken","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Verzeichnisse","namedIcon":"far fa-folder-tree","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[{"id":"da7fd443-da96-4fa3-83d9-bdbb188f09f1","text":"Futtermittel","v":"74702085ef4243e7"},{"id":"69e7c51e-ba71-4a0e-9134-15a020100648","text":"Externer Telefonverzeichniseintrag","v":"01bbeeec929802fc"},{"id":"90bcd87b-ca52-4533-9a9e-dff73b31c2fc","text":"Futtermittel","v":"6743d580b151eb75"},{"id":"e4af0e46-8a46-4741-935d-13e29befd300","text":"Medikament","v":"1ef2b32225e733e3"},{"id":"38aab2e1-ee5c-4fc2-90e9-962b4161ac22","text":"Medikament","v":"0fa5a3c8bfc55fdb"},{"id":"6845a5ba-141b-4b6b-a14a-7b9854c5bb0e","text":"Medizinprodukt","v":"04f1c6da6a4e9287"},{"id":"7894afb7-cbf3-4c0d-96d7-8c48efc1e227","text":"Verarbeitungstätigkeit","v":"89e768ea12c1828f"},{"id":"976f1ac4-4831-4924-8b5a-c7241d9ffe31","text":"Zugeordnete Mitarbeiter","v":"ad271f86afc7b89d"},{"id":"08c34da9-1d5d-4b91-a9e9-a9147d7dec6b","text":"Desinfektionsmittel","v":"7e4d6f628929908b"},{"id":"219525e1-3d7e-4e00-93df-7a751c36195a","text":"Interner Telefonverzeichniseintrag","v":"d4ce4087d1462f9e"},{"id":"e90e5e3c-3eac-4544-8be0-57dea64e6f56","text":"Vertrag","v":"d912755c22a1ffc1"}]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"83c76376-420e-4231-9275-d0fe2ab47c32","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:30:39+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"b6abbc43c8e303c8"},"stamps":[],"t":1758277839804,"v":"2aea7ad56a72552e"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","client":"import","from":""},"ct":1767875783144,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Fallback Designs Bizpin","v":"87574c37fe2dfd86"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Unternehmen","namedIcon":"fas fa-building","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"16dc41cbc8c00e77"},"id":"8f8c9ed7-a7ed-4150-b162-92d6f19a05b0","inheritedLocks":[null,null],"locks":[],"meta":{},"modified":{"at":"2026-01-08T12:36:36+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"apps","previous":{"v":"b1afddae43e9fff5"},"stamps":[],"t":1767875796769,"v":"133b82913dda9a8b"},{"id":"ab825f4a-2d1a-433d-800c-bf48f81b4569","v":"b62194868fb115aa","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Info Spot","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"modified":{"at":"2020-05-08T08:52:50+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328170,"ct":1721196328170,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"3d77146f8b6c9665","f":{"id":"application-form","v":"7afdc5922f8d042f","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1467644273520},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2021-01-27T11:03:03+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1721196328126,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"e2f6fe5a-cdab-41ed-a1b2-ad342ee670d1","text":"Objekt","v":"b27cc5a2d86487ec"},{"id":"c5cf96a1-40bb-44d5-a3f7-ea30706caf58","text":"Gesprächsnotiz","v":"7304f956d16262e2"},{"id":"0e84f198-6b69-4eee-aad7-f0bacf9ee676","text":"Gesprächsnotiz Kenntnisnahme: E-Mail Token Vorlage","v":"ad04379a4db61ed0"},{"id":"e3e2b913-1791-461b-9d80-be3681488a04","text":"Objekte","v":"7ce7856126f4d0b6"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"B/Core: Sachverständiger","namedIcon":"","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"d91078cc-874b-4410-b837-b81f47687fe9","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:04:07+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"5ffa611de5a12f2e"},"stamps":[],"t":1758276247277,"v":"40eb95828240d508"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","client":"import","from":""},"ct":1721196328174,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"d2ac3563-3c3f-4f02-b923-9b67abf98d10","text":"Mitarbeiter","v":"0145bfc882229cb4"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Mitarbeiter","namedIcon":"fas fa-users","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[{"id":"d2ac3563-3c3f-4f02-b923-9b67abf98d10","text":"Mitarbeiter","v":"1f3cb7a329ae6df8"}]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"144e85c0-d7f9-4b20-8928-be30f0c78bda","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:21:15+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"b9720de185d2492c"},"stamps":[],"t":1758277275560,"v":"bfcc4524b24f9e6f"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-10-27T08:47:19+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1721196328151,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"CSV Import & Export","namedIcon":"","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"3339944f-c35f-44b1-b427-a6db1d012825","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:08:26+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"f256eac9c4e9c0a8"},"stamps":[],"t":1758276506784,"v":"c38d81eb4c97f852"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2021-09-06T12:14:15+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":""},"ct":1721196327554,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Energieberater","namedIcon":"fa fa-bolt","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"2d2705a2-824a-4c8f-b61d-b5c657e81f4b","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:11:19+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"cbed0d85ab62a038"},"stamps":[],"t":1758276679857,"v":"0a02ca912f26906b"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-05-08T08:52:35+00:00","backedBy":null,"by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":null},"ct":1721196328197,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Wiedervorlage","namedIcon":"","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"8884dd6d-4320-4de2-91fe-6777ecfebec9","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:31:10+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"b9848abb8e0e1d03"},"stamps":[],"t":1758277870922,"v":"03a07ed624cbe01c"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-06-23T12:00:14+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1721196328123,"data":{"changes":[{"id":"4ed59276-bced-417a-b00c-255c57f4b813","text":"Rechnung","v":"ae97362483502624"},{"id":"ff22262f-df98-4435-a243-002aa95e3c47","text":"PDF","v":"initial"},{"id":"3b42cdf9-f544-47b6-9650-40a8ae4e29bc","text":"Kunde","v":"initial"},{"id":"27641da4-83b9-49b5-8909-44e0137cc0a8","text":"Board & Labels","v":"initial"},{"id":"c4bb595c-d666-483b-b9fa-5816a74855d8","text":"Angebot & Vertrag","v":"initial"},{"id":"1da1ff63-65d9-4902-bfcc-556d6fa76ae3","text":"Aktivitäten","v":"initial"},{"id":"8956f66b-4930-4ccc-98b3-1af81798aefe","text":"Aktivitäten","v":"initial"},{"id":"6fffd9b3-a13c-42ab-99dd-36af4c58d401","text":"Board","v":"initial"},{"id":"ce012bd0-53d4-4742-94cd-6ccf982acd0a","text":"Termine","v":"initial"},{"id":"89ebd974-f60b-443b-9213-2eb59f011cb4","text":"Kontakt des Kunden","v":"initial"},{"id":"8404fe9c-389b-4018-93e6-c9fa3e622442","text":"Ladezeit","v":"initial"},{"id":"f7f86ffa-54ac-4f4c-9a1c-cd2d367f1e98","text":"Aktivitäten","v":"initial"},{"id":"e46014c9-c914-41e2-8888-23c1f5e8b044","text":"Verantwortlicher Aktivitäten","v":"initial"},{"id":"94758d63-5632-4189-8cea-e29f3ce25708","text":"Kategorie","v":"initial"},{"id":"fa08fce5-1911-437d-bb10-6e142cac2a05","text":"Aktivitäten","v":"initial"},{"id":"e4ff2d83-0922-4647-a93b-86b97e456a21","text":"Kontakt in Kunde","v":"initial"}],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"84ede5f8-c5af-4113-8235-4b7fa528e265","text":"Aktivität","v":"bfea43cd5fdd3a62"},{"id":"3d45f20b-ecb3-4dc5-aa39-67a28e3923d8","text":"Vertrag","v":"86d740f5127d6dd5"},{"id":"80fe4932-e70d-4662-897f-d11e7c066b60","text":"Branche","v":"78423b591973e2fd"},{"id":"1ea7612a-5c7b-41e0-8717-a553a17e9b62","text":"Quelle","v":"95897d9a1d160fb9"},{"id":"8fc08287-dbcc-4e41-9d5d-28e4cd828943","text":"Kunde","v":"31dc5994c2682e18"},{"id":"b12cba63-8003-4f84-a235-d67fd506b155","text":"Kategorie","v":"0ce9faf6882c8bea"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"CRM","name":"B/Core: CRM","namedIcon":"fa fa-user-tag","namedIconColor":"","related":[],"searchFilters":[{"id":"b923724e-843a-4f69-9ca3-2a128785a778","text":"Kunde","v":"initial"}],"searchableForms":[{"id":"fec93a80-86e6-4ccb-a473-14046bd4336e","text":"Vertrag","v":"0ed4b28c160a74ad"},{"id":"84ede5f8-c5af-4113-8235-4b7fa528e265","text":"Aktivität","v":"e006b1eb7b70bca0"}]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"9d6ee173-26fe-4472-a271-7667f717094e","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-08-22T09:01:18+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"e4ae75f13782608b"},"stamps":[],"t":1755853278261,"v":"421041219bef2fdb"},{"id":"a4f1ee77-01e0-483a-811b-6d64b067bdea","v":"940fdf311e5c4eaa","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Fake Data","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2024-01-22T10:45:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-01-22T10:50:51+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328157,"ct":1721196328157,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"7bfd362b363b9fd0","f":{"id":"application-form","v":"6dea3f1e900f307b","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1705920337252},{"id":"5a8a5d3c-f995-43ef-8d37-1f8a5e4550da","v":"eb076a92c1bbe34b","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Selection Handler","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2019-02-01T12:45:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-02-01T12:45:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328195,"ct":1721196328195,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"initial","f":{"id":"application-form","v":"d5a80eb811cda264","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1593507154631},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-08-07T13:44:45+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1721196328124,"data":{"changes":[{"id":"88087156-acc9-4bd7-a62c-0167c352d585","text":"Klickbare Einträge","v":"76fbd7d661ce51dd"},{"id":"ecfea200-3957-4937-b452-bee50f433ece","text":"3CX Integration","v":"initial"}],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"6f641574-7cb6-424a-9657-4b8d652a2cf7","text":"Kontakt","v":"930a6fd78c319cd5"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"Kontakte","name":"B/Core: Kontakte","namedIcon":"fa fa-address-book","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[{"id":"6f641574-7cb6-424a-9657-4b8d652a2cf7","text":"Kontakt","v":"5d65f9d1388f73e7"}]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"37fafb3d-18da-4182-af74-082971d50956","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:03:07+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"7f459e932044dc91"},"stamps":[],"t":1758276187978,"v":"3bda33db4d72835e"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2019-04-11T10:01:42+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1721196328156,"data":{"changes":[{"id":"b222b066-c8df-46ec-b591-acb4abbcacd5","text":"Vorschau mit Adresszusatz","v":"initial"},{"id":"3deb882f-b1cf-486f-9e49-8b5adfaf7d67","text":"Anrede und Titel","v":"initial"},{"id":"02c692ec-9dc5-4ea4-85a9-95feef4927df","text":"Anrede erweitert","v":"initial"},{"id":"28555e7c-fae6-4350-b3ca-867061761874","text":"Titel","v":"initial"},{"id":"dbd1f034-f2aa-4ea4-83ff-aac72cf3bc52","text":"Unterstützung direktes Erstellen","v":"initial"},{"id":"9663faf7-8639-4f8a-a7df-4a354e318a5d","text":"CSV Export","v":"initial"}],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"f8fd3176-4995-455f-a8a8-d2742a836816","text":"Kontakt","v":"00f78ec650af69f8"},{"id":"a2d7a5d3-7145-4743-b841-55860797481c","text":"Kategorie","v":"291acff9781bac13"},{"id":"aa3fb337-8aae-4148-b59f-30af53816479","text":"Überkategorie","v":"2c07855fa99458a0"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"Kontakte","name":"Energieberater: Kontakte","namedIcon":"","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[{"id":"f8fd3176-4995-455f-a8a8-d2742a836816","text":"Kontakt","v":"1e180451c64d3cca"}]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"bc036ad0-6dbc-415b-b506-325fb0a44046","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:11:35+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"2dbf8ee380125fa6"},"stamps":[],"t":1758276695135,"v":"ad5d8228f21b2c45"},{"id":"395b74e1-4675-4df1-b059-604e297c2954","v":"9c897fb5767e1ad3","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Labels.old","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2020-05-08T08:52:42+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2021-10-01T10:25:26+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328171,"ct":1721196328171,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"0cf1f9d9f30f5ebe","f":{"id":"application-form","v":"7afdc5922f8d042f","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1593507154631},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2018-04-18T15:40:54+02:00","by":"","client":"server","from":""},"ct":1721196328170,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Hilfe","namedIcon":"fas fa-question-circle","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"9e7fd821-5bd9-4314-a542-34431752f51f","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:16:06+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"3b5c05ec6db9673f"},"stamps":[],"t":1758276966602,"v":"d48c12d3bb4c5f91"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-11-19T13:12:43+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1721196327552,"data":{"changes":[{"id":"0aed930a-8d2f-4b3c-815e-0ced3dabd797","text":"Fragebögen und Auswertungen","v":"initial"},{"id":"145ed06d-9c25-4764-becd-1332e3964d7c","text":"Verwaltung","v":"initial"},{"id":"79aca744-6cac-4ed5-9bbf-f9597b405168","text":"","v":"initial"}],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"83d025fd-16d4-472d-bbd2-36db20e832ee","text":"Unterweisungsfrage","v":"828a04d550d83e7c"},{"id":"21d736d8-1761-4fd7-b448-160ee2ede152","text":"Unterweisungsantwortsmöglichkeit","v":"5b5df58fe186daa6"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Unterweisungen","namedIcon":"fa fa-users-class","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"f416e371-07cc-4987-a6de-5934ef5ff3e4","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:30:15+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"0c9682b4bec0ea4b"},"stamps":[],"t":1758277815188,"v":"948e455de9833037"},{"id":"a031e940-b5a5-4d46-a6dd-c8dcbb57cac1","v":"429266751a49ec30","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Move Dialog","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2019-08-13T08:31:18+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2019-08-13T08:31:24+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328174,"ct":1721196328174,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"8b934b1d3ade9c17","f":{"id":"application-form","v":"713ca313eb629de1","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1593507154633},{"id":"18da93c8-dfa2-4c21-b0fe-7e09b2b6d6c4","v":"6127090bc12cbfbf","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Profilseite.old","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2019-09-09T09:30:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-05-08T08:52:36+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328193,"ct":1721196328193,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"a711d48e3d5ef079","f":{"id":"application-form","v":"713ca313eb629de1","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1593507154629},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-06-23T12:01:24+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1721196328123,"data":{"changes":[{"id":"5ca93c3c-367f-4c06-9962-5c6a7f510edd","text":"Dateien durchschalten","v":"initial"},{"id":"b47b7341-9d95-48b7-bbec-976ac0bf1f7c","text":"Interaktive Seiten","v":"initial"},{"id":"27187329-16ae-4204-9d5a-fcfb73a03292","text":"Ordner Sortierung","v":"initial"},{"id":"ce41acac-35bc-4128-b926-a63af783e99e","text":"Mehrere Dateien hochladen","v":"initial"},{"id":"7a4acf2f-3893-4ced-9e5a-84bc92f4b9c9","text":"Datei Thumbnails","v":"initial"}],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"dbee6e16-d63a-493c-bba6-505f79918f9f","text":"Datei","v":"8c66fb9923026fc8"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"DMS","name":"B/Core: DMS","namedIcon":"fa fa-folders","namedIconColor":"","related":[],"searchFilters":[{"id":"9d60cdd8-b229-4290-b31e-f7779b331f52","text":"Dateien","v":"initial"}],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"45ada186-e9fd-451d-9dbd-2defc0b4f86f","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-08-22T09:01:12+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"57376388f52fd004"},"stamps":[],"t":1755853272511,"v":"b88a294ca769380c"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2019-03-08T14:03:53+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1721196328156,"data":{"changes":[{"id":"a05e9217-5499-4997-b4ba-2d18ccd3cd56","text":"Layout","v":"initial"}],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"929d4384-92b3-4450-aa3b-0e7f20e2103c","text":"Akte","v":"cc7efe00bce39e00"},{"id":"4b1bce8a-884e-44de-a2cd-352a7f89baa7","text":"Patient","v":"57a628b36579001c"},{"id":"3f5de83a-40e4-4662-b436-3ed4879edb10","text":"Behandlung","v":"initial"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Digitale Akte","namedIcon":"fas fa-archive","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[{"id":"929d4384-92b3-4450-aa3b-0e7f20e2103c","text":"Akte","v":"318737cab54156f8"},{"id":"4b1bce8a-884e-44de-a2cd-352a7f89baa7","text":"Patient","v":"88cd1c1669650495"}]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"5ec4fefb-1235-484e-8d6f-4fd645bae372","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:10:10+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"2cc65ade6d68ce3b"},"stamps":[],"t":1758276610139,"v":"08c8db0c1f1585be"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-05-08T08:52:45+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":""},"ct":1721196328156,"data":{"changes":[{"id":"c25d558d-18b0-446f-929d-ebf12cadc2c4","text":"Anzeige in Stammdaten","v":"initial"},{"id":"f54baf49-0315-48d5-9369-e1f990cd9793","text":"Download und Status","v":"initial"}],"controls":[],"description":"Allgemeine Funktionsweise\n\nDie App Apps/Docx Template Processor stellt folgende Funktionalität bereit:\n\nIn einer normalen Word Datei (docx-Datei) können spezielle Wörter, sogenannte Tokens, geschrieben werden. Diese werden an einer gewissen Stelle im Prozess von einem Service durch bereitgestellte Daten ersetzt.\n\nSind die Token falsch geschrieben oder es gibt keine bereitgestellte Daten für ein Token, dann wird dieser NICHT ersetzt/entfernt.\n\nDas Document hat folgende Felder\n\nname - Titel der Vorlage\ntemplate - Word Vorlage (.docx) - wird vom Nutzer hinzugefügt, die Vorlage.\ngenerated - Die Word Datei mit (ggf.) ersetzten Token\ndocument - Referenz auf das primäre Daten-Dokument dieser Vorlage\ndataDocuments - Beliebig viele Referenzen auf Daten-Dokumente\n\nDer Status des Prozesses wird über Stempel (Processing, Error, Done) an dem Vorlagen Document gekennzeichnet.","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"a37b2d75-d9d3-495a-a31c-52094d82e7bb","text":"Word Vorlage (.docx)","v":"initial"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"Word (.docx)-Vorlagen","name":"Docx Template Processor","namedIcon":"fa fa-file-word","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"fb62ad28-07b0-4a99-91bd-43c297656f12","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:10:30+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"bc1062451d4afe5c"},"stamps":[],"t":1758276630849,"v":"a21bb16c90a36843"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"cloneOf":{"id":"089481c4-a42f-4a98-9bc9-12e9f1131f4b","text":"Boards","v":"f741ee205d8df226"},"created":{"at":"2026-03-23T13:30:09+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"ct":1774272609714,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"},{"id":"c5dc85a6-3516-49d2-bf7f-810f2a75a141","text":"Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Boards","namedIcon":"fa fa-columns","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"e1bc93d1-b6c6-4711-a98f-675371c40326","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2026-03-24T13:20:01+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"089481c4-a42f-4a98-9bc9-12e9f1131f4b","text":"Boards","v":"f741ee205d8df226"},"p":"apps","previous":{"v":"e200bf9817da6af7"},"stamps":[],"t":1774358401264,"v":"e9bcf29ba3f81c46"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-08-10T09:28:32+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1721196328124,"data":{"changes":[{"id":"76486030-9f2b-4130-adbe-2ec6acfd73f1","text":"Aufgaben","v":"9b8d74d6fde2097d"},{"id":"0ca03d28-3c01-4620-9512-7e4aa115008f","text":"iCal Sycronisation","v":"initial"},{"id":"22d4276f-5c90-485c-b547-ee07a14a4977","text":"Persönlicher Kalender","v":"initial"},{"id":"515f915c-b0e2-4918-9959-d744908265b9","text":"Ladezeiten optimiert","v":"initial"}],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"e6b7aced-aaa0-49a4-b573-cfa307595402","text":"Termin","v":"07a303eab87a6ec7"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"Kalender","name":"B/Core: Kalender","namedIcon":"fa fa-calendar","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[{"id":"e6b7aced-aaa0-49a4-b573-cfa307595402","text":"Termin","v":"4dd9e73bb0719744"}]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"d8c9a42b-e289-4c9a-97ea-801de8ab480a","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:02:44+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"190e2d1ee838c35e"},"stamps":[],"t":1758276164912,"v":"21817a9937ab129b"},{"f":{"id":"folder","v":"initial","text":"Folder"},"p":"system","data":{"name":"Lists","description":"The default lists available for use with the `document-list` directive","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"id":"lists","v":"initial","t":1447333305517,"ct":1447333305517,"modified":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null],"a":["system"],"a_forms":["system-folder-form"],"a_depth":1,"stamps":[],"dts":1738753691278},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2018-01-16T16:08:25+01:00","by":"","client":"server","from":""},"ct":1721196328194,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Prozesse","namedIcon":"fas fa-project-diagram","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[{"id":"527f9bb3-01bd-48cc-ad5b-08b1bba3af33","text":"Prozess","v":"30c6bd6858a52267"},{"id":"f0cf1b33-f840-4d4b-9335-c10daa7a335e","text":"Prozessordner","v":"af0a03fd44e44e63"}]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"bd4df555-2c56-4a5f-82f0-7e4745372f51","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:24:06+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"85107739a05efeaf"},"stamps":[],"t":1758277446439,"v":"2d693fc42d235676"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-05-08T08:50:47+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":""},"ct":1721196328084,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"5d0ac040-1428-48bc-9b4f-28c69e098b3c","text":"Search","v":"initial"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Suche","namedIcon":"fa fa-search","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"9302d29e-bf32-4350-a5fd-18b542d1b5db","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:28:09+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"8e63e14dd3890623"},"stamps":[],"t":1758277689932,"v":"0fa10c006792ad7f"},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2020-08-26T13:52:48+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1721196328171,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[{"id":"cf155969-ede1-43a4-9b10-3a697b19db91","text":"Kommentar","v":"96b0fbc4927d8910"}],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Comments & Pings","namedIcon":"fa fa-comments","namedIconColor":"","related":[],"searchFilters":[{"id":"395d0864-c5cd-48ad-95af-f0b1982e03a0","text":"Kommentare","v":"initial"}],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"14c27659-92d7-4b43-8c4f-25f4cceae591","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-10-17T11:06:58+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"1c0cb2162e953d06"},"stamps":[],"t":1760699218782,"v":"77692155146d7848"},{"id":"634a96fa-b352-4447-85c8-fced840e2693","v":"a6547aa76bf3517c","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Shared Layout","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2020-05-08T08:50:41+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:50:41+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328196,"ct":1721196328196,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"initial","f":{"id":"application-form","v":"7afdc5922f8d042f","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1737556989995},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2021-03-30T11:51:19+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1721196328122,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Fallback Designs Bizpin","v":"87574c37fe2dfd86"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Auswertungen","namedIcon":"fa fa-chart-pie","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"75c6f72a-08a2-44f4-a29c-86b58be26f96","inheritedLocks":[null,null],"locks":[],"meta":{},"modified":{"at":"2026-01-12T08:34:38+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"apps","previous":{"v":"54101fa2fd506865"},"stamps":[],"t":1768206878306,"v":"2615f07ecfc49533"},{"id":"7f785d94-22cf-44fd-9d57-5221168ade6b","v":"65938d09279c560f","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Berichte","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2020-05-08T08:51:42+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:51:42+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328131,"ct":1721196328131,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"initial","f":{"id":"application-form","v":"7afdc5922f8d042f","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1593507154631},{"id":"fc1a4a52-200d-473b-bd8a-29818356064d","v":"364b9bfc8d2f4266","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"B/Core: Startseite","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[{}]},"locks":[],"created":{"at":"2020-08-10T15:15:12+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-07-30T13:55:36+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328127,"ct":1721196328127,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"44488c0df0ba3f12","f":{"id":"application-form","v":"494d7694e82e9921","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1597072512833},{"id":"b7897ae7-5276-43f0-90ce-8e3c5d3d6ff5","v":"9f65702bfe7c6214","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Text Recognition.WIP","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2020-05-08T08:52:48+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:52:48+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328196,"ct":1721196328196,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"initial","f":{"id":"application-form","v":"713ca313eb629de1","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1593507154633},{"id":"001579a1-8f0a-40e5-8072-72c3a27195a9","v":"fa614892670a799a","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Toasts Handler","label":"","description":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2020-05-13T07:50:16+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-13T07:50:16+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328196,"ct":1721196328196,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"initial","f":{"id":"application-form","v":"713ca313eb629de1","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1593507154627},{"id":"cf914a7f-ff5f-4598-80f1-63c9129e0a71","v":"fa2dd3e4493e419a","p":"apps","f":{"id":"application-form","v":"e6c4e4126877157e","text":"Application"},"data":{"name":"Knowledge Base","label":"","description":"Wiki","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"related":[],"searchableForms":[{"id":"cb2adf77-7636-41a7-9a16-1610b06fa91e","v":"f879886138717b72","text":"Page"}],"searchFilters":[],"dialogForms":[],"controls":[],"designs":[],"changes":[]},"locks":[],"created":{"at":"2021-07-07T11:16:50+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","from":"","client":"server"},"modified":{"at":"2023-03-17T13:27:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1721196328171,"ct":1721196328171,"a_depth":1,"a":["apps"],"a_forms":["folder"],"inheritedLocks":[null,null],"stamps":[],"previous":{"v":"3ae199689d8c5b75","f":{"id":"application-form","v":"6dea3f1e900f307b","text":"Application"}},"meta":{"modified":{"at":"2024-07-17T06:05:28+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}},"dts":1636118306611},{"a":["apps"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2024-03-18T15:13:23+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1721196328156,"data":{"changes":[],"controls":[],"description":"","designs":[{"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","text":"Bizpin Fallback Designs","v":"initial"}],"dialogForms":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"Auswertungen","name":"Energieberater: Auswertungen","namedIcon":"far fa-chart-area","namedIconColor":"","related":[],"searchFilters":[],"searchableForms":[]},"f":{"id":"application-form","text":"Application","v":"e6c4e4126877157e"},"id":"bfeee3b0-ad25-4bba-a51c-01584d72c45a","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2025-09-19T10:11:29+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"apps","previous":{"v":"abd3d7d2387b41aa"},"stamps":[],"t":1758276689008,"v":"7a399b58c070ff43"},{"id":"2d46771e-84af-45f3-bc70-2c1793b412a9","v":"initial","p":"c9b12874-99d0-40e8-86cc-c3fe0477a15a","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-03-25T15:25:25+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-03-25T15:25:25+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1553527525406,"ct":1553527525402,"a_depth":2,"a":["apps","c9b12874-99d0-40e8-86cc-c3fe0477a15a"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24"],"a_depth":2,"a_forms":["folder","application-form"],"created":{"at":"2017-10-11T16:05:26+02:00","by":"","client":"3b8394a3-1521-4a56-9dc6-57ae101fb89b","from":""},"ct":1774869505953,"data":{"description":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Layouts"},"f":{"id":"folder","text":"Folder","v":"602501509abc77b3"},"id":"a73fe610-b1b7-4008-a9cd-22013217cb2f","inheritedLocks":[null,null,null],"locks":[],"meta":{"modified":{"at":"2026-03-30T11:18:25+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""}},"modified":{"at":"2017-10-11T16:05:26+02:00","by":"","client":"3b8394a3-1521-4a56-9dc6-57ae101fb89b","from":""},"p":"77ee8815-2c3a-4bb5-abd9-90541a545a24","previous":{"f":{"id":"folder","text":"Folder","v":"f1e4977dbee77607"},"v":"28699d8dd5ac6430"},"stamps":[],"t":1774869505953,"v":"03931273496539b7"},{"id":"672123ff-a0df-498a-ba54-4a7c13ea2fb9","v":"initial","p":"3d43a3f5-fea4-488d-9fc1-9dee5e694623","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-01-23T12:29:13+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-01-23T12:29:13+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1548246553333,"ct":1548246553332,"a_depth":2,"a":["apps","3d43a3f5-fea4-488d-9fc1-9dee5e694623"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"9bad9050-10a9-42d2-9ac6-64c532dd4198","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"p":"86189c5a-b9f4-445a-879f-d94574960df0","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2022-04-21T11:59:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2022-04-21T11:59:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1650542372211,"ct":1650542372211,"a_depth":2,"a":["apps","86189c5a-b9f4-445a-879f-d94574960df0"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"185dd4c1-0fb4-43f9-8e8e-ab5cdfb82b4f","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"59edbdbc-2cab-426a-bb42-6e57c5158e4f","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-06-23T12:01:27+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-06-23T12:01:27+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1592913687078,"ct":1592913687078,"a_depth":2,"a":["apps","59edbdbc-2cab-426a-bb42-6e57c5158e4f"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"f254ce25-42f1-4333-8ee7-23554bf746c1","v":"initial","p":"94a64d89-d204-4918-b147-d717914fb03e","f":{"id":"form-folder","v":"e2e87df32e325504","text":"Form Folder"},"data":{"name":"Forms","description":""},"locks":[],"created":{"at":"2019-05-03T14:14:36+02:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-05-03T14:14:36+02:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1556885676008,"ct":1556885676007,"a_depth":2,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[],"dts":1738854888752},{"id":"6b892ddf-3264-4056-b191-166f4410d9fa","v":"434321aecbf40deb","previous":{"v":"initial"},"p":"77ee8815-2c3a-4bb5-abd9-90541a545a24","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Sidebar Tabs (old)","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-04-19T18:13:54+02:00","by":"","from":"","client":"server"},"modified":{"at":"2021-11-04T08:49:45+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1636015785436,"ct":1524154434911,"a_depth":2,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"792667bf-0eff-419d-b051-f1b1a574503e","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"441fb0bd-959b-446d-9aee-82f1c8ede628","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-08-12T08:50:11+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-08-12T08:50:11+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1597222211413,"ct":1597222211413,"a_depth":2,"a":["apps","441fb0bd-959b-446d-9aee-82f1c8ede628"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"5053ff01-1177-4488-940f-218cea4bf3cb","v":"3637710c22fd0056","previous":{"v":"initial","p":"60c45486-4b82-4a56-8bd5-cd30cde73d47"},"p":"b090141a-949d-4b35-a5c2-d8f1dd937dcf","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-05-24T16:34:35+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:33+00:00","by":null,"backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583893679,"ct":1527172475643,"a_depth":2,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["system","system-forms"],"a_depth":2,"a_forms":["system-folder-form","repository-folder-form"],"created":{"at":"2019-01-24T16:08:59+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1719473825370,"data":{"allowUndefinedFields":false,"allowedChildrenForms":[],"commands":[],"defaults":"","definition":"# General\n\n[Name][name]\n\n[Label][label]\n\n{hidden if icon.dataUrl}\n####### \n[Named Icon][namedIcon]\n\n{hidden if !namedIcon}\n######## \n{color}\n[Named Icon Prefered Color][namedIconColor]\n\n\n{hidden if namedIcon}\n####### \n\n[Icon][icon]\n\n[Description][description]\n\n[description]: Text\n[icon]: Image\n\n# Security\n\n{hidden if account.id} \n[Always run on server][serverOnly]\n[serverOnly]: Switch\n\n[Run as][account]\n[account]: /account\n \n{hidden if account.id}\n##### \n> Since no `Account` is selected, the currently logged in `Account` is used (or the backing account).\n> Specifying one means the `Command` and all its `Actions` will have to be executed on the server.\n>\n> In standalone mode (without server) this does not apply and the `Command` will always run locally\n\n{hidden if !account.id}\n##### \n> An `Account` was selected and the `Command` will always run on the server to enforce correct \n> security.\n>\n> In standalon mode (wihtout server at all) this does not apply and the `Command` will always run locally\n\n# Conditions\n\n<blockquote>\n<p>\nThe command is only visible or enabled if all of the specified conditions are true\n</p>\n</blockquote>\n\n{children}\n[Visible Conditions][visibleConditions]\n\n{children}\n[Enabled Conditions][enabledConditions]\n\n[visibleConditions]: /condition-form (0-n)\n[enabledConditions]: /condition-form (0-n)\n\n# Document\n\n\n<blockquote>\n<p>\nA `Command` always has a `Document`, it will be used for processing below. It defaults to the target of the `Command`.\n</p>\n</blockquote>\n\n[Document][document]\n\n> Using the Document field overrides the `document` to use. \n\n{hidden if templateDocument.id}\n[Form][form]\n\n> Specifying a `Form` will create a **new** document with the command's target as the parent. If a `Document` is selected\nabove that document will become the parent\n\n{hidden if form.id}\n#########\n[Template][templateDocument] \n\n> Specifying a `Template` will create a **clone** of the referenced template as a\nchild of the command's target. If a `Document` is selected\nthat will become the parent.\n\n[Clone template only][cloneTemplateDocumentOnly]\n[cloneTemplateDocumentOnly]: switch\n\n> The `Template` will be cloned with all its childrens by default. `Clone template only` will only clone the template, no children.\n\n[document]: Ref\n[form]: /form\n[templateDocument]: Ref\n\n# Actions\n\n<blockquote>\n<p>\nA `Command` can optionally run an `Action` or multiple ones in order. In its scope the following \nproperties will be available.<br><br>\n\n`context.document` - the `Document` as defined above<br>\n`context.target` - the document the `Command` executes on<br>\n`context.command` - the `Command` excecuting<br><br> \n\nAll instances of `Action` will have access to the same `context.document` but not have access to\nany other output of the preceding code. Meaning if an `Action` modifies some other document, the next `Actions`\ncannot read that state. Use `Business Rules` to run change dependendent code.\n\nAll `Actions` will be executed in order. If an `Action` or any of them fail none of the changes will be applied at all. An `Action`\nwill be considered failed if it takes longer than the default timeout to run, throws an Exception or returns a rejected Promise.\n\n<footer>Should the last `Action` return a `Document` (or a Promise of a document) it will be used below.\nIf it doesn't return anything, the `Command` is completed.</footer>\n\n</p>\n</blockquote> \n\n{deprecated|ref}[Action to execute][action] {children}[Action to execute][action]\n[action]: /action-form \n\n{ref list=true}[Actions to execute][actions] {children}[Actions to execute][actions]\n[actions]: /action-form (0-n)\n\n# Result\n\n> If the `Command` results in a `Document`. Either as configured in the\nCommand or as output of the last `Action`.\n\n## Handle Document\n\n[Save the Document][save]\n[save]: Switch\n\n## Navigate to Document\n[Navigation][navigation]\n\n[navigation]: Select\n  - no: \"Don't do anything\"\n  - drillInto: \"Drill into\"\n  - navigate: \"Navigate to it\"\n  - dialog: \"Show in Dialog\"\n  - back: \"Navigate Back\"\n\n{hidden if navigation !== 'dialog'}\n[Dialog][navigationTarget]\n[navigationTarget]: /dialog-form\n  ","description":"","functions":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Command","namedIcon":"fa fa-terminal","namedIconColor":"","newAction":{"id":"","text":"","v":""},"newTemplate":{"id":"","text":"","v":""},"tags":"","theme":{"id":"","text":"","v":""},"uiOptions":{"id":"","text":"","v":""}},"f":{"id":"form","text":"Form","v":"cac2c00e9d3adbaa"},"id":"command-form","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2024-11-13T15:53:35+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"system-forms","previous":{"v":"50a122fed1d3be5e"},"stamps":[],"t":1731513215636,"v":"abb4502137c21107"},{"id":"0d2ed632-691b-479a-8003-008b4a6d815e","v":"initial","p":"599db2de-4e07-4722-98bd-7f42d498b352","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-05-08T08:51:34+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:51:34+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927894322,"ct":1588927894321,"a_depth":2,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"594e6b26-7310-4d00-aad9-2a577ccab542","v":"initial","cloneOf":{"id":"5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5","v":"initial","text":"Layouts"},"p":"af6c380d-2ab5-409a-802f-46dba2b426e3","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2025-08-06T15:38:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2025-08-06T15:38:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1754494701297,"ct":1754494701295,"a_depth":2,"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"85cd7d8f-35be-4092-a40c-274f50729126","v":"81b323abd4e829bb","p":"0c440c7a-219d-4465-9cbe-2d0eff6ec7ad","f":{"id":"folder","v":"5bc49cc541bc2b80","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-09-13T09:20:42+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-09-13T09:20:42+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1740666014600,"ct":1740666014600,"a_depth":2,"a":["apps","0c440c7a-219d-4465-9cbe-2d0eff6ec7ad"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"initial","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"}},"meta":{"modified":{"at":"2025-02-27T14:20:14+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2025-10-07T13:43:52+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759844632339,"data":{"allowUndefinedFields":false,"allowedChildrenForms":[],"commands":[],"defaults":"","definition":"[name][name]","descendantCommands":[],"description":"","from":[],"functions":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Material Design 3","namedIcon":"","namedIconColor":"","newAction":{"id":"","text":"","v":""},"newTemplate":{"id":"","text":"","v":""},"relatedDocuments":[],"tags":"","theme":{"id":"","text":"","v":""},"to":[],"uiOptions":{"id":"","text":"","v":""}},"f":{"id":"form","text":"Form","v":"16a1fc2c7a734357"},"id":"a9dbf1ad-0428-403e-b88b-bd73c35cf381","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-10-07T13:44:01+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"04632e3e-9132-4927-b91d-3c28d1afe3e9","previous":{"v":"initial"},"stamps":[],"t":1759844641188,"v":"abafda3e38d21712"},{"id":"d3d08873-80a4-471b-b999-eadf1f28c038","v":"initial","p":"43f84041-0fd7-4ccb-b7b5-7a38f89ada37","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-11-29T14:22:32+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2018-11-29T14:22:32+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1543501352893,"ct":1543501352892,"a_depth":2,"a":["apps","43f84041-0fd7-4ccb-b7b5-7a38f89ada37"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"c3df0a76-ded1-4a65-92f0-8f78ecbde232","v":"initial","p":"8fa52498-fa07-4bad-87b3-5c8df671aca4","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1568969971282,"ct":1568969971282,"a_depth":2,"a":["apps","8fa52498-fa07-4bad-87b3-5c8df671aca4"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"77223328-2527-4344-84b1-4092bdf006ba","v":"3c7d46a59c9fc3d1","previous":{"v":"initial","p":"eaa57aeb-bb30-49f1-a5c9-a8c0fe1879e4"},"p":"5acfd7a2-33e4-498a-9150-71e1ab772bfc","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-11-20T09:22:07+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2018-12-03T15:17:39+00:00","by":null,"backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1543850259138,"ct":1542705727758,"a_depth":2,"a":["apps","5acfd7a2-33e4-498a-9150-71e1ab772bfc"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"p":"d4581623-f542-4ade-86be-8b3ecec56f0e","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2022-02-28T14:58:40+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2022-02-28T14:58:40+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1646060320116,"ct":1646060320116,"a_depth":2,"a":["apps","d4581623-f542-4ade-86be-8b3ecec56f0e"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"157b00c5-406d-4a8d-b94b-14df194ff987","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"p":"deeef973-ce03-4557-bf75-75a059001767","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2021-12-15T12:26:36+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-12-15T12:26:36+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1639571196260,"ct":1639571196260,"a_depth":2,"a":["apps","deeef973-ce03-4557-bf75-75a059001767"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"999c58bb-af30-4eb9-aece-b07fbdbb080c","v":"initial","p":"3fbe0efd-713a-457a-a34c-3a12aa19d6bb","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-12-10T13:06:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-12-10T13:06:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1607605613546,"ct":1607605613545,"a_depth":2,"a":["apps","3fbe0efd-713a-457a-a34c-3a12aa19d6bb"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"676a196c-72c0-44e3-bdcc-9ac195273e80","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"p":"089481c4-a42f-4a98-9bc9-12e9f1131f4b","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2021-10-04T11:07:17+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-10-04T11:07:17+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1633345637344,"ct":1633345637344,"a_depth":2,"a":["apps","089481c4-a42f-4a98-9bc9-12e9f1131f4b"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"65de949e-5426-41c2-a86c-97c74512280d","v":"initial","p":"781ff5de-69db-49dc-99f0-f328b308cd7d","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2021-11-02T09:38:40+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-11-02T09:38:40+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1635845920323,"ct":1635845920323,"a_depth":2,"a":["apps","781ff5de-69db-49dc-99f0-f328b308cd7d"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"b676aa47-5082-403c-bf82-6aeead137ec1","v":"initial","p":"009b3a60-72d5-46f6-8dc6-7f9001e03283","f":{"id":"folder","v":"5bc49cc541bc2b80","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2024-11-04T13:40:16+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-11-04T13:40:16+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1730727616795,"ct":1730727616793,"a_depth":2,"a":["apps","009b3a60-72d5-46f6-8dc6-7f9001e03283"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"d3295b12-08f1-47f2-b73d-5a48cdba162e","v":"initial","p":"7d22534a-76b5-4f1c-8761-af3d7a1d5111","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Test","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-01-31T15:06:57+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-01-31T15:06:57+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1548947217480,"ct":1548947217480,"a_depth":2,"a":["apps","7d22534a-76b5-4f1c-8761-af3d7a1d5111"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"e89b29a9-6ab9-47dc-a6fe-91ebda92871d","v":"5b696e3ef33e89e1","previous":{"v":"initial","p":"60c45486-4b82-4a56-8bd5-cd30cde73d47"},"p":"b090141a-949d-4b35-a5c2-d8f1dd937dcf","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Forms","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-05-24T16:34:35+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:31+00:00","by":null,"backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583891615,"ct":1527172475590,"a_depth":2,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"0daea31b-a830-44bf-8844-b6001f852f00","v":"initial","previous":{"v":""},"p":"e4a62254-c6ab-4d0d-a9ae-81934093f6e2","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Tools","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-05-23T11:47:16+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"from":"","client":"server"},"modified":{"at":"2018-05-23T11:47:16+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"from":"","client":"server"},"t":1527068836256,"ct":1527068836256,"a_depth":2,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"2acd7a85-e378-49d3-a959-75ea2cab13a4","v":"initial","previous":{"v":""},"p":"90340217-c9b1-46fe-9b56-163953318522","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Forms","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"lockRefs":[],"created":{"at":"2017-12-22T10:19:13+01:00","by":"","from":"","client":"f850c977-4f2e-4f6c-8389-ad1230848f0e"},"modified":{"at":"2017-12-22T10:19:13+01:00","by":"","from":"","client":"f850c977-4f2e-4f6c-8389-ad1230848f0e"},"t":1513934353342,"ct":1513934349453,"a_depth":2,"a":["apps","90340217-c9b1-46fe-9b56-163953318522"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"1a5cdbcd-a718-43d4-bf29-3ab419f174ff","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"3eb91319eb84f02b","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"3eb91319eb84f02b","text":"Layouts"},"p":"0af4f8a7-729e-4318-8f82-7e976555004e","f":{"id":"folder","v":"5bc49cc541bc2b80","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2026-01-08T11:43:12+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"","impersonatedBy":"","from":"","client":"server"},"modified":{"at":"2026-01-08T11:43:12+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"","impersonatedBy":"","from":"","client":"server"},"t":1767872592449,"ct":1767872592448,"a_depth":2,"a":["apps","0af4f8a7-729e-4318-8f82-7e976555004e"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"f":{"id":"form-folder","v":"e2e87df32e325504","text":"Form Folder"},"p":"2a9f2f9c-28df-4418-8b85-b4158b35ed3d","data":{"name":"Formulare","description":"","$promise":{},"$resolved":true},"id":"4c4390dd-b593-4bd1-8e6f-6a791cd234af","v":"initial","t":1467644264825,"ct":1467644264824,"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null],"a":["apps","2a9f2f9c-28df-4418-8b85-b4158b35ed3d"],"a_forms":["folder","application-form"],"a_depth":2,"stamps":[],"dts":1467644255606},{"f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"p":"3d43a3f5-fea4-488d-9fc1-9dee5e694623","data":{"name":"Formulare","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"id":"7c30f282-2b84-4976-8735-ba78662ea5e6","v":"ace955fdb6bd62ce","t":1467644267945,"ct":1467644267929,"previous":{"v":"initial"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null],"a":["apps","3d43a3f5-fea4-488d-9fc1-9dee5e694623"],"a_forms":["folder","application-form"],"a_depth":2,"stamps":[]},{"f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"p":"3a8b08c2-14ef-48ee-a5b8-2ede237892a9","data":{"name":"Formulare","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"id":"2d5b3e1c-5a2f-4e5a-8005-47373ea61666","v":"initial","t":1467644258688,"ct":1467644258687,"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null],"a":["apps","3a8b08c2-14ef-48ee-a5b8-2ede237892a9"],"a_forms":["folder","application-form"],"a_depth":2,"stamps":[]},{"id":"921c912f-d932-46d2-b061-ae7539e9a5a8","v":"474c1323e91b1035","previous":{"v":"52743f07f38fa742","p":"apps","a":["apps"],"a_forms":["folder"]},"p":"83c76376-420e-4231-9275-d0fe2ab47c32","f":{"id":"application-form","v":"3f37198777739577","text":"Application"},"data":{"name":"Telefonverzeichnis","description":"","namedIcon":"fas fa-phone-office","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"stylesheets":[],"controls":[],"routingPrefixAlias":"","routingTables":[],"globalRoutingTables":[],"aliases":{"id":"","v":"","text":""},"dialogForms":[{"id":"219525e1-3d7e-4e00-93df-7a751c36195a","v":"0c35c93db3a5db58","text":"Interner Telefonverzeichniseintrag"},{"id":"69e7c51e-ba71-4a0e-9134-15a020100648","v":"b552910eaf31ad44","text":"Externer Telefonverzeichniseintrag"}]},"locks":[],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"modified":{"at":"2023-10-12T10:54:04+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1697108044197,"ct":1611930688074,"a_depth":2,"a":["apps","83c76376-420e-4231-9275-d0fe2ab47c32"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[],"dts":1696927680283},{"id":"document-picker-form","v":"97547060f3e347ab","p":"system-forms","f":{"id":"form","v":"cac2c00e9d3adbaa","text":"Form"},"data":{"name":"Document Picker","tags":"","allowUndefinedFields":false,"definition":"[Name][name]\n\n##Source settings\n\n\n[Folder][sourceFolder]\n[sourceFolder]: Ref\n\n[Query][sourceQuery]\n\n[sourceQuery]: /query-form\n\n>The query defines the list of documents, from which to pick. The specified folder is used as the root of the query. If no query is specified, a default children-query is used.\n\n\n##Target settings\n\n[Folder][targetFolder]\n[targetFolder]: Ref\n\n[Reference Form][targetReferenceForm]\n[targetReferenceForm]: /form\n\n[Reference Field][targetReferenceField]\n\n>The location where references to the picked documents are stored. By default they are stored as child documents.\n> By default ``Document References`` are created, but you can specify a different form and field to use for the reference. The default field used is ``referencedDocument``\n\n## Designs\n\n[Pickable Document Design][pickableDocumentDesign]\n\n>The design to use for documents in the list of items that can be picked. The default\nis ``list-design``\n\n[Picked Document Design (dynamic)][dynamicPickedDocumentDesign]\n\n>The design to use for documents in the list of items that can be picked, once \nthey have been picked. This is used by the ``dynamic`` design of the document-picker,\nwhich allows changing the selection. The default is ``list-design``\n\n[Picked Document Design (static)][staticPickedDocumentDesign]\n\n>The design to use for documents in the list of items that have been picked. This\nis used by the ``static`` design of the document-picker, which does not allow\nchanging the selection. The default is ``list-design``\n\n[Show Reference Document instead of Original Document when picked][showReferences]\n\n[showReferences]: switch\n","functions":"","defaults":"","newTemplate":{"id":"","v":"","text":""},"newAction":{"id":"","v":"","text":""},"allowedChildrenForms":[],"commands":[],"namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"uiOptions":{"id":"","v":"","text":""},"theme":{"id":"","v":"","text":""},"description":""},"locks":[],"created":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"modified":{"at":"2020-06-30T10:53:26+00:00","by":"8e6c22aa-8c69-4ff8-919a-7032841cf636","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719473825445,"ct":1719473825445,"a_depth":2,"a":["system","system-forms"],"a_forms":["system-folder-form","repository-folder-form"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"bb3184b9df5abb40","f":{"id":"form","v":"dcc8032a347c59c7","text":"Form"}},"meta":{"modified":{"at":"2024-06-27T07:37:05+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"f":{"id":"form-folder","v":"e2e87df32e325504","text":"Form Folder"},"p":"8f8c9ed7-a7ed-4150-b162-92d6f19a05b0","data":{"name":"Formulare","description":""},"id":"526d9710-b2bd-4fa7-9341-d780ead102c1","v":"12f2e2d5cb3ce33f","t":1467644265228,"ct":1467644265204,"previous":{"v":"5f98e4d435d5be18"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null],"a":["apps","8f8c9ed7-a7ed-4150-b162-92d6f19a05b0"],"a_forms":["folder","application-form"],"a_depth":2,"stamps":[],"dts":1708076573004},{"f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"p":"ab825f4a-2d1a-433d-800c-bf48f81b4569","data":{"name":"Formulare","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"id":"d6aa757f-a3ea-4241-b6d9-5418d51c0c78","v":"73f3fc4e3b304a44","t":1467644277859,"ct":1467644277842,"previous":{"v":"initial"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null],"a":["apps","ab825f4a-2d1a-433d-800c-bf48f81b4569"],"a_forms":["folder","application-form"],"a_depth":2,"stamps":[]},{"a":["system","system-forms"],"a_depth":2,"a_forms":["system-folder-form","repository-folder-form"],"created":{"at":"2017-08-23T08:24:50+02:00","by":"","client":"import","from":""},"ct":1755850182981,"data":{"allowUndefinedFields":false,"allowedChildrenForms":[],"commands":[],"defaults":"","definition":"[Name][name]\n\n[Description][description]\n[description]: Text\n\n[Icon][icon]\n\n[icon]: File","descendantCommands":[],"description":"","from":[],"functions":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Folder","namedIcon":"","namedIconColor":"","newAction":{"id":"","text":"","v":""},"newTemplate":{"id":"","text":"","v":""},"relatedDocuments":[],"tags":"","theme":{"id":"","text":"","v":""},"to":[],"uiOptions":{"id":"","text":"","v":""}},"f":{"id":"form","text":"Form","v":"16a1fc2c7a734357"},"id":"folder","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-08-22T08:09:48+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"system-forms","previous":{"v":"8485b710e8801c21"},"stamps":[],"t":1755850188326,"v":"602501509abc77b3"},{"id":"2c872bc9-30dc-45b4-9aed-8c1c89a69baa","v":"50b4ba3afa795a8d","previous":{"v":"ae1a80d5875f48d8","p":"apps","a":["apps"],"a_forms":["folder"]},"p":"83c76376-420e-4231-9275-d0fe2ab47c32","f":{"id":"application-form","v":"6dea3f1e900f307b","text":"Application"},"data":{"name":"Medikamentenverzeichnis","label":"","description":"","namedIcon":"fas fa-notes-medical","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"stylesheets":[],"controls":[],"routingPrefixAlias":"","routingTables":[],"globalRoutingTables":[],"aliases":{"id":"","v":"","text":""},"dialogForms":[{"id":"e4af0e46-8a46-4741-935d-13e29befd300","v":"32fa4dd1aaed982f","text":"Medikament"},{"id":"38aab2e1-ee5c-4fc2-90e9-962b4161ac22","v":"0e6c8764e1466fa4","text":"Medikament"}],"searchableForms":[{"id":"e4af0e46-8a46-4741-935d-13e29befd300","v":"1ef2b32225e733e3","text":"Medikament"},{"id":"38aab2e1-ee5c-4fc2-90e9-962b4161ac22","v":"0fa5a3c8bfc55fdb","text":"Medikament"}],"searchFilters":[],"changes":[]},"locks":[],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"modified":{"at":"2023-10-12T10:52:10+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1697107930908,"ct":1697107493677,"a_depth":2,"a":["apps","83c76376-420e-4231-9275-d0fe2ab47c32"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[],"dts":1603985515444},{"a":["system","system-forms"],"a_depth":2,"a_forms":["system-folder-form","repository-folder-form"],"created":{"at":"2019-03-13T15:05:33+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","client":"server","from":""},"ct":1719473825416,"data":{"allowUndefinedFields":false,"allowedChildrenForms":[],"commands":[],"defaults":"","definition":"[Name][name]\n\n# Template\n\n{html}\n[Template][template]\n\n# Styles\n\n{css}\n[CSS][css]\n\n# Controller\n\n{aeppic:code-design-controller}\n[Controller][controller]\n\n# Dependencies\n\n[Packages][packages]\n[packages]: /package-form (0-n)\n\n# Parameters\n\n[Parameters][parameters]\n[parameters]: text (0-n)\n\n[Parameters Description][parametersDescriptions]\n[parametersDescriptions]: text (0-n)\n\n[Parameters Types][parametersTypes]\n[parametersTypes]: text (0-n) \"string, number, object, boolean\"\n\n[Parameters Controls][parametersControls]\n[parametersControls]: text (0-n) \"Custom control to render the parameter (color, email, phone, address, ...)\"\n\n[Parameters Cardinalities][parametersCardinalities]\n[parametersCardinalities]: text (0-n)\n\n\n# Aliases\n\n{children}\n[Aliases][aliases]\n\n[aliases]: /cbb7325f-8f35-451c-8f45-ab92d9136f4f (0-n)\n\n# Documentation\n\n{multiline}\n[Description][description]\n\n","description":"","functions":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Design","namedIcon":"fa fa-eye","namedIconColor":"","newAction":{"id":"","text":"","v":""},"newTemplate":{"id":"","text":"","v":""},"tags":"","theme":{"id":"","text":"","v":""},"uiOptions":{"id":"","text":"","v":""}},"f":{"id":"form","text":"Form","v":"cac2c00e9d3adbaa"},"id":"design-form","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-08-25T09:41:08+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"system-forms","previous":{"v":"a6b987f8c80dc07f"},"stamps":[],"t":1756114868634,"v":"4b1c7a4912f80103"},{"id":"ecbdc4aa-685d-41cf-84a4-1f61e1a8be07","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"d91078cc-874b-4410-b837-b81f47687fe9","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2021-01-27T11:03:03+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-01-27T11:03:03+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1611745383395,"ct":1611745383395,"a_depth":2,"a":["apps","d91078cc-874b-4410-b837-b81f47687fe9"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"94a64d89-d204-4918-b147-d717914fb03e","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-04-15T07:51:09+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-04-15T07:51:09+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1555314669056,"ct":1555314669056,"a_depth":2,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["system","system-forms"],"a_depth":2,"a_forms":["system-folder-form","repository-folder-form"],"created":{"at":"2019-07-03T07:26:21+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":""},"ct":1778079324308,"data":{"allowUndefinedFields":false,"allowedChildrenForms":[],"commands":[{"id":"175a935c-c174-4bd4-a876-40581cbe7461","text":"rd:Duplicate","v":"f201fbe14d554d43"}],"defaults":"","definition":"[Name][name]\n\n[Tags][tags]\n\n[Allow undefined fields][allowUndefinedFields]\n[allowUndefinedFields]: Switch\n\n# Definition\n\n{Form rows=30}\n[Definition][definition]\n\n# Functions\n\n{aeppic:code-form-functions-controller}\n[Functions][functions]\n\n\n# Related\n \n{children}\n[Related documents][relatedDocuments]\n[relatedDocuments]: /related (0-n)\n\n# Defaults\n\nWhen `Aeppic.new(documentIdOrRef, parentIdOrRef, options?)` is called with just an id to a form (not a ref) it uses the information in this section\nto decide what form version to use. Either cloning a template or running an action. Both must result in document of the correct form type of course.\n\nThe action has no write access to `Aeppic` though and must return an `EditableDocument` of the matching form type.\n\n[Defaults][defaults]\n\n[defaults]: Select\n  - : Empty\n  - TEMPLATE: Clone template\n  - ACTION: Run action\n\n{show if defaults === 'TEMPLATE'}\n[Template][newTemplate]\n\n{show if defaults === 'ACTION'}\n[New Action][newAction]\n\n[newTemplate]: /ref\n[newAction]: /action-form\n\n# Children\n\n{ref keep-open-after-selection}\n[][allowedChildrenForms]\n \n[allowedChildrenForms]: /form (0-n)\n\nOptionally limit what kind of children are expected. This is used by the default page design for example.\n\n# Commands\n\n{ref forms=command-form,command-group-form}\n[Commands][commands]\n[commands]: /ref (0-n)\n\n{children}\n[Descendant commands][descendantCommands]\n[descendantCommands]: /62151777-a006-4796-b3d3-8e74a44fdec8 (0-n)\n\n# Convert\n\nConversion maps are defined to ensure a\ndocument of a certain form can be converted\ninto another form or form version.\n\nConversions **to** a specific form version\ntake precendent and get used first. Each conversion\nis checked in order. The first match wins.\n\n{children}\n[To][to]\n[to]: /3d24b889-4f90-4b29-982d-27a3e6831108 (0-n)\n\nIf no matching conversion was found in the origin form,\nthe from conversions of the target form are looked through\nalso in order.\n\n{children}\n[From][from]\n[from]: /d605faf3-ac57-4ef3-9fc8-383f0eaf34e6 (0-n)\n\n\n# User Interface Options\n\n{hidden if icon.dataUrl}\n[Named Icon][namedIcon]\n\n{hidden if !namedIcon | color}\n[Named Icon Prefered Color][namedIconColor]\n\n{hidden if namedIcon}\n[Icon][icon]\n\n[Options][uiOptions]\n\n[Theme][theme]\n\n\n[uiOptions]: /234d58a9-6a0a-463a-bb53-723e1c46a0e8\n[icon]: Image\n[theme]: /57650eb1-4dc7-413e-8e41-307ff96a25e2\n\n# Details\n\n{multiline}\n[Description][description]\n\n","descendantCommands":[],"description":"","from":[],"functions":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Form","namedIcon":"far fa-file-invoice","namedIconColor":"","newAction":{"id":"","text":"","v":""},"newTemplate":{"id":"","text":"","v":""},"relatedDocuments":[],"tags":"","theme":{"id":"","text":"","v":""},"to":[],"uiOptions":{"id":"","text":"","v":""}},"f":{"id":"form","text":"Form","v":"091409068fa04e57"},"id":"form","inheritedLocks":[null,null,null],"locks":[],"meta":{"modified":{"at":"2026-05-06T14:55:24+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""}},"modified":{"at":"2025-12-08T08:26:28+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"system-forms","previous":{"f":{"id":"form","text":"Form","v":"5cc8b1b3ef8bba14"},"v":"091409068fa04e57"},"stamps":[],"t":1778079324308,"v":"c2759612aee0e8c4"},{"id":"647b2571-aea1-4247-8adb-b43bb4c94afc","v":"initial","p":"144e85c0-d7f9-4b20-8928-be30f0c78bda","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-09-13T09:19:44+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-09-13T09:19:44+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1568366384330,"ct":1568366384326,"a_depth":2,"a":["apps","144e85c0-d7f9-4b20-8928-be30f0c78bda"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"c4651b79-e62d-44e7-a5a7-8b49d602ea90","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"3339944f-c35f-44b1-b427-a6db1d012825","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-10-27T08:47:19+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-10-27T08:47:19+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1603788439854,"ct":1603788439854,"a_depth":2,"a":["apps","3339944f-c35f-44b1-b427-a6db1d012825"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"014f9cfc-ec00-48ce-bebf-bad5e80a16d0","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"p":"2d2705a2-824a-4c8f-b61d-b5c657e81f4b","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2021-09-06T12:14:15+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-09-06T12:14:15+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1630930455540,"ct":1630930455540,"a_depth":2,"a":["apps","2d2705a2-824a-4c8f-b61d-b5c657e81f4b"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"b527e1f4-0f84-4523-b682-74390e265561","v":"initial","p":"8884dd6d-4320-4de2-91fe-6777ecfebec9","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-05-08T08:52:36+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:52:36+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927956529,"ct":1588927956529,"a_depth":2,"a":["apps","8884dd6d-4320-4de2-91fe-6777ecfebec9"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"15292d56-6806-4263-b6d0-9194687203e1","v":"initial","cloneOf":{"id":"286fef33-fdfd-4fcf-a5c6-bd5415bc1fc8","v":"fcb05ac4bb627d15","text":"Forms"},"originalCloneOf":{"id":"286fef33-fdfd-4fcf-a5c6-bd5415bc1fc8","v":"fcb05ac4bb627d15","text":"Forms"},"p":"86189c5a-b9f4-445a-879f-d94574960df0","f":{"id":"form-folder","v":"cb7204e5b9d8da77","text":"Form Folder"},"data":{"name":"Forms","description":""},"locks":[],"created":{"at":"2022-04-21T11:59:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2022-04-21T11:59:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1650542372208,"ct":1650542372208,"a_depth":2,"a":["apps","86189c5a-b9f4-445a-879f-d94574960df0"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[],"dts":1660907988185},{"id":"15e997fb-2bff-421c-b0d0-c3ce2562aba0","v":"f9bf001ebf5b242a","p":"9d6ee173-26fe-4472-a271-7667f717094e","f":{"id":"folder","v":"e1404b257b76c5de","text":"Folder","client":"server"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-06-23T12:00:14+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-06-23T12:03:07+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1592913787847,"ct":1592913787847,"a_depth":2,"a":["apps","9d6ee173-26fe-4472-a271-7667f717094e"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"initial","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"}}},{"id":"b5c091e5-d704-4b33-8418-c9fecb1158be","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"p":"a4f1ee77-01e0-483a-811b-6d64b067bdea","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2024-01-22T10:45:37+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-01-22T10:45:37+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1705920337046,"ct":1705920337046,"a_depth":2,"a":["apps","a4f1ee77-01e0-483a-811b-6d64b067bdea"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"a266683d-c5cc-48db-aa99-a306d20ae787","v":"initial","p":"5a8a5d3c-f995-43ef-8d37-1f8a5e4550da","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-02-01T12:45:32+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-02-01T12:45:32+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1549025132251,"ct":1549025132251,"a_depth":2,"a":["apps","5a8a5d3c-f995-43ef-8d37-1f8a5e4550da"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"ccc7e7bc-4bea-4692-b184-772c84353393","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"37fafb3d-18da-4182-af74-082971d50956","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-08-07T13:44:45+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-08-07T13:44:45+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1596807885748,"ct":1596807885747,"a_depth":2,"a":["apps","37fafb3d-18da-4182-af74-082971d50956"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"8d98d455-3f46-4f30-a930-8bbde4a2ffa4","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"bc036ad0-6dbc-415b-b506-325fb0a44046","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-04-11T10:01:42+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-04-11T10:01:42+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1554976902634,"ct":1554976902634,"a_depth":2,"a":["apps","bc036ad0-6dbc-415b-b506-325fb0a44046"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3"],"a_depth":2,"a_forms":["folder","application-form"],"created":{"at":"2025-08-01T11:50:41+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1754049041575,"data":{"controls":[],"description":"","designs":[],"name":"Forms"},"f":{"id":"form-folder","text":"Form Folder","v":"9b1a050f5d4e0dec"},"id":"05787127-986a-494f-a69e-8733c1176596","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-08-25T11:57:50+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"af6c380d-2ab5-409a-802f-46dba2b426e3","previous":{"v":"initial"},"stamps":[],"t":1756123070649,"v":"0e3a5ea39b814f53"},{"id":"c7886010-d818-4786-bdd4-c312eb4e6e37","v":"initial","p":"395b74e1-4675-4df1-b059-604e297c2954","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-05-08T08:52:42+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:52:42+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927962778,"ct":1588927962778,"a_depth":2,"a":["apps","395b74e1-4675-4df1-b059-604e297c2954"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"3812ddba-238d-4795-af96-2cdc7203c08d","v":"initial","previous":{"v":""},"p":"9e7fd821-5bd9-4314-a542-34431752f51f","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-04-18T15:40:54+02:00","by":"","backedBy":"","from":"","client":"server"},"modified":{"at":"2018-04-18T15:40:54+02:00","by":"","backedBy":"","from":"","client":"server"},"t":1524058854479,"ct":1524058854479,"a_depth":2,"a":["apps","9e7fd821-5bd9-4314-a542-34431752f51f"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"007eb0e3-8b9a-4516-bba4-41372ebd7c42","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"f416e371-07cc-4987-a6de-5934ef5ff3e4","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-11-19T13:12:43+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-11-19T13:12:43+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1605791563333,"ct":1605791563332,"a_depth":2,"a":["apps","f416e371-07cc-4987-a6de-5934ef5ff3e4"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"6eaf1c4f-8acb-4f9a-9b4b-fbcb34fd719d","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"a031e940-b5a5-4d46-a6dd-c8dcbb57cac1","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-08-13T08:31:18+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-08-13T08:31:18+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1565685078384,"ct":1565685078382,"a_depth":2,"a":["apps","a031e940-b5a5-4d46-a6dd-c8dcbb57cac1"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"fc4370f2-e352-47da-97b3-4d737252796c","v":"initial","p":"18da93c8-dfa2-4c21-b0fe-7e09b2b6d6c4","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-09-09T09:30:33+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-09-09T09:30:33+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1568021433601,"ct":1568021433600,"a_depth":2,"a":["apps","18da93c8-dfa2-4c21-b0fe-7e09b2b6d6c4"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"4ec6a0e5-cf2d-4095-9b70-2e31a64d5679","v":"initial","cloneOf":{"id":"286fef33-fdfd-4fcf-a5c6-bd5415bc1fc8","v":"initial","text":"Forms"},"originalCloneOf":{"id":"286fef33-fdfd-4fcf-a5c6-bd5415bc1fc8","v":"initial","text":"Forms"},"p":"45ada186-e9fd-451d-9dbd-2defc0b4f86f","f":{"id":"form-folder","v":"e2e87df32e325504","text":"Form Folder"},"data":{"name":"Forms","description":""},"locks":[],"created":{"at":"2020-06-23T12:01:24+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-06-23T12:01:24+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1592913684888,"ct":1592913684888,"a_depth":2,"a":["apps","45ada186-e9fd-451d-9dbd-2defc0b4f86f"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[],"dts":1738326978699},{"id":"75920050-07b1-4e79-9742-54abcc235e91","v":"initial","p":"5ec4fefb-1235-484e-8d6f-4fd645bae372","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Formulare","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-03-08T14:03:53+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-03-08T14:03:53+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1552053833263,"ct":1552053833263,"a_depth":2,"a":["apps","5ec4fefb-1235-484e-8d6f-4fd645bae372"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"ce941088-6dfa-42c2-a967-1cb0693f1d75","v":"initial","p":"fb62ad28-07b0-4a99-91bd-43c297656f12","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-05-08T08:52:48+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:52:48+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927968345,"ct":1588927968345,"a_depth":2,"a":["apps","fb62ad28-07b0-4a99-91bd-43c297656f12"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"2357fbdc-50bd-43c1-a046-d73c71d3835e","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"45ada186-e9fd-451d-9dbd-2defc0b4f86f","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-06-23T12:01:24+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-06-23T12:01:24+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1592913684914,"ct":1592913684910,"a_depth":2,"a":["apps","45ada186-e9fd-451d-9dbd-2defc0b4f86f"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"44f0275d-078c-4ec3-b475-13f60453dde8","v":"initial","cloneOf":{"id":"676a196c-72c0-44e3-bdcc-9ac195273e80","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"676a196c-72c0-44e3-bdcc-9ac195273e80","v":"initial","text":"Layouts"},"p":"e1bc93d1-b6c6-4711-a98f-675371c40326","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2026-03-23T13:30:09+00:00","by":"729fa027-7e7e-4b06-9602-f535c43824f0","backedBy":"","impersonatedBy":"","from":"","client":"server"},"modified":{"at":"2026-03-23T13:30:09+00:00","by":"729fa027-7e7e-4b06-9602-f535c43824f0","backedBy":"","impersonatedBy":"","from":"","client":"server"},"t":1774272609763,"ct":1774272609763,"a_depth":2,"a":["apps","e1bc93d1-b6c6-4711-a98f-675371c40326"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"5fa71c32-0186-4007-92a9-f03a32b0ff33","v":"initial","cloneOf":{"id":"286fef33-fdfd-4fcf-a5c6-bd5415bc1fc8","v":"e2f711326de79b99","text":"Forms"},"originalCloneOf":{"id":"286fef33-fdfd-4fcf-a5c6-bd5415bc1fc8","v":"e2f711326de79b99","text":"Forms"},"p":"089481c4-a42f-4a98-9bc9-12e9f1131f4b","f":{"id":"form-folder","v":"577dbed0412b397a","text":"Form Folder"},"data":{"name":"Forms","structural":false,"description":""},"locks":[],"created":{"at":"2021-10-04T11:07:17+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-10-04T11:07:17+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1633345637332,"ct":1633345637332,"a_depth":2,"a":["apps","089481c4-a42f-4a98-9bc9-12e9f1131f4b"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[],"dts":1662033144176},{"id":"a72b89db-1811-40ae-89fa-572eb9bcbe53","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"d8c9a42b-e289-4c9a-97ea-801de8ab480a","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-08-10T09:28:32+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-08-10T09:28:32+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1597051712214,"ct":1597051712211,"a_depth":2,"a":["apps","d8c9a42b-e289-4c9a-97ea-801de8ab480a"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["system","lists"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2025-11-18T09:00:33+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1763456433490,"data":{"controller":"class Controller {\n/////////////////////////\n//  \n//  For more information look at the example in the test bench at e9f6cbce-0b0f-4ef3-a7cf-ae0b2ddbce03\n//\n//  Also look at the documentation in the controller of daafafaf-e40a-4837-adcb-75bd25f67143\n//\n/////////////////////////\n\n  init() {\n    if (!Array.isArray(params.layers) || params.layers.length === 0) {\n      throw new Error(\"You must configure at least one layer\")\n    }\n  }\n}","css":"","description":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"rd:GroupedList","packages":[],"template":"<ae-layout\n  layout-id=\"daafafaf-e40a-4837-adcb-75bd25f67143\"\n  class=\"size-full\"\n  :param-documents=\"documents\"\n  :param-layers=\"params.layers\"\n  v-on=\"$listeners\"\n></ae-layout>"},"f":{"id":"list-form","text":"List","v":"127235d96f4020d0"},"id":"e476f910-4a94-40a9-b815-dc5935b4b822","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-11-19T08:13:54+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"lists","previous":{"v":"256c260fb74b8e47"},"stamps":[],"t":1763540034230,"v":"f7c174b6b2aa9f4c"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24"],"a_depth":2,"a_forms":["folder","application-form"],"created":{"at":"2025-08-22T08:38:24+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1770203689839,"data":{"description":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Fallback Designs Bizpin"},"f":{"id":"design-folder","text":"Design Folder","v":"fa3a66b4a06ff90c"},"id":"1cc4b977-c14d-4587-af47-d6ac230f60b3","inheritedLocks":[null,null,null],"locks":[],"meta":{"modified":{"at":"2026-02-04T11:14:49+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""}},"modified":{"at":"2025-09-22T07:45:33+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"77ee8815-2c3a-4bb5-abd9-90541a545a24","previous":{"f":{"id":"design-folder","text":"Design Folder","v":"4fccf7c8ead30dd3"},"v":"87574c37fe2dfd86"},"stamps":[],"t":1770203689839,"v":"dd3eace64ddefb98"},{"id":"8fb938a6-72d4-4582-9faa-0595ce1dcced","v":"0dc0e25d948c5f08","cloneOf":{"id":"672123ff-a0df-498a-ba54-4a7c13ea2fb9","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"672123ff-a0df-498a-ba54-4a7c13ea2fb9","v":"initial","text":"Layouts"},"previous":{"v":"b4ccb959f93a22bd"},"p":"bd4df555-2c56-4a5f-82f0-7e4745372f51","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2019-01-24T09:27:17+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2019-01-24T09:27:32+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1548322052787,"ct":1548322037807,"a_depth":2,"a":["apps","bd4df555-2c56-4a5f-82f0-7e4745372f51"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"d98e0ddd-7901-4cc6-864a-813fe8fb196a","v":"initial","p":"9302d29e-bf32-4350-a5fd-18b542d1b5db","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-05-08T08:50:49+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:50:49+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927849474,"ct":1588927849473,"a_depth":2,"a":["apps","9302d29e-bf32-4350-a5fd-18b542d1b5db"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"fd76d7d9-ff93-4e79-810e-a4106783fd98","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"14c27659-92d7-4b43-8c4f-25f4cceae591","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-08-26T13:52:48+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-08-26T13:52:48+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1598449968995,"ct":1598449968995,"a_depth":2,"a":["apps","14c27659-92d7-4b43-8c4f-25f4cceae591"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"79f0bb0e-40ac-49b6-869a-6de582dab712","v":"initial","p":"634a96fa-b352-4447-85c8-fced840e2693","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-05-08T08:50:45+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:50:45+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927845250,"ct":1588927845250,"a_depth":2,"a":["apps","634a96fa-b352-4447-85c8-fced840e2693"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"ab120df9-69d9-43ca-9433-3704ec2598ab","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"2bdbf296f51bb651","text":"Layouts"},"p":"75c6f72a-08a2-44f4-a29c-86b58be26f96","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2021-03-30T11:51:19+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-03-30T11:51:19+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1617105079181,"ct":1617105079181,"a_depth":2,"a":["apps","75c6f72a-08a2-44f4-a29c-86b58be26f96"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"5d6a08db-bff9-4eb2-8ed5-2125babe0df6","v":"initial","p":"7f785d94-22cf-44fd-9d57-5221168ade6b","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-05-08T08:51:43+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:51:43+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927903063,"ct":1588927903063,"a_depth":2,"a":["apps","7f785d94-22cf-44fd-9d57-5221168ade6b"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"a5d260b3-4a12-4625-97b0-48a83aaf6442","v":"20aa26396aa3a62e","previous":{"v":"initial","p":"60c45486-4b82-4a56-8bd5-cd30cde73d47"},"p":"b090141a-949d-4b35-a5c2-d8f1dd937dcf","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts for Shares","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-10-30T12:49:46+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":null,"backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894057,"ct":1540903786767,"a_depth":2,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"a24e129a-47ca-4348-8ded-d3ba57446daa","v":"initial","cloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"originalCloneOf":{"id":"93bd76c0-e9de-4c45-9198-b92cccfda08e","v":"initial","text":"Layouts"},"p":"fc1a4a52-200d-473b-bd8a-29818356064d","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-08-10T15:15:12+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-08-10T15:15:12+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1597072512790,"ct":1597072512789,"a_depth":2,"a":["apps","fc1a4a52-200d-473b-bd8a-29818356064d"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"35f2f1de-00c4-4d79-847b-e7d5360731d1","v":"initial","p":"b7897ae7-5276-43f0-90ce-8e3c5d3d6ff5","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-05-08T08:52:49+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:52:49+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927969302,"ct":1588927969302,"a_depth":2,"a":["apps","b7897ae7-5276-43f0-90ce-8e3c5d3d6ff5"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"0dc51e1e-2f6d-43d8-b782-1dec52ad67c3","v":"initial","p":"001579a1-8f0a-40e5-8072-72c3a27195a9","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2020-05-13T07:50:16+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-13T07:50:16+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1589356216664,"ct":1589356216663,"a_depth":2,"a":["apps","001579a1-8f0a-40e5-8072-72c3a27195a9"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"6fe4f7aa-7792-4a1f-bc15-3cdb817ecff3","v":"initial","p":"cf914a7f-ff5f-4598-80f1-63c9129e0a71","f":{"id":"folder","v":"60bfdadb874a9f10","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2021-07-07T11:16:57+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-07-07T11:16:57+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1625656617054,"ct":1625656617053,"a_depth":2,"a":["apps","cf914a7f-ff5f-4598-80f1-63c9129e0a71"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"dashboard-form","v":"975321c0c04fb8dc","p":"system-forms","f":{"id":"form","v":"cac2c00e9d3adbaa","text":"Form"},"data":{"name":"Dashboard","tags":"","allowUndefinedFields":false,"definition":"[Name][name]\n\n[Description][description]\n\n[description]: Text","functions":"","defaults":"","newTemplate":{"id":"","v":"","text":""},"newAction":{"id":"","v":"","text":""},"allowedChildrenForms":[],"commands":[],"namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"uiOptions":{"id":"","v":"","text":""},"theme":{"id":"","v":"","text":""},"description":""},"locks":[],"created":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"modified":{"at":"2020-07-06T19:07:35+00:00","by":"8e6c22aa-8c69-4ff8-919a-7032841cf636","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719473825405,"ct":1719473825405,"a_depth":2,"a":["system","system-forms"],"a_forms":["system-folder-form","repository-folder-form"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"86f796b6c7b3e7f1","f":{"id":"form","v":"24ab84939535fdcd","text":"Form"}},"meta":{"modified":{"at":"2024-06-27T07:37:05+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"a":["apps","bfeee3b0-ad25-4bba-a51c-01584d72c45a"],"a_depth":2,"a_forms":["folder","application-form"],"created":{"at":"2021-05-21T14:03:57+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":""},"ct":1630930377404,"data":{"aliases":{"id":"","text":"","v":""},"changes":[{"id":"76a75870-2306-4e71-895f-96dd2ce94853","text":"Datum Erfasste Zeit","v":"initial"}],"controls":[],"description":"","dialogForms":[{"id":"0142060c-ac17-4d96-b418-24afa702fbd5","text":"Auswertung: Auslastung Projektleiter","v":"ee4367c428fd5bbf"}],"globalRoutingTables":[],"icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"[deprecated redesign] Energieberater: Auswertung Auslastung Projektleiter","namedIcon":"fa fa-chart-pie","namedIconColor":"","routingPrefixAlias":"","routingTables":[],"stylesheets":[]},"f":{"id":"application-form","text":"Application","v":"29335d8d5cd3c1a1"},"id":"add15d6c-c7b4-4cfb-8da7-d7f38c610cfc","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2024-12-03T12:22:00+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"bfeee3b0-ad25-4bba-a51c-01584d72c45a","previous":{"v":"dd197d6322536ca2"},"stamps":[],"t":1733228520523,"v":"8635847447646310"},{"id":"5152f88f-3006-46f9-959a-423139accf79","v":"19d022c22e978d09","previous":{"v":"d455627ac784563d"},"p":"f254ce25-42f1-4333-8ee7-23554bf746c1","f":{"id":"form","v":"a57e5af653d72344","text":"Form"},"data":{"name":"Zu versendende Formulare","tags":"","namedIcon":"far fa-envelope","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"definition":"[Betreff][name]\n\n{readonly}\n[Empfänger][empfaenger]\n[empfaenger]: /f8fd3176-4995-455f-a8a8-d2742a836816 (0-n)\n  help:\n  ---\n  Der Empfänger wird aus dem Projekt in folgenden Reihenfolge ausgelesen: `Ansprechpartner` mit Rückfall auf `Bauherr`.\n\n  Sind beide nicht ausgewählt, wird auf einen leeren Kontakt zurückgegriffen.\n\n{attachment form-id=dbee6e16-d63a-493c-bba6-505f79918f9f file-field=datei name-field=name delete-on-remove=true list=true direct-preview=true}\n[Anhänge][anhaenge]\n[anhaenge]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n)\n  help:\n  ---\n  Es können weitere Anhänge hinzugefügt werden, welche der Kunde zusätzlich herunterladen kann.\n  \n  Folgende *Dateien* und *Word-Vorlagen* aus den *Stammdaten* wurden automatisch hinzugefügt, sofern hinterlegt:\n  - Alle aus *Projektdateien*\n  - Von jeder im Projekt ausgewählten Leistung\n\n{readonly|attachment form-id=dbee6e16-d63a-493c-bba6-505f79918f9f file-field=datei name-field=name delete-on-remove=true list=true direct-preview=true}\n[Uploads des Kunden][uploads]\n[uploads]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n)\n","functions":"","allowedChildrenForms":[],"commands":[],"description":""},"locks":[],"created":{"at":"2019-08-22T12:20:33+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2024-05-17T11:04:13+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"1cdca864-ebbd-4574-a524-1060843e275f","impersonatedBy":null,"from":"","client":"server"},"t":1715943853870,"ct":1566476433361,"a_depth":3,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1"],"a_forms":["folder","application-form","form-folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"dts":1733474963028},{"id":"8d8f6fdb-6f78-4e2a-b585-bd80f4dbaa1d","v":"b7b151e6efbbe1b5","previous":{"v":"9b5a6d23d2f9fdf5"},"p":"f254ce25-42f1-4333-8ee7-23554bf746c1","f":{"id":"form","v":"a57e5af653d72344","text":"Form"},"data":{"name":"Gesprächsnotiz","tags":"","namedIcon":"far fa-comments-alt","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"definition":"[Betreff][name]\n\n{ref ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path=true}\n[Empfänger][empfaenger]\n[empfaenger]: /f8fd3176-4995-455f-a8a8-d2742a836816 (0-n)\n\n{multiline}\n[Gesprächsnotiz][notiz]\n\n{attachment form-id=dbee6e16-d63a-493c-bba6-505f79918f9f file-field=datei name-field=name delete-on-remove=true direct-preview=true}\n[Anhänge][anhaenge]\n[anhaenge]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n)\n\n\n# Lesebestätigung\n\n{readonly if unterschriftLesebestaetigung.dataUrl|signature}\n[Unterschrift][unterschriftLesebestaetigung]\n[unterschriftLesebestaetigung]: file\n\n{stamp id=59cda385-cabd-4f16-9e5a-0e26aabc4419 readonly=true}\n\n","functions":"","allowedChildrenForms":[],"commands":[],"description":""},"locks":[],"created":{"at":"2019-07-17T12:38:04+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2024-05-15T13:37:11+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","impersonatedBy":null,"from":"","client":"server"},"t":1715780231516,"ct":1563367084353,"a_depth":3,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1"],"a_forms":["folder","application-form","form-folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"dts":1715946522523},{"id":"c6349b48-9561-4c06-9200-fe9df9b6fb3e","v":"f146a970e1670ff6","previous":{"v":"de30a1634f8672cf"},"p":"f254ce25-42f1-4333-8ee7-23554bf746c1","f":{"id":"form","v":"e02c68c619719072","text":"Form"},"data":{"name":"Dokumenten Share","tags":"","namedIcon":"far fa-folder-tree","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"definition":"[Name][name]\n\n# Kunde\n \n{visible-if-command id=3a13cdaf-95f4-43d0-a8e5-6a02e5d8ffc1 label=\"Passwort Kunde\" control=text help=\"Optional. Leer lassen für kein Passwort\"}\n[][passwortKunde]\n[passwortKunde]: text \n\n{visible-if-command id=3a13cdaf-95f4-43d0-a8e5-6a02e5d8ffc1 label=\"Zu benachrichtigende Kontakte\" control=ref ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df help=\"Benachrichtigungen werden gesendet bei neuen Dateien in: `Vertrag`, `Förderanträge`, `Berechnungen`, `Berichte`.\"}\n[][empfaenger]\n[empfaenger]: /f8fd3176-4995-455f-a8a8-d2742a836816 (0-n)\n\n\n{readonly|visible-if-command id=3a13cdaf-95f4-43d0-a8e5-6a02e5d8ffc1 label=\"Gesendete Formulare an Auftraggeber\" control=ref form-id=dbee6e16-d63a-493c-bba6-505f79918f9f file-field=datei name-field=name delete-on-remove list thumbnail collapse-after=10 show-download handle-selected=false}\n[][gesendeteProjektFormulare]\n[gesendeteProjektFormulare]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n)\n\n{readonly|visible-if-command id=3a13cdaf-95f4-43d0-a8e5-6a02e5d8ffc1 label=\"Formulare vom Auftraggeber\" control=ref form-id=dbee6e16-d63a-493c-bba6-505f79918f9f file-field=datei name-field=name delete-on-remove list thumbnail collapse-after=10 show-download handle-selected=false}\n[][hochgeladeneProjektFormulare]\n[hochgeladeneProjektFormulare]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n)\n\n{visible-if-command id=3a13cdaf-95f4-43d0-a8e5-6a02e5d8ffc1 label=\"Auftrags- und Vertragsunterlagen\" control=attachment form-id=dbee6e16-d63a-493c-bba6-505f79918f9f file-field=datei name-field=name delete-on-remove list thumbnail collapse-after=10}\n[][dateienVertrag]\n[dateienVertrag]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n)\n\n{readonly|visible-if-command id=3a13cdaf-95f4-43d0-a8e5-6a02e5d8ffc1 label=\"Angebote, Rechnungen\" control=attachment form-id=dbee6e16-d63a-493c-bba6-505f79918f9f file-field=datei name-field=name delete-on-remove list thumbnail collapse-after=10 help=\"Hier angezeigte Dateien werden automatisch aus Angeboten und Rechnungen kopiert. Werden diese dort bearbeiten/entfernt, so werden diese Datei auch hier aktualisiert.\" }\n[][dateienFakturierung]\n[dateienFakturierung]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n) \n\n{visible-if-command id=3a13cdaf-95f4-43d0-a8e5-6a02e5d8ffc1 label=\"Förderanträge\" control=attachment form-id=dbee6e16-d63a-493c-bba6-505f79918f9f file-field=datei name-field=name delete-on-remove list thumbnail collapse-after=10}\n[][dateienFoerderung]\n[dateienFoerderung]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n)\n\n{attachment form-id=dbee6e16-d63a-493c-bba6-505f79918f9f file-field=datei name-field=name delete-on-remove list thumbnail collapse-after=10}\n[Berechnungen][dateienBerechnung]\n[dateienBerechnung]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n)\n\n{visible-if-command id=3a13cdaf-95f4-43d0-a8e5-6a02e5d8ffc1 label=\"Berichte\" control=attachment form-id=dbee6e16-d63a-493c-bba6-505f79918f9f file-field=datei name-field=name delete-on-remove list thumbnail collapse-after=10}\n[][dateienBerichte]\n[dateienBerichte]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n)\n\n{readonly|visible-if-command id=3a13cdaf-95f4-43d0-a8e5-6a02e5d8ffc1 label=\"Uploads des Auftraggebers\" control=attachment form-id=dbee6e16-d63a-493c-bba6-505f79918f9f file-field=datei name-field=name delete-on-remove list thumbnail collapse-after=10 disable-remove help=\"  Bei neuen Dateien wird eine Benachrichtigung an den Projektleiter gesendet.\"}\n[][uploads]\n[uploads]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n)\n\n# Baustelle\n\n{visible-if-command id=3a13cdaf-95f4-43d0-a8e5-6a02e5d8ffc1 label=\"Passwort Baustelle\" control=text help=\"Optional. Leer lassen für kein Passwort\"}\n[][passwortBaustelle]\n[passwortBaustelle]: text \n\n{visible-if-command id=3a13cdaf-95f4-43d0-a8e5-6a02e5d8ffc1 label=\"Zu benachrichtigende Kontakte\" control=ref ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df help=\"Benachrichtigungen werden gesendet bei neuen Dateien in: `Berechnungen`\"}\n[][empfaengerBaustelle]\n[empfaengerBaustelle]: /f8fd3176-4995-455f-a8a8-d2742a836816 (0-n)\n\n{attachment form-id=dbee6e16-d63a-493c-bba6-505f79918f9f file-field=datei name-field=name delete-on-remove list thumbnail collapse-after=10}\n[Berechnungen][dateienBerechnung]\n[dateienBerechnung]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n)\n","functions":"","allowedChildrenForms":[],"commands":[],"description":""},"locks":[],"created":{"at":"2020-04-22T12:19:23+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2025-01-27T13:19:46+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1737983986075,"ct":1596703058767,"a_depth":3,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1"],"a_forms":["folder","application-form","form-folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"dts":1737984160385},{"id":"0c8ef865-fd1b-40bd-b665-97ad067fd10f","v":"initial","previous":{"v":""},"p":"6b892ddf-3264-4056-b191-166f4410d9fa","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-04-19T18:13:55+02:00","by":"","backedBy":"","from":"","client":"server"},"modified":{"at":"2018-04-19T18:13:55+02:00","by":"","backedBy":"","from":"","client":"server"},"t":1524154435115,"ct":1524154435114,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","6b892ddf-3264-4056-b191-166f4410d9fa"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381"],"a_depth":3,"a_forms":["system-folder-form","folder","form"],"created":{"at":"2025-10-07T13:45:30+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759844730753,"data":{"description":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Sections"},"f":{"id":"folder","text":"Folder","v":"602501509abc77b3"},"id":"6ad6f21b-b086-4e9c-aa38-4893fd343fb9","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-10-07T13:45:30+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"a9dbf1ad-0428-403e-b88b-bd73c35cf381","stamps":[],"t":1759844730753,"v":"initial"},{"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1"],"a_depth":3,"a_forms":["folder","application-form","form-folder"],"created":{"at":"2020-07-22T17:31:14+02:00","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":""},"ct":1595431874073,"data":{"allowedChildrenForms":[],"commands":[{"id":"7d65dcc7-d03b-4d54-9765-19b8e8551f5f","text":"Neu","v":"b409054082f75844"}],"definition":"[Projection of document][document]\n[document]: ref\n\n[Name][name]\n[Status (Display)][statusDisplay]\n[Status][status]\n[status]: Select\n  - NONE:\n  - ACQUISITION: Akquise\n  - DECLINED: Abgelehnt\n  - PROGRESS: In Bearbeitung (in der Planungsphase)\n  - ONSPOTCHECKS: In Ausführung (vor Ort Kontrollen)\n  - DONE: Abgeschlossen\n  - DORMANT: Ruhend\n\n[Priorität (Display)][prioritaetDisplay]\n[Priorität][prioritaet]\n[prioritaet]: Select\n  - NONE:\n  - LOW: Niedrig\n  - MEDIUM: Mittel\n  - HIGH: Hoch\n\n[Nachweis (display)][nachweisDisplay]\n[Nachweis][nachweis]\n[nachweis]: Select\n  - NONE: \n  - ENEV: EnEV\n  - GEG: GEG\n\n\n{ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Projektleiter (Junior)][projektleiter] {ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Projektleiter (Senior)][leitenderProjektleiter]\n\n{ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Objektplanung: Projektleiter][projektleiterObjektplanung] {ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Tragwerksplanung: Projektleiter][projektleiterTragwerksplanung]\n\n\n\n{ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Wärmeschutz: Projektleiter][projektleiterWaermeschutz] {ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Nachhaltigkeit: Projektleiter][projektleiterNachhaltigkeit]\n\n\n\n{ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Schallschutz: Projektleiter][projektleiterSchallschutz] {ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Brandschutz: Projektleiter][projektleiterBrandschutz]\n\n\n\n{ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[TGA: Projektleiter][projektleiterTga] {ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Sachverständige: Projektleiter][projektleiterSachverstaendige]\n\n[projektleiter]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10\n[leitenderProjektleiter]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 \n[projektleiterObjektplanung]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10  \n[projektleiterTragwerksplanung]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10  \n[projektleiterWaermeschutz]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10  \n[projektleiterNachhaltigkeit]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10  \n[projektleiterSchallschutz]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10  \n[projektleiterBrandschutz]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10  \n[projektleiterTga]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10  \n[projektleiterSachverstaendige]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10  \n\n{ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path=true}[Auftraggeber][bauherr] \n[bauherr]: /f8fd3176-4995-455f-a8a8-d2742a836816\n\n{ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path=true}\n[Ansprechpartner][ansprechpartner]\n[ansprechpartner]: /f8fd3176-4995-455f-a8a8-d2742a836816 (0-n)\n\n{ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path=true}\n[Beteiligte][beteiligte]\n[beteiligte]: /f8fd3176-4995-455f-a8a8-d2742a836816 (0-n)\n\n{ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path=true}\n[antragsteller]: /f8fd3176-4995-455f-a8a8-d2742a836816 (0-n)\n\n{ref handle-selected-readonly=true ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path=true}[Kunde kommt von][empfehlungDurch]\n[empfehlungDurch]: /f8fd3176-4995-455f-a8a8-d2742a836816 (0-n)\n\n[Baustellen Adresse][baustellenAdresse]\n[baustellenAdresse]: address\n\n[Beschreibung][beschreibung]\n\n[Aufgaben][aufgaben]\n[Arbeitszeit][arbeitszeit]\n[arbeitszeit]: number\n[Beauftragte Zeit][beauftragteZeit]\n[beauftragteZeit]: duration\n[Dateien][dateien]\n","description":"","functions":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Projection: Projekt","namedIcon":"fa fa-clipboard-list","namedIconColor":"","tags":""},"f":{"id":"form","text":"Form","v":"a57e5af653d72344"},"id":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-04-16T10:17:12+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"f254ce25-42f1-4333-8ee7-23554bf746c1","previous":{"v":"aa36d5897bbc96db"},"stamps":[],"t":1776334632242,"v":"2d71328fce642fe7"},{"id":"4551c597-7595-4858-8b7f-207a7fb15b3e","v":"dce0ece7bd52e29c","previous":{"v":"0c0c91f64a2c1d6d"},"p":"e89b29a9-6ab9-47dc-a6fe-91ebda92871d","f":{"id":"form","v":"09198ed5f8fec9fb","text":"Form"},"data":{"name":"Casting","tags":"","namedIcon":"fa fa-users-class","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"definition":"[Typ][type]\n\n[name]: = functions.name(type)\n\n[type]: select\n  - E_CASTING:  eCasting\n  \n<!-- - SEDCARD:    Sedcard Casting -->\n","functions":"name(castingType) {\n  if (castingType === 'E_CASTING') {\n    return 'eCasting'\n  }\n  if (castingType === 'SEDCARD') {\n    return 'Sedcard Casting'\n  }\n  return 'Unbekannter Casting Typ'\n}","allowedChildrenForms":[],"commands":[],"description":""},"locks":[],"created":{"at":"2018-04-20T12:29:46+02:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"f8312258-bdc9-438a-a510-de77a69e61e9"},"modified":{"at":"2020-10-13T10:11:31+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583891670,"ct":1602583891669,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","e89b29a9-6ab9-47dc-a6fe-91ebda92871d"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"64807bcd-1efa-4a43-a950-e10de2e0125c","v":"initial","previous":{"v":""},"p":"0daea31b-a830-44bf-8844-b6001f852f00","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"MergeTool","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-05-23T11:47:17+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"from":"","client":"server"},"modified":{"at":"2018-05-23T11:47:17+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"from":"","client":"server"},"t":1527068837070,"ct":1527068837069,"a_depth":3,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"e6ffdfd0-88dd-429d-965b-a4634b065b3b","v":"879690bdda3184d4","previous":{"v":"initial"},"p":"2acd7a85-e378-49d3-a959-75ea2cab13a4","f":{"id":"form","v":"af06aca6217d20c5","text":"Form"},"data":{"name":"Merge View","description":"","definition":"[Name][name]","functions":"","semver":"","allowedChildrenForms":[],"layout":{"id":"","v":"","text":""},"color":{"id":"","v":"","text":""},"iconName":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}},"applicationLayoutOptions":{"id":"","v":"","text":""},"documentLayoutOptions":{"id":"","v":"","text":""}},"locks":[],"lockRefs":[],"created":{"at":"2017-12-22T10:19:42+01:00","by":"","from":"","client":"f850c977-4f2e-4f6c-8389-ad1230848f0e"},"modified":{"at":"2017-12-22T10:21:05+01:00","by":"","from":"","client":"f850c977-4f2e-4f6c-8389-ad1230848f0e"},"t":1513934465971,"ct":1513934377548,"a_depth":3,"a":["apps","90340217-c9b1-46fe-9b56-163953318522","2acd7a85-e378-49d3-a959-75ea2cab13a4"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"3798ddaf-fd02-4b12-ae97-c545cd3dba01","f":{"id":"form","v":"5f508b9373050c50","text":"Form"},"v":"initial","p":"4c4390dd-b593-4bd1-8e6f-6a791cd234af","data":{"name":"Erinnerung","description":"","definition":"[Text][name]\n\n[Datum][datum]\n\n[datum]: Date","color":{"text":"Cyan - 500","id":"05155776-6864-4f90-88e5-34dda9a99aec","v":"initial"},"icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}},"headerInfoStyle":"auto","defaultDesignStyle":"auto","semver":"1.0.0"},"locks":[],"lockRefs":[],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"t":1467644259358,"ct":1467644259358,"a":["apps","2a9f2f9c-28df-4418-8b85-b4158b35ed3d","4c4390dd-b593-4bd1-8e6f-6a791cd234af"],"a_forms":["folder","application-form","form-folder"],"a_depth":3,"inheritedLocks":[null,null,null,null],"stamps":[],"dts":1467644255606},{"id":"6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2","v":"ecb168b71b3e37b7","previous":{"v":"2be5f7fbc68ac576"},"p":"7c30f282-2b84-4976-8735-ba78662ea5e6","f":{"id":"form","v":"4fa42fcff3786d1e","text":"Form"},"data":{"name":"Datei","tags":"","namedIcon":"fa fa-file","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"definition":"{file file-name-to-field=[name]}\n[Datei][datei]\n[datei]: file\n\n[Name][name]\n\n{hidden}\n[Freigabe][freigabe]\n[freigabe]: switch\n\n[Autor][autor]\n\n[Gültig ab][gueltigab]\n[gueltigab]: date\n","functions":"","allowedChildrenForms":[],"commands":[],"description":""},"locks":[],"created":{"at":"2017-11-28T17:36:05+01:00","by":"","from":"","client":"2d10490a-46c9-46dc-a584-14fa8b5654bf"},"modified":{"at":"2021-07-13T14:29:23+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1626186563368,"ct":1584006872536,"a_depth":3,"a":["apps","3d43a3f5-fea4-488d-9fc1-9dee5e694623","7c30f282-2b84-4976-8735-ba78662ea5e6"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"6e7d7228-3e6c-491b-967e-6d88b0626f6d","f":{"id":"form","v":"5f508b9373050c50","text":"Form"},"v":"initial","p":"2d5b3e1c-5a2f-4e5a-8005-47373ea61666","data":{"name":"Schulungsverzeichnis","description":"","definition":"[Name][name]","color":{"text":"","id":"","v":null},"icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}},"headerInfoStyle":"auto","defaultDesignStyle":"auto","semver":"1.0.0"},"locks":[],"lockRefs":[],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"t":1467644266642,"ct":1467644266642,"a":["apps","3a8b08c2-14ef-48ee-a5b8-2ede237892a9","2d5b3e1c-5a2f-4e5a-8005-47373ea61666"],"a_forms":["folder","application-form","folder"],"a_depth":3,"inheritedLocks":[null,null,null,null],"stamps":[]},{"f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"p":"921c912f-d932-46d2-b061-ae7539e9a5a8","data":{"name":"Formulare","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"id":"4ff7b40d-67d1-4a31-bcf8-e8459db63855","v":"73574f63710b9c67","t":1467644265066,"ct":1467644265053,"previous":{"v":"initial"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null],"a":["apps","83c76376-420e-4231-9275-d0fe2ab47c32","921c912f-d932-46d2-b061-ae7539e9a5a8"],"a_forms":["folder","application-form","application-form"],"a_depth":3,"stamps":[],"dts":1467644261105},{"id":"88c49094-0126-4b9c-82e2-6617367f6807","f":{"id":"form","v":"5f508b9373050c50","text":"Form"},"v":"2e5c361154958446","p":"2d5b3e1c-5a2f-4e5a-8005-47373ea61666","previous":{"v":"initial"},"data":{"name":"Schulung","description":"","definition":"[Vorname][vorname]\n\n[Nachname][nachname]\n\n[Veranstaltung][name]\n\n[Veranstalter][veranstalter]\n\n[Veranstaltungsort][veranstaltungsort]\n\n[Datum][datum]\n[datum]: date\n\n[Uhrzeit][uhrzeit]\n\n[Bewilligt][bewilligt]\n[bewilligt]: switch\n\n[Bewertung][bewertung]\n[bewertung]: select\n    -\n    - sehr gut\n    - gut\n    - befriedigend\n    - ausreichend\n    - mangelhaft\n    - ungenügend\n    \n[ATF-Punkte][atfpunkte]\n\n[Zertifikat][zertifikat]\n[zertifikat]: file\n\n","color":{"text":"","id":"","v":null},"icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}},"headerInfoStyle":"auto","defaultDesignStyle":"auto","semver":"2.0.0"},"locks":[],"lockRefs":[],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"t":1467644270396,"ct":1467644270377,"a":["apps","3a8b08c2-14ef-48ee-a5b8-2ede237892a9","2d5b3e1c-5a2f-4e5a-8005-47373ea61666"],"a_forms":["folder","application-form","folder"],"a_depth":3,"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","8f8c9ed7-a7ed-4150-b162-92d6f19a05b0","526d9710-b2bd-4fa7-9341-d780ead102c1"],"a_depth":3,"a_forms":["folder","application-form","form-folder"],"created":{"at":"2019-04-11T09:57:17+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1630507326983,"data":{"allowedChildrenForms":[],"commands":[],"definition":"[Name][name]\n\n[Anschrift][anschrift]\n[anschrift]: Address\n\n{Map}\n[Karte][anschrift]\n\n[Logo][logo]\n[Logo square][logoSquare]\n[Banner][banner]\n\n[logo]: File\n[banner]: File\n[logoSquare]: File\n\n{ref list=true ancestor-search-limit=0 forms=3cf04f76-f463-4b98-9c73-78df68374ede,34db9828-9784-44cb-bfd2-d1ad89cba0e4}[Menü Eintrage][menuItems] {children forms=3cf04f76-f463-4b98-9c73-78df68374ede,34db9828-9784-44cb-bfd2-d1ad89cba0e4}[Menü Eintrage][menuItems]\n[menuItems]: /ref (0-n)\n\n{children}[Menü][menu] {ref ancestor-limit=0}[Menü][menu]\n[menu]: /82f9489b-e774-4152-aa0a-c3ba91b7fcbb (0-n)\n","description":"","functions":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"label":"","name":"Unternehmen","namedIcon":"fa fa-building","namedIconColor":"","tags":"full-page"},"f":{"id":"form","text":"Form","v":"275741f6b713eb00"},"id":"c69a0c1c-6c53-40c2-87e8-5ace866bf1df","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-05-20T13:19:55+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"526d9710-b2bd-4fa7-9341-d780ead102c1","previous":{"v":"efe258d982481f98"},"stamps":[],"t":1747747195576,"v":"0a54694675992af5"},{"id":"fe643de2-cfcf-4b57-98a6-7db0fa58a0ac","f":{"id":"form","v":"5f508b9373050c50","text":"Form"},"v":"0a82ed0fb4e81be4","p":"d6aa757f-a3ea-4241-b6d9-5418d51c0c78","previous":{"v":"216b3d9977796b89"},"data":{"name":"Infospotordner","description":"","definition":"[Name][name]","color":{"text":"Blue Grey - 500","id":"5d27da6d-6be6-4709-a6e5-d90fc9619416","v":"initial"},"icon":{"name":"iconmonstr-newspaper-3-icon.svg","size":2109,"type":"image/svg+xml","sha1":null,"dataUrl":"store://default/bc975e80ee0d87d30ddcd17277fd9d8c1fa0e5aa","thumbnailUrl":"api/content/default/bc975e80ee0d87d30ddcd17277fd9d8c1fa0e5aa","fileInfo":{"created":1415195582000,"modified":1415195582000,"read":null,"imported":1415195631811},"iconUrl":"api/content/default/bc975e80ee0d87d30ddcd17277fd9d8c1fa0e5aa"},"headerInfoStyle":"auto","defaultDesignStyle":"auto","semver":"1.0.3"},"locks":[],"lockRefs":[],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"t":1467644279841,"ct":1467644279700,"a":["apps","ab825f4a-2d1a-433d-800c-bf48f81b4569","d6aa757f-a3ea-4241-b6d9-5418d51c0c78"],"a_forms":["folder","application-form","folder"],"a_depth":3,"inheritedLocks":[null,null,null,null],"stamps":[]},{"f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"p":"2c872bc9-30dc-45b4-9aed-8c1c89a69baa","data":{"name":"Formulare","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"id":"d206ec4a-14b4-4425-9843-143e545ec76e","v":"9dc9956f8bc9cb84","t":1467644276454,"ct":1467644276434,"previous":{"v":"initial"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null],"a":["apps","83c76376-420e-4231-9275-d0fe2ab47c32","2c872bc9-30dc-45b4-9aed-8c1c89a69baa"],"a_forms":["folder","application-form","application-form"],"a_depth":3,"stamps":[],"dts":1553589852974},{"id":"31e79501-93cb-4f9b-a7c5-7b9ec66d16ed","f":{"id":"form","v":"5f508b9373050c50","text":"Form"},"v":"initial","p":"4c4390dd-b593-4bd1-8e6f-6a791cd234af","data":{"name":"Erinnerungsordner","description":"","definition":"[name][name]","color":{"text":"","id":"","v":null},"icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}},"headerInfoStyle":"auto","defaultDesignStyle":"auto","semver":"1.0.0"},"locks":[],"lockRefs":[],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"t":1467644259105,"ct":1467644259105,"a":["apps","2a9f2f9c-28df-4418-8b85-b4158b35ed3d","4c4390dd-b593-4bd1-8e6f-6a791cd234af"],"a_forms":["folder","application-form","form-folder"],"a_depth":3,"inheritedLocks":[null,null,null,null],"stamps":[],"dts":1467644266335},{"id":"a1158695-0353-4319-9e03-fe4539a17c06","f":{"id":"form","v":"5f508b9373050c50","text":"Form"},"v":"76f4474749b03338","p":"d6aa757f-a3ea-4241-b6d9-5418d51c0c78","previous":{"v":"36df98ab811f5bf1"},"data":{"name":"Info","description":"","definition":"{debounced-text}\n[Titel][name]\n\n{editor}\n[Inhalt][inhalt]","color":{"text":"Blue Grey - 500","id":"5d27da6d-6be6-4709-a6e5-d90fc9619416","v":"initial"},"icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}},"headerInfoStyle":"auto","defaultDesignStyle":"auto","semver":"2.0.1"},"locks":[],"lockRefs":[],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"t":1467644272630,"ct":1467644272554,"a":["apps","ab825f4a-2d1a-433d-800c-bf48f81b4569","d6aa757f-a3ea-4241-b6d9-5418d51c0c78"],"a_forms":["folder","application-form","folder"],"a_depth":3,"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"427e6b73-968a-4747-be77-c6bb820a3190","v":"initial","previous":{"v":""},"p":"0daea31b-a830-44bf-8844-b6001f852f00","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Inspector","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-05-23T11:47:17+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"from":"","client":"server"},"modified":{"at":"2018-05-23T11:47:17+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"from":"","client":"server"},"t":1527068837055,"ct":1527068837055,"a_depth":3,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"61ccaf6b-af84-4908-aa73-785dffd83c5f","v":"365f3688fada736d","previous":{"v":"e0ae2ae97e50e2e0"},"p":"e89b29a9-6ab9-47dc-a6fe-91ebda92871d","f":{"id":"form","v":"636c28c49e0bd3c5","text":"Form"},"data":{"name":"eCasting (Vorauswahl)","description":"","tags":"","definition":"[Name][name]\n\n{children}\n[Model Bewerbungen][models]\n\n[models]: /275b807f-7dbb-4351-b731-669e275fa97d (0-n)\n\n[Zu kopierende Felder beim Hinzufügen eines Models][fieldsToCopy]\n[fieldsToCopy]: /1f08e101-d725-4d4c-af63-66cfab892ef3\n\n[Anzuzeigende Felder eines Models auf der Laufliste][fieldsToShowOnECastingList]\n[fieldsToShowOnECastingList]: /05f7c527-42aa-4b68-ba72-cfb62a9e0a84\n\n{datetime}\n[Bewerbungen/Dateien als neu markieren ab][highlightStartingDate]\n[highlightStartingDate]: date","functions":"","semver":"","allowedChildrenForms":[],"layout":{"id":"","v":"","text":""},"color":{"id":"","v":"","text":""},"iconName":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}},"applicationLayoutOptions":{"id":"","v":"","text":""},"documentLayoutOptions":{"id":"","v":"","text":""}},"locks":[],"created":{"at":"2018-04-20T12:29:48+02:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"f8312258-bdc9-438a-a510-de77a69e61e9"},"modified":{"at":"2020-10-13T10:11:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583892092,"ct":null,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","e89b29a9-6ab9-47dc-a6fe-91ebda92871d"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"44e0edf9-6515-4e4b-ad48-98a04d28df11","v":"4b2eece2ddcf0365","previous":{"v":"27b78fef45da31d4"},"p":"e89b29a9-6ab9-47dc-a6fe-91ebda92871d","f":{"id":"form","v":"5f3242b69acf6fa6","text":"Form"},"data":{"name":"Model","tags":"","namedIcon":"fa fa-user","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"definition":"####### Felder - Pflichtfelder (vom Model auszufüllen):\n[Vorname][firstname]\n[Nachname][surname]\n[Telefon][phone]\n[E-Mail][email]\n\n[name]: = `${surname}, ${firstname}`\n\n####### Felder - Freiwillig (vom Model auszufüllen):\n[Geburtsdatum][birthdate]\n[Nationalität][nationality]\n[Wohnort][residence]\n[Geschlecht][gender]\n[Augenfarbe][eyeColor]\n[Haarfarbe][hairColor]\n[Körpergröße][height]\n[Konfektionsgröße][clothesSize]\n[Schuhgröße][shoeSize]\n[Link zu Showreel][showreel]\n\n{hidden|children delete-on-remove=true list=true}\n[Dateien][files]\n\n[birthdate]: date\n[files]: /aabed4ee-20ca-4df4-9a78-75a05e97dce9 (0-n)\n[residence]: address\n[gender]: select\n  - NO_GENDER: \n  - MALE: Männlich\n  - FEMALE: Weiblich","functions":"","allowedChildrenForms":[],"commands":[],"description":""},"locks":[],"created":{"at":"2019-04-12T14:13:54+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583892432,"ct":1602583892431,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","e89b29a9-6ab9-47dc-a6fe-91ebda92871d"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"24730991-d920-4a1e-8041-6a9dc6c0ffc1","v":"b7726dac149e5365","previous":{"v":"624403f86421e1c2"},"p":"e89b29a9-6ab9-47dc-a6fe-91ebda92871d","f":{"id":"form","v":"84ffcfcc2f925959","text":"Form"},"data":{"name":"Film","tags":"","namedIcon":"fa fa-film","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"definition":"[Titel][name]\n\n{children handle-selected-readonly=true no-templates=true confirm-remove=true delete-on-remove=true list=true}\n[Rollen][roles]\n[roles]: /3230c10a-64af-48cc-8f3d-15fc16a40e5f (0-n)\n\n{children handle-selected-readonly=true no-templates=true delete-on-remove=true list=true}\n[Dateien][files]\n[files]: /aabed4ee-20ca-4df4-9a78-75a05e97dce9 (0-n)","functions":"","allowedChildrenForms":[],"commands":[],"description":""},"locks":[],"created":{"at":"2018-04-20T12:29:46+02:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"f8312258-bdc9-438a-a510-de77a69e61e9"},"modified":{"at":"2020-10-13T10:11:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583892166,"ct":1602583892166,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","e89b29a9-6ab9-47dc-a6fe-91ebda92871d"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"28527c6d-4f85-4881-8f5d-948021a60ad0","v":"61680ec9e0077b24","previous":{"v":"fd8d8f4fc27dd790"},"p":"15292d56-6806-4263-b6d0-9194687203e1","f":{"id":"form","v":"42ef1fd37c206edb","text":"Form"},"data":{"name":"Mängelmeldung","tags":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"definition":"\n{58|ref ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path=true}[Verantwortlich][verantwortlich] {30|datetime-range to=bisEnde has-time=bisDateTime}[Fällig][bisStart] {12}[Erledigt][erledigt] \n\n[verantwortlich]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 (0-n)\n[erledigt]:Switch\n[bisDateTime]: switch\n[bisStart]: Date\n[bisEnde]: Date\n\n{comments}\n\n[Typ][typ]\n[typ]: Select <required>\n  - ALLGEMEIN: Allgemeine Anfrage\n  - HEIZUNG: Heizung defekt\n  - LEUCHTMITTEL: Leuchtmittel defekt\n  - ELEKTRONIK: Elektronik / Steckdose defekt\n  - SONSTIGES: Sonstiges defekt\n\n[Ihr Name][personName] \n{phone}[Ihre Telefonnummer][personTelefon]\n{email}[Ihre E-Mail][personEmail]\n\n[personName]: text <required>\n[personTelefon]: text <required>\n[personEmail]: text <required>\n\n{multiline}\n[Beschreibung des Problems][beschreibung]\n[beschreibung]: text <required>\n\n{attachment form-id=\"dbee6e16-d63a-493c-bba6-505f79918f9f\" file-field=\"datei\" name-field=\"name\" delete-on-remove=true}\n[Bilder (optional)][bild]\n[bild]: /dbee6e16-d63a-493c-bba6-505f79918f9f (0-n)\n\n[Newsletter erhalten][newsletter]\n[newsletter]: switch\n","functions":"","allowedChildrenForms":[],"commands":[],"description":"","theme":{"id":"","v":"","text":""}},"locks":[],"created":{"at":"2022-05-03T12:54:50+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-08-17T14:01:16+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1660744876579,"ct":1651582490118,"a_depth":3,"a":["apps","86189c5a-b9f4-445a-879f-d94574960df0","15292d56-6806-4263-b6d0-9194687203e1"],"a_forms":["folder","application-form","form-folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"dts":1660833991990},{"id":"cfd3ce74-9fa5-46c8-a9e9-cba33a3b8e70","v":"2724712e8dac769c","previous":{"v":"fd715028ea175a21"},"p":"f254ce25-42f1-4333-8ee7-23554bf746c1","f":{"id":"form","v":"a57e5af653d72344","text":"Form"},"data":{"name":"Projekte","tags":"","namedIcon":"fa fa-clipboard-list","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"definition":"[Name][name]\n\n[Projection folder][projectionFolder]\n[projectionFolder]: /ref","functions":"","allowedChildrenForms":[],"commands":[{"id":"b31dc050-b862-46e8-b95b-3b735c568235","v":"0d8935815b5d1bda","text":"new"},{"id":"80fd9606-f79a-40f6-b23b-66b706ebd1e0","v":"initial","text":"rd:Neu"}],"description":""},"locks":[],"created":{"at":"2020-02-25T15:28:36+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2024-04-02T15:03:29+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1712070209464,"ct":1582644516423,"a_depth":3,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1"],"a_forms":["folder","application-form","form-folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"dts":1738854888752},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","05787127-986a-494f-a69e-8733c1176596"],"a_depth":3,"a_forms":["folder","application-form","form-folder"],"created":{"at":"2025-08-04T08:01:14+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1754294474112,"data":{"allowUndefinedFields":false,"allowedChildrenForms":[{"id":"1a0affea-08fc-467f-8a09-0e170f5ea96e","text":"Objekte (Liste)","v":"4fa8139b272b0858"},{"id":"edfe4a5d-1bd6-485a-b252-81dd8772c21c","text":"Wartungspunkte (Vorlagen)","v":"6a642bb1d6e3f711"},{"id":"d4d60ebf-b329-44dd-a97f-d1a905bddfc5","text":"Wartungsteile (Vorlagen)","v":"fc987a5c90c45c78"},{"id":"4338bec0-a02b-4126-9ba9-9d7bfbaf5bac","text":"Teams (Liste)","v":"c1e7f2699dd70cce"},{"id":"6ca8b149-5489-413d-9252-d2644019d53c","text":"Örtlichkeiten (Liste)","v":"05d591d55caad3fe"},{"id":"b270e94c-c223-4972-9db8-70b6750e740e","text":"Labels","v":"initial"},{"id":"80892429-568c-4d92-9631-655fb5b14e3a","text":"Labels (Mangeltyp)","v":"12a4b5d6933c4a1c"},{"id":"83b7ea0a-f4c2-43b8-a4a7-09f1dbde62d1","text":"Baugruppen","v":"08133184fac4c5a1"},{"id":"8477092b-5495-424d-a394-8234b0819882","text":"Wartungen","v":"c608d93d36471992"}],"commands":[],"defaults":"","definition":"","descendantCommands":[],"description":"","from":[],"functions":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Stammdaten","namedIcon":"","namedIconColor":"","newAction":{"id":"","text":"","v":""},"newTemplate":{"id":"","text":"","v":""},"relatedDocuments":[],"tags":"","theme":{"id":"","text":"","v":""},"to":[],"uiOptions":{"id":"","text":"","v":""}},"f":{"id":"form","text":"Form","v":"b0b69a951dde83ea"},"id":"6138e497-f561-430e-b3f1-8c3c7db046a7","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-05-20T09:11:14+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"05787127-986a-494f-a69e-8733c1176596","previous":{"v":"7bfbb5f19ebe5a91"},"stamps":[],"t":1779268274063,"v":"d84c99b438369191"},{"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1"],"a_depth":3,"a_forms":["folder","application-form","form-folder"],"created":{"at":"2020-02-25T15:28:31+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":""},"ct":1733232961551,"data":{"allowUndefinedFields":false,"allowedChildrenForms":[{"id":"9f8071fd-6f25-489e-8562-4399701546b0","text":"Blower Door Test","v":"f063b1b6d672ebbe"},{"id":"281c6bd6-2e24-42ba-868e-b63cbba4254f","text":"Brandschutz","v":"1ed94a41d29e4080"},{"id":"34d811a8-9de0-4b20-bc24-c55826a06748","text":"Brandschutzleitung","v":"9da33d0d7211f90b"},{"id":"11a327ee-c8e6-453a-bcdd-f585877f2fd8","text":"Energieausweis","v":"0226510da9bd6594"},{"id":"fa3777b5-bfff-43ac-a5c5-ea15486dd334","text":"ENEV","v":"23dd999f5f0f45d0"},{"id":"4862401e-e182-451c-a855-ef2e9b9441c5","text":"KFW + EnEV","v":"03c0fd3cc122de98"},{"id":"03c16e2b-302e-4c2c-93c1-931679919e0b","text":"Schallschutz","v":"cd304f0f73dad7f5"},{"id":"2c01a15d-c14d-44c6-adc5-d9b3fdc692b7","text":"Schallschutz Kontrollen","v":"49e095cf54a7b2d9"},{"id":"328998fb-7e67-4fca-b40b-377d9a07776d","text":"Schallschutzmessung","v":"4a30c0479190b21d"},{"id":"5ff471b3-1769-408b-825a-69d6416757c3","text":"Simulation (jeweils separat)","v":"3ba5b0671ca8411c"},{"id":"41da8494-ec0a-4b13-bad7-162f3f1fbba4","text":"Architektur","v":"f2bf7c8b54ef00e5"},{"id":"c97e431f-1d18-4f45-9915-591932d2cd23","text":"Wohngebäude (Sanierung)","v":"10c28e5d5684cef7"},{"id":"873e5be1-18d7-47ae-9ea5-438bce403e61","text":"Nichtwohngebäude (Sanierung/Umbau)","v":"86af162058c90993"},{"id":"5acb56fa-2bad-4e9b-8385-ab82c2562b47","text":"Wohngebäude (Neubau)","v":"7611c66599172986"},{"id":"81e1dec7-0c25-4694-9724-d1a86f8dc0db","text":"Nichtwohngebäude (Neubau)","v":"b26ebbac2526ea22"},{"id":"1c428116-bc5b-4c71-8a84-0f7c50c2dbe6","text":"Heizung, Lüftung, Sanitär","v":"20b19a936d0f028e"},{"id":"748a3d2b-9bbb-4134-a09d-4a7797fdc639","text":"Tragwerksplanung","v":"ef7c7715fa12a196"},{"id":"cf2ae9d1-57f8-4604-887f-9bc97fe74495","text":"ELT","v":"314b04892ac5d17d"},{"id":"680d9cf2-25de-4237-840d-64fb9e68b1a2","text":"Nachhaltigkeit","v":"0ac0acf515e9bc71"},{"id":"39a8e8f7-4840-4ffd-ad15-21fc5d56b277","text":"Sachverständige","v":"1f08c2013844a7c2"}],"commands":[{"id":"5dec3458-15b4-4843-a794-b4210e9f9c83","text":"Neu","v":"initial"}],"defaults":"","definition":"[Name][name]\n\n[Durchschnittswert zur Berechnung geschätzter Stunden][averageCostPerHour]\n[averageCostPerHour]: currency\n","descendantCommands":[],"description":"","from":[],"functions":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Leistungen","namedIcon":"far fa-tasks-alt","namedIconColor":"","newAction":{"id":"","text":"","v":""},"newTemplate":{"id":"","text":"","v":""},"relatedDocuments":[],"tags":"","theme":{"id":"","text":"","v":""},"to":[],"uiOptions":{"id":"","text":"","v":""}},"f":{"id":"form","text":"Form","v":"230b4040236561b6"},"id":"fb822f2f-880c-4676-be8b-cc557e822bc4","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-03-06T10:45:58+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"f254ce25-42f1-4333-8ee7-23554bf746c1","previous":{"v":"35bb273e44eadbb9"},"stamps":[],"t":1772793958777,"v":"301495cf341eddca"},{"id":"686d22ba-414e-452f-9795-f6f7bcab37d5","v":"96f3bfa76488a7b0","previous":{"v":"f294b2c742fba5d0"},"p":"e89b29a9-6ab9-47dc-a6fe-91ebda92871d","f":{"id":"form","v":"84ffcfcc2f925959","text":"Form"},"data":{"name":"Projekt","tags":"","namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"definition":"[Titel][name]\n\n\n[Deadline][deadline]\n[deadline]: date\n\n[Abgeschlossen][closed]\n[closed]: switch\n\n{multiline}\n[translate:description|Beschreibung][description]\n\n{multiline}\n[translate:fee|Gage][fee]\n\n{multiline}\n[translate:shootingDates|Drehzeitraum][shootingDates]\n\n{children no-templates=true delete-on-remove=true list=true}\n[Projektdateien][files]\n[files]: /aabed4ee-20ca-4df4-9a78-75a05e97dce9 (0-n)\n\n{hidden|children no-templates=true confirm-remove=true delete-on-remove=true list=true}\n[Filme][movies]\n[movies]: /24730991-d920-4a1e-8041-6a9dc6c0ffc1 (0-n)\n\n{hidden|children only-template=true template-parent-id=67ef16e7-6b61-41b5-b422-f3b1e17be90f confirm-remove=true list=true}\n[Castings][castings]\n[castings]: /4551c597-7595-4858-8b7f-207a7fb15b3e (0-1)","functions":"","allowedChildrenForms":[],"commands":[{"id":"c4d090c1-19a6-4e54-93ea-04d77a0e80ee","v":"cd69e883b3dd964f","text":""},{"id":"fd82a107-b3bb-442d-bf51-e531953e135c","v":"ba134e04afa43935","text":"Neuer Film"}],"description":""},"locks":[],"created":{"at":"2018-04-20T12:29:47+02:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"f8312258-bdc9-438a-a510-de77a69e61e9"},"modified":{"at":"2020-10-13T10:11:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583892903,"ct":1602583892903,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","e89b29a9-6ab9-47dc-a6fe-91ebda92871d"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","45ada186-e9fd-451d-9dbd-2defc0b4f86f","4ec6a0e5-cf2d-4095-9b70-2e31a64d5679"],"a_depth":3,"a_forms":["folder","application-form","form-folder"],"cloneOf":{"id":"6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2","text":"Datei","v":"2a5eb7cfff4f813c"},"created":{"at":"2020-06-24T12:54:35+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1593003275110,"data":{"allowedChildrenForms":[],"commands":[],"definition":"{hidden}\n[syncTo][syncTo]\n[syncTo]: /ref\n\n{file file-name-to-field=[name]}\n[Datei][datei]\n[datei]: file\n\n{image-rotate}\n[Bild-Datei][datei]\n\n{multiline remove-newline}\n[Name][name]\n\n[Autor][autor]","description":"","functions":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Datei","namedIcon":"far fa-file","namedIconColor":"","tags":""},"f":{"id":"form","text":"Form","v":"4fa42fcff3786d1e"},"id":"dbee6e16-d63a-493c-bba6-505f79918f9f","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-04-14T08:33:44+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2","text":"Datei","v":"2a5eb7cfff4f813c"},"p":"4ec6a0e5-cf2d-4095-9b70-2e31a64d5679","previous":{"v":"89c8c608b116bbd6"},"stamps":[],"t":1744619624822,"v":"06a09dff703a88a4"},{"id":"3f5de83a-40e4-4662-b436-3ed4879edb10","v":"182e5158f851e6a8","previous":{"v":"efbb12441c1c9944"},"p":"75920050-07b1-4e79-9742-54abcc235e91","f":{"id":"form","v":"d497194b29933d26","text":"Form"},"data":{"name":"Behandlung","tags":"","allowUndefinedFields":false,"definition":"{now}\n[Behandlungsdatum][behandlungsdatum]\n[behandlungsdatum]: Date\n\n[Stallkarte][stallkarte]\n[stallkarte]:file \n","functions":"","defaults":"","newTemplate":{"id":"","v":"","text":""},"newAction":{"id":"","v":"","text":""},"allowedChildrenForms":[],"commands":[],"namedIcon":"far fa-file-pdf","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"uiOptions":{"id":"","v":"","text":""},"theme":{"id":"","v":"","text":""},"description":""},"locks":[],"created":{"at":"2019-03-08T14:03:53+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2024-01-08T15:05:03+01:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1704722703498,"ct":1704719235599,"a_depth":3,"a":["apps","5ec4fefb-1235-484e-8d6f-4fd645bae372","75920050-07b1-4e79-9742-54abcc235e91"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","089481c4-a42f-4a98-9bc9-12e9f1131f4b","5fa71c32-0186-4007-92a9-f03a32b0ff33"],"a_depth":3,"a_forms":["folder","application-form","form-folder"],"created":{"at":"2021-09-21T12:32:57+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1693492360139,"data":{"allowUndefinedFields":false,"allowedChildrenForms":[{"id":"d94b4c11-de6b-4f8d-8c80-d1614881236a","text":"Columns-Manual","v":"041d16eaddd74292"},{"id":"bd1e3c2f-463f-4df2-91bb-36666a826256","text":"Columns-Reference","v":"6b7a4c2347b7e538"},{"id":"cf83727e-718b-472b-83ca-5bb793f8f30b","text":"Columns-References","v":"c287152023ffb6d4"},{"id":"a22a54e0-cd5d-4fcb-aae9-e31a3f238c8e","text":"Columns-Select-Number","v":"b782bbae6a851cc8"},{"id":"447b3702-8242-46ea-953c-f59f50376b30","text":"Columns-Select-Text","v":"668cdb54e042950d"},{"id":"98ba1258-42b7-4a98-adee-ca683502f4bb","text":"Columns-Switch","v":"7584f703b8f240b1"}],"commands":[],"defaults":"","definition":"[Name][name]\n\n// Currently only one Form is implemented. It is used for filters, columnsByRef's pseudoDocument in the Board Design and creating new Documents.\n[Forms][form]\n[form]: /form (1-1)\n\n[Type][type]\n[type]: Select\n  - DOCUMENT: Based on document data\n  - WORKFLOW: Integrated with Workflow\n\n{show if (type=='DOCUMENT')}\n# Dokument als Spalte\n\n// Used to query the board more precisely\n{hidden}\n[Key][key]\n[key]: text\n\n// manualColumns stores a list of columns. In the columns the header and the documents to display is stored. \n//      This is the only view that allows documents sorting inside a column to be stored. \n{children delete-on-remove}\n[Spalte manuell anlegen][listColumnsManual]\n[listColumnsManual]: /d94b4c11-de6b-4f8d-8c80-d1614881236a (0-n)\n\n// This gives the possibility to store multiple views for different fields of type Select.\n{children delete-on-remove}\n[Spalten via Select Text][listColumnsSelectText]\n[listColumnsSelectText]: /447b3702-8242-46ea-953c-f59f50376b30 (0-n)\n\n// This gives the possibility to store multiple views for different fields of type Select.\n{children delete-on-remove}\n[Spalten via Select Zahl][listColumnsSelectNumber]\n[listColumnsSelectNumber]: /a22a54e0-cd5d-4fcb-aae9-e31a3f238c8e (0-n)\n\n// This gives the possibility to store multiple views for different fields of type reference.\n{children delete-on-remove}\n[Spalten via Referenzen][listColumnsReferences]\n[listColumnsReferences]: /cf83727e-718b-472b-83ca-5bb793f8f30b (0-n)\n\n{children delete-on-remove}\n[Spalten via Referenz][listColumnsReference]\n[listColumnsReference]: /bd1e3c2f-463f-4df2-91bb-36666a826256 (0-n)\n\n// This is used to render switches\n{children delete-on-remove}\n[Spalten via Switch][listColumnsSwitch]\n[listColumnsSwitch]: /98ba1258-42b7-4a98-adee-ca683502f4bb (0-n)\n\n// The different ways to view a board are stored in the localStoreage of the browser. What the views show is stored here.\n// A cool feature missing is to create columns stamps belonging to a document. It would look like the Workflow section.\n\n\n{show if (type=='WORKFLOW')}\n# Spalten via Workflow  \n\n[Workflow Configuration][workflow]\n[workflow]: /28920b1b-fc03-454a-817f-fd7e19133d92\n\n{children}\n[Columns][columns]\n[columns]: /d5664a63-3903-4044-a1a2-c0260c55615c (0-n)\n","description":"","functions":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Board","namedIcon":"far fa-columns","namedIconColor":"","newAction":{"id":"","text":"","v":""},"newTemplate":{"id":"","text":"","v":""},"tags":"","theme":{"id":"","text":"","v":""},"uiOptions":{"id":"","text":"","v":""}},"f":{"id":"form","text":"Form","v":"d497194b29933d26"},"id":"43420696-8097-4fc1-88e5-c69df9821470","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-04-24T12:54:12+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"5fa71c32-0186-4007-92a9-f03a32b0ff33","previous":{"v":"067d2920b666b17b"},"stamps":[],"t":1745499252305,"v":"cc9339b91ad71420"},{"id":"fdfaf800-858a-4b45-91c9-5bdad7a63672","v":"e953e83268fb6ca5","previous":{"v":"78073ba3a507699d"},"p":"05787127-986a-494f-a69e-8733c1176596","f":{"id":"form","v":"b0b69a951dde83ea","text":"Form"},"data":{"name":"Wartungen","tags":"","allowUndefinedFields":false,"definition":"","functions":"","relatedDocuments":[],"defaults":"","newTemplate":{"id":"","v":"","text":""},"newAction":{"id":"","v":"","text":""},"allowedChildrenForms":[{"id":"1b166603-d0f3-4f16-98c4-0534afbd6f5a","v":"fc576ec556c4dd74","text":"Wartungsdurchführung"}],"commands":[],"descendantCommands":[],"to":[],"from":[],"namedIcon":"","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"uiOptions":{"id":"","v":"","text":""},"theme":{"id":"","v":"","text":""},"description":"Zum Anzeigen der Wartungsdurchführungen"},"locks":[],"created":{"at":"2025-08-04T07:54:41+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"modified":{"at":"2026-05-19T09:51:32+00:00","by":"09763886-6748-4a56-8e0e-54a2293ee96b","backedBy":"","impersonatedBy":"","from":"","client":"server"},"t":1779184292516,"ct":1754294081235,"a_depth":3,"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","05787127-986a-494f-a69e-8733c1176596"],"a_forms":["folder","application-form","form-folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","1cc4b977-c14d-4587-af47-d6ac230f60b3"],"a_depth":3,"a_forms":["folder","application-form","design-folder"],"created":{"at":"2026-04-21T07:31:43+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"ct":1776756703484,"data":{"aliases":[],"controller":"class Controller { \n  async init() {\n    locals.ready = false\n\n    this.sort = [\n      { field: 'data.label' },\n      { field: 'data.name' },\n      { field: 'f.id' },\n      { field: 'created.at' }\n    ]\n    this.selectedDocument = document\n    this.layersToShow = Math.min(params.layersToShow ?? 3, 3)\n    locals.visibleNodes = []\n\n\n    locals.globalRootId = await this._getGlobalRootId()\n    const treeRootDocument = await this.calculateTreeRoot(params.startAtDepth ?? 0, this.selectedDocument)\n\n    this.key = `${locals.globalRootId}, ${treeRootDocument.id}`\n    const storedUnfolded = Aeppic.SessionStorage.getValue(this.key)\n    this.unfoldedIds = new Set(Array.isArray(storedUnfolded) ? storedUnfolded : [])\n\n    locals.rootNode = this._createNode(null, treeRootDocument)\n    this.rootNode = locals.rootNode\n    await this.initializePathNodes()\n\n    locals.ready = true\n  }\n\n// {\n//  document\n//  folded // set by the user\n//  subscription // only subscribe if in path or not folded\n//  childNodes // stort this object recursively\n//  hasChildren // just an initial fetch to check if there are any children.\n//  parentNode\n// }\n\n  async initializePathNodes() {\n    let previousNode = null\n\n    for (const doc of await Aeppic.getAll(this._pathDocumentIds)) {\n      if (doc.id === locals.rootNode.document.id) {\n        previousNode = locals.rootNode\n      } else {\n        const node = this._createNode(previousNode, doc)\n        previousNode = node\n      }\n    }\n  }\n\n  async calculateTreeRoot(startAtDepth, directionDocument) {\n    const preliminaryRootId = await this._getGlobalRootId()\n    const preliminaryCompletePath = [...directionDocument.a, directionDocument.id]\n\n    const indexOfPreliminaryRoot = preliminaryCompletePath.indexOf(preliminaryRootId)\n    \n    if (indexOfPreliminaryRoot === -1) {\n      throw new Error('The root should always be an ancestor of the passed document.')\n    }\n\n    const preliminaryPath = preliminaryCompletePath.slice(indexOfPreliminaryRoot) // This array is guaranteed to have at least length 1\n\n    let actualPath = preliminaryPath.slice(startAtDepth)\n\n    if (actualPath.length === 0) {\n      console.warn('The directional Document is not deep enough below the preliminary root. Using the directional Document as root instead')\n      return directionDocument\n    }\n\n    return await Aeppic.get(actualPath[0])\n  }\n\n  // Builds the children query for a node, honoring the node form's allowedChildrenForms\n  // (same rule as rd:page-list). Forms without a restriction show all children.\n  async _childrenQuery(doc) {\n    const form = await Aeppic.getForm(doc.f.id)\n    const allowedChildrenForms = form?.data?.allowedChildrenForms\n\n    if (form?.data?.allowAllChildren !== true && Array.isArray(allowedChildrenForms) && allowedChildrenForms.length > 0) {\n      const formFilter = allowedChildrenForms.map(f => `f.id:${f.id}`).join(' OR ')\n      return `p:${doc.id} (${formFilter})`\n    }\n\n    return `p:${doc.id}`\n  }\n\n  async _syncNode(node) {\n    const childrenQuery = await this._childrenQuery(node.document)\n\n    // Do this non-blocking for faster loading speeds\n    Aeppic.findOne(childrenQuery).then(childDoc => {\n      node.hasChildren = !!childDoc\n    })\n\n\n    node.childNodes.map(childNode => this._syncNode(childNode))\n\n    const shouldSubscribe = !this.nodeLooksFolded(node)\n    if (shouldSubscribe) {\n      if (!node.subscription) {\n        node.subscription = Aeppic.subscribe(childrenQuery, async (docs) => {\n          \n          const existingChildrenMap = new Map()\n          for (const childNode of node.childNodes) {\n            existingChildrenMap.set(childNode.document.id, childNode)\n          }\n\n          const addedDocsMap = new Map()\n          for (const doc of docs) {\n            addedDocsMap.set(doc.id, doc)\n          }\n\n          for (const [id, childNode] of existingChildrenMap) {\n            if (!addedDocsMap.has(id)) {\n              this._removeNode(childNode)\n            }\n          }\n\n          for (const doc of docs) {\n            if (!existingChildrenMap.has(doc.id)) {\n              this._createNode(node, doc)\n            }\n          }\n\n          node.childNodes = this._sortNodes(node.childNodes)\n        })\n      }\n    } else {\n      if (node.subscription) {\n        node.subscription.cancel()\n      }\n\n      node.subscription = null\n    }\n  }\n\n  _createNode(parentNode, doc) {\n    const newNode = {}\n    newNode.document = doc\n    newNode.folded = !this.unfoldedIds.has(doc.id)\n    newNode.subscription = null\n    newNode.childNodes = []\n    newNode.hasChildren = false\n    newNode.parentNode = parentNode\n    this._syncNode(newNode)\n    \n    if (parentNode) {\n      parentNode.childNodes.push(newNode)\n    }\n\n    return newNode\n  }\n\n  _removeNode(node) {\n    for (const childNode of node.childNodes.slice(0)) { // shallow copy\n      this._removeNode(childNode)\n    }\n    \n    if (!!node.subscription) {\n      node.subscription.cancel()\n      node.subscription = null\n    }\n\n    node.folded = true\n    node.childNodes = []\n\n    if (Array.isArray(node.parentNode?.childNodes)) {\n      const index = node.parentNode.childNodes.indexOf(node)\n      if (index !== -1) {\n        node.parentNode.childNodes.splice(index, 1)\n      }\n    }\n\n    // TODO: Handle if document is in Path - This requires a heuristic for chosing a new selectedDocument\n  }\n\n  _getNodeDepth(node) {\n    let depth = 0\n    let currentNode = node\n\n    while (currentNode && currentNode !== locals.rootNode) {\n      depth++\n      currentNode = currentNode.parentNode\n    }\n\n    return depth\n  }\n\n  _nodeInPath(node) {\n    return this._documentInPath(node.document)\n  }\n\n  _documentInPath(doc) {\n    return this._pathDocumentIds.includes(doc.id)\n  }\n  \n  // Returns the ids from the root document to the selected document\n  get _pathDocumentIds() {\n    if (!this.selectedDocument || !locals.rootNode) return []\n    \n    if (this.selectedDocument.id === locals.rootNode.document.id) {\n      return [this.selectedDocument.id]\n    }\n\n    const indexOfRoot = this.selectedDocument.a.findIndex(id => id === locals.rootNode.document.id)\n    \n    if (indexOfRoot === -1) {\n      return [this.selectedDocument.id]\n    }\n\n    return [...this.selectedDocument.a.slice(indexOfRoot), this.selectedDocument.id]\n  }\n\n  _documentIdInPath(id) {\n    if (!id) return false\n\n    return this._pathDocumentIds.includes(id)\n  }\n\n  async _getGlobalRootId() {\n    const result = await Aeppic.Commands.execute('081408b6-03e1-4311-9b4a-715224f4ee36', document)\n    if (result.ok) {\n      return result.value.furthestRelevantAncestor.id\n    }\n    return document.a[2]\n  }\n\n  async toggleFold(node) {\n    node.folded = !node.folded\n    this.selectedDocument = node.document\n    \n    if (!node.folded) {\n      this.unfoldedIds.add(node.document.id)\n    } else {\n      this.unfoldedIds.delete(node.document.id)\n    }\n\n    this._syncNode(node)\n  }\n\n  handleNodeSelected(node) {\n    if (node.document.id === this.selectedDocument.id) {\n      $emit('selected', node.document, node.parentNode?.childNodes.map(childNode => childNode.document))\n    } else {\n      this.selectedDocument = node.document\n      this._syncNode(node)\n    }\n  }\n\n  _sortNodes(nodes) {\n    if (!Array.isArray(nodes) || nodes.length === 0) return []\n\n    const sortedDocuments = Aeppic.Functions.sort(nodes.map(node => node.document), this.sort)\n    const nodeMap = new Map(nodes.map(node => [node.document.id, node]))\n\n    return sortedDocuments.map(doc => nodeMap.get(doc.id))\n  }\n\n  findNodeById(id, node) {\n    if (node === undefined) node = locals.rootNode\n    if (!node) return null\n\n    if (node.document && node.document.id === id) {\n      return node\n    }\n\n    if (Array.isArray(node.childNodes) && node.childNodes.length > 0) {\n      for (const childNode of node.childNodes) {\n        const foundNode = this.findNodeById(id, childNode)\n        \n        if (foundNode) {\n          return foundNode\n        }\n      }\n    }\n\n    return null\n  }\n\n  nodeCategory(node) {\n    const depth = this._getNodeDepth(node)\n    const pathLen = this._pathDocumentIds.length\n\n    if (pathLen - this.layersToShow > depth) return 'ancestor'\n    if (pathLen - this.layersToShow === depth) return 'thresholdAncestor'\n    if (pathLen + 1 === depth) return 'thresholdPermitted'\n    if (pathLen + 1 < depth) return 'forbidden'\n    if (!node.parentNode) return 'thresholdAncestor'\n    \n    return 'permitted'\n  }\n\n  nodeLooksFolded(node) {\n    if (!node.parentNode) return false // root is never folded\n    // if (this._nodeInPath(node) && node.document.id !== this.selectedDocument.id) return false // documents in path are never folded\n    if (this._nodeInPath(node)) return false // documents in path are never folded\n    if (this.nodeLooksFolded(node.parentNode)) return true // a folded parent causes the child to not be visible\n    if (['forbidden', 'thresholdPermitted'].includes(this.nodeCategory(node))) return true // if the node is to deep, hide it\n    return !!node.folded // finally it depends on the user input\n  }\n\n  destroy() {\n    Aeppic.SessionStorage.setValue(this.key, Array.from(this.unfoldedIds))\n  }\n}","css":"","description":"","name":"rd:folder-tree","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<template>\n  <div class=\"w-full xpy-4 text-sm text-gray-800 group h-full\">\n    <ae-layout \n      v-if=\"locals.rootNode\"\n      class=\"h-full\"\n      layout-id=\"3697b29a-a27c-4402-bab3-118002055040\" \n      :param-node=\"locals.rootNode\" \n      :param-tree-controller=\"controller\"\n      :param-truncate=\"params.truncate\"\n    ></ae-layout>\n\n  </div>\n</template>"},"f":{"id":"design-form","text":"Design","v":"4b1c7a4912f80103"},"id":"cf06d688-aeb4-45ff-941b-058334cf2436","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-07-03T13:21:45+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"1cc4b977-c14d-4587-af47-d6ac230f60b3","previous":{"v":"0e54defcdd9ae8e9"},"stamps":[],"t":1783084905446,"v":"f842c562bd5a4e78"},{"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1"],"a_depth":3,"a_forms":["folder","application-form","form-folder"],"created":{"at":"2019-07-18T14:30:20+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":""},"ct":1668004948447,"data":{"allowedChildrenForms":[],"commands":[{"id":"7d65dcc7-d03b-4d54-9765-19b8e8551f5f","text":"Neu","v":"b409054082f75844"},{"id":"1e8ee4b6-2767-4110-b293-178e58f12646","text":"rd:Neu","v":"092503f66eca19bd"}],"definition":"{hidden|readonly}\n[Verknüpfte Dokumente][dmsFolder]\n[dmsFolder]: /6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2\n\n\n# Projekt\n\n[Name][name] [Status][status] [Priorität][prioritaet]\n \n[status]: Select\n  - NONE:\n  - ACQUISITION <icon=\"far fa-usd-square\">: Akquise\n  - DECLINED <icon=\"far fa-times\">: Abgelehnt\n  - PROGRESS <icon=\"far fa-play-circle\">: In Bearbeitung (in der Planungsphase)\n  - ONSPOTCHECKS <icon=\"far fa-search-location\">: In Ausführung (vor Ort Kontrollen)\n  - DONE <icon=\"far fa-check\">: Abgeschlossen\n  - DORMANT <icon=\"far fa-snooze\">: Ruhend\n\n[prioritaet]: Select\n  - NONE:\n  - LOW <icon=\"far fa-arrow-circle-down\" iconcolor=\"grey\">: Niedrig\n  - MEDIUM <icon=\"far fa-arrow-circle-right\">: Mittel\n  - HIGH <icon=\"far fa-arrow-circle-up\" iconcolor=\"red\">: Hoch\n \n{ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Projektleiter (Junior)][projektleiter] {ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Projektleiter (Senior)][leitenderProjektleiter]\n\n{ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Objektplanung: Projektleiter][projektleiterObjektplanung] {ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Tragwerksplanung: Projektleiter][projektleiterTragwerksplanung]\n\n\n\n{ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Wärmeschutz: Projektleiter][projektleiterWaermeschutz] {ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Nachhaltigkeit: Projektleiter][projektleiterNachhaltigkeit]\n\n\n\n{ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Schallschutz: Projektleiter][projektleiterSchallschutz] {ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Brandschutz: Projektleiter][projektleiterBrandschutz]\n\n\n\n{ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[TGA: Projektleiter][projektleiterTga] {ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df prominent-pick-command=45f20576-a049-4643-8ce1-181c856990ac hide-path}[Sachverständige: Projektleiter][projektleiterSachverstaendige]\n\n\n\n\n[projektleiter]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 \"Der verantwortliche Mitarbeiter erhält verschiedene Projekt-Benachrichtigungen, beispielsweise wenn ein Kunde Dateien im Dokumenten Share hochlädt\"\n\n[leitenderProjektleiter]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 \"Ein hier verknüpfter Mitarbeiter ist rein für organisatorische Zwecke relevant\"\n\n\n\n[projektleiterObjektplanung]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 \"Ein hier verknüpfter Mitarbeiter ist rein für organisatorische Zwecke relevant\" \n\n\n[projektleiterTragwerksplanung]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 \"Ein hier verknüpfter Mitarbeiter ist rein für organisatorische Zwecke relevant\" \n\n\n\n[projektleiterWaermeschutz]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 \"Ein hier verknüpfter Mitarbeiter ist rein für organisatorische Zwecke relevant\" \n\n\n\n[projektleiterNachhaltigkeit]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 \"Ein hier verknüpfter Mitarbeiter ist rein für organisatorische Zwecke relevant\" \n\n\n[projektleiterSchallschutz]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 \"Ein hier verknüpfter Mitarbeiter ist rein für organisatorische Zwecke relevant\" \n\n[projektleiterBrandschutz]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 \"Ein hier verknüpfter Mitarbeiter ist rein für organisatorische Zwecke relevant\" \n\n[projektleiterTga]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 \"Ein hier verknüpfter Mitarbeiter ist rein für organisatorische Zwecke relevant\" \n\n[projektleiterSachverstaendige]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 \"Ein hier verknüpfter Mitarbeiter ist rein für organisatorische Zwecke relevant\" \n\n\n##\n\n{readonly|ref list-id=812a938b-e80f-4765-a04c-c65c270c9e95}\n[Planungen][vertraege]\n\n{multiline auto-grow}\n[Vertragsspezifische Besonderheiten][vertragsspezifischeBesonderheiten]\n\n// field 'bauherr' renamed to 'Auftraggeber' but only by label. Used in workflow/automatics\n{ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path creation-location-form=eccbf3d6-5fc6-473a-8b81-3049bac700e4 on-creation-run-action=29b33a65-4a12-4a7b-ae65-ad61c11cb989}[Auftraggeber][bauherr] {ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path creation-location-form=eccbf3d6-5fc6-473a-8b81-3049bac700e4 on-creation-run-action=29b33a65-4a12-4a7b-ae65-ad61c11cb989}[Bauherren][bauherren]\n[bauherr]: /f8fd3176-4995-455f-a8a8-d2742a836816\n[bauherren]: /f8fd3176-4995-455f-a8a8-d2742a836816 (0-n) \n\n{ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path creation-location-form=eccbf3d6-5fc6-473a-8b81-3049bac700e4 on-creation-run-action=29b33a65-4a12-4a7b-ae65-ad61c11cb989}\n[Ansprechpartner][ansprechpartner]\n[ansprechpartner]: /f8fd3176-4995-455f-a8a8-d2742a836816 (0-n)\n\n{ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path creation-location-form=eccbf3d6-5fc6-473a-8b81-3049bac700e4 on-creation-run-action=29b33a65-4a12-4a7b-ae65-ad61c11cb989}\n[Beteiligte][beteiligte]\n[beteiligte]: /f8fd3176-4995-455f-a8a8-d2742a836816 (0-n)\n\n{children}[Antragsteller][antragsteller] {children}[Kunde kommt von][empfehlungDurch]\n\n{children delete-on-remove}\n[Förderung][foerderungen]\n[foerderungen]: /7628f42e-260d-49b9-a2d6-30cb0973c1b6 (0-n)\n\n[antragsteller]: /125d3e08-d0c5-417c-b4fe-172bf5fade99 (0-n)\n[empfehlungDurch]: /da0f2915-48ea-45da-927b-640bb5173b96 (0-n)\n\n\n{multiline auto-grow}\n[Kundenspezifische Besonderheiten][kundenspezifischeBesonderheiten]\n\n{ref handle-selected-readonly ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path}\n[Closer][closer]\n[closer]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10 (0-n)\n\n#### Baustelle\n\n[Baubeginn/Zwischenordner][baubeginn] [Fertigstellung/Abschlussordner][fertigstellung]\n[baubeginn]: date\n[fertigstellung]: date\n\n[Baustellen Adresse][baustellenAdresse]\n[baustellenAdresse]: address\n\n{multiline auto-grow}\n[Beschreibung][beschreibung]\n\n[Wohneinheiten][wohneinheiten] [Heizungsart][heizungsart] [KfW][kfwKennziffer] [Nachweis][nachweis]\n\n[nachweis]: Select\n  - NONE: \n  - ENEV: EnEV\n  - GEG: GEG\n\n# Leistungen\n\n{children can-edit-command=817a417e-0254-4938-b77c-086c0a367257 no-dialog dialog-id=e8a391d2-872d-4b81-9a0f-743019756ffa only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 forms=4862401e-e182-451c-a855-ef2e9b9441c5,fa3777b5-bfff-43ac-a5c5-ea15486dd334,11a327ee-c8e6-453a-bcdd-f585877f2fd8,9f8071fd-6f25-489e-8562-4399701546b0,281c6bd6-2e24-42ba-868e-b63cbba4254f,34d811a8-9de0-4b20-bc24-c55826a06748,03c16e2b-302e-4c2c-93c1-931679919e0b,2c01a15d-c14d-44c6-adc5-d9b3fdc692b7,328998fb-7e67-4fca-b40b-377d9a07776d,5ff471b3-1769-408b-825a-69d6416757c3,41da8494-ec0a-4b13-bad7-162f3f1fbba4,c97e431f-1d18-4f45-9915-591932d2cd23,873e5be1-18d7-47ae-9ea5-438bce403e61,5acb56fa-2bad-4e9b-8385-ab82c2562b47,81e1dec7-0c25-4694-9724-d1a86f8dc0db,cf2ae9d1-57f8-4604-887f-9bc97fe74495,1c428116-bc5b-4c71-8a84-0f7c50c2dbe6,748a3d2b-9bbb-4134-a09d-4a7797fdc639,680d9cf2-25de-4237-840d-64fb9e68b1a2,39a8e8f7-4840-4ffd-ad15-21fc5d56b277}\n[Leistungen][leistungen]\n[leistungen]: /ref (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[KFW][kfwEnev]\n[kfwEnev]: /4862401e-e182-451c-a855-ef2e9b9441c5 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[ENEV][enev]\n[enev]: /fa3777b5-bfff-43ac-a5c5-ea15486dd334 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Energieausweis][energieausweis]\n[energieausweis]: /11a327ee-c8e6-453a-bcdd-f585877f2fd8 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Blower Door Test][blowerDoorTest]\n[blowerDoorTest]: /9f8071fd-6f25-489e-8562-4399701546b0 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Brandschutz][brandschutz]\n[brandschutz]: /281c6bd6-2e24-42ba-868e-b63cbba4254f (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Brandschutzbauleitung][brandschutzbauleitung]\n[brandschutzbauleitung]: /34d811a8-9de0-4b20-bc24-c55826a06748 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Schallschutz][schallschutz]\n[schallschutz]: /03c16e2b-302e-4c2c-93c1-931679919e0b (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Schallschutz Kontrollen][schallschutzKontrollen]\n[schallschutzKontrollen]: /2c01a15d-c14d-44c6-adc5-d9b3fdc692b7 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Schallschutzmessung][schallschutzmessung]\n[schallschutzmessung]: /328998fb-7e67-4fca-b40b-377d9a07776d (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Simulation (jeweils separat)][simulation]\n[simulation]: /5ff471b3-1769-408b-825a-69d6416757c3 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Architektur][architektur]\n[architektur]: /41da8494-ec0a-4b13-bad7-162f3f1fbba4 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Wohngebäude (Sanierung)][wohngebaeudeSanierung]\n[wohngebaeudeSanierung]: /c97e431f-1d18-4f45-9915-591932d2cd23 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Nichtwohngebäude (Sanierung/Umbau)][nichtWohngebaeudeSanierung]\n[nichtWohngebaeudeSanierung]: /873e5be1-18d7-47ae-9ea5-438bce403e61 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Wohngebäude (Neubau)][wohngebaeudeNeubau]\n[wohngebaeudeNeubau]: /5acb56fa-2bad-4e9b-8385-ab82c2562b47 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Nichtwohngebäude (Neubau)][nichtWohngebaeudeNeubau]\n[nichtWohngebaeudeNeubau]: /81e1dec7-0c25-4694-9724-d1a86f8dc0db (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Elektrotechnik (ELT)][elektrotechnik]\n[elektrotechnik]: /cf2ae9d1-57f8-4604-887f-9bc97fe74495 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Heizung, Lüftung, Sanitär (HLS)][heizungLueftungSanitaer]\n[heizungLueftungSanitaer]: /1c428116-bc5b-4c71-8a84-0f7c50c2dbe6 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Tragwerksplanung][tragwerksplanung]\n[tragwerksplanung]: /748a3d2b-9bbb-4134-a09d-4a7797fdc639 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Nachhaltigkeit][nachhaltigkeit]\n[nachhaltigkeit]: /680d9cf2-25de-4237-840d-64fb9e68b1a2 (0-n)\n\n{readonly-if-command id=a127d2a2-d04b-406c-b9ed-a5b29f79f9fa control=children only-template clone-template-with-elevated-rights template-location-form=089eb68f-d2ec-4e30-a3bb-6549d72932ec template-location-search-limit=1 delete-on-remove confirm-remove inline inline-layout=2d3b9b80-0da6-4040-9806-3e0ae0595018 augment-fields=name,aufgaben,anhaenge,templates}\n[Sachverständige][sachverstaendige]\n[sachverstaendige]: /39a8e8f7-4840-4ffd-ad15-21fc5d56b277 (0-n)\n\n\n# Aufgaben\n\n{children navigate delete-on-remove handle-selected-readonly new-command=d1ec65ef-1ea8-47a6-9d7b-462475e56917 can-edit-command=095e681f-d939-4f7d-b56c-3f88cdcf1d54}\n[Aufgaben][aufgaben]\n[aufgaben]: /0deb4864-cbb6-420c-99ee-337c7444ab24 (0-n)\n\n# Korrespondenz\n\n{mails}\n[Mailverlauf][mails]\n[mails]: /59b7188e-1296-4466-a9c2-d6255496e7d6 (0-n)\n\n{children navigate new-command=9bd348a7-3631-4319-8c00-83680b5c49cd disable-remove handle-selected-readonly}\n[Formulare versenden][formulare]\n[formulare]: /5152f88f-3006-46f9-959a-423139accf79 (0-n)\n\n\n{children navigate new-command=8bad86c6-45e2-4db4-9e1f-ec4e9f33756b disable-remove handle-selected-readonly}\n[Gesprächsnotizen][gespraechsnotizen]\n[gespraechsnotizen]: /8d8f6fdb-6f78-4e2a-b585-bd80f4dbaa1d (0-n)\n\n# Dokumente\n\n{children navigate new-command=c24e77dc-3fa7-454d-b31d-764f5511a1e9 disable-remove handle-selected-readonly}\n[Dokumenten Shares][dokumentenShares]\n[dokumentenShares]: /c6349b48-9561-4c06-9200-fe9df9b6fb3e (0-n)\n\n{hidden if dmsOrdner.id|children no-dialog new-command=b40f35ae-8b1f-44e6-80f1-c5ab853f8be0}\n[Dateien][dmsOrdner]\n\n{show if dmsOrdner.id|page}\n[Dateien][dmsOrdner]\n[dmsOrdner]: /a04c8913-db48-4e80-b20d-0f3cc17a778c\n\n# Teambesprechungen\n\n{children navigate new-command=2163cdf3-f74b-4fad-aa23-156ec198aecf handle-selected-readonly initial-sort-field=data.date initial-sort-descending add-to-beginning collapse-after=20}\n[Teambesprechungen][protokolle]\n[protokolle]: /d16936c1-7ccc-40f1-b526-d2d9ce37ebd2 (0-n)\n\n# Verträge\n\n{children navigate new-command=bc15391d-9df8-41f6-af5a-daeb4c237eff disable-remove handle-selected-readonly}\n[Verträge][vertraege]\n[vertraege]: /fec93a80-86e6-4ccb-a473-14046bd4336e (0-n)\n","description":"","functions":"","icon":{"dataUrl":null,"fileInfo":{"created":null,"imported":null,"modified":null,"read":null},"iconUrl":null,"mediaInfo":{},"name":"","sha1":null,"size":0,"thumbnailUrl":null,"type":null},"name":"Projekt","namedIcon":"fa fa-clipboard-list","namedIconColor":"","tags":"","theme":{"id":"","text":"","v":""}},"f":{"id":"form","text":"Form","v":"42ef1fd37c206edb"},"id":"98c77209-1245-43d6-90b5-8625183f470c","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-04-16T10:19:32+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"f254ce25-42f1-4333-8ee7-23554bf746c1","previous":{"v":"bd0023a3d73b2240"},"stamps":[],"t":1776334772305,"v":"a262ca19bc823e46"},{"id":"0142060c-ac17-4d96-b418-24afa702fbd5","v":"c7b242b1106a646f","previous":{"v":"88b01e6db1b8b729"},"p":"add15d6c-c7b4-4cfb-8da7-d7f38c610cfc","f":{"id":"form","v":"d497194b29933d26","text":"Form"},"data":{"name":"Auswertung: Auslastung Projektleiter","tags":"","allowUndefinedFields":false,"definition":"{ref ancestor-form=c69a0c1c-6c53-40c2-87e8-5ace866bf1df hide-path=true}\n[Projektleiter][mitarbeiter]\n[mitarbeiter]: /d2ac3563-3c3f-4f02-b923-9b67abf98d10\n\n[Projekt][projekt]\n[projekt]: /98c77209-1245-43d6-90b5-8625183f470c\n\n{hidden}\n[Status][projektStatusDisplay]\n\n[Status][projektStatus]\n[projektStatus]: Select\n  - NONE:\n  - ACQUISITION: Akquise\n  - DECLINED: Abgelehnt\n  - PROGRESS: In Bearbeitung (in der Planungsphase)\n  - ONSPOTCHECKS: In Ausführung (vor Ort Kontrollen)\n  - DONE: Abgeschlossen\n  - DORMANT: Ruhend\n\n[Leistungen][leistungen]\n[leistungen]: /ref (0-n)\n\n{number-sums sum=vertragSummeAuftrag year=vertragSummeAuftragNachJahr month=vertragSummeAuftragNachMonat}\n[Summe (Aufrag)][vertragSummeAuftrag]\n[vertragSummeAuftrag]: number\n\n{hidden}\n[Summe (Auftrag) - nach Jahr][vertragSummeAuftragNachJahr]\n[vertragSummeAuftragNachJahr]: text\n\n{hidden}\n[Summe (Auftrag) - nach Monat][vertragSummeAuftragNachMonat]\n[vertragSummeAuftragNachMonat]: text\n\n{number-sums sum=vertragSummeAbgerechnet year=vertragSummeAbgerechnetNachJahr month=vertragSummeAbgerechnetNachMonat}\n[Summe (Abgerechnet)][vertragSummeAbgerechnet]\n[vertragSummeAbgerechnet]: number\n\n{hidden}\n[Summe (Abgerechnet) - nach Jahr][vertragSummeAbgerechnetNachJahr]\n[vertragSummeAbgerechnetNachJahr]: text\n\n{hidden}\n[Summe (Abgerechnet) - nach Monat][vertragSummeAbgerechnetNachMonat]\n[vertragSummeAbgerechnetNachMonat]: text\n\n{number-sums sum=vertragSummeOffen year=vertragSummeOffenNachJahr month=vertragSummeOffenNachMonat}\n[Summe (offen)][vertragSummeOffen]\n[vertragSummeOffen]: number\n\n{hidden}\n[Summe (offen) - nach Jahr][vertragSummeOffenNachJahr]\n[vertragSummeOffenNachJahr]: text\n\n{hidden}\n[Summe (offen) - nach Monat][vertragSummeOffenNachMonat]\n[vertragSummeOffenNachMonat]: text\n\n{duration-sums sum=stundenProjektleiter year=stundenProjektleiterNachJahr month=stundenProjektleiterNachMonat}\n[Stunden (PL)][stundenProjektleiter]\n[stundenProjektleiter]: duration\n\n{hidden}\n[Stunden (PL) - nach Jahr][stundenProjektleiterNachJahr]\n[stundenProjektleiterNachJahr]: text\n\n{hidden}\n[Stunden (PL) - nach Monat][stundenProjektleiterNachMonat]\n[stundenProjektleiterNachMonat]: text\n\n{duration-sums sum=stundenAndere year=stundenAndereNachJahr month=stundenAndereNachMonat}\n[Stunden (SB)][stundenAndere]\n[stundenAndere]: duration\n\n{hidden}\n[stundenAndereNachJahr]: text\n[Stunden (SB) - nach Jahr][stundenAndereNachJahr]\n[stundenAndereNachJahr]: text\n\n{hidden}\n[Stunden (SB) - nach Monat][stundenAndereNachMonat]\n[stundenAndereNachMonat]: text","functions":"","defaults":"","newTemplate":{"id":"","v":"","text":""},"newAction":{"id":"","v":"","text":""},"allowedChildrenForms":[],"commands":[],"namedIcon":"fa fa-chart-pie","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"uiOptions":{"id":"","v":"","text":""},"theme":{"id":"","v":"","text":""},"description":""},"locks":[],"created":{"at":"2021-04-09T10:07:17+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2023-11-07T11:05:02+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1699355102998,"ct":1699351135396,"a_depth":3,"a":["apps","bfeee3b0-ad25-4bba-a51c-01584d72c45a","add15d6c-c7b4-4cfb-8da7-d7f38c610cfc"],"a_forms":["folder","application-form","application-form"],"inheritedLocks":[null,null,null,null],"stamps":[],"dts":1699272735956},{"id":"8675fac2-1fb2-4704-bc87-de0345194e6a","v":"initial","previous":{"v":""},"p":"64807bcd-1efa-4a43-a950-e10de2e0125c","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-05-23T11:47:17+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"from":"","client":"server"},"modified":{"at":"2018-05-23T11:47:17+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"from":"","client":"server"},"t":1527068837079,"ct":1527068837079,"a_depth":4,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","64807bcd-1efa-4a43-a950-e10de2e0125c"],"a_forms":["folder","application-form","folder","folder"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"69e7c51e-ba71-4a0e-9134-15a020100648","v":"a94f726e84d57b78","previous":{"v":"38f27441ed34c082"},"p":"4ff7b40d-67d1-4a31-bcf8-e8459db63855","f":{"id":"form","v":"d497194b29933d26","text":"Form"},"data":{"name":"Externer Telefonverzeichniseintrag","tags":"      ","allowUndefinedFields":false,"definition":"[Bezeichnung][name]\n\n[Firmenname][firmenname]\n{address button-navigation=true fields=street,streetNumber,supplement,postalCode,city}\n[Adresse][adresse]\n[adresse]: address\n\n[Ansprechpartner][ansprechpartner]\n\n[Festnetz][festnetz]\n\n[Mobil][mobil]\n\n[Fax][fax]\n\n[E-Mail][email]","functions":"","defaults":"","newTemplate":{"id":"","v":"","text":""},"newAction":{"id":"","v":"","text":""},"allowedChildrenForms":[],"commands":[],"namedIcon":"far fa-phone-square","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"uiOptions":{"id":"","v":"","text":""},"theme":{"id":"","v":"","text":""},"description":""},"locks":[],"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"modified":{"at":"2023-10-12T11:02:08+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1697108528485,"ct":1697108521318,"a_depth":4,"a":["apps","83c76376-420e-4231-9275-d0fe2ab47c32","921c912f-d932-46d2-b061-ae7539e9a5a8","4ff7b40d-67d1-4a31-bcf8-e8459db63855"],"a_forms":["folder","application-form","application-form","folder"],"inheritedLocks":[null,null,null,null,null],"stamps":[],"dts":1467644261105},{"id":"e4af0e46-8a46-4741-935d-13e29befd300","v":"4466eb7cc8f4dd3f","previous":{"v":"fb5dc064e7ac4334"},"p":"d206ec4a-14b4-4425-9843-143e545ec76e","f":{"id":"form","v":"d497194b29933d26","text":"Form"},"data":{"name":"Medikament","tags":"pferdeklinik","allowUndefinedFields":false,"definition":"{multiline auto-grow=true}\n[Wirkstoff][wirkstoff]\n\n{multiline auto-grow=true}\n[Handelsname][name]\n\n{multiline auto-grow=true}\n[Wirkstoffklasse/- mechanismus][wirkstoffklasse]\n\n{multiline auto-grow=true}\n[Zugelassen für (Tierart)][zugelassenfuer]\n\n{multiline auto-grow=true}\n[Indikation/Einsatz][indikation]\n\n{multiline auto-grow=true}\n[Dosierung][dosierung]\n\n{multiline auto-grow=true}\n[Anwendung am Pferd wenn nicht zugelassen: Umwidmung § 56 Abs. 2][anwendung]\n\n{multiline auto-grow=true}\n[Anwendung bei LM Pferd /Tier? Wartezeit][anwendungLM]\n\n{multiline auto-grow=true}\n[Sonstiges][sonstiges]\n\n{multiline auto-grow=true}\n[Mitarbeiter][mitarbeiter]\n\n{hidden if !packungsbeilage.dataUrl}\n[Packungsbeilage (Nur Backup. Stattdessen Packungsbeilagen nutzen)][packungsbeilage]\n[packungsbeilage]: file\n\n{attachment form-id=\"6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2\" file-field=\"datei\" name-field=\"name\"}\n[Packungsbeilagen][packungsbeilagen]\n[packungsbeilagen]: /6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2 (0-n)","functions":"","defaults":"","newTemplate":{"id":"","v":"","text":""},"newAction":{"id":"","v":"","text":""},"allowedChildrenForms":[],"commands":[],"namedIcon":"far fa-pills","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"uiOptions":{"id":"","v":"","text":""},"theme":{"id":"","v":"","text":""},"description":"Formular für Pferdekliniken"},"locks":[],"created":{"at":"2019-03-11T09:30:08+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2023-10-12T10:55:54+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1697108154557,"ct":1697108149356,"a_depth":4,"a":["apps","83c76376-420e-4231-9275-d0fe2ab47c32","2c872bc9-30dc-45b4-9aed-8c1c89a69baa","d206ec4a-14b4-4425-9843-143e545ec76e"],"a_forms":["folder","application-form","application-form","folder"],"inheritedLocks":[null,null,null,null,null],"stamps":[],"dts":1547036952791},{"id":"38aab2e1-ee5c-4fc2-90e9-962b4161ac22","v":"a2c69a25e038e314","previous":{"v":"4e836a9bc8c151ff"},"p":"d206ec4a-14b4-4425-9843-143e545ec76e","f":{"id":"form","v":"d497194b29933d26","text":"Form"},"data":{"name":"Medikament","tags":"tierklinik","allowUndefinedFields":false,"definition":"{multiline auto-grow=true}\n[Wirkstoff][wirkstoff]\n\n{multiline auto-grow=true}\n[Handelsname][name]\n\n{multiline auto-grow=true}\n[Wirkstoffklasse/- mechanismus][wirkstoffklasse]\n\n{multiline auto-grow=true}\n[Indikation/Einsatz][indikation]\n\n{multiline auto-grow=true}\n[Dosierung][dosierung]\n\n{multiline auto-grow=true}\n[Anwendung am Tier wenn nicht zugelassen: Umwidmung § 56 Abs. 2][anwendungAmTier]\n\n{multiline auto-grow=true}\n[Lagerungshinweis/ Anbruchsstabilität][lagerungshinweisAnbruchsstabilitaet]\n\n{multiline auto-grow=true}\n[Sonstiges][sonstiges]\n\n{multiline auto-grow=true}\n[Mitarbeiter][mitarbeiter]\n\n{hidden if !packungsbeilage.dataUrl}\n[Packungsbeilage (Nur Backup. Stattdessen Packungsbeilagen nutzen)][packungsbeilage]\n[packungsbeilage]: file\n\n{attachment form-id=\"6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2\" file-field=\"datei\" name-field=\"name\"}\n[Packungsbeilagen][packungsbeilagen]\n[packungsbeilagen]: /6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2 (0-n)","functions":"","defaults":"","newTemplate":{"id":"","v":"","text":""},"newAction":{"id":"","v":"","text":""},"allowedChildrenForms":[],"commands":[],"namedIcon":"far fa-pills","namedIconColor":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null},"mediaInfo":{}},"uiOptions":{"id":"","v":"","text":""},"theme":{"id":"","v":"","text":""},"description":"Formular für Tierkliniken"},"locks":[],"created":{"at":"2019-04-12T14:29:38+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2023-10-12T10:56:00+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1697108160826,"ct":1697108157103,"a_depth":4,"a":["apps","83c76376-420e-4231-9275-d0fe2ab47c32","2c872bc9-30dc-45b4-9aed-8c1c89a69baa","d206ec4a-14b4-4425-9843-143e545ec76e"],"a_forms":["folder","application-form","application-form","folder"],"inheritedLocks":[null,null,null,null,null],"stamps":[],"dts":1553589852974},{"id":"7fd7c5cc-1eed-440b-8ce2-d6183cdb421b","v":"bde1500f92103d74","previous":{"v":"initial"},"p":"427e6b73-968a-4747-be77-c6bb820a3190","f":{"id":"folder","v":"f1e4977dbee77607","text":"Folder"},"data":{"name":"Layouts","description":"","icon":{"name":"","size":0,"type":null,"sha1":null,"dataUrl":null,"thumbnailUrl":null,"iconUrl":null,"fileInfo":{"created":null,"read":null,"modified":null,"imported":null}}},"locks":[],"created":{"at":"2018-04-18T15:37:55+02:00","by":"","from":"","client":"server"},"modified":{"at":"2018-05-23T11:50:37+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"from":"","client":"server"},"t":1527069037103,"ct":1524058675712,"a_depth":4,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","427e6b73-968a-4747-be77-c6bb820a3190"],"a_forms":["folder","application-form","folder","folder"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","05787127-986a-494f-a69e-8733c1176596","fdfaf800-858a-4b45-91c9-5bdad7a63672"],"a_depth":4,"a_forms":["folder","application-form","form-folder","form"],"created":{"at":"2025-08-07T09:43:45+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1754559825062,"data":{"aliases":[],"controller":"class Controller {\n  async init() {\n    this._chart = null\n\n    this.FORMS = {\n      Wartungsdurchfuehrung: '1b166603-d0f3-4f16-98c4-0534afbd6f5a',\n      Reparatur: '46a28dfa-7518-4867-9519-a5f4cd9b9967',\n      WartungenOrdner: 'fdfaf800-858a-4b45-91c9-5bdad7a63672',\n    }\n\n    locals.maintenancesYear = []\n    locals.repairsYear = []\n\n    locals.labels = []\n    locals.chartData = []\n    locals.backgroundColor = []\n    locals.borderColor = []\n    locals.teamStats = {\n      totalNumber: 0,\n      internalNumber: 0,\n      externalNumber: 0,\n    }\n\n    locals.documents = []\n\n\n    \n\n    const query = () => {\n      const base = 'p:' + document.id + ' f.id:' + this.FORMS.Wartungsdurchfuehrung\n\n      if (this.filter) {\n        return `${base} ${this.filter.trim()}`\n      }\n      return base\n    }\n\n    const maintenancesFolder = await Aeppic.find(`p:${document.a[0]} f.id:${this.FORMS.WartungenOrdner}`)\n    locals.queryForDashboard = Aeppic.Query.children(maintenancesFolder).form(this.FORMS.Wartungsdurchfuehrung)\n\n    Aeppic.subscribe(query(), { size: 99999 }, (newDocuments) => {\n      locals.documents = newDocuments\n      this.createDiagram(this._getStatistics(newDocuments))\n    })\n    \n    // NOTE: Semicolon must be before destructuring without declaration\n    ;[locals.maintenancesYear, locals.repairsYear] = await Promise.all([this.FORMS.Wartungsdurchfuehrung, this.FORMS.Reparatur].map(\n      form => {return Aeppic.find(this.createQueryYear(form), {size: 99999})}\n    ))\n \n    await Aeppic.nextRenderPass()\n\n    this.createDiagram(this._getStatistics(locals.documents))\n  }\n\n  createQueryYear(form) {\n    const now = DateTime.local()\n    const startDate = now.minus({ month: 12 })\n\n    return Aeppic.Query\n      .descendants(document.a[0])\n      .form(form)\n      // .where('created.at')\n      // .isInRange(startDate.toISO(), now.toISO())\n  }\n\n  _getStatistics(documents) {\n    const result = {\n      planned: 0,\n      started: 0,\n      aborted: 0,\n      done: 0,\n      acknowledged: 0,\n    }\n\n    documents.forEach(doc => {\n      if (doc) {\n        const workflowStatus = doc.data.workflowStatus\n\n        if (workflowStatus === \"PLANNED\") {\n          result.planned += 1\n        } else if (workflowStatus === \"STARTED\") {\n          result.started += 1\n        } else if (workflowStatus === \"CANCELED\") {\n          result.aborted += 1 \n        } else if (workflowStatus === \"COMPLETED\") {\n          result.done += 1\n        } else if (workflowStatus === \"ACKNOWLEDGED\") {\n          result.acknowledged += 1\n        }\n      }\n    })\n\n    return result\n  }\n\n  createDiagram(statistics) {\n    if (this._chart) {\n      this._chart.destroy()\n    }\n\n    locals.labels = []\n    locals.chartData = []\n    locals.backgroundColor = []\n    locals.borderColor = []\n\n    // fontawesome colors, border is 1 step up in palette\n    if (statistics.acknowledged > 0) {\n      locals.labels.push('Zur Kenntnis genommen')\n      locals.chartData.push(statistics.acknowledged)\n      locals.backgroundColor.push('#22c55e')\n      locals.borderColor.push('#16a34a')\n    }\n    if (statistics.done > 0) {\n      locals.labels.push('Abgeschlossen')\n      locals.chartData.push(statistics.done)\n      locals.backgroundColor.push('#93c5fd')\n      locals.borderColor.push('#3b82f6')\n    }\n    if (statistics.aborted > 0) {\n      locals.labels.push('Abgebrochen')\n      locals.chartData.push(statistics.aborted)\n      locals.backgroundColor.push('#f43f5e')\n      locals.borderColor.push('#f43f5e')\n    }\n    if (statistics.started > 0) {\n      locals.labels.push('Begonnen')\n      locals.chartData.push(statistics.started)\n      locals.backgroundColor.push('#cbd5e1')\n      locals.borderColor.push('#94a3b8')\n    }\n    if (statistics.planned > 0) {\n      locals.labels.push('Geplant')\n      locals.chartData.push(statistics.planned)\n      locals.backgroundColor.push('##d6d3d1')\n      locals.borderColor.push('#78716c')\n    }\n\n    this._chart = new Chart($refs.chartMaintenance, {\n      options: {\n        responsive: false,\n      },\n      type: 'pie',\n      data: {\n        labels: locals.labels,\n        datasets: [\n          {\n            data: locals.chartData,\n            backgroundColor: locals.backgroundColor,\n            borderColor: locals.borderColor,\n            borderWidth: 1,\n          },\n        ],\n      },\n    })\n  }\n\n  createDiagramDefs() {\n    const labels = []\n    const chartData = []\n    const backgroundColor = []\n    const borderColor = []\n\n    chartData.push(...locals.demo.wartungen.deficienciesPerMonthMaintenanceAverage)\n    labels.push('Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun')\n    // backgroundColor.push('#fbbf24', '#f87171', '#34d399', '#60a5fa', '#a78bfa', '#f472b6')\n    // borderColor.push('#f59e42', '#ef4444', '#059669', '#2563eb', '#7c3aed', '#be185d')\n    \n    this._chartDefs = new Chart($refs.chartDefs, {\n      options: {\n        responsive: false,\n      },\n      type: 'line',\n      data: {\n        labels: labels,\n        datasets: [\n          {\n            label: 'Durchschnittliche Mängel in Wartungen',\n            data: chartData,\n            backgroundColor: '#60a5fa',\n            borderColor: 'black',\n            borderWidth: 1,\n          },\n        ],\n      },\n    })\n  }\n\n  destroy() {\n    if (this._chart) {\n      this._chart.destroy()\n    }\n\n    if (this._chartDefs) {\n      this._chartDefs.destroy()\n    }\n  }\n}\n","css":"","description":"","name":"rd:cockpit","packages":[{"id":"4a6e27ae-e4a0-4e22-9997-b352899f86f5","text":"Chart.js","v":"c044548d5a0892ce"}],"template":"<div class=\"py-6\">\n  <div class=\"max-w-5xl mx-auto px-4 pb-4 xl:my-2 xl:shadow-md xl:rounded-md flex flex-col gap-10 p-2 bg-white\">\n    <section class=\"p-4 bg-neutral-50 rounded-md\">\n      <header class=\"font-bold text-lg truncate\">\n        <!-- Alle Wartungen von <ae-design name=\"title\" :document=\"document\" class=\"inline italic\"></ae-design> -->\n        Auswertungen\n      </header>\n\n      <div class=\"flex items-center\">\n        <canvas ref=\"chartMaintenance\" width=\"440\" height=\"200\"></canvas>\n\n        <div>\n          <div v-for=\"(label, index) of locals.labels\" class=\"flex gap-2 justify-between\">\n            <div :style=\"{ color: locals.borderColor[index] }\">{{ label}}</div>\n            <div>{{locals.chartData[index]}}</div>\n          </div>\n        </div>\n      </div>\n    </section>\n\n    <section class=\"relative my-4 flex flex-wrap gap-4\">\n\n      <section class=\"bg-neutral-50 rounded-md p-4 flex-1\">\n        <ae-layout\n          layout-id=\"54cd8d8e-5aa2-4823-8500-4db3d136b1f0\" \n          class=\"size-full\"\n          param-title=\"Wartung vs Reparatur: Monatlich\"\n          :param-months-to-show=\"12\"\n          :param-data-sets=\"[\n            {\n              documents: locals.maintenancesYear,\n              label: 'Wartungen',\n              backgroundColor: '#3b82f6', \n              borderColor: '#2563eb',\n            },\n            {\n              documents: locals.repairsYear,\n              label: 'Reparaturen',\n              backgroundColor: '#f97316',\n              borderColor: '#ea580c',\n            }\n          ]\"\n        ></ae-layout>\n      </section>\n\n      <section class=\"bg-neutral-50 rounded-md p-4 flex-1\">\n        <ae-layout \n          layout-id=\"653300e7-8af5-4ce4-964c-8c96a2c61fce\" \n          class=\"size-full\"\n          param-title=\"Wartung vs Reparatur: Wöchentlich\"\n          :param-weeks-to-show=\"12\"\n          :param-data-sets=\"[\n            {\n              documents: locals.maintenancesYear,\n              label: 'Wartungen',\n              backgroundColor: 'rgba(66, 135, 245, 0.2)',\n              borderColor: 'rgba(66, 135, 245, 0.9)',\n            },\n            {\n              documents: locals.repairsYear,\n              label: 'Reparaturen',\n              backgroundColor: 'rgba(249, 115, 22, 0.2)',\n              borderColor: 'rgba(249, 115, 22, 0.9)',\n            }\n          ]\"\n        ></ae-layout>  \n      </section>\n\n    </section>\n\n    <!-- <section class=\"bg-neutral-50 rounded-md p-4\">\n      <header class=\"font-bold text-lg\">Erfasste Zeiten</header>\n\n      <ae-layout layout-id=\"10590b76-115a-4539-a911-6994500ab02a\" :param-document=\"document\"></ae-layout>\n    </section> -->\n  </div>\n</div>"},"f":{"id":"design-form","text":"Design","v":"22a757f630104010"},"id":"17c3177b-a9e2-4dc1-b653-facbd56702cd","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2026-03-23T08:34:35+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"p":"fdfaf800-858a-4b45-91c9-5bdad7a63672","previous":{"v":"8a3e487fbe3548b6"},"stamps":[],"t":1774254875889,"v":"ce4d01ad25315f1d"},{"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","98c77209-1245-43d6-90b5-8625183f470c"],"a_depth":4,"a_forms":["folder","application-form","form-folder","form"],"created":{"at":"2025-06-20T12:23:09+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1750422189303,"data":{"aliases":[],"controller":"class Controller {\n  init() {\n    this.COMMANDS = {\n      mayAccessTimeEvaluation: '4415d400-b067-4565-ab98-f80bd2e6a771'\n    }\n  }\n}","css":"","description":"","name":"rd:diagrams","packages":[],"template":"<div class=\"h-full\">\n  <div class=\"h-full bg-white max-w-5xl mx-auto px-4 pb-4 pt-2 xl:my-2 xl:shadow-md xl:rounded-md flex flex-col gap-10\">\n    <section\n      class=\"h-full flex flex-col\"\n    >\n      <header class=\"font-bold text-lg mb-4\">\n        Erfasste Zeiten\n      </header>\n      <ae-layout\n        layout-id=\"27f748b3-9689-4d05-ac75-63f0cc1ce432\"\n        class=\"flex-1\"\n        :param-project-id=\"document.id\"\n        :param-enabled-command-id=\"controller.COMMANDS.mayAccessTimeEvaluation\"\n      >\n      </ae-layout>\n    </section>\n  </div>\n</div>  "},"f":{"id":"design-form","text":"Design","v":"22a757f630104010"},"id":"ec23f7cc-9648-48de-a971-693f2d7f56e0","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2025-07-01T08:41:11+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"98c77209-1245-43d6-90b5-8625183f470c","previous":{"v":"129447f62ca71f8b"},"stamps":[],"t":1751359271434,"v":"e8118049887576d7"},{"a":["apps","c9b12874-99d0-40e8-86cc-c3fe0477a15a","2d46771e-84af-45f3-bc70-2c1793b412a9"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"2ad0619d-792e-40ea-9e76-f7801593f6f8","text":"rd:Comments Btn","v":"2821fd5e92ae7f8a"},"created":{"at":"2023-08-03T13:55:30+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1691070930279,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Notification: '6d164aff-df9b-470d-9632-cfb6f5892509',\n      NotificationsOfAnUser: 'bed0b818-76de-49f5-b93b-8265d6a54688',\n    }\n\n    locals.ready = false\n    locals.show = false\n    \n    locals.unreadNotificationsCount = 0\n    locals.notifications = []\n\n    locals.defaultCategories = [\n      { identifier: 'unread', name: 'Ungelesen', count: 0 },\n      { identifier: 'all', name: 'Alle', count: 0 },\n    ]\n\n    locals.selectedDefaultCategory = locals.defaultCategories[0]\n\n    locals.categories = []\n    locals.selectedCategory = null\n\n    this.handler = (keyboardEvent) => {\n      if (keyboardEvent.key === 'Escape') {\n        this.close()\n      }\n    }\n\n    packages.window.addEventListener('keydown', this.handler)\n\n    this.subscribeNewNotifications()\n\n    locals.ready = true\n    \n    this.notificationsAllowed = await this.requestNotificationPermission()\n    \n    if (params.showOnLoad) {\n      this.show()\n    }\n  }\n\n\n  async show() {\n    packages.window.addEventListener('keydown', this.handler)\n\n    this.findNotifications()\n\n    locals.show = true\n  }\n\n  async findNotifications(updateNotificationCategories = true) {\n    this.updateNotificationCategories = updateNotificationCategories\n\n    let readQuery = ''\n\n    switch (locals.selectedDefaultCategory.identifier) {\n      case 'unread': \n        readQuery = 'data.read:false'\n        break\n      case 'all':\n        readQuery = ''\n        break\n    } \n\n    if (locals.selectedCategory?.identifier) {\n      readQuery = `${readQuery} data.category:${locals.selectedCategory.identifier}`\n    }\n\n    console.log(updateNotificationCategories, readQuery)\n\n    const notifications = await Aeppic.find(`p:${Aeppic.Account.id} f.id:6d164aff-df9b-470d-9632-cfb6f5892509 ${readQuery}`, { sort: [{ field: 'created.at', descending: true }] })\n\n    if (this.updateNotificationCategories) {\n      const categoriesByNotifactions = {}\n\n      notifications.forEach(n => {\n        const category = n.data.category\n\n        if (!category) {\n          return\n        }\n\n        if (!categoriesByNotifactions[category]) {\n          categoriesByNotifactions[category] = { identifier: category, documentId: category, count: 0, iconRightDesignDocumentId: category }\n        } \n\n        categoriesByNotifactions[category].count += 1\n      })  \n\n      console.log('categoriesByNotifactions', { categoriesByNotifactions })\n\n      locals.categories = Object.values(categoriesByNotifactions)\n    }\n\n    locals.notifications = notifications\n  }\n\n  async subscribeNewNotifications() {\n    let notificationsOfUser = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.NotificationsOfAnUser}`)\n\n    if (!notificationsOfUser) {\n      return \n    }\n\n    locals.unreadNotificationsCount = notificationsOfUser.data.unreadNotifications.length + notificationsOfUser.data.unreadMessages.length\n\n    Aeppic.watch(notificationsOfUser, async (newNotificationsOfUser) => {\n      const newLengthNotifications = newNotificationsOfUser.data.unreadNotifications.length\n      const newLengthMessages = newNotificationsOfUser.data.unreadMessages.length\n\n      locals.unreadNotificationsCount = newLengthNotifications + newLengthMessages\n\n      const oldLengthNotifications = notificationsOfUser.data.unreadNotifications.length\n      const oldLengthMessages = notificationsOfUser.data.unreadMessages.length\n\n      const differenceNotifications = newLengthNotifications - oldLengthNotifications\n      const differenceMessages = newLengthMessages - oldLengthMessages\n\n      const difference = Math.max(differenceNotifications, differenceMessages)\n      if (difference <= 0) {\n        return\n      }\n\n      if (!this.notificationsAllowed) {\n        return \n      }\n\n      if (difference === 1) {\n        if (differenceNotifications > 0) {\n          const notification = await Aeppic.get(newNotificationsOfUser.data.unreadNotifications.slice(-1)[0])\n          this.newNotification(notification)\n\n          return\n        }\n        \n        if (differenceMessages > 0) {\n          const message = await Aeppic.get(newNotificationsOfUser.data.unreadMessages.slice(-1)[0])\n          this.newNotification(message)\n          return\n        }\n      }\n\n      this.newNotification()\n    })\n  }\n\n  async requestNotificationPermission() {\n    if (typeof Notification === 'undefined') {\n      return false\n    }\n\n    const result = await Notification.requestPermission()\n    return result === 'granted'\n  }\n\n  async newNotification(notification) {\n    console.log('newNotification', notification)\n    const name = notification ? Aeppic.translate(notification.data.name) : 'Neue Benachrichtigung'\n\n    const targetDocument = notification ? await Aeppic.get(notification.data.document) : null\n    const body = targetDocument && targetDocument.data.name ? `${targetDocument.data.name}` : ''\n\n    const n = new Notification(name, {\n      body,\n      icon: await this.getCompanyLogoUrl(),\n    })\n      // image: 'libs/fontawesome-pro-5.15.4-web/svgs/regular/archive.svg'\n  }\n\n  selectedDefaultCategory(category) {\n    locals.selectedDefaultCategory = category\n    locals.categories = []\n    locals.selectedCategory = null\n    this.findNotifications()\n  }\n\n\n  selectedCategory(category) {\n    if (locals.selectedCategory?.identifier === category.identifier) {\n      locals.selectedCategory = null\n      this.findNotifications(true)\n    } else {\n      locals.selectedCategory = category\n      this.findNotifications(false)\n    }\n  }\n\n  get searchFilter() {\n    return `a:${params.company.id}`.trim()\n  }\n\n  get lastModifiedFilter() {\n    // return `(${locals.formsFilter}) modified.by:${Aeppic.Account.id}`.trim()\n    return `modified.by:${Aeppic.Account.id} AND ${locals.formIdsToFindAsQuery}`.trim()\n  }\n\n  async markReadAndNavigateTo(event) {\n    locals.show = false\n\n    const notification = await Aeppic.edit(event)\n\n    notification.data.read = true\n    notification.data.readAt = Aeppic.DateTime.local().toFormat(\"yyyy-MM-dd'T'T\")\n\n    Aeppic.save(notification)\n\n    Aeppic.navigateTo(notification.data.document)\n  }\n\n  async markAllRead() {\n    const ok = packages.window.confirm('Alle Benachrichtigungen als gelesen markieren?')\n\n    if (!ok) {\n      return\n    }\n\n    const unreadNotifications = await Aeppic.find(`p:${Aeppic.Account.id} f.id:6d164aff-df9b-470d-9632-cfb6f5892509 data.read:false`, { size: 999, sort: [{ field: 'created.at', descending: true }] })\n\n    const notifications = await Aeppic.editAll(unreadNotifications)\n\n    for (const notification of notifications) {\n      if (notification) {\n        notification.data.read = true\n        notification.data.readAt = Aeppic.DateTime.local().toFormat(\"yyyy-MM-dd'T'T\")\n      }\n    }\n\n    Aeppic.saveAll(notifications)\n  }\n\n  close() {\n    locals.show = false\n    locals.selectedCategory = []\n    locals.selectedDefaultCategory = locals.defaultCategories[0]\n\n    packages.window.removeEventListener('keydown', this.handler)\n  }\n\n  destroy() {\n    packages.window.removeEventListener('keydown', this.handler)\n  }\n\n  async getCompanyLogoUrl() {\n    const fallback = 'manifest/pwa-192x192.png' // Bizpin Logo\n\n    const company = await Aeppic.get(Aeppic.Account.a[0])\n    const url = company ? Aeppic.Content.getSrc(company, 'logoSquare') : null\n    return url || fallback\n  }\n}  ","css":"","name":" rd:Notifications Btn","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"d4ce6dec568c3dc1"}],"template":"<div class=\"flex mr-1\">\n  <ae-layout    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                param-icon=\"far fa-bell\"\n                @xselected=\"controller.newNotification()\"\n                @selected=\"controller.show()\"\n                :param-disabled=\"!locals.ready\"\n                param-border=\"border\"\n                :param-count=\"locals.unreadNotificationsCount\"\n                :param-count-colors=\"[locals.unreadNotificationsCount && 'bg-error-500 text-error-100']\"\n  ></ae-layout>\n</div>\n\n<div v-if=\"locals.show\"\n      class=\"fixed z-50 left-0 right-0 top-0 bottom-0 bg-secondary-900/50 pt-20 pb-6 \"\n      @click.stop=\"controller.close()\"\n      @keydown.escape=\"controller.close()\" \n>\n  <div class=\"absolute right-0 top-0 p-2\">\n    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              param-icon=\"far fa-times\"\n              @selected=\"controller.close()\"\n    ></ae-layout>\n  </div>\n\n  <div  class=\"m-auto w-[700px] max-w-[90%] bg-white border rounded-md overflow-hidden max-h-full flex flex-col min-h-[400px]\"\n        @click.stop=\"$refs.popup?.close()\"\n  >\n    <div class=\"flex flex-col\">\n      <div class=\"p-4 flex gap-2\">\n        <div class=\"\">\n          Benachrichtigungen\n        </div>\n        <div class=\"h-6 w-6 bg-secondary-200 flex items-center justify-center text-secondary-700 rounded-md\">\n          {{locals.unreadNotificationsCount}}\n        </div>\n        \n        <div class=\"flex-1\"></div>\n\n        <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                   param-icon=\"far fa-mail-bulk\"\n                   :param-disabled=\"!locals.unreadNotificationsCount\"\n                   param-title=\"Alle gelesen markieren\"\n                   @selected=\"controller.markAllRead()\"\n        ></ae-layout>\n      </div>\n\n      <div class=\"bg-secondary-100 flex gap-2 p-4 items-center\">\n        <ae-layout v-for=\"category of locals.defaultCategories\" \n                    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    :param-text=\"category.name\"\n                    :param-count=\"category.count\"\n                    :param-primary=\"locals.selectedDefaultCategory?.identifier === category.identifier\"\n                    @selected=\"controller.selectedDefaultCategory(category)\"\n        > \n        </ae-layout>\n\n        <div class=\"my-4\"></div>\n\n        <div class=\" overflow-auto  flex-1\"> \n          <ae-layout layout-id=\"017828fa-4448-499d-bfaf-45ef6b470b43\"\n                      :param-buttons=\"locals.categories\"\n                      :param-selected-identifier=\"locals.selectedCategory?.identifier\"\n                      @selected=\"controller.selectedCategory($event)\"\n                      :param-collapsed=\"locals.categories.length >= 3\"\n          ></ae-layout>\n          <!-- <ae-layout v-for=\"category of locals.categories\"\n                      layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      :param-document-id=\"category.id\"\n                      :param-count=\"category.count\"\n                      :param-icon-right-design-document-id=\"category.id\"\n                      :param-primary=\"locals.selectedCategory?.id === category.id\"\n                      @selected=\"controller.selectedCategory(category)\"\n          >\n          </ae-layout> -->\n        </div>\n      </div>\n    </div>\n\n    <div class=\"flex flex-col p-2 overflow-auto\">\n\n                <!-- @selected=\"controller.markReadAndNavigateTo($event)\" -->\n      <ae-list  list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                :documents=\"locals.notifications\"\n                param-empty-text=\"Keine Ergebnisse gefunden.\"\n                :param-divide=\"true\"\n                param-design=\"rd:notification-card\"\n                :param-design-params=\"{ readonly: true }\"\n                :param-page-size=\"6\"\n                :param-increase-size=\"10\"\n                ref=\"list\"\n                @focus-out=\"$refs.input.focus()\"\n                @close=\"controller.close()\"\n      ></ae-list>\n    </div>\n\n    <div class=\"flex-1\"></div>\n    <div class=\"border-t p-2 flex items-center gap-1\">\n        <ae-layout layout-id=\"9fdb8db1-ffb9-4e5a-ac0a-90d73f80b167\"\n                    param-text=\"ESC\"\n        ></ae-layout>\n\n        <div class=\"text-xs text-neutral-500 mr-4\">\n          zum schließen\n        </div>\n    </div>\n  </div>\n\n</div>  </div>"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"e092d7fc-8e68-4ea0-92d5-9d535626ef0e","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-07-10T13:03:45+00:00","backedBy":null,"by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"2ad0619d-792e-40ea-9e76-f7801593f6f8","text":"rd:Comments Btn","v":"2821fd5e92ae7f8a"},"p":"2d46771e-84af-45f3-bc70-2c1793b412a9","previous":{"v":"8bceb803ced438bf"},"stamps":[],"t":1752152625119,"v":"f30407e147cb2672"},{"id":"164ae624-accb-4695-924e-de39a68c9f21","v":"e9ea31c6de69f36d","cloneOf":{"id":"4a0f8d91-6a8c-44a3-9c95-26c45bb1d54a","v":"081b08e42a5b79df","text":"Bizpin Application Layout"},"originalCloneOf":{"id":"4a0f8d91-6a8c-44a3-9c95-26c45bb1d54a","v":"081b08e42a5b79df","text":"Bizpin Application Layout"},"previous":{"v":"initial"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"eb35b87870a33035","text":"Layout"},"data":{"name":"[copy of]: Bizpin Application Layout","applies":"","template":"<template v-if=\"locals.pageDocument\"> \n\n<div class=\"_CSS-main\"\n  @ae-drill-into=\"controller.drillInto($event)\" \n  @xae-will-navigate=\"controller.checkTargetDocument($event)\"\n  v-responsive=\"(className, size) => controller.onSizeChange(className, size)\"\n  v-on=\"locals.additionalLayoutListeners\"\n  xdrop.prevent=\"controller.drop($event)\"\n  xdragover.prevent=\"controller.dragover($event)\">\n  <!-- @ae-will-navigate=\"controller.checkDrillIntoFirst($event)\" -->\n\n  <ae-design\n    v-if=\"!controller.showPrintLayout && Aeppic.Device !=='Phone' && Aeppic.Developer.remoteDeveloperMode !== 'Server'\"\n    class=\"_CSS-nav-panel bp-navigation-panel ae-light\"\n    :document-id=\"locals.companyIdOfAccount\"\n    name=\"navigation-vertical\"\n    :param-page-document=\"locals.pageDocument\" \n    ></ae-design>\n  <div v-show=\"!locals.drillActive\"  class=\"_CSS-container bp-page\" ref=\"container\">\n    <ae-layout\n      class=\"_CSS-header bp-page__header\"\n      :class=\"{ '_CSS-top-application-bar-overlay': locals.topbarAsOverlay }\"\n      layout-id=\"abaf389e-81ae-4a56-870c-f5c28fe7579f\"\n      @toggle-developer=\"$emit('toggle-developer', $event)\"\n      @show-sidebar=\"controller.showSidebar($event)\"\n      @hide-sidebar=\"controller.hideSidebar($event)\"\n      :param-navbar-open=\"locals.showNavbar\"\n      :param-page-document-id=\"locals.pageDocument.id\" \n      :param-show-print-layout=\"controller.showPrintLayout\"\n      :param-company-id=\"locals.companyIdOfAccount\"\n      :param-reload-notification-triggered=\"locals.reloadNoficationTriggered\"\n      :param-overlay=\"locals.topbarAsOverlay\"\n      ref=\"topApplicationBar\"\n      v-if=\"Aeppic.Developer.remoteDeveloperMode !== 'Server'\"\n    ></ae-layout>\n        <ae-design\n      v-if=\"!controller.showPrintLayout && !locals.hidePageToolbar && Aeppic.Developer.remoteDeveloperMode !== 'Server'\"\n      class=\"_CSS-page-toolbar bp-page__toolbar\"\n      :document=\"locals.pageDocument\"\n      name=\"page-toolbar\"\n      @toolbar=\"controller.dispatchEventChildren('body', 'toolbar', $event)\"\n      :param-page-application-id=\"locals.pageApplicationId\"\n      :param-document-changed-bus=\"locals.documentChangedBus\"\n      :param-readonly=\"controller.isPageReadonly\"\n      ></ae-design>\n\n      <div class=\"_CSS-page bp-page__body\" ref=\"mainPage\">\n        <div class=\"_CSS-loader\" :class=\"{ '_CSS-loader--hidden': !locals.spinner }\">\n          <div class=\"_CSS-loader__content\">\n          <!-- <svg height=\"60px\" width=\"60px\"  version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n viewBox=\"0 0 1401.6 1401.6\" style=\"enable-background:new 0 0 1401.6 1401.6;\" xml:space=\"preserve\" ref=\"bizpinSignet\">\n\t<g>\n\t\t<path fill=\"#63B8E8\" d=\"M399.9,408.4h409.3c0,0-68.8,88-70,89.5c-31.2,41-23.3,99.5,17.7,130.8c41,31.2,99.6,23.3,130.8-17.7\n\t\tc1.1-1.5,187.3-239.3,187.3-239.3c48.1-60,3.8-149.9-74.2-149.9H399.9c-51.5,0-93.3,41.8-93.3,93.3\n\t\tC306.6,366.6,348.4,408.4,399.9,408.4\" />\n\t\t<path fill=\"#2E3D80\" d=\"M1000.8,997.2H591.5c0,0,68.8-88,70-89.5c31.2-41,23.3-99.5-17.7-130.8c-41-31.2-99.6-23.3-130.8,17.7\n\t\tc-1.1,1.5-187.4,239.3-187.4,239.3c-43,60.9-3.4,149.9,74.2,149.9h600.9c51.5,0,93.3-41.8,93.3-93.3\n\t\tC1094.1,1039,1052.3,997.2,1000.8,997.2\" />\n\t</g>\n</svg> -->\n          <!-- <button @click=\"locals.spinner = false\">off</button> -->\n          <ae-icon class=\"fa fa-spinner-third fa-5x fa-spin\"></ae-icon>\n          </div>\n\n        </div>\n\n        <ae-design  class=\"ae-stacking-context _CSS-page-body\"\n                    :document=\"locals.pageDocument\"\n                    name=\"page\"\n                    ref=\"body\"\n                    :param-readonly=\"controller.isPageReadonly\"\n                    :param-query-params=\"params.queryParams\"\n                    :param-page-application-id=\"locals.pageApplicationId\"\n                    @show-selection-handler=\"controller.showSelectionHandler()\"\n                    @scroll.native=\"controller.onScroll($event)\"\n                    :param-company-id=\"locals.companyIdOfAccount\"\n                    @scroll-to=\"controller.scrollTo($event)\"\n                    :param-document-changed-bus=\"locals.documentChangedBus\"\n        ></ae-design>\n      </div>\n    </div>\n\n        <ae-design\n    v-if=\"!controller.showPrintLayout\"\n    class=\"_CSS-sidebar\"\n    :document-id=\"locals.companyIdOfAccount\"\n    name=\"sidebar-vertical\"\n    :param-page-document=\"locals.pageDocument\"\n    :param-open=\"locals.showSidebar\"\n    :param-tab-id=\"locals.sidebarTabId\"\n    @hide-sidebar=\"controller.hideSidebar($event)\"\n    ></ae-design>\n  <ae-layout  v-if=\"locals.showNavbar\"  v-show=\"!locals.drillActive\" layout-id=\"4a2dc072-cd8a-43d6-8cce-d4b7b0992f80\" class=\"_CSS-navbar-panel\" :param-document-id=\"params.pageDocumentId\"></ae-layout>\n\n</div>\n\n<ae-layout  layout-id=\"564e7028-6b98-49b8-ac43-50f7873930a1\"\n            :class=\"{ '_CSS-drill-into-container': locals.showDialogActive }\"\n            @activate=\"locals.showDialogActive = true\"\n            @deactive=\"locals.showDialogActive = false\"\n            ref=\"showDocumentDialog\"\n            :param-document-changed-bus=\"locals.documentChangedBus\"\n></ae-layout>\n\n<template v-if=\"locals.root && locals.root.data.globalLayouts\">\n  <ae-layout  v-for=\"(layout, index) of locals.root.data.globalLayouts\"\n              ref=\"globalLayouts\"\n              :layout-id=\"layout.id\"\n              :param-page-document-id=\"locals.pageDocument.id\"\n              :param-page-document=\"locals.pageDocument\"\n              :param-page-application-id=\"locals.pageApplicationId\"\n              @register-listener=\"controller.registerLayoutListener($event, index)\"\n  ></ae-layout>\n</template>\n\n<ae-layout  layout-id=\"e5accfd9-8d33-46e5-a4d7-69a91b5f8543\"\n            :param-document-changed-bus=\"locals.documentChangedBus\"\n></ae-layout>\n\n</template>\n\n<ae-design name=\"title\" document-id=\"root\" style=\"display:none;\" ref=\"hiddenDomElement\"></ae-design>\n\n","css":"._CSS-main {\n  display: flex;\n  flex-direction: row;\n  position: relative;\n  flex:1;\n  align-items: stretch;\n  height:100%;\n  line-height: 1.4;\n  background: var(--ae-background-100);\n  color: var(--ae-background-900);\n}\n\n@media print {\n  ._CSS-main {\n    background: white !important;\n  }\n}\n \n._CSS-app-panel {\n  position:relative;\n}\n\n._CSS-container {\n  position: relative;\n  display: flex;\n  flex-direction:column;\n  width:100%;\n  height:100%;\n  flex:1;\n  overflow: hidden;\n}\n\n._CSS-page {\n  flex:1;\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: hidden;\n\n  display: flex;\n}\n\n\n.ae-phone ._CSS-page {\n  grid-row: 2/3;\n}\n\n._CSS-navbar-panel {\n    grid-row: 1/3;\n}\n.ae-phone ._CSS-navbar-panel {\n  grid-row: 1/3;\n}\n\n._CSS-header {\n  height: 81px;\n}\n\n._CSS-page-toolbar {\n  xz-index: 1; // overlap page-body e.g. with menu popups\n  min-height: 0;\n  min-width: 0;\n}\n\n._CSS-page-body {\n  min-height: 0;\n  min-width: 0;\n\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n\n  /* display: flex; */\n  /* flex-flow: column;  */\n  height: 100%;\n  width: 100%;\n}\n\n._CSS-drill-into-container {\n  position: absolute;\n  width: 100%;\n  height:100%;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n\n  /* page-toolbar has z-index of 1 */\n  z-index: 1;\n\n  /* ae-dialog has z-index of 9998 */\n  /* z-index: 9999; */\n}\n\n._CSS-sidebar-panel {\n  max-width: 300px;\n}\n\n._CSS-top-application-bar-overlay {\n  position: absolute;\n  background: transparent !important;\n  left: 0;\n  right: 0;\n  z-index: 1;\n}\n\n._CSS-loader {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 10;\n\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  opacity: 1;\n\n  transition: opacity .2s 1s ease-in;\n}\n\n._CSS-loader:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: var(--ae-ui-background);\n\n  pointer-events: none;\n}\n\n\n._CSS-loader._CSS-loader--hidden {\n  opacity: 0;\n  pointer-events: none;\n}\n","controller":"class Controller {\n  async init() {\n    this.FORMS_CACHE = new Map()\n\n    this._onScrollHandlerProcessing = false\n    this.animation = null\n    this.addToRecentsAction = null\n\n    locals.root = null\n    locals.spinner = true\n    this.listenersToLayoutRefs = {}\n    locals.additionalLayoutListeners = {}\n\n    locals.navbarOverride = false\n    locals.showNavbar = false\n    locals.showTitle = false\n    locals.drillActive = false\n    locals.reloadNoficationTriggered = false\n    locals.showDialogActive = false\n  \n    locals.pageDocumentForm = null\n    locals.topbarAsOverlay = false\n    locals.pageDocument = null\n    locals.canEditPageDocument = false\n    locals.pageDocumentIsPrototype = false\n\n    locals.documentChangedBus = new Vue({\n      data: function() {\n        return {\n          documentChanged: false,\n        }\n      },\n      methods: {\n        changed() {\n          console.debug('.changed')\n\n          if (this.documentChanged) {\n            console.debug('Already editing document')\n          }\n\n          this.documentChanged = true\n        },\n        reset() {\n          console.debug('.reset')\n          this.documentChanged = false\n\n          // this.$emit('reset')\n        }\n      }\n    })\n\n    locals.companyIdOfAccount = ''\n\n    watchParam('pageDocumentId', (docId) => this._announceNewPageDocumentId(docId))\n    // watchParam('queryParams', {\n    //   handler: () => this._announceNewPageDocumentId(params.pageDocumentId),\n    //   deep: true\n    // })\n\n\n    const COMPANY_FORM = 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df'\n    const homePage = await Aeppic.get(Aeppic.HomePage)\n\n    if (homePage) {\n      if (homePage.f.id === COMPANY_FORM) {\n        locals.companyIdOfAccount = homePage.id\n      } else {\n        if (homePage.a_forms !== null) {\n          const companyAncestorIndex = homePage.a_forms.findIndex(formId => formId === COMPANY_FORM)\n          locals.companyIdOfAccount = homePage.a[companyAncestorIndex]\n        }\n      }\n    } else if (Aeppic.Account && Aeppic.Account.data.isAdmin) {\n      const fallbackCompany = await Aeppic.findOne(`p:root f.id:${COMPANY_FORM}`)\n      locals.companyIdOfAccount = fallbackCompany && fallbackCompany.id\n    }\n\n    locals.root = await Aeppic.get('root')\n\n    this.refreshPageFormInfo(params.pageDocumentId)\n    this._announceNewPageDocumentId(params.pageDocumentId)\n\n    if (this.showPrintLayout) {\n      await Aeppic.nextRenderPass()\n      await Aeppic.nextRenderPass()\n\n      Aeppic.setTimeout(() => {\n        packages && packages.window && packages.window.print()\n      }, 5_000)\n    } \n\n   \n\n    this._setupReloadNotification()\n\n    await this._initializeRecents()\n\n    // this.openSearch = () => $refs.topApplicationBar && $refs.topApplicationBar.$emit('openSearch')\n    // $on('openSearch', this.openSearch)\n\n    // this.onRootAeDrillHandler = (event) => this.drillInto(event)\n\n    // if ($refs.hiddenDomElement && $refs.hiddenDomElement.$root && $refs.hiddenDomElement.$root.$el) {\n    //   $refs.hiddenDomElement.$root.$el.addEventListener('ae-drill-into', this.onRootAeDrillHandler)\n    // }\n  }\n\n  async _initializeRecents() {\n    const referenceDocument = (await Aeppic.get(Aeppic.HomePage)) || Aeppic.Account\n    this.addToRecentsAction = await Aeppic.Preferences.getSettingForDocument('bizpin:recently-visited:addDocumenTorRecentlyVisitied', referenceDocument)\n    // if (Aeppic.ProfilePage && Aeppic.ProfilePage.id && Aeppic.Account && !Aeppic.Account.data.isGroupAccount) {\n    //   const documents = await Aeppic.find(`p:${Aeppic.ProfilePage.id} f.id:0a8dbc2a-384e-457b-ab48-57013109ba44`)\n    //   if (!documents.length) {\n    //     const recents = await Aeppic.new('0a8dbc2a-384e-457b-ab48-57013109ba44', Aeppic.ProfilePage.id)\n    //     Aeppic.save(recents)\n    //     this._recentDocumentsDocument = recents\n    //   } else {\n    //     // TODO: remove in the future when every user is cleaned up\n    //     if (documents.length > 1) { \n    //       for (const duplicate of documents.slice(1)) {\n    //         Aeppic.delete(duplicate)\n    //       }\n    //     }\n        \n    //     this._recentDocumentsDocument = await Aeppic.edit(documents[0])\n    //   }\n    // }\n  }\n\n  get isPageReadonly() {\n    if (this.showPrintLayout) {\n      return true\n    }\n\n    return !locals.canEditPageDocument\n  }\n\n  async onScroll(event) {\n    if (this._onScrollHandlerProcessing) {\n      return\n    }\n\n    this._onScrollHandlerProcessing = true\n\n    await Aeppic.waitForNextAnimationFrame()\n\n    const y = event.target.scrollTop\n    const x = event.target.scrollLeft\n\n    this.persistScrollPosition(event)\n\n    this._onScrollHandlerProcessing = false\n  }\n\n async doubleRequestAnimationFrame() {\n    // Let browser re-render DOM by executing a doubleRequestAnimationFrame\n    // See: https://github.com/vuejs/vue/issues/9200\n    // See: https://bugs.chromium.org/p/chromium/issues/detail?id=675795\n\n    await Aeppic.waitForNextAnimationFrame()\n    await Aeppic.waitForNextAnimationFrame()\n  }\n\n  async _announceNewPageDocumentId(docId) {\n    // NOTE: this led to flickering on pageDocument change\n    // locals.pageDocument = null\n    // locals.pageDocumentForm = null\n    // locals.canEditPageDocument = false\n\n    console.log('_announceNewPageDocumentId')\n    await this.loadSpinner()\n\n    const targetDocument = this._getAllowedTargetDocument(await Aeppic.get(docId))\n\n    const [ canEditPageDocument, document ] = await Promise.all([\n      Aeppic.canEdit(targetDocument),\n      Aeppic.get(targetDocument)\n    ])\n\n    console.log('=> ',canEditPageDocument)\n\n    if (Aeppic.Account && Aeppic.Account.data.isGroupAccount === true) {\n      locals.canEditPageDocument = false\n    } else {\n      locals.canEditPageDocument = canEditPageDocument\n    }\n\n    if (!document) {\n      console.warn('404: could not get pageDocumentId to display. Redirecting to HomePage')\n      Aeppic.navigateTo(locals.companyIdOfAccount)\n      return\n    }\n\n    await this.refreshPageFormInfo(document)\n\n    locals.pageDocument = document\n    this._updateRecentDocuments(document) \n\n    if (locals.pageDocument && locals.pageDocument.data.name) {\n      $refs.hiddenDomElement.$el.ownerDocument.title = locals.pageDocument.data.name + ' | bizpin' || 'bizpin'\n    } else {\n      $refs.hiddenDomElement.$el.ownerDocument.title = 'bizpin'\n    }\n\n    this.unloadSpinner()\n    await this.restoreScrollposition(document)\n  }\n  \n  async loadSpinner(event) {\n    console.log('and on')\n    // this.startAnimation()\n\n    locals.spinner = true\n\n    // await this.doubleRequestAnimationFrame()\n    // await Aeppic.waitForNextAnimationFrame\n  }\n\n  async unloadSpinner() {\n    console.log('and off: starting')\n    // this.stopAnimation()\n\n    await Aeppic.nextRenderPass()\n\n    // await Aeppic.waitForNextAnimationFrame()\n    // console.log('and off: 1')\n    // await Aeppic.waitForNextAnimationFrame()\n    // console.log('and off: 2')\n    locals.spinner = false\n  }\n\n  startAnimation() {\n    console.log(this.animation)\n    this.animation.play()\n  }\n\n  stopAnimation() {\n    this.animation.pause()\n  }\n \n  async setupAnimation() {\n    await Aeppic.nextRenderPass()\n\n    this.animation = Aeppic.Anime({\n      targets: [$refs.bizpinSignet],\n      opacity: [1, 0, 1],\n      duration: 1000,\n      easing: 'easeInSine',\n      loop: true,\n      autoplay: false,\n    })\n  }\n\n  _setupReloadNotification() {\n      Aeppic.on('server:changed', () => {\n        console.log('changes:server-changed')\n        this._showReloadNotification()\n      })\n\n      this.missedChangesTimeoutId = null\n\n      Aeppic.on('changes:missed', () => {\n        console.log('changes:missed')\n        if (this.missedChangesTimeoutId) {\n          clearTimeout(this.missedChangesTimeoutId)\n        }\n\n        this.missedChangesTimeoutId = setTimeout(() => {\n          this._showReloadNotification()\n        }, 5000)\n      })\n\n      Aeppic.on('changes:missed-found', () => {\n        console.log('changes:missed-found')\n        if (this.missedChangesTimeoutId) {\n          clearTimeout(this.missedChangesTimeoutId)\n        }\n      })\n  }\n\n  _showReloadNotification() {\n    console.log('showReloadNotifation')\n      locals.reloadNoficationTriggered = true\n  }\n\n  get showPrintLayout() {\n    return params.queryParams && params.queryParams && 'print' in params.queryParams\n  }\n\n  async dragover(event) {\n    event.dataTransfer.dropEffect = \"none\"\n  }\n\n  async drop(event) {\n  }\n\n   async refreshPageFormInfo(document) {\n    const pageDoc = (document && typeof document === 'string') ? await Aeppic.get(params.pageDocumentId) : document\n\n    if (pageDoc) {\n      const formId = pageDoc.f.id\n      if (this.FORMS_CACHE.has(formId)) {\n        locals.pageDocumentForm = this.FORMS_CACHE.get(formId)\n      } else {\n        const form = await Aeppic.getFormForDocument(pageDoc)\n        this.FORMS_CACHE.set(formId, form)\n        locals.pageDocumentForm = form\n      }\n      locals.pageApplicationId = this._getCurrentApplicationId(locals.pageDocumentForm)\n\n      if (Aeppic.Device === 'Desktop' && locals.pageDocumentForm.data.tags) {\n        locals.topbarAsOverlay = locals.pageDocumentForm.data.tags.includes('full-page')\n      } else {\n        locals.topbarAsOverlay = false\n      }\n\n      locals.pageDocumentIsPrototype = locals.pageDocumentForm.data.tags && locals.pageDocumentForm.data.tags.includes('prototype')\n    } else {\n      locals.pageApplicationId = null\n      locals.pageDocumentForm = null\n      locals.topbarAsOverlay = false\n      locals.pageDocumentIsPrototype = false\n    }\n  }\n  \n  async _getCurrentApplicationId(formDocument) {\n    if (!formDocument || !formDocument.document) {\n      return null\n    }\n\n    const appIndex = formDocument.document.a_forms.findIndex(a_form => a_form === 'application-form')\n    return formDocument.document.a[appIndex]\n  }\n\n  async drillInto(event) {\n    event.stopPropagation && event.stopPropagation()\n    event.preventDefault && event.preventDefault()\n\n    const document = await Aeppic.get(event.detail.targetDocument)\n\n    const isStructuralDocument = document.a_depth <= 1 || document.f.id === 'repository-folder-form' || document.f.id === 'folder'\n    const preferDialog = event.detail.mode === 'dialog'\n\n    if (!preferDialog && isStructuralDocument) {\n      Aeppic.navigateTo(document)\n      return\n    }\n\n    const formDocument = await Aeppic.get(document.f.id)\n    const applicationFormIndex = formDocument.a_forms.findIndex(a_form => a_form === 'application-form')\n    const application = await Aeppic.get(formDocument.a[applicationFormIndex])\n\n    let showInDialog = preferDialog\n\n    if (!showInDialog && application && application.f.id === 'application-form' && 'dialogForms' in application.data) {\n      showInDialog = !!application.data.dialogForms.find(ref => ref.id === formDocument.id)\n    }\n\n    if (showInDialog) {\n      const drillEventWithActualDocument = { ...event.detail, ... { targetDocument: document } }\n\n      $refs.showDocumentDialog.$emit('show', drillEventWithActualDocument)\n      return\n    }\n\n    Aeppic.navigateTo(document)\n  }\n\n  _getAllowedTargetDocument(targetDocument) {\n    const targetIsComment = targetDocument?.f.id === 'cf155969-ede1-43a4-9b10-3a697b19db91'\n\n    if (targetIsComment && !(Aeppic.Account?.id === targetDocument.created.by)) {\n      return targetDocument.p\n    }\n\n    return targetDocument\n  }\n\n    \n\n  checkDrillIntoFirst(event) {\n    if (!Aeppic.Account || (Aeppic.Account && Aeppic.Account.id !== '870fac1f-b0d7-4925-b191-a43166960419')) {\n      return\n    }\n\n    // if (!locals.drillActive || !$refs.drillIntoManager) {\n    //   return\n    // }\n\n    event.stopPropagation && event.stopPropagation()\n    event.preventDefault && event.preventDefault()\n\n    $refs.drillIntoManager.$emit('will-navigate', event)\n  }\n\n  // pageScrolled($event) {\n  //   // console.log(event)\n\n  //   // if ($refs.mainPage.scrollTop > 16)\n  //   locals.showTitle = $refs.mainPage.scrollTop > 16\n  // }\n\n  openSearchDialog() {\n    if (!$refs || !$refs.searchDialog) {\n      return\n    }\n    $refs.searchDialog.open({ target: 'body' })\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) { \n    if (!$refs[refName] || !$refs[refName].$el || !$refs[refName].$el.children) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n  onSizeChange(className, size) {\n    /* if (className === 'ae-large') {\n      locals.showNavbar = true\n      locals.navbarOverride = false\n    } else if (!locals.navbarOverride) {\n      locals.showNavbar = false\n    }*/\n    if (!locals.navbarOverride) {\n      locals.showNavbar = false\n    } else {\n      locals.showNavbar = true\n    }\n  }\n\n  toggleNavbar() {\n    if (!$refs.container.classList.contains('ae-large')) {    \n      locals.navbarOverride = true\n      locals.showNavbar = !locals.showNavbar\n    }\n  }\n\n  showSelectionHandler() {\n    if (!Aeppic.Account || Aeppic.Account.data.isGroupAccount) {\n      return\n    }\n\n    $refs.selectionHandler.$emit('show')\n  }\n\n  async _updateRecentDocuments(document) {\n    if (!this.addToRecentsAction) {\n      return\n    }\n\n    try {\n      const addToRecents = (await Aeppic.Actions.run([this.addToRecentsAction], { document }))[0].value\n      console.log('!!!', addToRecents)\n      if (!addToRecents) {\n        return\n      }\n\n      const LsKey = 'bizpin:recently-visited'\n      \n      let recents = JSON.parse(Aeppic.LocalStorage.getItem(LsKey)) || []\n      const existingIndex = recents.findIndex(doc => doc.id === document.id)\n      if (existingIndex !== -1) {\n        recents.splice(existingIndex, 1)\n      }\n      recents.push({ id: document.id, v: document.v, text: document.data.name })\n      if (recents.length > 9) {\n        recents = recents.slice(-10)\n      }\n      Aeppic.LocalStorage.setItem(LsKey, JSON.stringify(recents))\n\n      // Because LocalStorage cannot be watched, emit an event instead\n      $refs.hiddenDomElement.$root.$el.dispatchEvent(new CustomEvent(`local-storage:${LsKey}`))\n    } catch (e) {\n      console.error('Could not add to recently-visited', e)\n    }  \n\n    // // TODO: improve this by not directly making a change. Think of it more like a localStorage thing and maybe inform the server every minute\n    // if (!this._recentDocumentsDocument || !Aeppic.Account || Aeppic.Account.data.isGroupAccount) {\n    //   return\n    // }\n\n    // this._recentDocumentsDocument.removeReference('documents', document)\n\n    // if (this._recentDocumentsDocument.data.documents.length > 9) {\n    //   this._recentDocumentsDocument.data.documents = this._recentDocumentsDocument.data.documents.slice(-10)\n    // }\n\n    // this._recentDocumentsDocument.addReference('documents', document)\n\n    // Aeppic.save(this._recentDocumentsDocument)\n  }\n\n  persistScrollPosition(event) {\n    if (!event || !event.target || !locals.pageDocument) {\n      return\n    }\n\n    const y = event.target.scrollTop\n    const x = event.target.scrollLeft\n\n    Aeppic.SessionStorage.setValue(this._generateScrollpositionStoragePrefix(locals.pageDocument), { x, y })\n  }\n\n  async restoreScrollposition(document) {\n    const isHistoricNavigation = Aeppic.Root.params && Aeppic.Root.params.history && Aeppic.Root.params.history.historic\n\n    if (!isHistoricNavigation) {\n      return\n    }\n\n    const oldScrollPosition = Aeppic.SessionStorage.getValue(this._generateScrollpositionStoragePrefix(document))\n\n    if (!oldScrollPosition) {\n      return\n    }\n\n    // FIXME: this will break once some designs take longer to render\n    // render fields with additional designs\n    for (let i = 0; i < 25; i += 1) {\n      await Aeppic.nextRenderPass() \n    }\n\n    if (!$refs.body || !$refs.body.$el) {\n      return\n    }\n\n    const { x, y } = oldScrollPosition\n\n\n    if (typeof $refs.body.$el.scrollTo !== 'function') {\n      return\n    }\n\n    // FIXME: don't do this! \n    $refs.body.$el.scrollTo(x, y)\n  }\n\n  scrollTo(scrollToOptions) {\n    if (!scrollToOptions) {\n      return\n    }\n\n    if (typeof $refs.body.$el.scrollTo !== 'function') {\n      return\n    }\n\n    // FIXME: don't do this! \n    $refs.body.$el.scrollTo(scrollToOptions)\n  }\n\n  _generateScrollpositionStoragePrefix(document) {\n    const timestamp = Aeppic.Root.params.history.timestamp\n\n    return `bp-pref__scrollPosition@document=${document.id}@form=${document.f.id}@time=${timestamp}`\n  }\n\n  registerLayoutListener(eventName, refIndex) {\n    if (!this.listenersToLayoutRefs[eventName]) {\n      this.listenersToLayoutRefs[eventName] = []\n    }\n\n    if (!this.listenersToLayoutRefs[eventName].find(existingIndex => existingIndex === refIndex)) {\n      this.listenersToLayoutRefs[eventName].push(refIndex)\n    }\n\n    if (!locals.additionalLayoutListeners[eventName]) {\n      locals.additionalLayoutListeners[eventName] = (event) => this.notifyLayoutListeners(eventName, event)\n    }\n  }\n\n  notifyLayoutListeners(eventName, nativeCustomEvent) {\n    for(const refIndex of this.listenersToLayoutRefs[eventName]) {\n      $refs.globalLayouts && $refs.globalLayouts[refIndex] && $refs.globalLayouts[refIndex].$emit(eventName, nativeCustomEvent.detail)\n    }\n  }\n\n  showSidebar(tabId) {\n    if ($refs.container.classList.contains('ae-large')) {    \n      return\n    }\n\n    locals.sidebarTabId = tabId\n    locals.showSidebar = true\n  }\n\n  hideSidebar(tabId) {\n    // if ($refs.container.classList.contains('ae-large')) {    \n    //   return\n    // }\n  \n    // if (tabId === locals.sidebarTabId) {\n      locals.showSidebar = false\n      locals.sidebarTabId = ''\n    // }\n  }\n}\n","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"d4ce6dec568c3dc1","text":"Window"}]},"locks":[],"created":{"at":"2022-03-18T15:32:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-03-21T12:57:30+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1647867450409,"ct":1647617552774,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"42afb56a-734f-48c2-a3b7-8795f4da579a","v":"initial","cloneOf":{"id":"5913cb1e-9979-4eb7-84e8-488cdd658cbb","v":"dab7a03b2b952d6b","text":"Bizpin Root Layout"},"originalCloneOf":{"id":"5913cb1e-9979-4eb7-84e8-488cdd658cbb","v":"dab7a03b2b952d6b","text":"Bizpin Root Layout"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"[copy of]: Bizpin Root Layout","applies":" ","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"f769dafadd21766c","text":"Window"}],"template":"      <!-- @keydown.ctrl.50.exact.stop.prevent=\"Aeppic.Auth.loggedIn ? locals.devMode = !locals.devMode : null\" -->\n<div   class=\"_CSS-root\"\n      tabindex=\"0\" \n      v-if=\"!controller.showPrintLayout\"\n      @drop.prevent\n      @dragover.prevent\n      :class=\"['ae-expand-region', 'ae-theme', locals.theme, { 'ae-phone': Aeppic.Device === 'Phone' }]\"\n    >\n  <ae-layout layout-id=\"b956d062-ba70-482d-b404-da5cec71afc6\"></ae-layout>\n  <ae-layout layout-id=\"8ad94a11-3afc-4eff-9d5c-99b7c69d4110\"></ae-layout>\n  <div ref=\"searchDialogAnchor\"></div>\n  \n  <!-- main page, no developer -->\n  <ae-layout\n    v-if=\"!locals.devMode\"\n    class=\"_CSS-app ae-dialog-region ae-stacking-context ae-app\"\n    :class=\"{ '_CSS-app--phone': Aeppic.Device === 'Phone' }\"\n    ref=\"app\"\n    tabindex=\"1\"\n    :layout-id=\"locals.layoutId\"\n    :param-page-document-id=\"params.pageDocumentId || Aeppic.HomePage.id\"\n    :param-query-params=\"params.queryParams\"\n    @toggle-developer=\"controller.toggleDeveloperMode($event)\"\n  ></ae-layout>\n\t<ae-splitter v-else class=\"_CSS-dev-mode\" :limit-expand=\"false\">\n    <!-- main page with developer -->\n    <ae-layout\n      slot=\"left-pane\"\n      tabindex=\"2\"\n      class=\"_CSS-app ae-dialog-region ae-stacking-context ae-app ae-expand-region\"\n      ref=\"app\"\n      :layout-id=\"locals.layoutId\"\n      :param-page-document-id=\"params.pageDocumentId || Aeppic.HomePage.id\"\n      :param-query-params=\"params.queryParams\"\n      @toggle-developer=\"controller.toggleDeveloperMode($event)\"\n    ></ae-layout>\n    <ae-design v-if=\"locals.newDeveloper\" slot=\"right-pane\" class=\"_CSS-dev-panel\" document-id=\"0b3240e3-b87f-4fe5-8851-6968ef35cf53\" name=\"page\" :watch-layout-revisions=\"false\" :param-info=\"locals.developerInfo\" @toggle-app-theme=\"controller.toggleTheme()\"></ae-design>\n\t\t<ae-layout v-else slot=\"right-pane\" class=\"_CSS-dev-panel\" layout-id=\"956d0d01-3f82-4f11-9569-3f292044da8e\" :watch-layout-revisions=\"false\"></ae-layout>\n\t</ae-splitter>\n</div>\n<div  class=\"ae-block-1-root\"\n      v-if=\"controller.showPrintLayout\"\n      :class=\"['ae-expand-region', 'ae-theme', locals.theme, { 'ae-phone': Aeppic.Device === 'Phone' }]\"\n      tabindex=\"0\">\n  <ae-layout  \n              :layout-id=\"controller.printLayoutId\"\n              :param-readonly=\"true\"\n              class=\"_CSS-app ae-dialog-region ae-stacking-context ae-app\"\n              :class=\"{ '_CSS-app--phone': Aeppic.Device === 'Phone' }\"\n              ref=\"app\"\n              tabindex=\"1\"\n              :param-page-document-id=\"params.pageDocumentId || Aeppic.HomePage.id\"\n              :param-query-params=\"params.queryParams\"\n  ></ae-layout>\n</div>\n\n<ae-popup ref=\"searchDialog\" popup-attachment=\"top center\" base-attachment=\"top center\" popup-class=\"_CSS-popup\">\n  <ae-layout\n    slot=\"popup\"\n    @keydown.esc.capture.native=\"$refs.searchDialog && $refs.searchDialog.close()\"\n    layout-id=\"9c604893-1a34-490a-b633-62b5064784cd\"\n    :params=\"{ positionSearchDialog: () => $refs.searchDialog.position() }\"\n    ></ae-layout>\n</ae-popup>\n\n<ae-layout layout-id=\"de0e49dc-2e18-474a-b1cb-6aa548602d16\"></ae-layout>","css":"/* html {\n  font-size: 1.25rem;\n} */\n\npre {\n  white-space: pre-wrap;\n}\n\n/*\n@media all and (min-width: 50em) {\n  html {\n    font-size: 1rem;\n  }\n}*/\n\n._CSS {\n  width:100%;\n  height:100%;\n}\n\n._CSS-root {\n  background: var(--ae-background-100);\n  flex-direction:column;\n  width:100%;\n  height:100%;\n}\n \n._CSS-app {\n  width:100%;\n  height:100%;\n}\n\n\n._CSS-dev-mode {\n  width:100%;\n  height:100%;\n}\n\n._CSS-app-panel {\n  position:relative;\n}\n\n._CSS-dev-panel {\n  position:relative;\n  color:black;\n  background:white;\n  width:100%;\n  height:100%;\n  /*z-index:10001; */ /* just above the element-highlight */\n}\n\n","controller":"class Controller {\n  async init() {\n    this.APPLICATION_LAYOUT_ID = '4a0f8d91-6a8c-44a3-9c95-26c45bb1d54a'\n    this.LOGIN_LAYOUT_ID = 'e4c9e20a-a42d-4951-9121-c9ee191f1882'\n    this.PASSWORD_RESET_ROOT_LAYOUT_ID = '242a2262-352e-4df1-a792-253ce8b11f22'\n    this.PASSWORD_RESET_LAYOUT_ID = '5cc2dfa4-9dbd-4b7a-a624-9b137eb22093'\n\n    locals.devMode = false\n    locals.newDeveloper = true\n    locals.sidebarOverride = false\n    locals.showSidebar = false\n    locals.theme = 'ae-light'\n\n    locals.serviceWorker = true\n\n    locals.hideDevbar = await Aeppic.Preferences.getSetting('aeppic:developer:hideDevbarInPreview')\n\n\n    this.loadOrUnloadPrintStylesheet = () => {\n      if (locals.layoutId !== this.LOGIN_LAYOUT_ID && this.showPrintLayout) {\n        console.log('loading print stylesheet')\n        Aeppic.loadStylesheet('84f5c137-b17d-42ad-bb4f-2f4a8319ce80')\n      } else {\n        console.log('removing print stylesheet')\n        Aeppic.unloadStylesheet('84f5c137-b17d-42ad-bb4f-2f4a8319ce80')\n      }\n    }\n\n    this.refreshLogin = () => {\n      console.log('refreshing login')\n\n      if (params.layoutId === this.PASSWORD_RESET_ROOT_LAYOUT_ID) {\n        locals.layoutId = this.PASSWORD_RESET_LAYOUT_ID\n      } else if (Aeppic.Auth.loggedIn || Aeppic.Auth.groupAccountId) {\n        locals.layoutId = this.APPLICATION_LAYOUT_ID\n      } else {\n        locals.layoutId = this.LOGIN_LAYOUT_ID\n      }\n\n      this.loadOrUnloadPrintStylesheet()\n    }\n\n    this.refreshLogin()\n\n    Aeppic.on('login', this.refreshLogin)\n    Aeppic.on('logout', this.refreshLogin)\n\n    watchParam('params', () => this.loadOrUnloadPrintStylesheet(), { immediate: true })\n\n    this._setupKeydownListener()\n    if (this.tailwindSupported) {\n      this._configureTailwind()\n    }\n  }\n\n  get tailwindSupported() {\n    return (typeof tailwind !== 'unknown')\n  }\n\n  _configureTailwind() {\n    tailwind.config = {\n      darkMode: 'class',\n      theme: {\n        extend: {\n          colors: {\n            'action': '#929eb2',\n            'accent': '#63748e',\n            'theme': { /* copy of default slate */\n              50: '#f8fafc',\n              100: '#f1f5f9',\n              200: '#e2e8f0',\n              300: '#cbd5e1',\n              400: '#94a3b8',\n              500: '#64748b',\n              600: '#475569',\n              700: '#334155',\n              800: '#1e293b',\n              900: '#0f172a',\n            },\n            'error': '#f43f5e',\n            'success': '#4ade80',\n          },\n          textColor: {\n            'action': '#ffffff'\n          }\n        },\n      },\n    }\n  }\n\n  destroy() {\n    Aeppic.off('login', this.refreshLogin)\n    Aeppic.off('logout', this.refreshLogin)\n\n    this._teardownKeydownListener()\n  }\n\n  _setupKeydownListener() {\n    if (packages.window) {\n      this._keydownHandler = (event) => {\n        if (event.ctrlKey && event.key) {\n          let handled = true\n \n          if (event.key === 'q') {\n            this.openSearch()\n          } else if (event.key === '2') {\n            this.toggleDeveloperMode()\n          } else if (event.key === '3') {\n            this.toggleDeveloperMode({oldMode:true})\n          } else if (event.key === '4') {\n            this.toggleDeveloperMode({client:true})\n          } else if (event.key === '5') {\n            this.toggleDeveloperMode({server:true})\n          } else if (event.key === 'p') {\n            this.openDeveloperSearch()\n          } else {\n            handled = false\n          }\n\n          if (handled) {\n            event.preventDefault()\n            event.stopPropagation()\n          }\n        }\n      }\n\n      packages.window.addEventListener('keydown', this._keydownHandler)\n    }\n  }\n\n  _teardownKeydownListener() {\n    if (packages.window) {\n      packages.window.removeEventListener('keydown', this._keydownHandler)\n    } \n  }\n\n  toggleDeveloperMode(options) {\n    if (!Aeppic.Account || (!Aeppic.Account.data.allowDevMode && !Aeppic.Account.data.isAdmin)) {\n      return\n    }\n\n    if(options && options.client) {\n      if(Aeppic.Developer.remoteDeveloperMode === 'Client') {\n        this.endRemoteDeveloper()\n        return\n      }\n      console.log('starting remote developer client session...')\n      Aeppic.Developer.enableRemoteDeveloper(Aeppic.Account.id, 'Client')\n      locals.devMode = false\n    }\n    else if(options && options.server) {\n      if(Aeppic.Developer.remoteDeveloperMode === 'Server') {\n        this.endRemoteDeveloper()\n        Aeppic.navigateHome()\n        return\n      }\n      console.log('starting remote developer server session')\n      Aeppic.Developer.enableRemoteDeveloper(Aeppic.Account.id, 'Server')\n      locals.devMode = false\n      Aeppic.navigateTo('0b3240e3-b87f-4fe5-8851-6968ef35cf53')\n    }\n    else {\n    locals.devMode = !locals.devMode\n    locals.newDeveloper = !(options && options.oldMode)\n  }\n}\n\n  endRemoteDeveloper() {\n    Aeppic.Developer.disableRemoteDeveloper()\n  }\n\n  openDeveloperSearch() {\n    if (!$refs || !$refs.searchDialog || (!locals.devMode && Aeppic.Developer.remoteDeveloperMode === 'None')) {\n      return\n    }\n    $refs.searchDialog.show({ target: $refs.searchDialogAnchor })\n  }\n\n  closeDeveloperSearch() {\n    if (locals.devMode && $refs.searchDialog) {\n      $refs.searchDialog.close()\n    }\n  }\n\n  openSearch() {\n    if (!$refs.app) {\n      return\n    }\n\n    $refs.app.$emit('openSearch')\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) { \n    if (!$refs[refName] || !$refs[refName].$el) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n  onSizeChange() {\n    if ($refs.app) {\n      if ($refs.app.classList.contains('ae-large')) {\n        locals.showSidebar = true\n        locals.sidebarOverride = false\n      } else {\n        if (!locals.sidebarOverride) {\n          locals.showSidebar = false\n        }\n      }\n    }\n  }\n\n  get showPrintLayout() {\n    return params.queryParams && params.queryParams && 'print' in params.queryParams\n  }\n\n  get printLayoutId() {\n    if (params.queryParams && params.queryParams.printLayoutId) {\n      return params.queryParams.printLayoutId\n    }\n\n    return locals.layoutId\n  }\n\n  toggleTheme() {\n    locals.theme = (locals.theme === 'ae-light' ? 'ae-dark' : 'ae-light');\n  }\n\n  setupServiceWorker() {\n    locals.serviceWorker = true\n  }\n}"},"locks":[],"created":{"at":"2022-03-18T15:19:49+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2022-03-18T15:19:49+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1647616789656,"ct":1647616789656,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"b1d6a227-ad65-464a-9ab3-a4250464938c","v":"e7b187fbd794611e","previous":{"v":"0712c68a7f1f77c4"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"[DEPRECATED] Document Dialog with Toolbar and Page","applies":"","packages":[],"template":"<ae-dialog ref=\"dialog\" :backdrop-close=\"false\">\n  <div slot=\"header\"\n  class=\"_CSS-dialog__header\"\n  slot-scope=\"scope\">\n\n  <ae-design\n    name=\"title\"\n    :document=\"locals.document\">\n  </ae-design>\n    <button class=\"ae-button\" @click=\"scope.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div slot=\"body\" style=\"margin: 0;\" :key=\"'_CSS-dialog__body--' + ($refs.dialog && $refs.dialog.isOpen)\">\n    <ae-design name=\"page-toolbar\" :document=\"locals.document\" @toolbar=\"controller.toolbarEvent($event)\"></ae-design>\n    <ae-form v-if=\"locals.edit\" :document=\"locals.document\" :auto-save=\"params.autoSave\" ref=\"form\"></ae-form>\n    <ae-design v-else :name=\"params.design || 'page'\" :document=\"locals.document\" :param-readonly=\"true\"></ae-design>\n    <!-- <ae-layout\n      v-if=\"params.document && locals.documentForm\"\n      :param-document=\"params.document\"\n      :param-form=\"locals.documentForm\"\n      :param-fields-to-display=\"params.fieldsToDisplay\"\n      :param-field-conditions=\"locals.documentForm.evaluateConditions(params.document.data)\"\n      ></ae-layout> -->\n  </div>\n</ae-dialog> ","css":"._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  overflow: hidden;\n}\n\n._CSS-toolbar {\n  background: var(--ae-ui-background);\n}","controller":"class Controller {\n  async init() {\n    console.warn('[DEPRECATED]: do not use this layout anymore')\n\n    locals.edit = false\n    locals.document = null\n\n    $on('show', (event) => this.show(event))\n    $on('close', (event) => this.close(event))\n\n    this.show = async (eventData) => {\n      locals.document = await this.getDocument()\n      $refs.dialog.show(eventData)\n    }\n    \n    this.close = () => $refs.dialog.close()\n  }\n\n  toolbarEvent(eventType) {\n    if (eventType === 'edit') {\n      locals.edit = true\n      return\n    }\n\n    if (eventType === 'save') {\n      locals.edit = false\n      $refs.form.save()\n      return\n    }\n\n    if (eventType === 'reset') {\n      locals.edit = false\n      $refs.form.resetEdits()\n      return\n    }\n  }\n\n  async getDocument() {\n    if (params.document) {\n      return params.document\n    } \n\n    if (params.documentId) {\n      return Aeppic.get(params.documentId)\n    }\n    \n    return null\n  }\n}"},"locks":[],"created":{"at":"2018-10-12T12:14:22+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-02-03T16:35:38+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1612370138585,"ct":1539346462895,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"7c183f98-b70a-4f44-aae1-e8bf9cbfbaaf","v":"70a3f01d81bc352c","p":"177b1d7c-255c-4d16-b367-e9622b4db575","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"[dev] All Dialogs","applies":"","template":"<div class=\"_CSS-dialog\" v-for=\"dialog of locals.dialogs\">\n  <span>{{dialog.id}}</span>\n  <span>{{dialog.data.name}}</span>\n  <span>{{dialog.data.layout}}</span>\n</div>","css":"","controller":"async init() {\n  locals.dialogs = await Aeppic.find(`f.id:dialog-form`, { size: 9999 })\n}","packages":[]},"locks":[],"created":{"at":"2021-12-16T09:16:09+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-12-16T09:19:59+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719319447723,"ct":1719319447723,"a_depth":2,"a":["system","177b1d7c-255c-4d16-b367-e9622b4db575"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"8f488c7d71749ea7","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"}},"meta":{"modified":{"at":"2024-06-25T14:44:07+02:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"id":"7af614d2-313f-4793-8d8d-4ad8507c4a0d","v":"9e853c597ebbecb1","cloneOf":{"id":"378d9732-0ca5-4393-9176-d1db765283da","v":"67d6cba6bf53a0e3","text":"[Shared Layout] Foto Upload"},"originalCloneOf":{"id":"378d9732-0ca5-4393-9176-d1db765283da","v":"67d6cba6bf53a0e3","text":"[Shared Layout] Foto Upload"},"previous":{"v":"fb6752e31c90560b"},"p":"672123ff-a0df-498a-ba54-4a7c13ea2fb9","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"[Shared Layout] Dateien Download & Upload","applies":"","packages":[],"template":"<template v-if=\"locals.targetFolder\">\n  <h1 style=\"word-break: break-all;\"><ae-design name=\"title\" :document=\"locals.targetFolder\" style=\"display:inline-flex;\"></ae-design></h1>\n  <!-- <div v-if=\"locals.targetFolder.data.beschreibung.trim().length\" class=\"bp-card bp-card--bordered _CSS-explainer\">{{locals.targetFolder.data.beschreibung}}</div> -->\n\n  <div class=\"_CSS-explainer bp-card bp-card--bordered\">Hier finden Sie bereits hochgeladene Dateien.\n  </div>\n\n  <ae-list list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n          :root-document-id=\"locals.targetFolder.id\"\n          query-id=\"71d5633a-9dbd-4c96-b6e0-1c6ffc5ef0f1\"\n          filter=\"f.id:6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2\"\n          :params=\"{ readonly: true, noRemove: true }\"\n          @selected=\"controller.showDocument($event)\"\n  ></ae-list>\n\n  <div style=\"margin-top:5rem;\"></div>\n\n  <div class=\"_CSS-explainer bp-card bp-card--bordered\">Laden Sie hier Dateien hoch. Diese werden automatisch gespeichert.\nNach dem Hochladen können Sie die Dateien bis zum Beenden der Sitzung wieder löschen.\n(Die Sitzung wird automatisch mit dem Schließen der Seite beendet)\n  </div>\n\n  <ae-layout  layout-id=\"f5a5c2a0-bf9c-4b44-b05b-8e545156df10\"\n              :param-document=\"locals.targetFolder\"\n              :param-show-ui=\"true\"\n              param-file-form-id=\"6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2\"\n              param-file-form-field=\"datei\"\n              param-file-name-to-field=\"name\"\n              :param-save-new-documents=\"true\"\n              ref=\"dropHandler\"\n              @added=\"controller.uploadedDocuments($event)\"\n  ></ae-layout> \n\n\n  <div v-if=\"locals.uploads.length\">\n    <h3>Hochgeladene Dateien</h3>\n    <ae-list list-id=\"0069cfac-81c9-4fa8-ba34-f6f5f0e7bf7b\"\n              :documents=\"locals.uploads\"\n              :params=\"{ design: 'attachment-card', xreadonly: true, minColumnWidth: '10rem', maxColumnWidth: '1fr'}\"\n              @remove=\"controller.deleteUpload($event)\"\n    ></ae-list>\n\n    <button class=\"ae-button ae-button--primary\" :disabled=\"Aeppic.Uploads.isUploading\" @click.stop=\"Aeppic.reload()\">\n      Sitzung beenden\n    </button>\n  </div>\n  \n\n  <!-- Allow this site to be added as PWA -->\n  <ae-layout layout-id=\"de0e49dc-2e18-474a-b1cb-6aa548602d16\"></ae-layout>\n  <ae-layout layout-id=\"3eb256f4-2b7e-49c3-b299-55475f419f59\"\n            :param-page-document=\"locals.targetFolder\"\n  ></ae-layout>\n\n  <ae-layout\n    ref=\"dialog\"\n    layout-id=\"bbd6d99f-571d-422f-a2bc-15d3f8ecfae8\"\n    :param-file-name=\"locals.detailsDocument?.data.datei.name\"\n    param-field-name=\"datei\"\n    :param-document=\"locals.detailsDocument\"\n  ></ae-layout>\n</template>\n","css":"._CSS-explainer {\n  margin: var(--ae-space-3) 0;\n  white-space: pre-line;\n}","controller":"class Controller {\n  async init() {\n    locals.uploads = []\n    locals.targetFolder = null\n    locals.targetFolder = await Aeppic.get(params.pageDocumentId)\n  }\n\n  async uploadedDocuments(event) {\n    const documents = await Aeppic.getAll(event.documentIds)\n    locals.uploads.push(...documents)\n  }\n\n  async deleteUpload(document) {\n    const indexOfDocumentToDelete = locals.uploads.findIndex(d => d.id === document.id)\n\n    if (indexOfDocumentToDelete !== -1) {\n      Aeppic.delete(document)\n      locals.uploads.splice(indexOfDocumentToDelete, 1)\n    }\n  }\n\nasync showDocument(doc) {\n  locals.detailsDocument = doc\n\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n\n  $refs.dialog.$emit('show')\n  }\n}"},"locks":[],"created":{"at":"2023-12-12T14:14:20+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-12-12T15:14:23+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1702394063852,"ct":1702390460538,"a_depth":3,"a":["apps","3d43a3f5-fea4-488d-9fc1-9dee5e694623","672123ff-a0df-498a-ba54-4a7c13ea2fb9"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"378d9732-0ca5-4393-9176-d1db765283da","v":"d4af4d5bedf0e053","previous":{"v":"f0835ed1dce4f6a5"},"p":"672123ff-a0df-498a-ba54-4a7c13ea2fb9","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"[Shared Layout] Foto Upload","applies":"","packages":[],"template":"<template v-if=\"locals.targetFolder\">\n  <h1 style=\"word-break: break-all;\"><ae-design name=\"title\" :document=\"locals.targetFolder\" style=\"display:inline-flex;\"></ae-design></h1>\n  <!-- <div v-if=\"locals.targetFolder.data.beschreibung.trim().length\" class=\"bp-card bp-card--bordered _CSS-explainer\">{{locals.targetFolder.data.beschreibung}}</div> -->\n\n  <div class=\"_CSS-explainer bp-card bp-card--bordered\">Laden Sie hier Bilder und Videos hoch. Diese werden automatisch gespeichert.\nNach dem Hochladen können Sie die Dateien bis zum Beenden der Sitzung wieder löschen.\n(Die Sitzung wird automatisch mit dem Schließen der Seite beendet)\n  </div>\n\n  <ae-layout  layout-id=\"f5a5c2a0-bf9c-4b44-b05b-8e545156df10\"\n              :param-document=\"locals.targetFolder\"\n              :param-show-ui=\"true\"\n              param-file-form-id=\"6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2\"\n              param-file-form-field=\"datei\"\n              param-file-name-to-field=\"name\"\n              :param-save-new-documents=\"true\"\n              ref=\"dropHandler\"\n              @added=\"controller.uploadedDocuments($event)\"\n              param-types=\"image/*,video/*\"\n  ></ae-layout> \n\n\n  <div v-if=\"locals.uploads.length\">\n    <h3>Hochgeladene Dateien</h3>\n    <ae-list list-id=\"0069cfac-81c9-4fa8-ba34-f6f5f0e7bf7b\"\n              :documents=\"locals.uploads\"\n              :params=\"{ design: 'attachment-card', xreadonly: true, minColumnWidth: '10rem', maxColumnWidth: '1fr'}\"\n              @remove=\"controller.deleteUpload($event)\"\n    ></ae-list>\n\n    <button class=\"ae-button ae-button--primary\" :disabled=\"Aeppic.Uploads.isUploading\" @click.stop=\"Aeppic.reload()\">\n      Sitzung beenden\n    </button>\n  </div>\n  \n\n  <!-- Allow this site to be added as PWA -->\n  <ae-layout layout-id=\"de0e49dc-2e18-474a-b1cb-6aa548602d16\"></ae-layout>\n  <ae-layout layout-id=\"3eb256f4-2b7e-49c3-b299-55475f419f59\"\n            :param-page-document=\"locals.targetFolder\"\n  ></ae-layout>\n</template>\n","css":"._CSS-explainer {\n  margin: var(--ae-space-3) 0;\n  white-space: pre-line;\n}","controller":"class Controller {\n  async init() {\n    locals.uploads = []\n    locals.targetFolder = null\n    locals.targetFolder = await Aeppic.get(params.pageDocumentId)\n  }\n\n  async uploadedDocuments(event) {\n    const documents = await Aeppic.getAll(event.documentIds)\n    locals.uploads.push(...documents)\n  }\n\n  async deleteUpload(document) {\n    const indexOfDocumentToDelete = locals.uploads.findIndex(d => d.id === document.id)\n\n    if (indexOfDocumentToDelete !== -1) {\n      Aeppic.delete(document)\n      locals.uploads.splice(indexOfDocumentToDelete, 1)\n    }\n  }\n}"},"locks":[],"created":{"at":"2021-12-01T16:04:51+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-12-12T15:14:13+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1702394053676,"ct":1638374691452,"a_depth":3,"a":["apps","3d43a3f5-fea4-488d-9fc1-9dee5e694623","672123ff-a0df-498a-ba54-4a7c13ea2fb9"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"4d1a5a8e-9f50-46c2-888e-de7d39178f77","v":"b65fc063bc8fe086","previous":{"v":"db5e9cb24c39e83b"},"p":"9bad9050-10a9-42d2-9ac6-64c532dd4198","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"[Shared Layout]: Mangelmeldung","applies":"","packages":[],"template":"<div class=\"max-w-3xl m-auto bg-white p-4 border rounded-lg \">\n  <section v-if=\"!locals.sent\" class=\"flex flex-col items-start\">\n    <div v-if=\"locals.infoText\" class=\"w-full flex items-center gap-4 p-2 rounded-lg bg-gradient-to-r from-purple-100 to-pink-200\">\n      <div class=\"whitespace-pre-line\">{{locals.infoText}}</div>\n    </div>\n\n    <div class=\"text-2xl mt-6\">\n      Mängelmeldung für Einheit \"<ae-design name=\"title\" class=\"inline-flex\" :document-id=\"controller.targetDocument.id\"></ae-design>\"\n    </div>\n\n    <ae-form layout-id=\"f78eeea3-a3af-4738-a799-e49597d681fc\" :readonly=\"locals.sent\" class=\"w-full\" :document=\"locals.meldung\"></ae-form>\n\n    <section v-if=\"locals.errors\" class=\"p-2 text-red-500 gap-4\">\n      <ae-icon class=\"fa fa-exclamation-circle\"></ae-icon>\n      {{ locals.errors}}\n    </section>\n\n    <section class=\"mt-6\">\n      <button v-if=\"!locals.sent\" class=\" ae-button ae-button--primary\" @click.stop=\"controller.save()\">\n        Senden\n      </button>\n      <button v-else class=\"ae-button ae-button--secondary\" :disabled=\"true\">\n        <ae-icon class=\"fa fa-check\"></ae-icon>\n        Gesendet!\n      </button>\n    </section>\n  </section>\n  <section v-else>\n    <div v-if=\"locals.infoText\" class=\"w-full flex items-center gap-4 p-2 rounded-lg bg-gradient-to-r from-purple-100 to-pink-200\">\n      <div class=\"whitespace-pre-line\">{{locals.infoText}}</div>\n    </div>\n\n    <div class=\"mt-10 flex flex-col justify-center gap-4\">\n      <div class=\"flex gap-2 items-center\">\n        <ae-icon class=\"fa fa-check-circle text-green-500 text-5xl\"></ae-icon>\n        <div>\n        Deine Anfrage wurde gesendet!\n        </div>\n      </div>\n\n      <div class=\"\">\n        Wir haben dir außerdem eine Bestätigungs E-Mail zugesendet.\n      </div>\n    </div>\n  </section>\n</div>","css":"","controller":"class Controller {\n  async init() {\n    locals.meldung = null\n    locals.infoText = ''\n    locals.sent = false\n\n    locals.errors = ''\n\n    const commandResult = await Aeppic.Commands.execute('fd36ca67-e6fb-4889-9019-43d67cf266ae', this.targetDocument)\n\n    if (!commandResult.ok) {\n      return\n    }\n\n    locals.meldung = commandResult.value\n    \n    locals.infoText = await Aeppic.Preferences.getSettingForDocument('rooms:maengelmeldung:shareInformationText', this.targetDocument)\n  }\n\n  get targetDocument() {\n    return params.result.targetDocument\n  }\n\n  async save() {\n    const form = await Aeppic.getFormForDocument(locals.meldung)\n    const errors = form.validateDocumentData(locals.meldung.data)\n    locals.errors = errors ?  'Bitte überprüfen Sie Ihre Eingaben' : ''\n    console.log(errors)\n\n    if (errors) {\n      return\n    }\n\n\n    try { \n      const result = await Aeppic.Commands.execute('5a7c99d6-b88b-4ae1-b5f7-5029d339ed71', locals.meldung)\n\n      if (!result.ok) {\n        throw new Error('Error executing command:' + result.error)\n      }\n    } catch (e) {\n      locals.error = 'Fehler beim Speichern. Bitte versuchen Sie es erneut'\n      return\n    }\n\n    // TODO: success notification\n\n    locals.sent = true\n  }\n}"},"locks":[],"created":{"at":"2022-05-03T12:27:28+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-08-29T11:43:59+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","impersonatedBy":null,"from":"","client":"server"},"t":1661773439886,"ct":1651580848480,"a_depth":3,"a":["apps","86189c5a-b9f4-445a-879f-d94574960df0","9bad9050-10a9-42d2-9ac6-64c532dd4198"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"3fc41216-9739-47bd-8ceb-1609b1f0cb89","v":"c9596d25c930fbfa","previous":{"v":"ad19718f9a726a68"},"p":"185dd4c1-0fb4-43f9-8e8e-ab5cdfb82b4f","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"},"data":{"name":"[Shared Layout]: Milestones","applies":"","packages":[],"template":"<ae-design name=\"milestones\" :document-id=\"params.pageDocumentId\" :param-readonly=\"true\"></ae-design>","css":"","controller":"class Controller {\n  init() {\n    console.log(params)\n  }\n}"},"locks":[],"created":{"at":"2021-01-28T11:34:48+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-01-28T13:04:20+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1611839060310,"ct":1611833688239,"a_depth":3,"a":["apps","59edbdbc-2cab-426a-bb42-6e57c5158e4f","185dd4c1-0fb4-43f9-8e8e-ab5cdfb82b4f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"0538b64b-03f9-470f-9442-3b3e998998f3","v":"f02068ecfd524974","previous":{"v":"b53bf9dddf7ff8bc"},"p":"5152f88f-3006-46f9-959a-423139accf79","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"[Shared Layout]: rd:Shared FormsToSend","applies":"","template":" <div class=\"mx-auto max-w-5xl bg-white p-4 rounded-md lg:shadow\">\n  <section class=\"flex flex-col mb-6\">\n    <h1 class=\"break-word\">Formulare <template v-if=\"locals.result.document?.data.name\">\"{{ locals.result.document.data.name.trim() }}\"</template> zu Ihrem Projekt \"<ae-design class=\"inline-flex\" v-if=\"locals.result.project\" name=\"title\" :document=\"locals.result.project\"></ae-design>\"</h1>\n\n    <p class=\"whitespace-pre-line\">\nVielen Dank für Ihr Vertrauen.\n\nBitte laden Sie die folgenden Dateien herunter, unterschreiben diese falls nötig und laden diese wieder unter <span class=\"italic\">Ihre Uploads</span> hoch.\n    </p>\n  </section>\n\n  <section v-if=\"locals.result.document\" class=\"flex flex-col mb-6\">\n    <template v-if=\"locals.result.document.data.anhaenge.length\">\n      <label class=\"font-bold\">\n        Anhänge\n      </label>\n      <ae-list   :documents=\"locals.result.document.data.anhaenge\"\n                  list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                  param-design=\"rd:ref-card\"\n                  :param-design-params=\"{readonly: true, noRemove: true, showDownload: true, thumbnail: true }\"\n                  @selected=\"controller.showDocument($event)\"\n      ></ae-list>\n    </template>\n  </section>\n    <section v-if=\"locals.result.document\" class=\"flex flex-col gap-2 bg-slate-50 p-2 rounded-md\">\n      <label class=\"font-bold text-lg\">\n        Ihre Uploads\n      </label>\n      \n      <template v-if=\"locals.result.shareFiles.length\">\n        <label class=\"font-bold\">\n          Bereits hochgeladene Dateien\n        </label>\n\n        <ae-list \n        :documents=\"locals.result.shareFiles\"\n        list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n        param-design=\"rd:ref-card\"\n          :param-design-params=\"{readonly: true, noRemove: true, showDownload: true, thumbnail: true }\"\n        @selected=\"controller.showDocument($event)\"\n        ></ae-list>\n      </template>\n                \n        \n        <label class=\"font-bold mt-6\">\n          Dateien hochladen oder ändern\n        </label>\n        \n        <p>\n          Sie haben die Möglichkeit selbst Dateien einzureichen. Diese werden dem Projektleiter zur Verfügung gestellt. Sie können beliebig oft Dateien hochladen.\n        </p>\n\n        <ae-control name=\"rd:attachment\"\n                  :params=\"locals.sharedProjectForm.getFieldControlParams('uploads')\"\n                  :document=\"locals.result.document\"\n                  field-name=\"uploads\"\n        ></ae-control>\n      \n      <div class=\"flex\">\n        <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    param-icon=\"far fa-file-upload\"\n                    @selected=\"controller.save()\"\n                    param-text=\"Dateien speichern\"\n                    class=\"mr-2\"\n                    :param-disabled=\"!locals.result.document.data.uploads.length\"\n                    :param-primary=\"true\"\n        ></ae-layout>  \n      </div>\n  </section>\n</section>\n\n    <ae-layout\n      ref=\"dialog\"\n      layout-id=\"dff662e9-9a83-44d1-97c5-6f7f7f124248\"\n    ></ae-layout>\n\n    <ae-dialog ref=\"finishDialog\" :backdrop-close=\"false\">\n      <template #header>\n        <div v-if=\"locals.showFinishDialog && Aeppic.Uploads.isUploading\" class=\"flex gap-1 items-center\">\n          <div>Uploading...</div>\n          <ae-icon class=\"far fa-spinner-third fa-spin\"></ae-icon>\n        </div>\n        <div v-else class=\"flex gap-1 items-center\">\n          <div>Hochladen abgeschlossen</div>\n          <ae-icon class=\"far fa-check-circle\"></ae-icon>\n        </div>\n      </template>\n      <div slot=\"body\" v-if=\"locals.showFinishDialog\">\n        <div>\n          <div>\n            <p v-if=\"Aeppic.Uploads.isUploading\" class=\"text-red-500 font-bold\">\n              Bitte warten Sie bis alle Uploads abgeschlossen sind!\n              <ae-icon class=\"far fa-spinner-third fa-spin\"></ae-icon>\n            </p>\n            <div v-else class=\"whitespace-pre-line\">\nVielen Dank für das Hochladen der Dateien. \nWir erhalten automatisch eine Benachrichtigung. Sie müssen nichts mehr tun.\n\nSie können diese Seite nun schließen.\n            </div>\n\n            <div class=\"font-bold mt-6\">Hochgeladene Dateien</div>\n\n            <ae-list  list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                      :documents=\"locals.result.document.data.uploads\"\n                      param-design=\"rd:ref-card\"\n                      :param-horizontal=\"true\"\n                      :param-wrap=\"true\"\n                      :param-design-params=\"{readonly: true, noRemove: true, square: true }\"\n                      :watch-documents=\"true\"\n            ></ae-list>\n          </div>\n        </div>\n      </div>\n    </ae-dialog>\n\n  </section>\n</div>","css":"","controller":"class Controller {\n\n  async init() {\n    this.FORMS = {\n      ZuVersendeneFormulare: '5152f88f-3006-46f9-959a-423139accf79',\n      DokumentenShare: 'c6349b48-9561-4c06-9200-fe9df9b6fb3e',\n      Datei: '6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2',\n      WordVorlage: 'a37b2d75-d9d3-495a-a31c-52094d82e7bb',\n    }\n\n    locals.showFinishDialog = false\n    locals.showUpload = false\n    locals.documents = params.result.documents\n    locals.detailsDocument = null\n    locals.result = {\n      project: null,\n      document: null,\n      shareFiles: []\n    }\n\n    locals.sharedProjectForm = await Aeppic.getForm(this.FORMS.DokumentenShare)\n\n\n    locals.result = await this._getDocuments(params.result)\n  }\n\n  async _getDocuments(resultParam) {\n    const target = await Aeppic.get(params.pageDocumentId)\n\n    const document = await Aeppic.edit(target)\n\n    const result = {\n      project: await Aeppic.get(target.p),\n      document,\n      shareFiles: await Aeppic.getAll(document.data.uploads),\n    }\n\n    return result\n  }\n\n  showDocument(doc) {\n    $refs.dialog.$emit('show', doc)\n  }\n\n  async save() {\n    Aeppic.save(locals.result.document)\n\n    locals.showFinishDialog = true\n    $refs.finishDialog.show()\n  }\n\n  label(fieldName) {\n    const placeholder = locals.sharedProjectForm.getPlaceholder(fieldName)\n\n    if (!placeholder) {\n      return ''\n    }\n\n    return placeholder.label || placeholder.control?.parameters?.label?.value\n  }\n}\n","packages":[]},"locks":[],"created":{"at":"2024-05-17T10:15:11+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"1cdca864-ebbd-4574-a524-1060843e275f","impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-05-17T11:53:13+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","impersonatedBy":null,"from":"","client":"server"},"t":1715946793984,"ct":1715940911763,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","5152f88f-3006-46f9-959a-423139accf79"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"b19dbea8-a00d-47e7-98ad-f514fd0fef5a","v":"e7ab1635d67baecc","cloneOf":{"id":"e317ddec-33ad-45ac-8600-4f8f71921a4f","v":"c9de64a9e8a52a26","text":"[Shared Layout]: Shared Project Documents *Custome"},"originalCloneOf":{"id":"e317ddec-33ad-45ac-8600-4f8f71921a4f","v":"c9de64a9e8a52a26","text":"[Shared Layout]: Shared Project Documents *Custome"},"previous":{"v":"034f5d3387f5dbaa"},"p":"8d8f6fdb-6f78-4e2a-b585-bd80f4dbaa1d","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"[Shared Layout]: rd:Shared Gesprächsnotiz","applies":"","packages":[],"template":"<div class=\"mx-auto max-w-5xl bg-white p-4 rounded-md lg:shadow\">\n  <section class=\"flex flex-col mb-6\">\n    <h1 class=\"break-word\">Gesprächsnotiz <template v-if=\"locals.result.callNotice\">\"{{ locals.result.callNotice.data.name.trim() }}\"</template> zu Ihrem Projekt \"<ae-design class=\"inline-flex\" v-if=\"locals.result.project\" name=\"title\" :document=\"locals.result.project\"></ae-design>\"</h1>\n\n    <p>\n      Bitte lesen und bestätigen Sie uns diese Gesprächsnotiz. Vielen Dank!\n    </p>\n  </section>\n\n  <section v-if=\"locals.result.callNotice\" class=\"flex flex-col mb-6\">\n    <ae-form layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\" :document=\"locals.result.callNotice\" :readonly=\"true\"\n              :view=\"{ only: { fields: ['notiz'] }}\"\n    ></ae-form>\n\n  <template v-if=\"locals.result.callNotice.data.anhaenge.length\">\n      <label class=\"font-bold\">\n        Anhänge\n      </label>\n      <ae-list   :documents=\"locals.result.callNotice.data.anhaenge\"\n                  list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                  param-design=\"rd:ref-card\"\n                  :param-design-params=\"{readonly: true, noRemove: true, showDownload: true, thumbnail: true }\"\n                  @selected=\"controller.showDocument($event)\"\n      ></ae-list>\n    </template>\n  </section>\n\n    <section class=\"flex flex-col gap-2 bg-slate-50 p-2 rounded-md\" v-if=\"locals.result.callNotice\">\n      <label class=\"font-bold text-lg\">\n        Ihre Lesebestätigung\n      </label>\n      \n      <div class=\"flex flex-col gap-2\">\n            <ae-form layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\" :document=\"locals.result.callNotice\"\n              :view=\"{ only: { fields: ['unterschriftLesebestaetigung'] }}\"\n            ></ae-form>\n\n        <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    param-icon=\"far fa-save\"\n                    @selected=\"controller.save()\"\n                    param-text=\"Lesen bestätigen\"\n                    class=\"mr-2\"\n                    :param-disabled=\"!locals.result.callNotice.data.unterschriftLesebestaetigung.dataUrl || locals.result.callNotice.stamps?.find(s => s.type.id === '59cda385-cabd-4f16-9e5a-0e26aabc4419')\"\n                    :param-primary=\"true\"\n        ></ae-layout>  \n      </div>\n  </section>\n</section>\n\n    <ae-layout\n      ref=\"dialog\"\n      layout-id=\"dff662e9-9a83-44d1-97c5-6f7f7f124248\"\n    ></ae-layout>\n\n    <ae-dialog ref=\"finishDialog\" :backdrop-close=\"false\">\n      <template #header>\n        <div v-if=\"locals.showFinishDialog && Aeppic.Uploads.isUploading\" class=\"flex gap-1 items-center\">\n          <div>Uploading...</div>\n          <ae-icon class=\"far fa-spinner-third fa-spin\"></ae-icon>\n        </div>\n        <div v-else class=\"flex gap-1 items-center\">\n          <div>Lesebestätigung abgeschlossen</div>\n          <ae-icon class=\"far fa-check-circle\"></ae-icon>\n        </div>\n      </template>\n      <div slot=\"body\" v-if=\"locals.showFinishDialog\">\n        <div>\n          <div>\n            <p v-if=\"Aeppic.Uploads.isUploading\" class=\"text-red-500 font-bold\">\n              Bitte warten Sie bis alle Uploads abgeschlossen sind!\n              <ae-icon class=\"far fa-spinner-third fa-spin\"></ae-icon>\n            </p>\n            <div v-else class=\"whitespace-pre-line\">\nVielen Dank für das Bestätigen der Gesprächsnotiz. \nWir erhalten automatisch eine Benachrichtigung. Sie müssen nichts mehr tun.\n\nSie können diese Seite nun schließen.\n            </div>\n          </div>\n        </div>\n      </div>\n    </ae-dialog>\n\n  </section>\n</div>","css":"","controller":"class Controller {\n\n  async init() {\n    this.FORMS = {\n      ZuVersendeneFormulare: '5152f88f-3006-46f9-959a-423139accf79',\n      DokumentenShare: 'c6349b48-9561-4c06-9200-fe9df9b6fb3e',\n      Datei: '6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2',\n      WordVorlage: 'a37b2d75-d9d3-495a-a31c-52094d82e7bb',\n    }\n\n    locals.showFinishDialog = false\n    locals.showUpload = false\n    locals.documents = params.result.documents\n    locals.detailsDocument = null\n    locals.result = {\n      project: null,\n      callNotice: null\n    }\n\n    locals.sharedProjectForm = await Aeppic.getForm(this.FORMS.DokumentenShare)\n\n    locals.result = await this._getDocuments(params.result)\n  }\n\n  async _getDocuments(resultParam) {\n    const target = await Aeppic.get(params.pageDocumentId)\n\n    const callNotice = await Aeppic.edit(target)\n\n    const result = {\n      project: await Aeppic.get(target.p),\n      callNotice,\n    }\n\n    return result\n  }\n\n  showDocument(doc) {\n    $refs.dialog.$emit('show', doc)\n  }\n\n  async save() {\n    Aeppic.save(locals.result.callNotice)\n\n    await Aeppic.stamp(locals.result.callNotice.cloneAsDocument(), '59cda385-cabd-4f16-9e5a-0e26aabc4419')\n\n    locals.showFinishDialog = true\n    $refs.finishDialog.show()\n  }\n\n  label(fieldName) {\n    const placeholder = locals.sharedProjectForm.getPlaceholder(fieldName)\n\n    if (!placeholder) {\n      return ''\n    }\n\n    return placeholder.label || placeholder.control?.parameters?.label?.value\n  }\n}\n"},"locks":[],"created":{"at":"2024-05-15T09:53:42+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-05-17T11:48:42+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","impersonatedBy":null,"from":"","client":"server"},"t":1715946522523,"ct":1715766822691,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","8d8f6fdb-6f78-4e2a-b585-bd80f4dbaa1d"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"f48a1625-4876-4f00-81fb-d31ef30bd282","v":"8052bf14fb4e9913","cloneOf":{"id":"7043e8be-73ce-4668-bd92-7217856e25ef","v":"35708882a46cb679","text":"[Shared Layout]: Shared Project Documents *Baustel"},"originalCloneOf":{"id":"7043e8be-73ce-4668-bd92-7217856e25ef","v":"35708882a46cb679","text":"[Shared Layout]: Shared Project Documents *Baustel"},"previous":{"v":"93683db32c28573f"},"p":"c6349b48-9561-4c06-9200-fe9df9b6fb3e","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"[Shared Layout]: rd:Shared Project Documents *Baustelle*","applies":"","packages":[],"template":"<div class=\"mx-auto max-w-5xl bg-white p-4 rounded-md lg:shadow\">\n  <section class=\"flex flex-col mb-6\">\n    <h1>Dokumente zu dem Projekt \"<ae-design class=\"inline-flex\" v-if=\"locals.result.project\" name=\"title\" :document=\"locals.result.project\"></ae-design>\"\n    </h1>\n    \n    <p>\n      An diesem Ort finden Sie alle Dokumente die im Rahmen der Abwicklung des Projektes notwendig sind.<br>\n    </p>\n    <ul class=\"list-disc list-inside\">\n      <li>\n        Ihr Ansprechpartner im Unternehmen:\n        <ae-design class=\"inline-flex font-bold\" v-if=\"locals.result.project && locals.result.project.data.projektleiter.id\" name=\"title\" :document-id=\"locals.result.project.data.projektleiter.id\"></ae-design>\n      </li>\n    </ul>\n  </section>\n\n  <section v-if=\"locals.sharedProjectForm && locals.result.share\" class=\"flex flex-col gap-6\">\n    <section>\n      <label class=\"font-bold\">\n        {{ controller.label('dateienBerechnung') }}\n      </label>\n      \n      <ae-list :documents=\"locals.result.share.data.dateienBerechnung\"\n                list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                param-design=\"rd:ref-card\"\n                  :param-design-params=\"{readonly: true, noRemove: true, showDownload: true, thumbnail: true }\"\n                @selected=\"controller.showDocument($event)\"\n                param-empty-text=\"Keine Dateien hochgeladen.\"\n      ></ae-list>\n    </section>\n  </section>\n\n    <ae-layout\n      ref=\"dialog\"\n      layout-id=\"dff662e9-9a83-44d1-97c5-6f7f7f124248\"\n    ></ae-layout>\n  \n</div>","css":"._CSS-section {\n  margin-bottom: var(--ae-size-5);\n}\n\n._CSS-label {\n  font-size: var(--ae-font-size-7);\n}\n\n._CSS-dialog .ae-dialog__header {\n  padding: 0;\n}","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      ZuVersendeneFormulare: '5152f88f-3006-46f9-959a-423139accf79',\n      DokumentenShare: 'c6349b48-9561-4c06-9200-fe9df9b6fb3e',\n      Datei: '6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2',\n      WordVorlage: 'a37b2d75-d9d3-495a-a31c-52094d82e7bb',\n    }\n\n    locals.showFinishDialog = false\n    locals.showUpload = false\n    locals.documents = params.result.documents\n    locals.detailsDocument = null\n    locals.result = {\n      project: null,\n      share: null,\n      shareFiles: [],\n    }\n\n    locals.sharedProjectForm = await Aeppic.getForm(this.FORMS.DokumentenShare)\n\n    locals.result = await this._getDocuments(params.result)\n  }\n\n  async _getDocuments(resultParam) {\n    const target = await Aeppic.get(params.pageDocumentId)\n\n    const share = await Aeppic.edit(target)\n\n    const result = {\n      project: await Aeppic.get(target.p),\n      share,\n      shareFiles: await Aeppic.getAll(share.data.uploads),\n    }\n\n    return result\n  }\n\n  showDocument(doc) {\n    $refs.dialog.$emit('show', doc)\n  }\n\n  label(fieldName) {\n    const placeholder = locals.sharedProjectForm.getPlaceholder(fieldName)\n\n    if (!placeholder) {\n      return ''\n    }\n\n    return placeholder.label || placeholder.control?.parameters?.label?.value\n  }\n}\n"},"locks":[],"created":{"at":"2024-05-13T09:37:54+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-05-15T13:19:06+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","impersonatedBy":null,"from":"","client":"server"},"t":1715779146077,"ct":1715593074553,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","c6349b48-9561-4c06-9200-fe9df9b6fb3e"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","c6349b48-9561-4c06-9200-fe9df9b6fb3e"],"a_depth":4,"a_forms":["folder","application-form","form-folder","form"],"cloneOf":{"id":"e317ddec-33ad-45ac-8600-4f8f71921a4f","text":"[Shared Layout]: Shared Project Documents *Custome","v":"c9de64a9e8a52a26"},"created":{"at":"2024-05-13T09:43:32+00:00","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1715593412111,"data":{"applies":"","controller":"class Controller {\n\n  async init() {\n    this.FORMS = {\n      ZuVersendeneFormulare: '5152f88f-3006-46f9-959a-423139accf79',\n      DokumentenShare: 'c6349b48-9561-4c06-9200-fe9df9b6fb3e',\n      Datei: '6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2',\n      WordVorlage: 'a37b2d75-d9d3-495a-a31c-52094d82e7bb',\n    }\n\n    locals.showFinishDialog = false\n    locals.showUpload = false\n    locals.documents = params.result.documents\n    locals.detailsDocument = null\n    locals.result = {\n      project: null,\n      share: null,\n      shareFiles: [],\n    }\n\n    locals.sharedProjectForm = await Aeppic.getForm(this.FORMS.DokumentenShare)\n\n    console.log(params.result)\n\n    locals.result = await this._getDocuments(params.result)\n\n    console.log(locals.result)\n  }\n\n  async _getDocuments(resultParam) {\n    const target = await Aeppic.get(params.pageDocumentId)\n\n    const share = await Aeppic.edit(target)\n\n    const result = {\n      project: await Aeppic.get(target.p),\n      share,\n      shareFiles: await Aeppic.getAll(share.data.uploads),\n    }\n\n    // TODO: template uses hardcoded fieldNames for now. Remove this?\n    // const documents = await Aeppic.getAll(resultParam.documents)\n    // const documentsParents = await Aeppic.getAll(resultParam.documents.map(d => d.p))\n\n    // for (let i = 0; i < documents.length; i++) {\n    //   const document = documents[i]\n\n    //   const lastAForm = document.a_forms.slice(-1)[0]\n\n    //   let prefix = ''\n\n    //   if (lastAForm === this.FORMS.ZuVersendeneFormulare) {\n    //     prefix = 'fillout'\n    //   } else if (lastAForm === this.FORMS.DokumentenShare) {\n    //     prefix = 'share'\n    //   } else {\n    //     console.error(`do not know how to categorize document based on a_form \"${lastAForm}\"`, document)\n    //   }\n\n    //   if (!prefix) {\n    //     continue\n    //   }\n\n    //   // there will be most likely less uploads than files\n    //   const isUpload = documentsParents[i].data.uploads.find(d => d.id === document.id)\n\n    //   if (isUpload) {\n    //     result[`${prefix}Uploads`].push(document)\n    //   } else {\n    //     result[`${prefix}Files`].push(document)\n    //   }\n    // }\n\n    return result\n  }\n\n  showDocument(doc) {\n    $refs.dialog.$emit('show', doc)\n  }\n\n  async save() {\n    Aeppic.save(locals.result.share)\n\n    locals.showFinishDialog = true\n    $refs.finishDialog.show()\n  }\n\n  label(fieldName) {\n    const placeholder = locals.sharedProjectForm.getPlaceholder(fieldName)\n\n    if (!placeholder) {\n      return ''\n    }\n\n    return placeholder.label || placeholder.control?.parameters?.label?.value\n  }\n}\n","css":"","name":"[Shared Layout]: rd:Shared Project Documents *Customer*","packages":[],"template":"<div class=\"mx-auto max-w-5xl bg-white p-4 rounded-md lg:shadow\">\n  <section class=\"flex flex-col mb-6\">\n    <h1>Dokumente zu Ihrem Projekt \"<ae-design class=\"inline-flex\" v-if=\"locals.result.project\" name=\"title\" :document=\"locals.result.project\"></ae-design>\"\n    </h1>\n    \n    <p>\n      An diesem Ort finden Sie alle Dokumente die im Rahmen der Abwicklung des Projektes notwendig sind.<br>\n    </p>\n    <ul class=\"list-disc list-inside\">\n      <li>\n        Zu Beginn finden Sie die Formulare, welche an und vom Auftraggeber gegangen sind.<br>\n      </li>\n      <li>\n        Darauf folgend Dateien zur Projektabwicklung (Vertrag, Förderungen, Berechnungen, ...).<br>\n      </li>\n      <li>\n        Abschließend haben Sie die Möglichkeit selbst Dateien einzureichen. Diese werden dem Projektleiter\n        <ae-design class=\"inline-flex font-bold\" v-if=\"locals.result.project && locals.result.project.data.projektleiter.id\" name=\"title\" :document-id=\"locals.result.project.data.projektleiter.id\"></ae-design>\n        zur Verfügung gestellt.\n      </li>\n    </ul>\n  </section>\n\n  <section v-if=\"locals.sharedProjectForm && locals.result.share\" class=\"flex flex-col gap-6\">\n    <section  v-if=\"locals.result.share.data.gesendeteProjektFormulare.length\">\n      <label class=\"font-bold\">\n        {{ controller.label('gesendeteProjektFormulare') }}\n      </label>\n      <ae-list :documents=\"locals.result.share.data.gesendeteProjektFormulare\"\n                list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                param-design=\"rd:ref-card\"\n                :param-design-params=\"{readonly: true, noRemove: true, showDownload: true, thumbnail: true }\"\n                @selected=\"controller.showDocument($event)\"\n      ></ae-list>\n    </section>\n\n    <section  v-if=\"locals.result.share.data.hochgeladeneProjektFormulare.length\">\n      <label class=\"font-bold\">\n        {{ controller.label('hochgeladeneProjektFormulare') }}\n      </label>\n      <ae-list :documents=\"locals.result.share.data.hochgeladeneProjektFormulare\"\n                list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                param-design=\"rd:ref-card\"\n                  :param-design-params=\"{readonly: true, noRemove: true, showDownload: true, thumbnail: true }\"\n                @selected=\"controller.showDocument($event)\"\n      ></ae-list>\n    </section>\n\n    <section  v-if=\"locals.result.share.data.dateienVertrag.length\">\n      <label class=\"font-bold\">\n        {{ controller.label('dateienVertrag') }}\n      </label>\n      \n      <ae-list :documents=\"locals.result.share.data.dateienVertrag\"\n                list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                param-design=\"rd:ref-card\"\n                  :param-design-params=\"{readonly: true, noRemove: true, showDownload: true, thumbnail: true }\"\n                @selected=\"controller.showDocument($event)\"\n      ></ae-list>\n    </section>\n\n    <section  v-if=\"locals.result.share.data.dateienFakturierung.length\">\n      <label class=\"font-bold\">\n        {{ controller.label('dateienFakturierung') }}\n      </label>\n      \n      <ae-list :documents=\"locals.result.share.data.dateienFakturierung\"\n                list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                param-design=\"rd:ref-card\"\n                  :param-design-params=\"{readonly: true, noRemove: true, showDownload: true, thumbnail: true }\"\n                @selected=\"controller.showDocument($event)\"\n      ></ae-list>\n    </section>\n\n    <section  v-if=\"locals.result.share.data.dateienFoerderung.length\">\n      <label class=\"font-bold\">\n        {{ controller.label('dateienFoerderung') }}\n      </label>\n      \n      <ae-list :documents=\"locals.result.share.data.dateienFoerderung\"\n                list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                param-design=\"rd:ref-card\"\n                  :param-design-params=\"{readonly: true, noRemove: true, showDownload: true, thumbnail: true }\"\n                @selected=\"controller.showDocument($event)\"\n      ></ae-list>\n    </section>\n    <section  v-if=\"locals.result.share.data.dateienBerechnung.length\">\n      <label class=\"font-bold\">\n        {{ controller.label('dateienBerechnung') }}\n      </label>\n      \n      <ae-list :documents=\"locals.result.share.data.dateienBerechnung\"\n                list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                param-design=\"rd:ref-card\"\n                  :param-design-params=\"{readonly: true, noRemove: true, showDownload: true, thumbnail: true }\"\n                @selected=\"controller.showDocument($event)\"\n      ></ae-list>\n    </section>\n    <section  v-if=\"locals.result.share.data.dateienBerichte && locals.result.share.data.dateienBerichte.length\">\n      <label class=\"font-bold\">\n        {{ controller.label('dateienBerichte') }}\n      </label>\n      \n      <ae-list :documents=\"locals.result.share.data.dateienBerichte\"\n                list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                param-design=\"rd:ref-card\"\n                  :param-design-params=\"{readonly: true, noRemove: true, showDownload: true, thumbnail: true }\"\n                @selected=\"controller.showDocument($event)\"\n      ></ae-list>\n    </section>\n    <section class=\"flex flex-col gap-2 bg-slate-50 p-2 rounded-md\">\n      <label class=\"font-bold text-lg\">\n        Ihre Uploads\n      </label>\n      \n      <template v-if=\"locals.result.shareFiles.length\">\n        <label class=\"font-bold\">\n          Bereits hochgeladene Dateien\n        </label>\n\n        <ae-list \n        :documents=\"locals.result.shareFiles\"\n        list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n        param-design=\"rd:ref-card\"\n          :param-design-params=\"{readonly: true, noRemove: true, showDownload: true, thumbnail: true }\"\n        @selected=\"controller.showDocument($event)\"\n        ></ae-list>\n      </template>\n                \n      \n      <!-- <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        param-icon=\"far fa-file-upload\"\n        @selected=\"locals.showUpload = !locals.showUpload\"\n        param-text=\"Dateien hochladen\"\n        class=\"mr-2\"\n        ></ae-layout>   -->\n        \n        \n        <label class=\"font-bold mt-6\">\n          Dateien hochladen oder ändern\n        </label>\n        \n        <p>\n          Sie haben die Möglichkeit selbst Dateien einzureichen. Diese werden dem Projektleiter zur Verfügung gestellt. Sie können beliebig oft Dateien hochladen.\n        </p>\n\n        <ae-control name=\"rd:attachment\"\n                  :params=\"locals.sharedProjectForm.getFieldControlParams('uploads')\"\n                  :document=\"locals.result.share\"\n                  field-name=\"uploads\"\n        ></ae-control>\n      \n      <div class=\"flex\">\n        <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    param-icon=\"far fa-file-upload\"\n                    @selected=\"controller.save()\"\n                    param-text=\"Dateien speichern\"\n                    class=\"mr-2\"\n                    :param-disabled=\"!locals.result.share.data.uploads.length\"\n                    :param-primary=\"true\"\n        ></ae-layout>  \n      </div>\n  </section>\n</section>\n\n    <ae-layout\n      ref=\"dialog\"\n      layout-id=\"dff662e9-9a83-44d1-97c5-6f7f7f124248\"\n    ></ae-layout>\n\n    <ae-dialog ref=\"finishDialog\" :backdrop-close=\"false\">\n      <template #header>\n        <div v-if=\"locals.showFinishDialog && Aeppic.Uploads.isUploading\" class=\"flex gap-1 items-center\">\n          <div>Uploading...</div>\n          <ae-icon class=\"far fa-spinner-third fa-spin\"></ae-icon>\n        </div>\n        <div v-else class=\"flex gap-1 items-center\">\n          <div>Upload abgeschlossen</div>\n          <ae-icon class=\"far fa-check-circle\"></ae-icon>\n        </div>\n      </template>\n      <div slot=\"body\" v-if=\"locals.showFinishDialog\">\n        <div>\n          <div>\n            <p v-if=\"Aeppic.Uploads.isUploading\" class=\"text-red-500 font-bold\">\n              Bitte warten Sie bis alle Uploads abgeschlossen sind!\n              <ae-icon class=\"far fa-spinner-third fa-spin\"></ae-icon>\n            </p>\n            <div v-else class=\"whitespace-pre-line\">\nVielen Dank für das Hochladen der Dateien. \nWir erhalten automatisch eine Benachrichtigung. Sie müssen nichts mehr tun.\n\nSie können diese Seite nun schließen.\n            </div>\n\n            <div class=\"font-bold mt-6\">Hochgeladene Dateien</div>\n\n            <ae-list  list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                      :documents=\"locals.result.share.data.uploads\"\n                      param-design=\"rd:ref-card\"\n                      :param-horizontal=\"true\"\n                      :param-wrap=\"true\"\n                      :param-design-params=\"{readonly: true, noRemove: true, square: true }\"\n                      :watch-documents=\"true\"\n            ></ae-list>\n          </div>\n        </div>\n      </div>\n    </ae-dialog>\n\n  </section>\n\n\n  \n</div>"},"f":{"id":"layout-form","text":"Layout","v":"6dcb5105fa37f121"},"id":"d170528d-13b4-4bd0-995b-4057f5a29acc","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2026-05-04T10:22:28+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"e317ddec-33ad-45ac-8600-4f8f71921a4f","text":"[Shared Layout]: Shared Project Documents *Custome","v":"c9de64a9e8a52a26"},"p":"c6349b48-9561-4c06-9200-fe9df9b6fb3e","previous":{"v":"457a62f7f866bb6a"},"stamps":[],"t":1777890148214,"v":"f6b4aa3db1f251ad"},{"id":"7043e8be-73ce-4668-bd92-7217856e25ef","v":"35708882a46cb679","previous":{"v":"92b4dfc1a2ddde56"},"p":"c6349b48-9561-4c06-9200-fe9df9b6fb3e","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"[Shared Layout]: Shared Project Documents *Baustelle*","applies":"","packages":[],"template":"<h1>\n  Dokumente zum Projekt \"<ae-design style=\"display:inline-flex;\" v-if=\"locals.result.project\" name=\"title\" :document=\"locals.result.project\"></ae-design>\"\n</h1>\n\n\n<p>\n  An diesem Ort finden Sie alle Dokumente die im Rahmen der Abwicklung des Projektes notwendig sind<br>\n</p>\n<!-- <ul>\n  <li>\n  Zu Beginn finden Sie die Formulare, welche an und vom Auftraggeber gegangen sind.<br>\n  </li>\n  <li>\n  Darauf folgend Dateien zur Projektabwicklung (Vertrag, Förderungen, Berechnungen, ...).<br>\n  </li>\n  <li>\n  Abschließend haben Sie die Möglichkeit selbst Dateien einzureichen. Diese werden dem Projektleiter\n  <ae-design style=\"display: inline;\" v-if=\"locals.result.project && locals.result.project.data.projektleiter.id\" name=\"title\" :document-id=\"locals.result.project.data.projektleiter.id\"></ae-design>\n   zur Verfügung gestellt.\n  </li>\n</ul> -->\n\n<template v-if=\"locals.sharedProjectForm && locals.result.share\">\n  <section class=\"_CSS-section\" v-if=\"locals.result.share.data.dateienBerechnung.length\">\n    <label class=\"_CSS-label\">\n      {{ locals.sharedProjectForm.getPlaceholder('dateienBerechnung').label }}\n    </label>\n    \n    <ae-list :documents=\"locals.result.share.data.dateienBerechnung\"\n              list-id=\"simple-list\"\n              param-design=\"attachment-card,ref-card\"\n                :param-design-params=\"{readonly: true, noRemove: true }\"\n              @selected=\"controller.showDocument($event)\"\n    ></ae-list>\n  </section>\n\n  <ae-layout\n    ref=\"dialog\"\n    layout-id=\"bbd6d99f-571d-422f-a2bc-15d3f8ecfae8\"\n    :param-file-name=\"locals.detailsDocument?.data.datei.name\"\n    param-field-name=\"datei\"\n    :param-document=\"locals.detailsDocument\"\n  ></ae-layout>\n\n</template>\n","css":"._CSS-section {\n  margin-bottom: var(--ae-size-5);\n}\n\n._CSS-label {\n  font-size: var(--ae-font-size-7);\n}\n\n._CSS-dialog .ae-dialog__header {\n  padding: 0;\n}","controller":"async init() {\n  this.FORMS = {\n    DokumentenShare: 'c6349b48-9561-4c06-9200-fe9df9b6fb3e',\n  }\n\n  // locals.documents = params.result.documents\n  locals.detailsDocument = null\n  locals.result = {\n    project: null,\n    share: null,\n  }\n\n  locals.sharedProjectForm = await Aeppic.getForm(this.FORMS.DokumentenShare)\n  locals.result = await this._getDocuments(params.result)\n}\n\nasync _getDocuments(resultParam) {\n  const target = await Aeppic.get(params.pageDocumentId)\n\n  const result = {\n    project: await Aeppic.get(target.p),\n    share: await Aeppic.get(target),\n  }\n\n  return result\n}\n\nasync showDocument(doc) {\n  locals.detailsDocument = doc\n\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n\n  $refs.dialog.$emit('show')\n}\n"},"locks":[],"created":{"at":"2020-09-17T11:55:20+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-06-28T15:26:47+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1624894007423,"ct":1600343720923,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","c6349b48-9561-4c06-9200-fe9df9b6fb3e"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"e317ddec-33ad-45ac-8600-4f8f71921a4f","v":"c9de64a9e8a52a26","previous":{"v":"0d9b0eb2c67316ff"},"p":"c6349b48-9561-4c06-9200-fe9df9b6fb3e","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"[Shared Layout]: Shared Project Documents *Customer*","applies":"","packages":[],"template":"<h1>Dokumente zu Ihrem Projekt \"<ae-design style=\"display:inline-flex;\" v-if=\"locals.result.project\" name=\"title\" :document=\"locals.result.project\"></ae-design>\"\n</h1>\n\n<p>\n  An diesem Ort finden Sie alle Dokumente die im Rahmen der Abwicklung des Projektes notwendig sind<br>\n</p>\n<ul>\n  <li>\n  Zu Beginn finden Sie die Formulare, welche an und vom Auftraggeber gegangen sind.<br>\n  </li>\n  <li>\n  Darauf folgend Dateien zur Projektabwicklung (Vertrag, Förderungen, Berechnungen, ...).<br>\n  </li>\n  <li>\n  Abschließend haben Sie die Möglichkeit selbst Dateien einzureichen. Diese werden dem Projektleiter\n  <ae-design style=\"display: inline;\" v-if=\"locals.result.project && locals.result.project.data.projektleiter.id\" name=\"title\" :document-id=\"locals.result.project.data.projektleiter.id\"></ae-design>\n   zur Verfügung gestellt.\n  </li>\n</ul>\n\n<template v-if=\"locals.sharedProjectForm && locals.result.share\">\n  <section class=\"_CSS-section\" v-if=\"locals.result.share.data.gesendeteProjektFormulare.length\">\n    <label class=\"_CSS-label\">\n      {{ locals.sharedProjectForm.getPlaceholder('gesendeteProjektFormulare').label }}\n    </label>\n    <ae-list :documents=\"locals.result.share.data.gesendeteProjektFormulare\"\n              list-id=\"simple-list\"\n              param-design=\"attachment-card,ref-card\"\n                :param-design-params=\"{readonly: true, noRemove: true }\"\n              @selected=\"controller.showDocument($event)\"\n    ></ae-list>\n  </section>\n\n  <section class=\"_CSS-section\" v-if=\"locals.result.share.data.hochgeladeneProjektFormulare.length\">\n    <label class=\"_CSS-label\">\n      {{ locals.sharedProjectForm.getPlaceholder('hochgeladeneProjektFormulare').label }}\n    </label>\n    <ae-list :documents=\"locals.result.share.data.hochgeladeneProjektFormulare\"\n              list-id=\"simple-list\"\n              param-design=\"attachment-card,ref-card\"\n                :param-design-params=\"{readonly: true, noRemove: true }\"\n              @selected=\"controller.showDocument($event)\"\n    ></ae-list>\n  </section>\n\n  <section class=\"_CSS-section\" v-if=\"locals.result.share.data.dateienVertrag.length\">\n    <label class=\"_CSS-label\">\n      {{ locals.sharedProjectForm.getPlaceholder('dateienVertrag').label }}\n    </label>\n    \n    <ae-list :documents=\"locals.result.share.data.dateienVertrag\"\n              list-id=\"simple-list\"\n              param-design=\"attachment-card,ref-card\"\n                :param-design-params=\"{readonly: true, noRemove: true }\"\n              @selected=\"controller.showDocument($event)\"\n    ></ae-list>\n  </section>\n  <section class=\"_CSS-section\" v-if=\"locals.result.share.data.dateienFoerderung.length\">\n    <label class=\"_CSS-label\">\n      {{ locals.sharedProjectForm.getPlaceholder('dateienFoerderung').label }}\n    </label>\n    \n    <ae-list :documents=\"locals.result.share.data.dateienFoerderung\"\n              list-id=\"simple-list\"\n              param-design=\"attachment-card,ref-card\"\n                :param-design-params=\"{readonly: true, noRemove: true }\"\n              @selected=\"controller.showDocument($event)\"\n    ></ae-list>\n  </section>\n  <section class=\"_CSS-section\" v-if=\"locals.result.share.data.dateienBerechnung.length\">\n    <label class=\"_CSS-label\">\n      {{ locals.sharedProjectForm.getPlaceholder('dateienBerechnung').label }}\n    </label>\n    \n    <ae-list :documents=\"locals.result.share.data.dateienBerechnung\"\n              list-id=\"simple-list\"\n              param-design=\"attachment-card,ref-card\"\n                :param-design-params=\"{readonly: true, noRemove: true }\"\n              @selected=\"controller.showDocument($event)\"\n    ></ae-list>\n  </section>\n  <section class=\"_CSS-section\" v-if=\"locals.result.share.data.dateienBerichte && locals.result.share.data.dateienBerichte.length\">\n    <label class=\"_CSS-label\">\n      {{ locals.sharedProjectForm.getPlaceholder('dateienBerichte').label }}\n    </label>\n    \n    <ae-list :documents=\"locals.result.share.data.dateienBerichte\"\n              list-id=\"simple-list\"\n              param-design=\"attachment-card,ref-card\"\n                :param-design-params=\"{readonly: true, noRemove: true }\"\n              @selected=\"controller.showDocument($event)\"\n    ></ae-list>\n  </section>\n  <section class=\"_CSS-section\" xv-if=\"locals.result.share.data.uploads.length\">\n    <label class=\"_CSS-label\">\n      {{ locals.sharedProjectForm.getPlaceholder('uploads').label }}\n    </label>\n    \n    <template v-if=\"!locals.showUpload\">\n    <ae-list \n              :documents=\"locals.result.share.data.uploads\"\n              list-id=\"simple-list\"\n              param-design=\"attachment-card,ref-card\"\n                :param-design-params=\"{readonly: true, noRemove: true }\"\n              @selected=\"controller.showDocument($event)\"\n    ></ae-list>\n\n  <p>\n    Sie haben die Möglichkeit selbst Dateien einzureichen. Diese werden dem Projektleiter zur Verfügung gestellt. Sie können beliebig oft Dateien hochladen.\n  </p>\n\n    <button class=\"ae-button ae-button--primary\" @click.stop=\"locals.showUpload = !locals.showUpload\">\n      Dateien hochladen\n    </button>\n    </template>\n    <template v-else>\n      <ae-control name=\"attachment\"\n                  :params=\"locals.sharedProjectForm.getFieldControlParams('uploads')\"\n                  :document=\"locals.result.share\"\n                  field-name=\"uploads\"\n                  style=\"padding: var(--bp-page-content-padding);\"\n      ></ae-control>\n\n      <button class=\"ae-button ae-button--primary\" \n              @click.stop=\"controller.save()\"\n              :disabled=\"!locals.result.share.data.uploads.length\"\n      >\n        Uploads speichern\n      </button>\n    </template>\n  </section>\n<!-- \n  <section class=\"_CSS-section\" v-if=\"locals.result.shareUploads.length\">\n    <label class=\"_CSS-label\">Uploads des Projektes</label>\n    <ae-list :documents=\"locals.result.shareUploads\"\n              list-id=\"simple-list\"\n              param-design=\"attachment-card,ref-card\"\n                :param-design-params=\"{readonly: true, noRemove: true }\"\n              @selected=\"controller.showDocument($event)\"\n    ></ae-list>\n  </section> -->\n\n\n  <!-- \n  <template v-if=\"locals.documents\">\n    <ae-list :documents=\"locals.documents\"\n              list-id=\"simple-list\"\n              param-design=\"attachment-card,ref-card\"\n                :param-design-params=\"{readonly: true, noRemove: true }\"\n              @selected=\"controller.showDocument($event)\"\n    ></ae-list>\n  </template> -->\n\n  <!-- <ae-layout  ref=\"dialog\"\n              layout-id=\"765b4707-916f-42ef-afdd-853582fe4314\"\n              :param-document=\"locals.detailsDocument\"\n  ></ae-layout> -->\n\n  <ae-layout\n    ref=\"dialog\"\n    layout-id=\"bbd6d99f-571d-422f-a2bc-15d3f8ecfae8\"\n    :param-file-name=\"locals.detailsDocument?.data.datei.name\"\n    param-field-name=\"datei\"\n    :param-document=\"locals.detailsDocument\"\n  ></ae-layout>\n\n  <ae-dialog ref=\"finishDialog\" :full-screen=\"true\" :dialog-classes=\"{ '_CSS-dialog': true }\">\n    <div slot=\"header\" class=\"_CSS-popup__uploading-bar\" v-show=\"locals.showFinishDialog && Aeppic.Uploads.isUploading\">\n      <div>Uploading...</div>\n      <ae-layout class=\"_CSS-spinner\"  layout-id=\"fefa8352-0e9a-4ba8-8349-c9402ac8aefa\" title=\"Uploading...\" param-color=\"rgb(42, 71, 171)\" :param-show-text=\"true\"></ae-layout>\n    </div>\n    <div slot=\"body\" v-if=\"locals.showFinishDialog\">\n      <div class=\"_CSS-body-container\">\n        <div class=\"_CSS-body\">\n          <div class=\"_CSS-logo-container\">\n            <img v-if=\"locals.logoSrc\" :src=\"locals.logoSrc\">\n          </div>\n\n          <p v-if=\"Aeppic.Uploads.isUploading\" style=\"font-weight: strong; color: red;\">\n            Bitte warten Sie bis alle Uploads abgeschlossen sind!\n            <ae-layout layout-id=\"fefa8352-0e9a-4ba8-8349-c9402ac8aefa\" title=\"Uploading...\" param-color=\"rgb(42, 71, 171)\"></ae-layout>\n          </p>\n          <template v-else>\n            <p>\n              Vielen Dank für das Hochladen der Dateien. \n            </p>\n            <p>\n              Wir erhalten automatisch eine Benachrichtigung. Sie müssen nichts mehr tun.\n            </p>\n\n            <p>\n              Sie können die Seite nun schließen.\n            </p>\n          </template>\n\n          <h2>Hochgeladene Dateien</h2>\n\n          <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n                    :documents=\"locals.result.share.data.uploads\"\n                    param-design=\"attachment-card,ref-card\"\n                    :param-design-params=\"{readonly: true, noRemove: true }\"\n                    :watch-documents=\"true\"\n          ></ae-list>\n        </div>\n      </div>\n    </div>\n  </ae-dialog>\n\n</template>\n\n\n","css":"._CSS-section {\n  margin-bottom: var(--ae-size-5);\n}\n\n._CSS-label {\n  font-size: var(--ae-font-size-7);\n}\n\n._CSS-dialog .ae-dialog__header {\n  padding: 0;\n}","controller":"async init() {\n  this.FORMS = {\n    ZuVersendeneFormulare: '5152f88f-3006-46f9-959a-423139accf79',\n    DokumentenShare: 'c6349b48-9561-4c06-9200-fe9df9b6fb3e',\n    Datei: '6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2',\n    WordVorlage: 'a37b2d75-d9d3-495a-a31c-52094d82e7bb',\n  }\n\n  locals.showFinishDialog = false\n  locals.showUpload = false\n  locals.documents = params.result.documents\n  locals.detailsDocument = null\n  locals.result = {\n    project: null,\n    share: null,\n    filloutFiles: [],\n    filloutUploads: [],\n    shareFiles: [],\n    shareUploads: [],\n  }\n\n  locals.sharedProjectForm = await Aeppic.getForm(this.FORMS.DokumentenShare)\n\n  console.log(params.result)\n\n  locals.result = await this._getDocuments(params.result)\n\n  console.log(locals.result)\n}\n\nasync _getDocuments(resultParam) {\n  const target = await Aeppic.get(params.pageDocumentId)\n\n  const result = {\n    project: await Aeppic.get(target.p),\n    share: await Aeppic.edit(target),\n    filloutFiles: [],\n    filloutUploads: [],\n    shareFiles: [],\n    shareUploads: [],\n  }\n\n  // TODO: template uses hardcoded fieldNames for now. Remove this?\n  // const documents = await Aeppic.getAll(resultParam.documents)\n  // const documentsParents = await Aeppic.getAll(resultParam.documents.map(d => d.p))\n\n  // for (let i = 0; i < documents.length; i++) {\n  //   const document = documents[i]\n\n  //   const lastAForm = document.a_forms.slice(-1)[0]\n\n  //   let prefix = ''\n\n  //   if (lastAForm === this.FORMS.ZuVersendeneFormulare) {\n  //     prefix = 'fillout'\n  //   } else if (lastAForm === this.FORMS.DokumentenShare) {\n  //     prefix = 'share'\n  //   } else {\n  //     console.error(`do not know how to categorize document based on a_form \"${lastAForm}\"`, document)\n  //   }\n\n  //   if (!prefix) {\n  //     continue\n  //   }\n\n  //   // there will be most likely less uploads than files\n  //   const isUpload = documentsParents[i].data.uploads.find(d => d.id === document.id)\n\n  //   if (isUpload) {\n  //     result[`${prefix}Uploads`].push(document)\n  //   } else {\n  //     result[`${prefix}Files`].push(document)\n  //   }\n  // }\n\n  return result\n}\n\nasync showDocument(doc) {\n  locals.detailsDocument = doc\n\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n\n  $refs.dialog.$emit('show')\n}\n\nasync save() {\n  Aeppic.save(locals.result.share)\n\n  locals.showFinishDialog = true\n  $refs.finishDialog.show()\n}"},"locks":[],"created":{"at":"2020-04-22T12:19:33+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2021-06-28T15:27:03+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1624894023363,"ct":1587557973530,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","c6349b48-9561-4c06-9200-fe9df9b6fb3e"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"7a7eafac-f7fa-473a-a93e-7e72c5191c56","v":"591c7bada7bb2da8","previous":{"v":"00bf80431e916445"},"p":"0c8ef865-fd1b-40bd-b665-97ad067fd10f","f":{"id":"layout-form","v":"dad1a77c49465e08","text":"Layout"},"data":{"name":"Account","applies":"","packages":[],"template":"<!-- <ae-design v-if=\"Aeppic.Auth && Aeppic.Auth.info\" class=\"_CSS-info-pane\" :document-id=\"Aeppic.Auth.info.profilePage.id\" name=\"sidebar-tasks\"></ae-design>  -->\n<div class=\"_CSS-flex-container\">\n  <template v-if=\"!Aeppic.Account\">\n    <p style=\"font-weight: bold;\">Nicht angemeldet oder ungültige Anmeldeinformationen. Bitte melden Sie sich ab und erneut an.</p>\n  </template>\n  <template v-else-if=\"Aeppic.Account.data.isGroupAccount\">\n    <ae-layout layout-id=\"1a4a9a3c-bf9d-4e8f-8932-c18ac2ac0825\" @close=\"$refs.loginPopupMenu.close()\"></ae-layout>\n  </template>\n  <!-- <button v-else-if=\"Aeppic.Account.data.isGroupAccount\" class=\"ae-button _CSS-button\" @click=\"$refs.loginPopupMenu.show($event)\" >Anmelden</button> -->\n  <template v-else>\n    <!-- <div>Angemeldet als: </div>\n    <div>{{ Aeppic.Account.data.displayName }}</div> -->\n    <button class=\"ae-button ae-button--secondary\" @click=\"Aeppic.navigateToProfile()\">Mein Profil</button>\n  </template>\n        <!-- <ae-layout class=\"_CSS-popup\" layout-id=\"1a4a9a3c-bf9d-4e8f-8932-c18ac2ac0825\"></ae-layout> -->\n<!--   \n    <ae-popup ref=\"loginPopupMenu\" base-attachment=\"top center\" popup-attachment=\"center center\" :close-delay=\"200\">\n      <div slot=\"popup\" class=\"_CSS-popup\" slot-scope=\"scope\">\n        <ae-layout layout-id=\"1a4a9a3c-bf9d-4e8f-8932-c18ac2ac0825\" @close=\"$refs.loginPopupMenu.close()\"></ae-layout>\n      </div>\n    </ae-popup> -->\n\n    <!-- FIXME: install bizpin as PWA -->\n    <!-- <ae-layout layout-id=\"b0c099c3-6afb-4322-9f7c-97a2b2062db9\"></ae-layout> -->\n    <!-- <ae-layout class=\"_CSS-list\" layout-id=\"438c791d-f725-40c8-95cd-a9166d837339\" v-if=\"Aeppic.Account && !Aeppic.Account.data.isGroupAccount\"></ae-layout> -->\n\n</div>\n<!-- <button class=\"ae-button _CSS-button\" @click=\"Aeppic.navigateHome()\">Home</button> -->\n\n<button v-if=\"Aeppic.Account && Aeppic.Account.data.isGroupAccount\" class=\"ae-button ae-button--secondary _CSS-button--beware\" @click=\"controller.logoutGroupAccount()\">Gruppenkonto abmelden</button>\n<button v-else class=\"ae-button ae-button--secondary\" @click=\"Aeppic.logout()\">Abmelden</button>","css":"._CSS {\n  flex: 1;\n  display: flex;\n  flex-flow: column;\n  justify-content: space-between;\n}\n\n._CSS-list {\n  overflow:hidden;\n  flex:1;\n}\n\n._CSS-flex-container {\n  flex: 1;\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-popup {\n  display:flex;\n  background: white;\n  border: solid 1px gray;\n  box-shadow: 0 0 5px rgba(0,0,0,0.5);\n  min-width:150px;\n  min-height:200px;\n}\n\n._CSS-button--beware {\n  opacity: 0.25;\n  transition: all 0.2s ease-in-out;\n}\n\n._CSS-button._CSS-button--beware:hover {\n  opacity: 1;\n  background: var(--ae-background-d3);\n  color: var(--ae-foreground);\n}","controller":"logoutGroupAccount() {\r\n  if (confirm('Wollen Sie das Gruppenkonto auf diesem Arbeitsplatz entfernen ?') ) {\r\n    Aeppic.logout()\r\n  }\r\n}"},"locks":[],"created":{"at":"2018-04-19T18:13:55+02:00","by":"","from":"","client":"server"},"modified":{"at":"2021-02-04T08:27:35+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1612427255392,"ct":1524154435127,"a_depth":4,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","6b892ddf-3264-4056-b191-166f4410d9fa","0c8ef865-fd1b-40bd-b665-97ad067fd10f"],"a_forms":["folder","application-form","folder","folder"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"209c267a-9f3c-4040-9b91-e98ee590b9af","v":"524b259016cfcd51","previous":{"v":"initial","locks":[]},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Account Contact Info","applies":"","packages":[],"template":"\n<div class=\"ae-row\">\n  <div class=\"ae-col ae-control-container ae-form-cell ae-form-cell--edit\">\n    <div class=\"ae-form-cell__label\">\n    Mobiltelefon  \n    </div>\n    <ae-control class=\"ae-form-cell__control  ae-form-cell__control--edit\" :document=\"params.document\" field-name=\"mobilePhone\" name=\"\"></ae-control>\n  </div>\n</div>\n\n<div class=\"ae-row\">\n  <div class=\"ae-col ae-control-container ae-form-cell ae-form-cell--edit\">\n    <div class=\"ae-form-cell__label\">\n    E-Mail\n    </div>\n    <ae-control class=\"ae-form-cell__control  ae-form-cell__control--edit\" :document=\"params.document\" field-name=\"email\" name=\"\"></ae-control>\n  </div>\n</div>","css":"","controller":""},"locks":[],"created":{"at":"2018-10-05T11:15:07+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2018-10-05T11:15:19+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1538738119221,"ct":1538738107506,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"e4f09165-e130-4309-9cd2-17983d65e103","v":"1b97abe1b8b44d9d","previous":{"v":"0842fb8add3ffd8e"},"p":"0c8ef865-fd1b-40bd-b665-97ad067fd10f","f":{"id":"layout-form","v":"dad1a77c49465e08","text":"Layout"},"data":{"name":"Account Title","applies":"","packages":[],"template":"      <!-- @mouseenter=\"(e) => $refs.userProfilePopup.show(e)\"\n      @mouseleave=\"(e) => $refs.userProfilePopup.close(e)\" -->\n<div  v-if=\"Aeppic.Account\"\n      role=\"button\"\n      class=\"_CSS-tab _CSS-me-tab _CSS-action-button bp-profile-photo bp-profile-photo--small\">\n        <ae-design v-if=\"Aeppic.ProfilePage\" name=\"avatar--tiny,title\" :document=\"Aeppic.ProfilePage\"></ae-design>\n        <ae-design v-else name=\"avatar--tiny,title\" :document=\"Aeppic.Account\"></ae-design>\n</div>\n<div v-else role=\"button\" class=\"_CSS-tab _CSS-me-tab _CSS-action-button bp-profile-photo bp-profile-photo--small\">\n  <ae-icon class=\"fa fa-user-circle fa-2x\"></ae-icon>\n</div>\n\n<ae-popup ref=\"userProfilePopup\" popup-attachment=\"center center\" base-attachment=\"top right\" :close-delay=\"100\" >\n  <div slot=\"popup\" class=\"_CSS-profile-popup\" @mouseenter=\"$refs.userProfilePopup.cancelClose()\" @mouseleave=\"$refs.userProfilePopup.close()\">\n    <div role=\"button\" v-if=\"Aeppic.Account\" class=\"_CSS-action-button bp-profile-photo bp-profile-photo--large\" >\n      <ae-design v-if=\"Aeppic.ProfilePage\" name=\"avatar--small,title\" :document=\"Aeppic.ProfilePage\"></ae-design>\n      <ae-design v-else name=\"avatar--small,title\" :document=\"Aeppic.Account\"></ae-design>\n    </div>\n    <h2 class=\"_CSS-profile-popup__title\">{{ Aeppic.Account && Aeppic.Account.data.displayName }}</h2>\n  </div>\n</ae-popup>\n","css":"._CSS-me-tab {\n  justify-self: flex-end;\n}\n\n._CSS-profile-popup {\n  background-color: var(--ae-background-d1);\n  padding: 8px;\n  box-shadow: 2px 2px 20px 8px rgba(0,0,0,0.2);\n  border-radius: 5px;\n  display: flex;\n  flex-direction:column;\n  align-items:center;\n}\n\n._CSS-profile-popup__title {\n  color: var(--ae-foreground-l2);\n  margin: 8px;\n}","controller":""},"locks":[],"created":{"at":"2018-04-19T18:13:55+02:00","by":"","from":"","client":"server"},"modified":{"at":"2018-12-21T11:03:46+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1545390226035,"ct":1524154435152,"a_depth":4,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","6b892ddf-3264-4056-b191-166f4410d9fa","0c8ef865-fd1b-40bd-b665-97ad067fd10f"],"a_forms":["folder","application-form","folder","folder"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"975669f5-f826-4a47-8cf2-88c297e834c0","v":"f71dea9d20904346","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Action Log","applies":"","packages":[],"template":"<div v-for=\"entry of params.log\" class=\"_CSS-entry\">\r\n  <h4>{{entry.type||'NO TYPE'}}</h4>\r\n  <pre>{{entry.msg}}</pre>\r\n  <div v-for=\"name of Object.keys(entry)\" style=\"white-space:nowrap\">\r\n    <span class=\"_CSS_fieldname\">{{name}}</span>&nbsp;<span class=\"_CSS_fieldvalue\">{{entry[name]}}</span>\r\n  </div>\r\n</div>\r\n","css":"._CSS_fieldname {\r\n  opacity: 0.8;\r\n  min-width: 10em;\r\n  display: inline-block;\r\n}\r\n\r\n._CSS_fieldvalue {\r\n  white-space: nowrap;\r\n}","controller":""},"locks":[],"created":{"at":"2018-07-11T09:52:18+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481247,"ct":1621428481247,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"b69e2f4d6a8ec211","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"4bee8e2b-7373-4a26-ab7a-d3197e3c1177","v":"ec3858c8e19c9977","previous":{"v":"07c5dddbfba57e65"},"p":"792667bf-0eff-419d-b051-f1b1a574503e","f":{"id":"layout-form","v":"4bad04bdaa666934","text":"Layout"},"data":{"name":"Activity Subscription Button","applies":"","packages":[],"template":"<button title=\"Benachrichtigungen für Aktivitäten\" v-if=\"locals.canSubscribe\" class=\"ae-button\" :class=\"{ 'ae-button--small': params.smallButton }\" @click.stop=\"controller.showSubscribeDialog()\">\n  <ae-icon v-if=\"locals.activitySubscription\" class=\"fa fa-bells\"></ae-icon>\n  <ae-icon v-else class=\"far fa-bells\"></ae-icon>\n</button>\n\n<ae-dialog ref=\"subscribeDialog\">\n  <template #header=\"scope\">\n    <div class=\"_CSS-dialog__header\">\n      <div>\n        Benachrichtigungen für Aktivitäten\n      </div>\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n  <template #body>\n    <div class=\"_CSS-dialog__body\">\n      <div v-if=\"locals.activitySubscription\">\n        Sie erhalten aktuell Benachrichtigungen für in \"<ae-design name=\"title\" :document-id=\"controller.documentId\" style=\"display:inline-flex;\"></ae-design>\" erstellte Aktivitäten.\n        <br>\n        (Aktiv seit: {{ Aeppic.DateTime.fromISO(locals.activitySubscription.created.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}})\n      </div> \n      <div v-else>\n        Sie können Benachrichtigungen für in \"<ae-design name=\"title\" :document-id=\"controller.documentId\" style=\"display:inline-flex;\"></ae-design>\" erstellte Aktivitäten aktivieren.\n      </div> \n    </div>\n  </template>\n  <template #commands=\"scope\">\n    <button class=\"ae-button\" @click.stop=\"scope.close()\">\n      Abbrechen\n    </button>\n    <button  class=\"ae-button ae-button--primary\" @click.stop=\"controller.toggleActivitySubscriptions()\">\n      <template v-if=\"locals.activitySubscription\">\n        Deaktivieren\n      </template>\n      <template v-else>\n        Aktivieren\n      </template>\n    </button>\n  </template>\n</ae-dialog>","css":"._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}","controller":"class Controll {\n  async init() {\n    this.FORMS = {\n      ActivitySubscription: '1daa73c2-8f35-4b05-956a-4870f7d2a5ef'\n    }\n\n    // const document = await Aeppic.get(this.documentId)\n    // const activitiesEnabled = await Aeppic.findOne(`p:${document.a[0]} f.id:eadfef5b-1856-40d2-9ed2-6a78e02ad497`)\n\n    // if (!activitiesEnabled) {\n    //   $emit('disabled')\n    //   return\n    // }\n \n    locals.canSubscribe = this.documentId && Aeppic.Account?.data.isGroupAccount === false\n\n    locals.activitySubscription = null\n    \n    if (this.documentId) {\n      Aeppic.subscribe(`p:${this.documentId} f.id:${this.FORMS.ActivitySubscription} created.by:${Aeppic.Account.id}`, { size: 1 }, (docs) => {\n        locals.activitySubscription = docs[0]\n      })\n    }\n\n    $on('show', () => this.showSubscribeDialog())\n  }\n\n  get documentId() {\n    return params.document?.id || params.documentId\n  }\n\n  showSubscribeDialog() {\n    $refs.subscribeDialog.show()\n  }\n\n  async toggleActivitySubscriptions() {\n    if (locals.activitySubscription) {\n      Aeppic.delete(locals.activitySubscription)\n      locals.activitySubscription = null\n    } else {\n      const sub = await Aeppic.new(this.FORMS.ActivitySubscription, this.documentId)\n      Aeppic.save(sub)\n      locals.activitySubscription = sub\n    }\n  }\n}\n "},"locks":[],"created":{"at":"2021-11-09T13:39:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-09-09T14:53:50+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1662735230470,"ct":1636465174532,"a_depth":3,"a":["apps","441fb0bd-959b-446d-9aee-82f1c8ede628","792667bf-0eff-419d-b051-f1b1a574503e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"5a1a3596-acd5-4446-a105-5d6ce02d9b71","v":"eb1df973f26af63e","previous":{"v":"fe621894f807910c"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Add Button","applies":"","packages":[],"template":"<div @click.stop=\"$emit('click', $event)\" class=\"dbps-button ae-noselect\" ref=\"button\">\n  <ae-icon class=\"fa fa-plus-circle\"></ae-icon>\n</div>","css":"","controller":"class Controller {\n  init () {\n    locals.edit = false\n  }\n\n  toggleEdit() {\n    locals.edit = !locals.edit\n\n    if (locals.edit) {\n      $emit('edit')\n    } else {\n      $emit('reset')\n    }\n  }\n}"},"locks":[],"created":{"at":"2018-06-20T16:34:06+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583893681,"ct":1529512446113,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"c1b71894-0012-4f61-8be2-e24d4c62736f","v":"e575be7242ec445a","previous":{"v":"7ca7de26e42384d8"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Add Casting Button","applies":"","packages":[],"template":"<div title=\"Casting hinzufügen\" @click=\"$emit('click', $event)\" class=\"dbps-button ae-noselect\" ref=\"button\">\n  <ae-icon class=\"fa fa-plus-circle\"></ae-icon>\n  <ae-icon class=\"fa fa-users\"></ae-icon>\n</div>","css":"","controller":""},"locks":[],"created":{"at":"2018-06-22T16:48:59+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2019-04-12T14:13:54+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1555078434812,"ct":1529686139704,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2018-07-02T12:39:42+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1621428481248,"data":{"applies":"","controller":"class Controller {\n  async findLocks(name) {\n    let query = `f.id:lock-form`\n\n    if (name) {\n      query += ` AND ${this.wildcardifiedSearchText(name)}`\n    }\n\n    return Aeppic.find(query)\n  }\n\n\n  wildcardifiedSearchText(searchText) {\n    return searchText.split(' ').map((part, i) => {\n      if (part === '') {\n        return ''\n      }\n\n      let wildcard = ''\n      if (part.indexOf(':') === -1) {\n        wildcard = '*'\n      }\n\n      if (i > 0) {\n        return ` AND ${part}${wildcard}`\n      }\n      return `${part}${wildcard}`\n    }).join('')\n  }\n\n  async showLockChooser(event) {\n    locals.lockFilter = ''\n    locals.locks = await this.findLocks()\n\n    $refs.lockPopup.$emit('show', event)\n  }\n\n  async filterLocks(input) {\n    locals.locks = await this.findLocks(input)\n  }\n\n  async addLock(event) {\n    console.log(event)\n    const editableDocument = await Aeppic.edit(params.documentId)\n\n    if (editableDocument.data.name) {\n      editableDocument.data.name += ' '\n    }\n    editableDocument.addLock(event)\n\n    Aeppic.save(editableDocument)\n\n    const editableDocumentTwo = await Aeppic.edit(params.documentId)\n    editableDocumentTwo.data.name.slice(-1)\n\n    Aeppic.save(editableDocumentTwo)\n  }\n}  \n  ","css":"","name":"Add Lock Layout","packages":[],"template":"<div class=\"ae-button\" @click=\"controller.showLockChooser($event)\">\n  <ae-icon class=\"fa fa-lock\"></ae-icon>\n</div>\n<ae-layout  ref=\"lockPopup\"\n            layout-id=\"ed2cc4c2-d2a0-4969-8da7-49fb3d539cc9\"\n            @filter=\"controller.filterLocks($event)\"\n            @selected=\"controller.addLock($event)\"\n            :param-items=\"locals.locks || []\"\n></ae-layout>"},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"81d5259e-8abc-4af2-8531-04f943a745d3","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-05-12T10:28:39+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"0c85728e2a1df51c"},"stamps":[],"t":1778581719075,"v":"b978773de5f9efab"},{"id":"71170c86-ae9a-41b0-9281-625cc316caec","v":"c43f66b84699731d","previous":{"v":"6c82a3f73355746d"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Add Movie Button","applies":"","packages":[],"template":"<div title=\"Film hinzufügen\" @click=\"$emit('click', $event)\" class=\"dbps-button ae-noselect\" ref=\"button\">\n  <ae-icon class=\"fa fa-plus-circle\"></ae-icon>\n  <ae-icon class=\"fa fa-film\"></ae-icon>\n</div>","css":"","controller":"class Controller {\n  init () {\n    locals.edit = false\n  }\n\n  toggleEdit() {\n    locals.edit = !locals.edit\n\n    if (locals.edit) {\n      $emit('edit')\n    } else {\n      $emit('reset')\n    }\n  }\n}"},"locks":[],"created":{"at":"2018-06-22T16:44:46+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2019-04-12T14:13:54+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1555078434817,"ct":1529685886742,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"3f42da21-6444-4775-b736-e6307a9a661c","v":"3e4db4a5f5c6aba1","p":"command-form","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Add New-Command Dialog Layout","applies":"","template":"<div class=\"document-body\">\n  <div class=\"form-group\">\n    <label>Form of the documents to create</label>\n    <iris-ref-picker field=\"document.data.form\" filter='f.id:\"form\"'></iris-ref-picker>\n  </div>\n  <hr/>\n  <iris-form form=\"document.f\" data=\"document.data\" defaults=\"true\"></iris-form>\n  <hr/>\n</div>\n<div class=\"dialog-footer\">\n  <button click-closes-dialog type=\"button\" class=\"btn btn-default\">Close</button>\n  <!-- <button click-saves-document type=\"button\" class=\"btn btn-primary\" >Save changes</button> -->\n  <!-- <button click-saves-document type=\"button\" class=\"btn btn-primary\">Save changes</button> -->\n  <document-actions document=\"document\"></document-actions>\n</div>","css":"","controller":"","packages":[]},"locks":[],"created":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"modified":{"at":"2020-06-26T12:19:41+00:00","by":"8e6c22aa-8c69-4ff8-919a-7032841cf636","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719473826656,"ct":1719473826656,"a_depth":3,"a":["system","system-forms","command-form"],"a_forms":["system-folder-form","repository-folder-form","form"],"inheritedLocks":[null,null,null,null],"stamps":[],"previous":{"v":"b3e700f7aa5e3334","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}},"meta":{"modified":{"at":"2024-06-27T07:37:06+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2022-11-15T09:01:41+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1668502901264,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this.FORMS = {\n      WorkflowDefinition: 'c4e53013-f446-4c9a-8b5c-750333597988'\n    }\n\n    locals.searchSettings = {\n      filter: {\n        formIds: 'stamp-type'\n      }\n    }\n  }\n\n  async stampWith(stampType) {\n    const document = await Aeppic.get(params.document)\n    const workflow = await Aeppic.get(stampType.a[stampType.a_forms.findIndex(aForm => aForm === this.FORMS.WorkflowDefinition)])\n\n    console.log({stampType, workflow})\n\n    let message = `Stamp document ${document.data.name} (${document.id}) with stamp ${stampType.data.name} (${stampType.id})`\n\n    if (workflow && packages.window.confirm(`${message} of workflow ${workflow.data.name} (${workflow.id})?`)) { \n      await Aeppic.stamp(document, stampType, { workflow })\n\n      return\n    }\n\n    if (packages.window.confirm(message)) {\n      await Aeppic.stamp(document, stampType)\n    }\n  }\n}","css":"","name":"Add stamp layout","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"d4ce6dec568c3dc1"}],"template":"<div class=\"ae-button\" @click.stop=\"$refs.selectionButton.$emit('show')\">\n  <ae-icon class=\"fa fa-stamp\"></ae-icon>\n</div>\n\n\n<ae-layout  layout-id=\"36649f27-5869-49e6-9b49-3b5c3b9c795d\"\n            @selected=\"controller.stampWith($event)\"\n            ref=\"selectionButton\"\n            :params=\"{ settings: locals.searchSettings,\n                      hideButton: true\n                    }\" \n></ae-layout> "},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"15282e4d-d998-4a7c-b4d4-fc22de082a4a","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-05-12T10:28:26+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"d1b15449bbd4075f"},"stamps":[],"t":1778581706252,"v":"4081d59c77335489"},{"id":"f5a5c2a0-bf9c-4b44-b05b-8e545156df10","v":"01cc745d4de2712b","previous":{"v":"0a441bf9f11d1b41"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"ae-drop-layout","applies":"","packages":[],"template":"<template v-if=\"params.showUi && locals.canEdit\">\n  <div v-if=\"params.readonly\" class=\"_CSS-file\" ref=\"container\">\n    <div class=\"_CSS-file__drop-area _CSS-file__drop-area--readonly _CSS-file__input-container\" @drop.prevent.stop @dragenter.prevent.stop @dragleave.prevent.stop @dragover.prevent.stop>\n      <ae-icon class=\"fa fa-file _CSS-file--no-thumbnail\"></ae-icon>\n      <span v-translate=\"'file-input:no-files'\"></span>\n    </div> \n  </div>\n  <div v-else class=\"_CSS-file\"  ref=\"container\">\n    <ae-layout v-if=\"params.fileInputLayoutId\"\n              :layout-id=\"params.fileInputLayoutId\"\n              @selected=\"$refs.input.click()\"\n              @drop=\"controller.drop($event)\"\n    ></ae-layout>\n    <div  v-else-if=\"Aeppic.Device === 'Desktop'\"\n          class=\"_CSS-file__drop-area _CSS-file__input-container\"\n          :class=\"{ '_CSS-file__drop-area--hover': locals.dragHover }\"\n          @drop.prevent.stop=\"controller.drop($event)\"\n          @dragenter.prevent.stop=\"locals.dragHover = true\"\n          @dragleave.prevent.stop=\"locals.dragHover = false\"\n          @dragover.prevent.stop=\"controller.onDragOver($event)\"\n    >\n      <template v-if=\"locals.dragHover\">\n        <ae-icon class=\"fa fa-upload _CSS-file--no-thumbnail\"></ae-icon>\n        <span v-translate=\"'file-input:drop-now'\"></span>\n      </template>\n      <template v-else>\n        <ae-icon class=\"fa fa-upload _CSS-file--no-thumbnail\"></ae-icon>\n        <span>\n          <span v-translate=\"'file-input:drop-here'\"></span>\n          \n          <a v-if=\"!params.autoOpen\" class=\"_CSS-file__input-link\" @click.stop=\"$refs.input.click()\">\n            <span v-translate=\"'file-input:select-file'\"></span>\n          </a>\n          <a v-else class=\"_CSS-file__input-link\" @click.stop=\"$refs.input.click()\" @focus=\"$refs.input.click()\" tabindex=\"-1\">\n            <span v-translate=\"'file-input:select-file'\"></span>\n          </a>\n        </span>\n      </template>\n    </div> \n    <div v-else class=\"_CSS-file__phone\">\n      <button class=\"ae-button\" :class=\"[!params.style && 'ae-button--secondary']\" @click.stop=\"$refs.input.click()\" style=\"width:100%;\">\n        <ae-icon class=\"fa fa-upload\"></ae-icon>\n        <span v-translate=\"'file-input:upload-files'\"></span>\n      </button>\n    </div>\n  </div>\n  <!-- <input @change=\"controller.selected($event)\" ref=\"input\" type=\"file\" style=\"display: none;\"> -->\n  <input @change=\"controller.selected($event)\" ref=\"input\" type=\"file\" style=\"display: none;\" multiple :accept=\"params.types || ''\" :data-test=\"params.fieldName\">\n  <!-- <img ref=\"hiddenImage\" :src=\"field.dataUrl\" @load=\"controller.imageLoaded()\" style=\"display: none;\"> -->\n</template>\n\n\n<!-- TODO: add param unzip -->\n<!-- <ae-layout layout-id=\"e5ef33a8-2f47-44b0-8cda-6e12be801e28\"></ae-layout> -->","css":"._CSS-file__input-container {\n  padding: 8px;\n  display: flex;\n  align-items: center;\n}\n\n._CSS-file__input-link {\n  cursor: pointer;\n  color: var(--ae-foreground-l1);\n  font-weight: bold;\n}\n\n._CSS-file__input-link:hover,_CSS-file__input-link:focus {\n  text-decoration: underline;\n}\n\n._CSS-file__description {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  flex: 1;\n}\n\n._CSS-file__drop-area {\n  border: var(--ae-border-width-2) dashed var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  /*padding: 2em 1em;*/\n  color: var(--ae-foreground-l2);\n  background: var(--ae-ui-background);\n}\n._CSS-file__drop-area._CSS-file__drop-area--readonly {\n  border: var(--ae-border-width-1) solid var(--ae-border-color);\n}\n\n@keyframes _CSS-pulse {\n  0% {\n    background-color: var(--ae-primary-100);\n  }\n  50% {\n    background-color: var(--ae-primary-200);\n  }\n  100% {\n    background-color: var(--ae-primary-100);\n  }\n}\n._CSS-file__drop-area--hover {\n  animation: _CSS-pulse 2s infinite;\n  background-color: var(--ae-primary-100);\n}\n\n._CSS-file--no-thumbnail {\n  color: var(--ae-background-500);\n  margin-right: var(--ae-size-2);\n}\n\n._CSS-preview-header {\n  display: flex;\n  justify-content: space-between;\n}\n\n._CSS-preview-header__entry {\n  display: flex;\n  align-items: center;\n  flex: 1;\n}\n\n._CSS-file-thumbnail {\n  height: 4rem;\n  width: 4rem;\n  background-size: cover;\n  background-repeat: no-repeat;\n  background-position-x: center;\n  background-color: #e2e2e2;\n  cursor: pointer;\n}\n\n\n._CSS-file__phone {\n  display: flex;\n  justify-content: center;\n}","controller":"class FileControl {\n  async init() {\n    this.fileExtToMimeTypeMap = {\n      'md': 'text/markdown',\n      'markdown': 'text/markdown',\n      'mp4': 'video/mp4',\n      'mp3': 'audio/mp3',\n      'svg': 'image/svg+xml',\n      'jpg': 'image/jpeg',\n      'png': 'image/png',\n      'gif': 'image/gif',\n      'yaml': 'text/yaml',\n      'yml': 'text/yaml',\n      'csv': 'text/csv',\n      'avi': 'video/x-msvideo',\n      'mks': 'video/x-matroska',\n      'mkv': 'video/x-matroska',\n      'mov': 'video/quicktime',\n      'doc': 'application/msword',\n      'docm': 'application/vnd.ms-word.document.macroenabled.12',\n      'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n      'dot': 'application/msword',\n      'dotm': 'application/vnd.ms-word.template.macroenabled.12',\n      'dotx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n      'xla': 'application/vnd.ms-excel',\n      'xlam': 'application/vnd.ms-excel.addin.macroenabled.12',\n      'xlc': 'application/vnd.ms-excel',\n      'xlf': 'application/x-xliff+xml',\n      'xlm': 'application/vnd.ms-excel',\n      'xls': 'application/vnd.ms-excel',\n      'xlsb': 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n      'xlsm': 'application/vnd.ms-excel.sheet.macroenabled.12',\n      'xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n      'xlt': 'application/vnd.ms-excel',\n      'xltm': 'application/vnd.ms-excel.template.macroenabled.12',\n      'xltx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n      'xlw': 'application/vnd.ms-excel',\n      'odc': 'application/vnd.oasis.opendocument.chart',\n      'otc': 'application/vnd.oasis.opendocument.chart-template',\n      'odb': 'application/vnd.oasis.opendocument.database',\n      'odf': 'application/vnd.oasis.opendocument.formula',\n      'odft': 'application/vnd.oasis.opendocument.formula-template',\n      'odg': 'application/vnd.oasis.opendocument.graphics',\n      'otg': 'application/vnd.oasis.opendocument.graphics-template',\n      'odi': 'application/vnd.oasis.opendocument.image',\n      'oti': 'application/vnd.oasis.opendocument.image-template',\n      'odp': 'application/vnd.oasis.opendocument.presentation',\n      'otp': 'application/vnd.oasis.opendocument.presentation-template',\n      'ods': 'application/vnd.oasis.opendocument.spreadsheet',\n      'ots': 'application/vnd.oasis.opendocument.spreadsheet-template',\n      'odt': 'application/vnd.oasis.opendocument.text',\n      'otm': 'application/vnd.oasis.opendocument.text-master',\n      'ott': 'application/vnd.oasis.opendocument.text-template',\n      'oth': 'application/vnd.oasis.opendocument.text-web',\n      'ppt':\t'application/mspowerpoint',\n      'pptx':\t'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n      'pot':\t'application/mspowerpoint',\n      'potx':\t'application/vnd.openxmlformats-officedocument.presentationml.template',\n      'pps':\t'application/mspowerpoint',\n      'ppsx':\t'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n      'ppa':\t'application/mspowerpoint',\n      'ppam':\t'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n      'pptm':\t'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n      'ppsm':\t'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',\n      'potm':\t'application/vnd.ms-powerpoint.template.macroEnabled.12',\n      'pdf': 'application/pdf',\n      'heic': 'image/heic',\n    }\n\n    locals.dragHover = false\n\n    this.dropHandler = event => this.drop(event)\n    this.selectedHandler = event => this.selected(event)\n    this.pasteHandler = event => this.paste(event)\n\n    $on('drop', this.dropHandler)\n    $on('input', this.selectedHandler)\n    $on('paste', this.pasteHandler)\n\n    // FIXME: why was this code here?! This obviously breaks access restriction in some cases\n    // if (params.document && params.document.v === 'initial') {\n    //   this.canEdit = true \n    // } else {\n      const canEdit = await Aeppic.canEdit(params.document)\n      this.canEdit = Aeppic.Account && Aeppic.Account.data.isGroupAccount === false && canEdit === true\n    // }\n\n    locals.canEdit = this.canEdit\n  }\n\n  onDragOver(e) {\n    locals.dragHover = true\n\n    const dataTransfer = e.dataTransfer\n    dataTransfer.dropEffect = 'copy'\n  }\n\n  announceNewDocuments(documents, directories) {\n    const documentIds = Array.isArray(documents) ? documents : [documents]\n    const directoryIds = Array.isArray(directories) ? directories : [directories]\n\n    const added = {}\n\n    if (documentIds && documentIds[0]) {\n      added.documentIds = documentIds\n    }\n\n    if (directoryIds && directoryIds[0]) {\n      added.directoryIds = directoryIds\n    }\n\n    $emit('added', added)\n  }\n\n  get documentToAddTo() {\n    if (!params.document) {\n      console.error('need param document')\n      return null\n    }\n\n    return params.document\n  }\n\n  newDocumentsParent(overwrittenParentId) {\n    return overwrittenParentId || params.parentId || this.documentToAddTo.id\n  }\n\n  async newFileDocument(overwrittenParent) {\n    if (!params.fieldToAddTo) {\n      if (!params.fileFormId || !params.fileFormField) {\n        console.error('no fieldToAddTo requires fileFormId and fileFormField: trying to add a new child of a parent')\n        return {}\n      }\n\n      const doc = await Aeppic.new(params.fileFormId, this.newDocumentsParent(overwrittenParent))\n      const formOfFileDocument = await Aeppic.getFormForDocument(doc)\n      const fieldInfo = formOfFileDocument.getField(params.fileFormField)\n\n      return {\n        fileDocument: doc,\n        fieldInfo\n      }\n    }\n\n    const form = await Aeppic.getFormForDocument(this.documentToAddTo)\n\n    const fieldInfo = form.getField(params.fieldToAddTo)\n\n    if (fieldInfo.subType === 'ref') {\n      if (!params.fileFormId || !params.fileFormField) {\n        console.error('fieldToAddTo field requires fileFormId and fileFormField: trying to add new document of some parent as reference')\n        return {}\n      }\n\n      // case: params.fieldToAddTo given and is a ref field -> add as ref\n      const doc = await Aeppic.new(params.fileFormId, this.newDocumentsParent(overwrittenParent))\n      const docForm = await Aeppic.getFormForDocument(doc)\n      const newDocumentFieldInfo = docForm.getField(params.fileFormField)\n\n      this.documentToAddTo.addReference(params.fieldToAddTo, doc)\n\n      return {\n        fileDocument: doc,\n        fieldInfo: newDocumentFieldInfo\n      }\n    }\n\n    return {\n      fileDocument: this.documentToAddTo,\n      fieldInfo\n    }\n  }\n\n  async newDirectoryDocument(overwrittenParent) {\n    return Aeppic.new(params.directoryFormId, this.newDocumentsParent(overwrittenParent))\n  }\n\n  async selected(event) {\n    if (!this.canEdit) {\n      return\n    }\n\n    const fileList = event.target.files\n\n    if (!fileList.length) {\n      return\n    }\n\n    const files = []\n    const useGetFile = fileList instanceof DataTransferItemList\n\n    for (let i = 0; i < fileList.length; i++) {\n      if (useGetFile) {\n        files.push(fileList[i].getAsFile())\n      } else {\n        files.push(fileList.item(i))\n      }\n    }\n    // OLD:\n    // files.push(fileList[0].getAsFile())\n    // files.push(fileList.item(0))\n\n    const filePromises = []\n\n    for (const file of files) {\n      const filePromise = new Promise(async (resolve) => {\n        const { fileDocument, fieldInfo } = await this.newFileDocument()\n\n        const field = Object.assign({}, fieldInfo.defaultValue)\n        field.name = file.name\n        field.type = file.type\n        field.size = file.size\n        const dateString = Aeppic.DateTime.fromMillis(file.lastModified).toJSON()\n        field.fileInfo.created = dateString\n        field.fileInfo.modified = dateString\n\n        this._setFileDocumentName(fileDocument, file.name)\n\n        fileDocument.data[fieldInfo.name] = field\n\n        fileDocument.setFile(fieldInfo.name, file)\n\n        await this._saveOrCommitNewDocument(fieldInfo, fileDocument)\n\n        resolve(fileDocument)\n      })\n\n      filePromises.push(filePromise)\n    }\n\n    const createdFiles = await Promise.all(filePromises)\n    const createdFileIds = createdFiles.map(d => d.id) \n\n    this.announceNewDocuments(createdFileIds)\n\n    if ($refs.input) {\n      $refs.input.value = ''\n    }\n  }\n  \n  async _saveOrCommitNewDocument(fieldInfo, newDocument) {\n    params.debug && console.log('_saveOrCommitNewDocument', 'fieldInfo', fieldInfo, 'newDocument', newDocument, 'params', params)\n    \n    const documentToAddToForm = await Aeppic.getFormForDocument(this.documentToAddTo)\n\n    const documentToAddToFieldInfo = documentToAddToForm.hasField(params.fieldToAddTo) && documentToAddToForm.getField(params.fieldToAddTo)\n    \n    if (documentToAddToFieldInfo.subType === 'ref' || params.saveNewDocuments) {\n      params.debug && console.log('_saveOrCommitNewDocument', 'save')\n      Aeppic.save(newDocument)\n    } else {\n      params.debug && console.log('_saveOrCommitNewDocument', 'commit')\n      Aeppic.commit(newDocument)\n    }\n  }\n\n  async drop(event) {\n    locals.dragHover = false\n\n    if (!this.canEdit) {\n      return\n    }\n\n    const fileList = event.dataTransfer.items\n\n    if (!fileList.length) {\n      return\n    }\n\n    const supportsWebkitGetAsEntry = fileList.length && fileList[0].webkitGetAsEntry\n    const files = []\n    const directories = []\n\n    for (const fileListItem of fileList) {\n      if (supportsWebkitGetAsEntry) {\n        const fileSystemEntry = fileListItem.webkitGetAsEntry()\n        fileSystemEntry.type = fileListItem.type\n\n        if (fileSystemEntry.isFile) {\n          files.push(fileSystemEntry)\n        } else {\n          directories.push(fileSystemEntry)\n        }\n      } else {\n        // TODO\n        // files.push(fileListItem.item(0))\n      }\n    }\n\n    params.debug && console.log('drop', files, directories)\n    const addedDocumentIds = await this.addFiles(files)\n    const addedDirectoriesAndTheirFiles = await this.addDirectories(directories)\n\n    const allFileIds = addedDocumentIds.concat(addedDirectoriesAndTheirFiles.fileIds)\n    const allDirectoryIds = addedDirectoriesAndTheirFiles.directoryIds\n\n    this.announceNewDocuments(allFileIds, allDirectoryIds)\n  }\n\n  async paste(event) {\n    if (!this.canEdit) {\n      return\n    }\n\n    const fileList = event.clipboardData.items\n    if (!fileList.length) {\n      return\n    }\n\n    const files = []\n    for (const fileListItem of fileList) {\n      if (fileListItem.kind === 'file') {\n        files.push(fileListItem)\n      }\n    }\n\n    if (!files.length) {\n      return\n    }\n\n    event.preventDefault()\n\n    const addedDocumentIds = await this.addFiles(files, null, { useGetFile: true })\n\n    this.announceNewDocuments(addedDocumentIds)\n  }  \n\n  async addFiles(files, overwriteParentId, options) {\n    const optionsWithDefault = options || {}\n\n    const promises = []\n    for (const file of files) {\n      const promise = new Promise(async (resolve) => {\n        const fileBinary = await this.readFile(file, optionsWithDefault.useGetFile)\n\n        const { fileDocument, fieldInfo } = await this.newFileDocument(overwriteParentId)\n\n        this._setFileDocumentName(fileDocument, fileBinary.name)\n        // fileDocument.data.name = fileBinary.name\n\n        const fileType = fileBinary.type || file.type || this._guessFileType(fileBinary.name)\n\n        params.debug && console.log('addFiles (file, fileType)', file, fileType)\n\n        // const dateString = Aeppic.DateTime.fromMillis(fileObject.lastModified).toJSON()\n        // fileDocument.data.datei.fileInfo.created = dateString\n        // fileDocument.data.datei.fileInfo.modified = dateString\n\n        fileDocument.setFile(fieldInfo.name, fileBinary, {\n          type: fileType\n        })\n\n        await this._saveOrCommitNewDocument(fieldInfo, fileDocument)\n\n        params.debug && console.log('addFiles', fileDocument)\n        resolve(fileDocument.id)\n      })\n\n      promises.push(promise)\n    }\n    return Promise.all(promises)\n  }\n\n  async readFile(fileListItem, useGetFile = false) {\n    if (useGetFile) {\n      return fileListItem.getAsFile()\n    }\n\n    const promise = new Promise((resolve) => {\n      fileListItem.file((fileObject) => {\n        resolve(fileObject)\n      })\n    })\n\n    return promise\n  }\n\n  _setFileDocumentName(fileDocument, newName) {\n    // const documentIsDocumentToAddTo = this.documentToAddTo.id === fileDocument.id\n\n    // if (documentIsDocumentToAddTo || !params.fileNameToField) {\n    if (!params.fileNameToField) {\n      return fileDocument\n    }\n\n    fileDocument.data[params.fileNameToField.replace(/\\[|\\]/g, '')] = newName\n\n    return fileDocument\n  }\n\n  _guessFileType(fileBinaryName) {\n    if (!fileBinaryName) {\n      return ''\n    }\n    \n    const parts = fileBinaryName.split('.')\n    if (parts.length < 2) {\n      return ''\n    }\n\n    const ext = parts.slice(-1)[0]\n\n    return this.fileExtToMimeTypeMap[ext] || ''\n  }\n\n  async addDirectories(directories, overwriteParentId) {\n    const promises = []\n\n    for (const directory of directories) {\n      let directoryDocument\n      \n      if (!params.flatten) {\n        directoryDocument = await this.newDirectoryDocument(overwriteParentId)\n        directoryDocument.data.name = directory.name\n\n        // FIXME: once children of committed parents can be added, use the saveOrCommit function\n        // this._saveOrCommitNewDocument(fieldInfo, fileDocument)\n        Aeppic.save(directoryDocument)\n      }\n\n      params.debug && console.log('addDir', directoryDocument)\n\n      const dirReader = directory.createReader()\n\n      const readBatchFn = async () => {\n        const promise = new Promise((resolve) => {\n          dirReader.readEntries(async (entries) => {\n            const files = []\n            const directories = []\n\n            for (const entry of entries) {\n              if (entry.isFile) {\n                files.push(entry)\n              } else {\n                directories.push(entry)\n              }\n            }\n\n            const overwrittenParentId = params.flatten ? null : directoryDocument.id\n\n            const fileIdsInDirectory = await this.addFiles(files, overwrittenParentId)\n\n            const { directoryIds, fileIds } = await this.addDirectories(directories, overwrittenParentId)\n\n            const fileIdsAndLowerIds = fileIdsInDirectory.concat(fileIds)\n\n            if (directoryDocument) {\n              directoryIds.unshift(directoryDocument.id)\n            }\n\n            resolve({ \n              fileIds: fileIdsAndLowerIds,\n              directoryIds: directoryIds\n            })\n          }, error => console.error(error))\n        })\n\n        promises.push(promise)\n\n        return promise\n      }\n\n      let readNextBatch = true\n\n      while(readNextBatch) {\n        const { fileIds, directoryIds } = await readBatchFn()\n\n        if (fileIds.length < 100 && directoryIds.length < 100) {\n          readNextBatch = false\n        }\n      }\n    }\n\n    const promisesResult = await Promise.all(promises)\n\n    const result = {\n      directoryIds: [],\n      fileIds: []\n    }\n\n    for (const promise of promisesResult) {\n      result.directoryIds = result.directoryIds.concat(promise.directoryIds)\n      result.fileIds = result.fileIds.concat(promise.fileIds)\n    }\n\n    return result\n  }\n\n  // imageLoaded() {\n  //   const height = $refs.hiddenImage && $refs.hiddenImage.naturalHeight \n  //   const width = $refs.hiddenImage && $refs.hiddenImage.naturalWidth\n  //   if (!$refs.hiddenImage || !height || !width) {\n  //     return\n  //   }\n\n  //   const field = getField()\n  //   if (field.mediaInfo) {\n  //     field.mediaInfo.height = height\n  //     field.mediaInfo.width = width\n  //     setField(field)\n  //   }\n  // }\n}\n"},"locks":[],"created":{"at":"2018-05-29T11:59:49+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2023-07-10T14:25:47+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1688999147556,"ct":1621428481248,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"8b752d35-4f84-4a85-89ed-5646d56daf5e","v":"f26e12781d472bc1","previous":{"v":"8f66d1bc934b2a45"},"p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Alle mir zugewiesenen Aufgaben Dialog","applies":"","packages":[],"template":"<ae-dialog v-if=\"locals.visible\" ref=\"dialog\" title=\"Meine Aufgaben\" @close=\"controller.close()\" :dialog-size=\"{ height: 'var(--ae-dialog__height--big)' }\">\n  <div slot=\"header\" slot-scope=\"scope\" style=\"display: flex; justify-content: space-between;\">\n    <div>Meine Aufgaben</div>\n    <button class=\"ae-button\" @click=\"scope.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div class=\"_CSS-body\" slot=\"body\" slot-scope=\"scope\">\n    <ae-layout  layout-id=\"9d6ba0de-4e22-4291-b1d8-4e73b55ed3b9\"\n                style=\"flex: 1;\"\n                :param-company-id=\"Aeppic.Account[0]\"\n                :param-user-id=\"Aeppic.ProfilePage.id\"\n                param-initial-filters=\"data.erledigt:false\"\n                @selected=\"scope.close(); Aeppic.drillInto($event)\"\n    ></ae-layout>\n  </div>\n</ae-dialog>\n","css":"._CSS-body {\n  display: flex;\n}","controller":"class Controller {\n  init() {\n    locals.visible = false\n\n    $on('show', () => this.show())\n  }\n\n  async show() {\n    locals.visible = true\n\n    await Aeppic.waitForNextAnimationFrame()\n    await Aeppic.waitForNextAnimationFrame()\n\n    $refs.dialog.show()\n  }\n\n  close() {\n    locals.visible = false\n  }\n}"},"locks":[],"created":{"at":"2020-05-08T08:51:34+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2020-10-29T10:23:09+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1603966989386,"ct":1588927894389,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"hidden":false,"readonly":false},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","594e6b26-7310-4d00-aad9-2a577ccab542"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"abc36759-63ce-423b-9176-69d395e76082","text":"Wartung: Root Layout","v":"a3cbdca31193dbac"},"created":{"at":"2026-01-27T09:23:44+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"ct":1769505831612,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    console.log('init')\n    \n    locals.theme = 'ae-light'\n    locals.ready = false\n\n    const appId = layout.a[1]\n\n    const preloadIds = [\n    ]\n\n    // preload app\n    const preloadLocations = [\n      `a:${appId}`,\n      'p:91f205bc-9989-4fbe-8966-bd4ba9777c26 f.id:control-form',\n      'p:controls-folder f.id:control-form',\n    ]\n\n    const [, ids] = await Promise.all([\n      Aeppic.find(preloadLocations.join(' OR '), { size: 9999 }),\n      Aeppic.getAll(preloadIds)\n    ])\n\n    if (Aeppic.Account?.isAdmin) {\n      console.log('preloaded these documents')\n\n      const loggingArray = ids.map(id => id ? [id.data.name, id.a.join(' > ')] : [])\n      loggingArray.push(['Aeppic.find( ... )', preloadLocations.join(' OR ')])\n      console.table(loggingArray)\n    }\n\n    const realmId = Aeppic.Account?.data.isAdmin ? \n      '4e5abc6c-f843-4121-8601-fbb9d6636fff' : // _DEV_Keeptrack 2.0\n        Aeppic.Account?.a[0]\n\n    locals.startup = Aeppic.Account && await Aeppic.findOne(`a:${realmId} a_forms:c69a0c1c-6c53-40c2-87e8-5ace866bf1df f.id:c6931d87-a1f3-4b34-bc1b-3f0bfe7398f8`, { sort: { field: 'created.at', descending: true }})\n\n    Aeppic.on('login', async () => {\n      const realmId = Aeppic.Account?.data.isAdmin ? \n      '4e5abc6c-f843-4121-8601-fbb9d6636fff' : // _DEV_Keeptrack 2.0\n        Aeppic.Account?.a[0]\n\n      locals.startup = Aeppic.Account && await Aeppic.findOne(`a:${realmId} a_forms:c69a0c1c-6c53-40c2-87e8-5ace866bf1df f.id:c6931d87-a1f3-4b34-bc1b-3f0bfe7398f8`, { sort: { field: 'created.at', descending: true }})\n    })\n\n    locals.ready = true\n  }\n}","css":"._CSS {\n  width:100%;\n  height:100%;\n}\n\n._CSS-root {\n  background: var(--ae-background-100);\n  flex-direction:column;\n  width:100%;\n  height:100%;\n  overflow: hidden;\n}\n \n._CSS-app {\n  width:100%;\n  height:100%;\n  overflow: hidden;\n}\n\n._CSS-loader {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    width: 100%;\n    height: 100%;\n}\n\n._CSS-main {\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n  flex:1;\n  xalign-items: stretch;\n  height:100%;\n  line-height: 1.4;\n  color: var(--ae-background-900);\n\n  background-color: hsla(0, 0%, 99%);\n  /* \"Topography\" by \"Steve Schoger\" (https://www.heropatterns.com) is licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) */\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='600' viewBox='0 0 600 600'%3E%3Cpath fill='%239C92AC' fill-opacity='0.04' d='M600 325.1v-1.17c-6.5 3.83-13.06 7.64-14.68 8.64-10.6 6.56-18.57 12.56-24.68 19.09-5.58 5.95-12.44 10.06-22.42 14.15-1.45.6-2.96 1.2-4.83 1.9l-4.75 1.82c-9.78 3.75-14.8 6.27-18.98 10.1-4.23 3.88-9.65 6.6-16.77 8.84-1.95.6-3.99 1.17-6.47 1.8l-6.14 1.53c-5.29 1.35-8.3 2.37-10.54 3.78-3.08 1.92-6.63 3.26-12.74 5.03a384.1 384.1 0 0 1-4.82 1.36c-2.04.58-3.6 1.04-5.17 1.52a110.03 110.03 0 0 0-11.2 4.05c-2.7 1.15-5.5 3.93-8.78 8.4a157.68 157.68 0 0 0-6.15 9.2c-5.75 9.07-7.58 11.74-10.24 14.51a50.97 50.97 0 0 1-4.6 4.22c-2.33 1.9-10.39 7.54-11.81 8.74a14.68 14.68 0 0 0-3.67 4.15c-1.24 2.3-1.9 4.57-2.78 8.87-2.17 10.61-3.52 14.81-8.2 22.1-4.07 6.33-6.8 9.88-9.83 12.99-.47.48-.95.96-1.5 1.48l-3.75 3.56c-1.67 1.6-3.18 3.12-4.86 4.9a42.44 42.44 0 0 0-9.89 16.94c-2.5 8.13-2.72 15.47-1.76 27.22.47 5.82.51 6.36.51 8.18 0 10.51.12 17.53.63 25.78.24 4.05.56 7.8.97 11.22h.9c-1.13-9.58-1.5-21.83-1.5-37 0-1.86-.04-2.4-.52-8.26-.94-11.63-.72-18.87 1.73-26.85a41.44 41.44 0 0 1 9.65-16.55c1.67-1.76 3.18-3.27 4.83-4.85.63-.6 3.13-2.96 3.75-3.57a71.6 71.6 0 0 0 1.52-1.5c3.09-3.16 5.86-6.76 9.96-13.15 4.77-7.42 6.15-11.71 8.34-22.44.86-4.21 1.5-6.4 2.68-8.6.68-1.25 1.79-2.48 3.43-3.86 1.38-1.15 9.43-6.8 11.8-8.72 1.71-1.4 3.26-2.81 4.7-4.3 2.72-2.85 4.56-5.54 10.36-14.67a156.9 156.9 0 0 1 6.1-9.15c3.2-4.33 5.9-7.01 8.37-8.07 3.5-1.5 7.06-2.77 11.1-4.02a233.84 233.84 0 0 1 7.6-2.2l2.38-.67c6.19-1.79 9.81-3.16 12.98-5.15 2.14-1.33 5.08-2.33 10.27-3.65l6.14-1.53c2.5-.63 4.55-1.2 6.52-1.82 7.24-2.27 12.79-5.06 17.15-9.05 4.05-3.72 9-6.2 18.66-9.9l4.75-1.82c1.87-.72 3.39-1.31 4.85-1.91 10.1-4.15 17.07-8.32 22.76-14.4 6.05-6.45 13.95-12.4 24.49-18.92 1.56-.96 7.82-4.6 14.15-8.33v-64.58c-4 8.15-8.52 14.85-12.7 17.9-2.51 1.82-5.38 4.02-9.04 6.92a1063.87 1063.87 0 0 0-6.23 4.98l-1.27 1.02a2309.25 2309.25 0 0 1-4.87 3.9c-7.55 6-12.9 10.05-17.61 13.19-3.1 2.06-3.86 2.78-8.06 7.13-5.84 6.07-11.72 8.62-29.15 10.95-11.3 1.5-20.04 4.91-30.75 11.07-1.65.94-7.27 4.27-6.97 4.1-2.7 1.58-4.69 2.69-6.64 3.66-5.63 2.8-10.47 4.17-15.71 4.17-17.13 0-41.44 11.51-51.63 22.83-12.05 13.4-31.42 27.7-45.25 31.16-7.4 1.85-11.85 7.05-14.04 14.69-1.26 4.4-1.58 8.28-1.58 13.82 0 .82.01.98.24 3.63.45 5.18.35 8.72-.77 13.26-1.53 6.2-4.89 12.6-10.59 19.43-13.87 16.65-22.88 46.58-22.88 71.68 0 2.39.02 4.26.06 8.75.12 10.8.1 15.8-.22 21.95-.56 11.18-2.09 20.73-5 29.3h-1.05c2.94-8.56 4.49-18.12 5.05-29.35.31-6.13.34-11.1.22-21.9-.04-4.48-.06-6.36-.06-8.75 0-25.32 9.07-55.47 23.12-72.32 5.6-6.72 8.88-12.99 10.38-19.03 1.09-4.4 1.18-7.85.74-12.93-.23-2.7-.24-2.86-.24-3.72 0-5.62.32-9.57 1.62-14.1 2.28-7.95 6.97-13.44 14.76-15.39 13.6-3.4 32.82-17.59 44.75-30.84C409 360.14 433.58 348.5 451 348.5c5.07 0 9.77-1.33 15.26-4.07 1.93-.96 3.9-2.05 6.58-3.62-.3.18 5.33-3.16 6.98-4.11 10.82-6.21 19.66-9.67 31.11-11.2 17.23-2.3 22.9-4.75 28.57-10.64 4.25-4.41 5.04-5.16 8.22-7.28 4.68-3.11 10.01-7.14 17.55-13.14a1113.33 1113.33 0 0 0 4.86-3.89l1.28-1.02a4668.54 4668.54 0 0 1 6.23-4.98c3.67-2.9 6.55-5.12 9.07-6.95 4.37-3.19 9.16-10.56 13.29-19.4v66.9zm0-116.23c-.62.01-1.27.06-1.95.13-6.13.63-13.83 3.45-21.83 7.45-3.64 1.82-8.46 2.67-14.17 2.71-4.7.04-9.72-.47-14.73-1.33-1.7-.3-3.26-.61-4.67-.93a31.55 31.55 0 0 0-3.55-.57 273.4 273.4 0 0 0-16.66-.88c-10.42-.16-17.2.74-17.97 2.73-.38.97.6 2.55 3.03 4.87 1.01.97 2.22 2.03 4.04 3.55a1746.07 1746.07 0 0 0 4.79 4.02c1.39 1.2 3.1 1.92 5.5 2.5.7.16.86.2 2.64.54 3.53.7 5.03 1.25 6.15 2.63 1.41 1.76 1.4 4.54-.15 8.88-2.44 6.83-5.72 10.05-10.19 10.33-3.63.23-7.6-1.29-14.52-5.06-4.53-2.47-6.82-7.3-8.32-15.26-.17-.87-.32-1.78-.5-2.86l-.43-2.76c-1.05-6.58-1.9-9.2-3.73-10.11-.81-.4-1.59-.74-2.36-1-2.27-.77-4.6-1.02-8.1-.92-2.29.07-14.7 1-13.77.93-20.55 1.37-28.8 5.05-37.09 14.99a133.07 133.07 0 0 0-4.25 5.44l-2.3 3.09-2.51 3.32c-4.1 5.36-7.06 8.48-10.39 11.12-.65.52-1.33 1.04-2.13 1.62l-4.11 2.94a106.8 106.8 0 0 0-5.16 3.99c-4.55 3.74-9.74 8.6-16.25 15.38-8.25 8.58-11.78 13.54-11.7 15.95.07 1.65 1.64 2.11 6.79 2.38 1.61.09 2.15.12 2.98.2 2.95.24 5.09.73 6.81 1.68 7.48 4.15 11.63 7.26 13.95 11.58 3.3 6.15.8 12.88-8.89 20.26-8.28 6.3-11.1 10.37-11.31 14.96-.06 1.17 0 1.93.26 4.43.69 6.47.25 10.65-2.8 17.42a44.23 44.23 0 0 1-4.16 7.53c-2.82 3.97-5.47 5.74-10.6 7.69-.43.16-3.34 1.23-4.27 1.59-1.8.68-3.38 1.36-5.01 2.14-4.18 2-8.4 4.6-13.1 8.24-8.44 6.51-13.23 14.56-15.98 25.06-1.1 4.2-1.55 6.81-2.8 15.21-1.26 8.6-2.17 12.64-4.08 16.55-2.1 4.28-11.93 26.59-12.97 28.88a382.7 382.7 0 0 1-6.37 13.41c-4.07 8.11-7.61 14.07-10.73 17.81-5.38 6.46-8.98 14.37-13.77 28.42a810.14 810.14 0 0 0-1.89 5.6c-1.8 5.35-2.96 8.6-4.26 11.85-6.13 15.32-25.43 26.31-46.46 26.31-11.2 0-20.58-2.74-31.02-8.55-5.6-3.13-4.55-2.42-22.26-14.54-14.33-9.8-17.7-10.73-20.47-6.9-.37.5-1.81 2.74-1.83 2.77a52.24 52.24 0 0 1-4.94 5.9c-.73.79-5.52 5.87-6.97 7.45-2.38 2.6-4.3 4.81-5.98 6.93a45.6 45.6 0 0 0-5.08 7.66c-1.29 2.57-1.9 5.25-2.66 10.6a997.6 997.6 0 0 1-.46 3.18h-1l.47-3.32c.77-5.45 1.4-8.2 2.75-10.9a46.54 46.54 0 0 1 5.2-7.84c1.7-2.14 3.63-4.38 6.03-6.98 1.45-1.59 6.24-6.68 6.96-7.46a51.58 51.58 0 0 0 4.84-5.78s1.47-2.26 1.86-2.8c3.25-4.5 7.08-3.44 21.84 6.67 17.67 12.08 16.62 11.38 22.19 14.48 10.3 5.73 19.5 8.43 30.53 8.43 20.65 0 39.57-10.77 45.54-25.69a219.7 219.7 0 0 0 4.24-11.8 6752.32 6752.32 0 0 0 1.88-5.6c4.83-14.16 8.47-22.14 13.96-28.73 3.05-3.66 6.56-9.57 10.6-17.61 1.97-3.93 4.04-8.31 6.35-13.38 1.03-2.28 10.88-24.61 12.98-28.91 1.85-3.79 2.75-7.76 4-16.25 1.24-8.44 1.7-11.07 2.81-15.32 2.8-10.7 7.71-18.94 16.33-25.6a73.18 73.18 0 0 1 13.29-8.35c1.66-.8 3.27-1.48 5.08-2.18.94-.36 3.86-1.43 4.28-1.59 4.95-1.88 7.44-3.55 10.14-7.33 1.35-1.9 2.68-4.3 4.06-7.37 2.97-6.58 3.39-10.59 2.72-16.9a27.13 27.13 0 0 1-.27-4.58c.22-4.94 3.21-9.24 11.7-15.7 9.33-7.11 11.66-13.34 8.62-19-2.2-4.09-6.25-7.12-13.55-11.17-1.57-.88-3.6-1.33-6.42-1.57-.8-.07-1.34-.1-2.95-.19-5.77-.3-7.63-.85-7.72-3.34-.1-2.81 3.5-7.87 11.97-16.69 6.53-6.8 11.75-11.69 16.33-15.45 1.79-1.47 3.42-2.72 5.2-4.03l4.12-2.94c.79-.58 1.46-1.08 2.1-1.59 3.26-2.6 6.16-5.65 10.21-10.94a383.2 383.2 0 0 0 2.5-3.32l2.31-3.09c1.8-2.39 3.04-4 4.29-5.48 8.47-10.17 16.98-13.96 37.27-15.3-.44.02 12-.9 14.32-.98 3.62-.1 6.05.16 8.46.98.8.27 1.62.62 2.47 1.04 2.27 1.14 3.17 3.87 4.27 10.85l.44 2.76c.17 1.07.33 1.97.5 2.83 1.44 7.69 3.62 12.29 7.8 14.57 6.76 3.68 10.6 5.15 13.99 4.94 4-.25 6.99-3.17 9.3-9.67 1.45-4.04 1.46-6.49.32-7.92-.9-1.12-2.28-1.62-5.57-2.27a55.8 55.8 0 0 1-2.67-.55c-2.54-.6-4.39-1.4-5.93-2.71a252.63 252.63 0 0 0-4.78-4.01 84.35 84.35 0 0 1-4.08-3.6c-2.73-2.6-3.86-4.43-3.28-5.95 1.02-2.64 7.82-3.54 18.93-3.37a230.56 230.56 0 0 1 16.73.88c2.76.39 3.2.49 3.68.6 1.4.3 2.95.62 4.62.91a82.9 82.9 0 0 0 14.56 1.32c5.56-.04 10.24-.86 13.73-2.6 8.1-4.05 15.89-6.9 22.17-7.56.7-.07 1.4-.11 2.05-.13v1zm0-100.94v1.5c-8.62 16.05-17.27 29.55-23.65 35.92-3.19 3.2-7.62 4.9-13.54 5.56-4.45.48-8.28.4-19.18-.2-9.91-.55-15.32-.44-20.52.78a84.05 84.05 0 0 1-15 2.11l-2.25.14c-12.49.75-19.37 1.78-32.72 5.74-4.5 1.33-9.27 2.49-14.3 3.48a246.27 246.27 0 0 1-32.6 3.97c-7.56.45-13.21.57-20.24.57-5.4 0-11.9 1.61-18 5.18-8.3 4.87-15.06 12.87-19.53 24.5a68.57 68.57 0 0 1-4.56 9.8c-3.6 6.2-6.92 8.99-13.38 12.18l-4.03 1.96a64.48 64.48 0 0 0-15.16 10.25c-8.2 7.33-13.72 16.63-22.54 35.6l-2.08 4.49c-7.3 15.7-11.5 23.3-17.35 29.87-7.7 8.66-20.25 14.42-40.31 20.08-4.37 1.23-19.04 5.08-19.24 5.13-6.92 1.87-11.68 3.34-15.63 4.92-10.55 4.22-18.71 10.52-36.38 26.52l-1.7 1.54c-8.58 7.76-13.41 11.9-18.81 15.88-3.95 2.9-8 5.67-12.97 8.91-2.06 1.34-10.3 6.6-12.33 7.94-11.52 7.5-18.53 13.04-24.62 20.08a62.01 62.01 0 0 0-6.44 8.85c-4.13 6.91-6.27 13.15-9.2 25.11l-1.54 6.26c-.6 2.45-1.15 4.54-1.72 6.58-2.97 10.7-6.9 17.36-14.78 26.91L69.6 491a148.51 148.51 0 0 0-4.19 5.3 23.9 23.9 0 0 0-3.44 6.28c-1.16 3.23-1.52 5.9-1.87 11.94-.58 10.05-1.42 15.04-4.63 22.67-1.57 3.72-5.66 14.02-6.41 15.8a73.46 73.46 0 0 1-3.57 7.4c-2.88 5.14-6.71 10.12-13.12 16.95-5.96 6.36-8.87 10.9-10.61 16a56.88 56.88 0 0 0-1.38 4.82l-.46 1.84h-1.03l.52-2.08c.52-2.09.92-3.49 1.4-4.9 1.8-5.25 4.78-9.9 10.84-16.36 6.35-6.78 10.13-11.7 12.97-16.77a72.5 72.5 0 0 0 3.52-7.29c.75-1.76 4.84-12.06 6.4-15.8 3.17-7.5 3.99-12.4 4.56-22.33.35-6.14.72-8.88 1.93-12.23a24.9 24.9 0 0 1 3.58-6.54c1.27-1.7 2.6-3.37 4.22-5.34l4.11-4.95c7.8-9.46 11.66-16 14.59-26.54.56-2.04 1.1-4.12 1.71-6.56l1.53-6.26c2.96-12.04 5.13-18.36 9.32-25.39 1.84-3.08 4-6.05 6.54-8.99 6.17-7.12 13.24-12.7 24.83-20.26 2.05-1.33 10.28-6.6 12.33-7.94 4.96-3.22 9-5.98 12.92-8.87 5.37-3.95 10.19-8.08 18.74-15.82l1.7-1.54c17.76-16.09 25.98-22.43 36.67-26.7 4-1.6 8.8-3.09 15.75-4.96.21-.06 14.87-3.9 19.22-5.13 19.9-5.61 32.32-11.31 39.85-19.78 5.76-6.48 9.93-14.02 17.18-29.64l2.09-4.5c8.87-19.07 14.44-28.46 22.77-35.9a65.48 65.48 0 0 1 15.38-10.4l4.04-1.97c6.3-3.1 9.47-5.77 12.96-11.77a67.6 67.6 0 0 0 4.48-9.67c4.56-11.84 11.47-20.02 19.97-25 6.25-3.66 12.93-5.32 18.5-5.32 7.01 0 12.65-.12 20.17-.57a245.3 245.3 0 0 0 32.47-3.96c5-.98 9.75-2.13 14.22-3.45 13.43-3.98 20.38-5.02 32.94-5.78l2.24-.14c5.76-.37 9.8-.9 14.85-2.09 5.31-1.25 10.79-1.35 22.6-.7 9.04.5 12.84.58 17.21.1 5.71-.62 9.94-2.26 12.95-5.26 6.44-6.45 15.3-20.37 24.35-36.72zm0 450.21c-1.28-4.6-2.2-10.55-3.33-20.25l-.24-2.04-.23-2.03c-1.82-15.7-3.07-21.98-5.55-24.47-2.46-2.46-3.04-5.03-2.52-8.64.1-.6.18-1.1.39-2.15.69-3.54.77-5.04.08-6.84-.91-2.38-3.31-4.41-7.79-6.26-5.08-2.09-6.52-4.84-4.89-8.44.66-1.45 1.79-3.02 3.52-5.01 1.04-1.2 5.48-5.96 5.08-5.53 6.15-6.7 8.98-11.34 8.98-16.48a15.2 15.2 0 0 1 6.5-12.89v1.26a14.17 14.17 0 0 0-5.5 11.63c0 5.47-2.93 10.29-9.24 17.16.38-.42-4.04 4.33-5.07 5.5-1.67 1.93-2.75 3.43-3.36 4.77-1.37 3.04-.23 5.22 4.36 7.1 4.71 1.95 7.32 4.16 8.34 6.83.78 2.04.7 3.67-.03 7.4-.2 1.03-.3 1.51-.38 2.09-.48 3.33.03 5.59 2.23 7.8 2.74 2.74 3.98 8.96 5.84 25.06l.24 2.03.23 2.04c.82 7.01 1.53 12.06 2.34 16.03v4.33zm0-62.16c-1.4-3.13-4.43-9.9-4.95-11.17-1.02-2.53-1.25-3.8-.91-5.18.2-.84 2.05-4.68 2.32-5.33a70.79 70.79 0 0 0 3.54-11.2v3.99a62.82 62.82 0 0 1-2.62 7.6c-.31.75-2.09 4.46-2.27 5.18-.28 1.12-.08 2.22.87 4.57.41 1.02 2.5 5.7 4.02 9.09v2.45zm0-85.09c-1.65 1.66-3.66 2.9-6.4 4.13-.25.1-13.97 5.47-20.4 8.43-9.35 4.32-16.7 5.9-23.03 5.25-5.08-.53-9.02-2.25-14.77-5.92l-3.2-2.07a77.4 77.4 0 0 0-5.44-3.27c-4.05-2.18-3.25-5.8 1.47-10.47 3.71-3.68 9.6-7.93 18.73-13.8l4.46-2.82c17.95-11.33 18.22-11.5 22.27-14.74 11.25-9 19.69-14.02 26.31-15.1v1.02c-6.37 1.1-14.62 6-25.69 14.86-4.1 3.28-4.34 3.44-22.36 14.8a652.4 652.4 0 0 0-4.45 2.83c-9.07 5.83-14.92 10.05-18.57 13.66-4.31 4.28-4.95 7.13-1.7 8.88 1.7.91 3.29 1.88 5.5 3.3l3.2 2.08c5.64 3.59 9.45 5.25 14.34 5.76 6.13.64 13.32-.9 22.52-5.15 6.46-2.98 20.18-8.35 20.4-8.44 3.04-1.37 5.1-2.71 6.81-4.69v1.47zm0-41.37v1c-6.56.26-12.11 3.13-19.71 9.08l-4.63 3.68a51.87 51.87 0 0 1-4.4 3.14c-.82.52-5.51 3.33-6.22 3.76-3.31 2-6.15 3.8-8.87 5.6a112.61 112.61 0 0 0-8.16 5.92c-4.61 3.72-7.4 6.9-7.97 9.35-.63 2.67 1.48 4.53 7.05 5.46 10.7 1.78 20.92-.05 30.45-4.65a61.96 61.96 0 0 0 17.1-12.2 41.8 41.8 0 0 0 5.36-7.42v1.92a38.94 38.94 0 0 1-4.64 6.19 62.95 62.95 0 0 1-17.39 12.41c-9.7 4.68-20.13 6.55-31.05 4.73-6.06-1-8.65-3.29-7.85-6.67.64-2.74 3.53-6.05 8.31-9.9 2.35-1.9 5.1-3.88 8.24-5.97 2.73-1.82 5.58-3.61 8.9-5.62.72-.44 5.4-3.24 6.22-3.75 1.26-.8 2.6-1.76 4.3-3.09.8-.62 3.9-3.1 4.63-3.67 7.77-6.1 13.49-9.04 20.33-9.3zm0-154.6v1c-1.75-.24-4.3.23-7.82 1.55-10.01 3.75-13.8 5.07-19.15 6.76-1.78.56-2.63.83-3.87 1.24-1.48.5-3.16.76-6.74 1.16a1550.34 1550.34 0 0 0-2.64.3c-7.8.94-11.28 2.47-11.28 6.07 0 4.45 2.89 13.18 7.96 25.81a57.34 57.34 0 0 1 2.33 7.6 258.32 258.32 0 0 1 .84 3.46c1.86 7.62 3.17 10.71 5.56 11.67 2.21.88 4.7.6 7.47-.72 3.48-1.69 7.22-4.94 11.2-9.47 1.52-1.7 2.97-3.49 4.59-5.57l3.16-4.1c2.59-3.23 6.07-12.21 8.39-20.23v3.45c-2.29 7.2-5.27 14.5-7.61 17.41-.44.55-2.67 3.46-3.15 4.09-1.63 2.1-3.1 3.9-4.62 5.62-4.08 4.61-7.9 7.94-11.53 9.7-2.99 1.44-5.77 1.75-8.28.74-2.84-1.13-4.2-4.34-6.15-12.35a2097.48 2097.48 0 0 1-.84-3.46c-.8-3.2-1.47-5.45-2.28-7.46-5.14-12.8-8.04-21.55-8.04-26.19 0-4.37 3.84-6.06 12.16-7.07a160.9 160.9 0 0 1 2.65-.3c3.5-.39 5.15-.64 6.53-1.1 1.26-.42 2.1-.7 3.88-1.26 5.34-1.68 9.11-3 19.1-6.74 3.53-1.32 6.22-1.84 8.18-1.61zM0 292c10.13-11.31 18.13-23.2 23.07-35.39 3.3-8.14 6.09-16.12 10.81-30.55l1.59-4.84c6.53-19.94 10.11-29.82 14.77-39.56 6.07-12.72 12.55-21.18 20.27-25.54 6.66-3.76 10.2-7.86 12.22-13.15a46.6 46.6 0 0 0 1.86-6.58c1.23-5.2 2.05-7.59 3.93-10.36 2.45-3.62 6.27-6.53 12.1-8.96 15.78-6.58 16.73-7.04 18.05-9.01.65-.98.83-2.15.74-4.51-.03-.73-.23-3.82-.24-4A93.8 93.8 0 0 1 119 94c0-10.04.18-11.37 2.37-13.15.52-.42 1.13-.8 2.07-1.3.27-.14 2.18-1.12 2.84-1.48a68.4 68.4 0 0 0 9.12-5.87c2.06-1.54 2.64-2.14 8.01-7.93 3.78-4.09 6.21-6.36 8.96-8.12 3.64-2.33 7.2-3.12 10.9-2.11 4.4 1.2 10.81 2 18.78 2.46 6.9.4 12.9.5 21.95.5 4.87 0 8.97.47 15.4 1.57 7.77 1.33 9.3 1.54 12.38 1.54 4.05 0 7.43-.88 10.68-2.95 5.06-3.22 8.11-4.67 11.2-5.2 3.62-.64 4.77-.46 16.55 2.06 17.26 3.7 30.85 1.36 41.06-9.7 5.1-5.53 5.48-8.9 3.48-14.8-.83-2.42-1.03-3.1-1.17-4.3-.29-2.52.5-4.71 2.71-6.93 2.65-2.65 4.72-9.17 6.22-18.29h2.03c-1.56 9.71-3.77 16.65-6.83 19.7-1.79 1.8-2.36 3.39-2.14 5.28.11 1 .3 1.63 1.07 3.9 2.22 6.53 1.76 10.66-3.9 16.8-10.77 11.66-25.07 14.13-42.95 10.3-11.42-2.45-12.55-2.62-15.78-2.06-2.77.48-5.62 1.84-10.47 4.92a20.93 20.93 0 0 1-11.76 3.27c-3.25 0-4.81-.22-12.73-1.57C212.74 59.46 208.73 59 204 59c-9.1 0-15.11-.1-22.07-.5-8.09-.47-14.62-1.29-19.2-2.54-5.62-1.53-10.17 1.38-17.85 9.66-5.5 5.94-6.08 6.53-8.28 8.18a70.38 70.38 0 0 1-9.38 6.03c-.68.37-2.58 1.35-2.84 1.49-.84.44-1.35.76-1.75 1.08C121.16 83.6 121 84.8 121 94c0 1.85.06 3.54.17 5.44 0 .17.2 3.28.24 4.03.1 2.75-.13 4.29-1.08 5.71-1.67 2.5-2.27 2.8-18.95 9.74-5.48 2.29-8.99 4.96-11.2 8.24-1.71 2.51-2.47 4.73-3.64 9.7-.83 3.5-1.21 4.92-1.94 6.83-2.18 5.73-6.05 10.19-13.1 14.18-7.3 4.12-13.55 12.28-19.46 24.66-4.6 9.64-8.17 19.46-14.67 39.32l-1.58 4.84c-4.75 14.47-7.54 22.48-10.86 30.69-5.28 13.01-13.95 25.65-24.93 37.6v-2.97zm0 78v-.5l1-.01c6.32 0 7.47 5.2 4.6 13.36a60.36 60.36 0 0 1-5.6 11.3v-1.92a57.76 57.76 0 0 0 4.65-9.72c2.69-7.6 1.71-12.02-3.65-12.02-.34 0-.67 0-1 .02v-46.59a340.96 340.96 0 0 0 13.71-8.34c13.66-9.46 29.79-37.6 29.79-53.59 0-18.1 21.57-72.64 32.23-79.42 12.71-8.09 32.24-27.96 35.8-37.75 1.93-5.3 5.5-7.27 14.42-9.37 6.15-1.44 8.64-2.42 10.67-4.79 1.5-1.74 2.72-4.79 4.33-10.3.23-.78 1.9-6.68 2.43-8.46 3.62-12.08 7.3-18.49 13.47-20.39 2.5-.76 3.03-.98 9.74-3.7 7.49-3.03 11.97-4.43 17.12-4.92 6.75-.65 13.13.75 19.55 4.67 5.43 3.32 12.19 4.72 20.17 4.56 6.03-.12 12.2-1.07 19.83-2.8 1.82-.4 7.38-1.74 8.26-1.94 2.69-.6 4.34-.89 5.48-.89 4.97 0 8.93-.05 14.2-.27 7.9-.32 15.56-.92 22.75-1.88 8.5-1.14 15.9-2.73 21.88-4.82 18.9-6.62 32.64-18.3 33.67-27.59.29-2.56.4-2.96 2.79-11.11 2.33-7.95 3.21-12.93 2.72-18.23-.2-2.24-.69-4.38-1.48-6.42-1.5-3.92-2.63-9.4-3.43-16.18h.9c.77 6.47 1.89 11.72 3.47 15.82a24.93 24.93 0 0 1 1.54 6.69c.5 5.46-.4 10.54-2.77 18.6-2.36 8.06-2.47 8.47-2.74 10.95-1.09 9.75-15.1 21.68-34.33 28.41-6.06 2.12-13.52 3.72-22.09 4.87-7.22.96-14.92 1.57-22.83 1.89-5.3.21-9.27.27-14.25.27-1.04 0-2.64.27-5.26.87-.87.2-6.43 1.53-8.26 1.94-7.68 1.73-13.92 2.7-20.03 2.82-8.15.17-15.1-1.27-20.71-4.7-6.23-3.81-12.4-5.16-18.93-4.54-5.04.48-9.44 1.86-16.84 4.86-6.75 2.74-7.29 2.95-9.82 3.73-5.73 1.76-9.28 7.96-12.81 19.72-.53 1.77-2.2 7.66-2.43 8.46-1.66 5.65-2.91 8.78-4.53 10.67-2.22 2.58-4.84 3.62-12.01 5.3-7.8 1.83-11.13 3.66-12.9 8.54-3.65 10.04-23.32 30.06-36.2 38.25C65.94 190 44.5 244.2 44.5 262c0 16.34-16.3 44.78-30.22 54.41-2.14 1.48-8.24 5.12-14.28 8.68v-1.16 46.09zm0-173.7v-1.11c7.42-3.82 14.55-10.23 21.84-18.98 3.8-4.56 14.21-18.78 15.79-20.55 1.8-2.04 4.06-3.96 7.42-6.45 1.08-.8 4.92-3.57 5.49-3.99 9.36-6.85 14-11.96 15.98-19.36.8-2.98 1.54-6.78 2.46-12.3.23-1.44 2-12.46 2.56-15.79 2.87-16.77 5.73-26.79 10.07-32.1C92.46 52.43 101.5 38.13 101.5 33c0-2.54.34-3.35 6.05-15.71.68-1.49 1.25-2.74 1.77-3.93 2.5-5.75 3.9-10.04 4.14-13.36h1c-.23 3.48-1.66 7.87-4.23 13.76-.52 1.2-1.09 2.45-1.78 3.95-5.54 12.01-5.95 12.99-5.95 15.29 0 5.47-9.09 19.84-20.11 33.31-4.2 5.12-7.03 15.06-9.86 31.64-.57 3.33-2.33 14.33-2.57 15.78-.92 5.56-1.67 9.38-2.48 12.4-2.05 7.68-6.82 12.93-16.35 19.91l-5.49 3.98c-3.3 2.45-5.51 4.34-7.27 6.31-1.53 1.73-11.94 15.93-15.76 20.53-7.52 9.02-14.88 15.6-22.61 19.46zm0 361.83v-4.33c.48 2.36 1 4.35 1.6 6.15 2 6.03 4.6 8.26 8.19 6.59C28.76 557.69 43.5 542.4 43.5 527c0-16.2 6.37-31.99 17.1-46.3 1.88-2.5 3.66-4.4 5.53-6 .73-.62 1.45-1.18 2.3-1.8l2-1.43c3.68-2.68 5.32-5.28 7.08-12.59.75-3.07 1.38-5.02 4.2-13.26l.63-1.88c3.24-9.58 4.56-14.97 4.17-18.65-.48-4.43-3.8-5.23-11.3-1.64a81.12 81.12 0 0 1-9.15 3.7c-13.89 4.67-26.96 5.8-42.66 5.42l-1.95-.05-1.45-.02a39.8 39.8 0 0 0-15.05 2.96A21.81 21.81 0 0 0 0 438.37v-1.26a23.55 23.55 0 0 1 4.55-2.57 40.77 40.77 0 0 1 16.92-3.02l1.95.05c15.6.38 28.57-.75 42.32-5.37a80.12 80.12 0 0 0 9.04-3.65c8.04-3.84 12.16-2.85 12.72 2.43.42 3.89-.92 9.34-4.21 19.08l-.64 1.88c-2.8 8.2-3.43 10.15-4.16 13.18-1.82 7.52-3.59 10.34-7.47 13.16l-2 1.43c-.84.6-1.54 1.15-2.25 1.75a35.45 35.45 0 0 0-5.37 5.84c-10.61 14.15-16.9 29.74-16.9 45.7 0 15.88-15 31.45-34.29 40.45-4.3 2.01-7.39-.66-9.56-7.18-.23-.68-.44-1.39-.65-2.13zm0-62.16v-2.45l1.46 3.27c2.1 4.8 3.46 10.33 4.26 16.77.66 5.3.84 9.3 1.04 18.5.2 9.32.5 12.75 1.63 15.05 1.28 2.6 3.67 2.35 8.29-1.5 17.14-14.3 21.82-22.9 21.82-38.62 0-7.17 1.1-12.39 3.7-17.68 2.27-4.67 3.65-6.62 13.4-19.62a69.8 69.8 0 0 1 7.6-8.79 44.76 44.76 0 0 1 3.54-3.06c.38-.3.64-.52.89-.74a10.47 10.47 0 0 0 2.63-3.32 35.78 35.78 0 0 0 2.26-5.94l.37-1.2.36-1.15c.29-.91.48-1.55.66-2.16.45-1.53.74-2.68.91-3.66.38-2.2.12-3.49-.85-4.15-2.35-1.61-9.28-.24-23.8 4.94-9.54 3.4-16.12 4.17-27.85 4.26-7.71.06-10.43.4-13.25 2.12-3.48 2.12-5.84 6.4-7.58 14.26-.5 2.2-.99 4.19-1.49 5.98v-3.98l.51-2.22c1.8-8.1 4.28-12.6 8.04-14.9 3.04-1.85 5.86-2.2 13.77-2.26 11.61-.09 18.1-.84 27.51-4.2 14.93-5.32 21.95-6.71 24.7-4.83 1.38.94 1.71 2.6 1.28 5.15a33.69 33.69 0 0 1-.94 3.78l-.66 2.17-.36 1.15-.37 1.2a36.64 36.64 0 0 1-2.33 6.1c-.8 1.53-1.61 2.52-2.86 3.61l-.92.77-1.02.83c-.9.74-1.65 1.4-2.47 2.18a68.84 68.84 0 0 0-7.48 8.66c-9.7 12.93-11.07 14.87-13.31 19.46-2.52 5.15-3.59 10.22-3.59 17.24 0 16.04-4.82 24.91-22.18 39.38-5.04 4.2-8.18 4.55-9.83 1.18-1.22-2.5-1.52-5.94-1.73-15.47-.2-9.16-.38-13.15-1.03-18.4-.79-6.34-2.12-11.8-4.19-16.49L0 495.98zM379.27 0h1.04l1.5 5.26c3.28 11.56 4.89 19.33 5.26 27.8.49 11.01-1.52 21.26-6.63 31.17-7.8 15.13-20.47 26.5-36.22 34.1-12.38 5.96-26.12 9.17-36.22 9.17-6.84 0-17.24 1.38-37.27 4.62l-2.27.37c-24.5 3.99-31.65 5-37.46 5-3.49 0-4.08-.08-19.54-2.8-3.56-.64-6.32-1.1-9-1.5-20.23-2.96-31-1.2-31.96 7.86-.1.85-.18 1.72-.29 2.81l-.27 2.73c-1.1 10.9-2.02 15.73-4.31 19.96-2.9 5.34-7.77 7.95-15.63 7.95-10.2 0-12.92.6-15.5 3.17.52-.51-5.03 5.85-8.16 8.7-2.75 2.5-14.32 12.55-15.77 13.83a341.27 341.27 0 0 0-6.54 5.92c-6.97 6.49-11.81 11.76-14.6 16.15-5.92 9.3-10.48 18.04-11.69 24.08-1.66 8.3 3.67 9.54 19.02 1.21a626.23 626.23 0 0 1 44.54-21.9c3.5-1.56 14.04-6.2 15.68-6.95 5.05-2.25 8.3-3.8 10.78-5.15l1.95-1.07 2.18-1.18c1.76-.94 3.38-1.76 5-2.55 18.1-8.72 34.48-10.46 50.33-1.2 22.89 13.34 38.28 37.02 38.28 56.44 0 19.12-.73 25.13-5.18 33.2a45.32 45.32 0 0 1-4.94 7.12c-6.47 7.77-11.81 16.2-12.76 21.27-1.2 6.34 4.69 7.03 20.17-.05 13.31-6.08 22.4-14.95 28.5-26.32a80.51 80.51 0 0 0 6.1-15.13c.9-2.98 3.17-11.65 3.41-12.48a29.02 29.02 0 0 1 1.75-4.83c7.47-14.93 21.09-30.5 36.25-37.24 7.61-3.38 13-9.65 19.4-20.79.84-1.48 4.26-7.64 5.14-9.17 3.52-6.1 6.22-9.7 9.37-11.98 10.15-7.4 28.7-11.1 50.29-11.1 7.52 0 16.54-1.24 27.51-3.58a420.1 420.1 0 0 0 14.96-3.52c-1.3.33 15.54-3.98 19.42-4.89 14.15-3.33 41.07-5.01 64.11-5.01 17.36 0 27.82-9.23 38.53-38.67 6.62-18.21 6.62-26.37 2.69-34.35l-1.18-2.37A13.36 13.36 0 0 1 587.5 58c0-4.03 0-4.01 2.5-24.56.46-3.73.8-6.74 1.12-9.64.9-8.45 1.38-15.2 1.38-20.8 0-.94-.02-1.94-.04-3h1c.03 1.06.04 2.06.04 3 0 5.65-.48 12.43-1.39 20.9-.3 2.91-.66 5.93-1.11 9.66-2.5 20.45-2.5 20.47-2.5 24.44 0 1.97.45 3.57 1.45 5.68.24.51 1.16 2.35 1.17 2.36 4.06 8.24 4.06 16.68-2.65 35.13-10.84 29.8-21.63 39.33-39.47 39.33-22.96 0-49.83 1.68-63.89 4.99-3.86.9-20.69 5.2-19.4 4.88a421.05 421.05 0 0 1-14.99 3.53c-11.04 2.35-20.11 3.6-27.72 3.6-21.4 0-39.76 3.67-49.7 10.9-3 2.19-5.64 5.7-9.1 11.68-.87 1.52-4.29 7.68-5.14 9.17-6.49 11.3-12 17.71-19.86 21.2-14.9 6.63-28.38 22.03-35.75 36.77a28.17 28.17 0 0 0-1.69 4.67c-.23.8-2.5 9.49-3.4 12.5a81.48 81.48 0 0 1-6.19 15.3c-6.2 11.56-15.44 20.58-28.96 26.76-16.1 7.36-23 6.55-21.58-1.04 1-5.29 6.4-13.83 12.99-21.73a44.33 44.33 0 0 0 4.82-6.96c4.35-7.88 5.06-13.77 5.06-32.72 0-19.04-15.19-42.4-37.72-55.55-15.57-9.08-31.62-7.38-49.45 1.21a132.9 132.9 0 0 0-7.14 3.71l-1.95 1.07a158.83 158.83 0 0 1-10.85 5.19c-1.65.74-12.18 5.38-15.69 6.95a625.25 625.25 0 0 0-44.46 21.86c-15.95 8.66-22.37 7.16-20.48-2.29 1.24-6.2 5.83-15.02 11.82-24.42 2.85-4.48 7.74-9.8 14.77-16.34 1.98-1.85 4.12-3.79 6.56-5.94 1.46-1.29 13.02-11.33 15.75-13.82 3.09-2.8 8.6-9.14 8.14-8.67 2.82-2.82 5.75-3.46 16.2-3.46 7.5 0 12.04-2.43 14.75-7.42 2.2-4.07 3.11-8.84 4.2-19.59l.26-2.73.3-2.81c.56-5.42 4.47-8.5 11.23-9.6 5.44-.88 12.51-.51 21.86.86 2.7.4 5.47.86 9.04 1.49 15.33 2.7 15.96 2.8 19.36 2.8 5.73 0 12.9-1.03 37.3-5l2.27-.36c20.1-3.26 30.52-4.64 37.43-4.64 9.95 0 23.54-3.18 35.78-9.08 15.57-7.5 28.09-18.73 35.78-33.65 5.02-9.75 7-19.82 6.51-30.67-.37-8.37-1.96-16.08-5.23-27.57L379.27 0zm13.68 0h1.02c.78 3.9 1.92 8.7 3.51 14.88 3.63 14.05 3.06 27.03-.75 38.77a61 61 0 0 1-11.35 20.68 138.36 138.36 0 0 1-19.32 18.77c-11.32 9.02-23.36 15.49-35.95 18.39a258.63 258.63 0 0 1-22.57 4.07c-3.17.44-6.36.85-10.3 1.32l-9.39 1.12c-11.53 1.41-17.45 2.55-21.64 4.46-9.28 4.21-28.35 6.04-49.21 6.04-1.37 0-2.8-.12-4.3-.35-2.62-.41-5-1.03-9.14-2.29-7.34-2.21-9.63-2.75-12.63-2.56-3.9.23-6.63 2.29-8.47 6.89-1.86 4.66-2.42 7.53-3.34 14.98-1.1 8.98-2.87 12.12-9.97 14.3a40.12 40.12 0 0 0-6.8 2.66c-.63.33-1.16.64-1.76 1.02l-1.34.86c-1.9 1.14-3.86 1.49-9.25 1.49-3.2 0-8.83-.55-9.51-.39-1.22.28-.75-.14-7.14 6.24-1.5 1.5-3.49 3.18-6.32 5.37-1.52 1.18-7.16 5.43-7.94 6.03-4.96 3.78-8.33 6.6-11.06 9.38-4.88 4.98-6.85 9.15-5.56 12.7 1.34 3.67 4.07 4.42 8.9 2.82a55.72 55.72 0 0 0 7.77-3.48c1.5-.77 7.78-4.13 9.37-4.96a116.8 116.8 0 0 1 12.31-5.68 162.2 162.2 0 0 0 11.04-4.84c2.04-.97 10.74-5.16 13-6.22 4.41-2.1 8.1-3.78 11.65-5.29 17.14-7.3 29.32-9.9 37.67-6.65l5.43 2.1c2.3.88 4.17 1.62 6.02 2.38a150.9 150.9 0 0 1 13.07 6c18.34 9.63 30.35 22.13 34.79 39.87 6.96 27.85 3.6 45.53-8.08 62.4-3.97 5.75-3.52 9.2.06 8.97 4.14-.28 10.21-4.95 15.11-12.52 3.1-4.8 5.1-10.45 8.05-21.53l1.69-6.35c.66-2.47 1.24-4.52 1.83-6.5 4.93-16.56 11-27.28 21.56-34.76 7.15-5.06 23.73-15.5 25.48-16.75 6.74-4.81 10.53-9.44 14.34-18 7.74-17.44 21.09-24.34 44.47-24.34 9.36 0 17.91-1.13 29.53-3.49a624.86 624.86 0 0 0 6.2-1.28c2.4-.5 4.07-.84 5.66-1.13 4.03-.74 7.04-1.1 9.61-1.1 4.44 0 9.39-1 31.39-5.99l2.95-.66c16.34-3.67 25.64-5.35 31.66-5.35 1.54 0 2.4.01 6.4.1 7.8.15 12.27.13 17.33-.2 16.41-1.06 26.73-5.36 29.8-14.56a87.1 87.1 0 0 1 3.55-8.83c-.15.31 2.29-4.96 2.9-6.38 5.38-12.3 5.57-21.92-1.44-39.44a86.4 86.4 0 0 1-5.26-20.72c-1.61-11.98-1.38-23.14.1-40.35l.2-2.12h1l-.2 2.2c-1.48 17.15-1.7 28.24-.11 40.14a85.4 85.4 0 0 0 5.2 20.47c7.1 17.78 6.91 27.67 1.43 40.22-.62 1.43-3.06 6.72-2.91 6.4a86.17 86.17 0 0 0-3.52 8.73c-3.23 9.72-13.9 14.15-30.68 15.24-5.1.33-9.58.35-17.42.2-3.98-.09-4.84-.1-6.37-.1-5.91 0-15.18 1.67-31.44 5.32l-2.95.67c-22.16 5.02-27.05 6.01-31.61 6.01-2.5 0-5.45.36-9.43 1.09-1.58.29-3.25.62-5.64 1.11a4894.21 4894.21 0 0 0-6.2 1.29c-11.68 2.37-20.3 3.51-29.73 3.51-23.02 0-36 6.71-43.53 23.66-3.9 8.8-7.82 13.58-14.7 18.5-1.78 1.27-18.36 11.7-25.48 16.75-10.34 7.32-16.3 17.87-21.19 34.23-.58 1.96-1.15 4-1.82 6.47l-1.69 6.35c-2.98 11.18-5 16.9-8.17 21.81-5.05 7.81-11.37 12.68-15.89 12.98-4.7.31-5.3-4.23-.94-10.53 11.52-16.64 14.82-34.03 7.92-61.6-4.35-17.42-16.16-29.72-34.27-39.22-4-2.1-8.2-4-12.99-5.97-1.84-.75-3.7-1.49-6-2.38l-5.43-2.08c-8.03-3.12-20.02-.58-36.92 6.63-3.52 1.5-7.21 3.19-11.61 5.27l-13 6.22c-4.71 2.22-8.16 3.75-11.11 4.88a115.87 115.87 0 0 0-12.21 5.63c-1.58.83-7.86 4.18-9.37 4.96a56.55 56.55 0 0 1-7.9 3.54c-5.3 1.75-8.62.85-10.17-3.43-1.46-4.02.66-8.5 5.8-13.74 2.75-2.82 6.16-5.66 11.15-9.48.79-.6 6.43-4.85 7.94-6.02a66.96 66.96 0 0 0 6.23-5.28c6.74-6.74 6.1-6.16 7.61-6.51.87-.2 6.69.36 9.74.36 5.22 0 7.03-.32 8.74-1.35l1.31-.84c.62-.4 1.18-.72 1.84-1.07a41.07 41.07 0 0 1 6.96-2.72c6.64-2.04 8.22-4.84 9.28-13.47.93-7.53 1.5-10.47 3.4-15.24 1.99-4.95 5.04-7.26 9.34-7.51 3.17-.2 5.5.35 12.97 2.6a63.54 63.54 0 0 0 9.02 2.26c1.45.22 2.83.34 4.14.34 20.71 0 39.7-1.82 48.8-5.96 4.32-1.96 10.29-3.1 21.93-4.53l9.4-1.12c3.92-.48 7.11-.88 10.27-1.32 8.16-1.14 15.4-2.43 22.49-4.06 12.42-2.86 24.33-9.26 35.55-18.2a137.4 137.4 0 0 0 19.18-18.64 60.02 60.02 0 0 0 11.15-20.32c3.76-11.57 4.32-24.36.75-38.23A284.86 284.86 0 0 1 392.95 0zM506.7 0h1.26c-.5.66-.9 1.18-1.17 1.51-3.95 4.96-6.9 7.92-9.82 9.57A10.02 10.02 0 0 1 492 12.5c-2.38 0-4.24.67-6.71 2.21l-2.65 1.71c-4.38 2.8-8.01 4.08-13.64 4.08-5.6 0-9.99-1.26-16.08-4.05a202.63 202.63 0 0 1-2.3-1.06l-2.18-.98c-1.6-.7-2.92-1.17-4.17-1.48a13.42 13.42 0 0 0-3.27-.43c-2.3 0-4.3-.68-11-3.37l-1.56-.62c-5-1.97-8.1-2.82-10.52-2.66-2.93.2-4.42 2.03-4.42 6.15 0 20.76-5.21 50.42-12.15 57.35-7.58 7.59-26.55 23.7-34.06 29.06-13.16 9.4-31.17 20.2-44.11 25.06a106.87 106.87 0 0 1-13.32 4.03c-3.28.78-6.6 1.43-11.25 2.24-.53.1-8.8 1.5-11.5 1.99-4.86.87-9.3 1.74-14 2.76-20.62 4.48-25.07 5.01-38.11 5.01-2.49 0-2.9-.07-14.05-2-2.42-.42-4.31-.73-6.15-1-8.11-1.19-13.83-1.36-17.64-.2-4.54 1.4-5.93 4.65-3.7 10.52 2.02 5.28 4.84 8.61 8.84 10.74 3.26 1.74 6.75 2.6 13.82 3.71 9.42 1.48 10.94 1.75 15.5 2.92a78.2 78.2 0 0 1 18.62 7.37c8.3 4.58 14.58 11.5 19.98 20.89 2.73 4.73 9.46 19.33 10.54 21.19 3.4 5.85 6.26 6.63 10.89 2 4.95-4.94 10.35-8.37 21.13-14.06.47-.25 2.06-1.1 2.12-1.12 7.98-4.21 11.92-6.51 15.87-9.54 5.11-3.9 8.66-8.1 10.77-13.11 8.52-20.24 20.75-33.31 32.46-33.31l5.5.03c10.53.08 17.35.02 24.9-.31 13.66-.62 23.78-2.09 29.39-4.67 5.85-2.7 13.42-5.49 24.18-9.02 3.46-1.14 6.29-2.05 12.7-4.1 7.7-2.45 11.08-3.54 15.17-4.9a1059.43 1059.43 0 0 1 11.33-3.72c3.67-1.2 5.96-2 8.03-2.78a59.88 59.88 0 0 0 6.66-2.94c1.87-.98 3.76-2.1 5.86-3.5 3.48-2.33 6.15-3.13 12.04-4.13l1.15-.2c5.71-1.01 9-2.3 12.76-5.63 7.82-6.96 8.58-23.18 3.84-44.52-1.7-7.67-2.1-19.28-1.57-35.47A837.22 837.22 0 0 1 546.76 0h1l-.15 3.06c-.32 6.42-.53 11.02-.68 15.62-.51 16.1-.12 27.65 1.56 35.21 4.82 21.68 4.04 38.2-4.16 45.48-3.91 3.48-7.37 4.84-13.24 5.87l-1.16.2c-5.76.99-8.32 1.75-11.65 3.98a63.73 63.73 0 0 1-5.96 3.56 60.86 60.86 0 0 1-6.77 2.99c-2.09.79-4.39 1.58-8.07 2.79a5398.31 5398.31 0 0 1-11.32 3.71c-4.1 1.37-7.48 2.46-15.18 4.92-6.42 2.04-9.24 2.95-12.7 4.08-10.73 3.53-18.27 6.3-24.07 8.98-5.76 2.66-15.97 4.14-29.77 4.77-7.56.33-14.4.39-24.95.31l-5.49-.03c-11.19 0-23.16 12.79-31.54 32.7-2.19 5.19-5.84 9.52-11.08 13.52-4.02 3.07-7.99 5.39-16.01 9.62l-2.12 1.12c-10.7 5.65-16.04 9.04-20.9 13.9-5.14 5.14-8.75 4.15-12.45-2.22-1.12-1.92-7.85-16.5-10.54-21.2-5.33-9.24-11.48-16.02-19.6-20.5a77.2 77.2 0 0 0-18.4-7.28c-4.5-1.17-6.02-1.43-15.4-2.9-7.17-1.12-10.74-2-14.13-3.81-4.22-2.25-7.2-5.77-9.3-11.27-2.43-6.39-.78-10.26 4.34-11.83 4-1.22 9.82-1.05 18.08.17 1.84.27 3.74.58 6.17 1 11.02 1.9 11.48 1.98 13.88 1.98 12.96 0 17.35-.52 37.9-4.99 4.71-1.02 9.16-1.9 14.03-2.77 2.71-.48 10.98-1.9 11.5-1.98 4.64-.81 7.95-1.46 11.2-2.23 4.55-1.07 8.76-2.34 13.2-4 12.83-4.81 30.79-15.59 43.88-24.94 7.47-5.33 26.4-21.4 33.94-28.94C407.3 61.98 412.5 32.49 412.5 12c0-4.61 1.86-6.9 5.35-7.15 2.63-.18 5.8.7 10.96 2.73l1.56.62c6.53 2.62 8.53 3.3 10.63 3.3 1.14 0 2.3.16 3.5.46 1.32.33 2.68.82 4.34 1.53a90.97 90.97 0 0 1 3.34 1.52l1.15.54c5.98 2.73 10.23 3.95 15.67 3.95 5.41 0 8.87-1.21 13.1-3.92.2-.13 2.1-1.38 2.66-1.72 2.62-1.63 4.64-2.36 7.24-2.36 1.47 0 2.94-.43 4.47-1.3 2.78-1.56 5.67-4.45 9.54-9.31l.7-.89zM324.54 600h-2.03c.49-2.96.91-6.2 1.28-9.66.44-4.1.76-8.25.98-12.21.08-1.39.14-2.65-.35-7.29-.47-1.94-.93-4.14-1.36-6.54-2.01-11.26-2.66-22.9-1.14-33.78a60.76 60.76 0 0 1 5.18-17.95 70.78 70.78 0 0 1 12.6-18.22c3.38-3.6 5.53-5.5 11.83-10.79 4.5-3.78 6.35-5.56 7.52-7.5.64-1.07.95-2.06.95-3.06 0-1.75 0-1.74-.75-9.23-.36-3.7-.57-6.3-.68-8.96-.5-12.1 1.62-19.6 8.11-21.76 15.9-5.3 25.89-12.1 33.45-25.54C409.6 390.65 425.85 376 436 376c12.36 0 20-1.96 29.41-8.8 6.76-4.92 9.5-6.6 12.47-7.46 2.22-.64 3.8-.74 9.12-.74 1.86 0 3.53-.83 5.57-2.62 1.08-.96 5.11-5.12 5.6-5.6 6.04-5.85 11.98-8.78 20.83-8.78 2.45 0 4.54.04 7.32.12 7.51.23 8.87.17 11.27-.7 3.03-1.1 5.53-3.03 14.75-11.17 8-7.06 10.72-8.92 22.87-16.47 1.44-.9 2.59-1.63 3.69-2.37a69.45 69.45 0 0 0 9.46-7.5c4.12-3.88 8.02-7.85 11.64-11.9v2.98a201.58 201.58 0 0 1-10.27 10.38c-3.18 3-6.2 5.35-9.72 7.7-1.12.76-2.28 1.5-3.75 2.4-12.05 7.5-14.71 9.32-22.6 16.28-9.46 8.35-12.01 10.32-15.39 11.55-2.74 1-4.19 1.06-12.01.82-2.76-.08-4.83-.12-7.26-.12-8.27 0-13.75 2.7-19.43 8.22-.44.43-4.52 4.64-5.68 5.66-2.37 2.09-4.46 3.12-6.89 3.12-5.1 0-6.6.1-8.56.66-2.67.78-5.29 2.37-11.85 7.15-9.8 7.13-17.85 9.19-30.59 9.19-9.22 0-24.96 14.2-34.13 30.49-7.84 13.94-18.24 21.02-34.55 26.46-5.31 1.77-7.21 8.51-6.75 19.78.1 2.6.31 5.19.68 8.84.75 7.62.75 7.58.75 9.43 0 1.38-.42 2.73-1.24 4.09-1.33 2.2-3.26 4.07-7.94 8-6.25 5.24-8.36 7.12-11.67 10.63a68.8 68.8 0 0 0-12.25 17.71 58.8 58.8 0 0 0-5 17.36c-1.49 10.66-.85 22.09 1.13 33.15.43 2.37.88 4.53 1.33 6.44.16.66.3 1.25.6 4.06a249.3 249.3 0 0 1-1.17 16.12c-.37 3.37-.78 6.53-1.25 9.44zm-13.4 0h-1.05l.12-.28c3.07-7.16 4.29-11.83 4.29-18.72 0-3.57-.07-4.93-.76-15.65-.77-12.04-1-19.64-.55-28.3.58-11.5 2.4-22.1 5.81-32.16 1.3-3.8 2.8-7.5 4.55-11.1 3.46-7.14 6.83-12.39 10.42-16.6a59.02 59.02 0 0 1 4.35-4.56c.43-.4 3-2.8 3.67-3.45 5.72-5.6 7.51-11.52 7.51-29.18 0-18.84 2.9-23.77 15.82-28.24 1.09-.37 1.92-.67 2.77-.98a51.3 51.3 0 0 0 6.1-2.7c4.95-2.6 9.64-6.22 14.44-11.42 25.5-27.63 37.15-35.16 56.37-35.16 8.28 0 14.54-1.95 22-6.3 1.78-1.03 13.82-8.82 18.16-11.27 2.83-1.59 5.66-3.03 8.63-4.39 7.92-3.6 13.97-4.45 26.6-4.8 7.53-.2 10.7-.49 14.26-1.58 4.55-1.4 8.06-4 10.93-8.43 2.2-3.41 6.85-7.08 14.66-12.06 1.61-1.03 3.27-2.05 5.65-3.5 9.53-5.85 11.56-7.13 14.81-9.57 5.34-4 9.3-8.37 13.68-14.77a204.2 204.2 0 0 0 5.62-8.75v1.9c-1.97 3.17-3.4 5.38-4.8 7.42-4.42 6.48-8.46 10.92-13.9 15-3.29 2.46-5.32 3.75-14.89 9.61a375.06 375.06 0 0 0-5.63 3.5c-7.7 4.9-12.26 8.52-14.36 11.76-3 4.63-6.7 7.39-11.48 8.85-3.68 1.12-6.9 1.42-14.53 1.63-12.5.34-18.44 1.18-26.2 4.7a111.08 111.08 0 0 0-8.56 4.35c-4.3 2.43-16.34 10.22-18.15 11.27-7.6 4.43-14.03 6.43-22.5 6.43-18.87 0-30.3 7.4-55.63 34.84-4.88 5.28-9.67 8.97-14.7 11.62-2 1.05-4 1.92-6.23 2.75-.86.32-1.7.62-5.37 1.87-5.08 1.76-7.44 3.25-9.28 6.37-2.23 3.78-3.29 9.94-3.29 20.05 0 17.9-1.87 24.07-7.8 29.89-.69.67-3.27 3.06-3.69 3.46a58.04 58.04 0 0 0-4.28 4.49c-3.53 4.14-6.86 9.32-10.28 16.38a95.19 95.19 0 0 0-4.5 10.99c-3.38 9.97-5.18 20.48-5.76 31.9-.44 8.6-.22 16.17.55 28.17.69 10.76.76 12.12.76 15.72 0 6.35-1.02 10.87-4.35 19zm25.08 0h-1c-.04-4.73.06-9.39.28-15.02.26-6.41-.4-11.79-2.53-24.37l-.31-1.86c-2.12-12.55-2.76-19.35-1.97-26.47 1.03-9.25 4.75-16.68 12-22.67 22.04-18.2 29.81-30.18 29.81-44.61 0-2.6-.3-4.81-.98-8.17-.97-4.79-1.1-5.68-.97-7.57.2-2.56 1.27-4.7 3.56-6.72 2.67-2.35 7.05-4.6 13.72-7.01 9.72-3.5 15.52-9.18 24.3-21.57l1.78-2.5c4.48-6.33 7.1-9.63 10.43-12.78 4.31-4.07 8.98-6.77 14.54-8.17 13.3-3.32 20.37-5.47 25.34-7.64a49.5 49.5 0 0 0 5.28-2.7c1.1-.65 1.75-1.04 4.24-2.6 2.7-1.68 5.22-2.08 11.38-2.28 5.44-.18 7.9-.43 10.97-1.41a21.47 21.47 0 0 0 9.54-6.22c4.87-5.3 10.03-7.61 17.79-8.9 1.07-.18 1.88-.3 3.86-.58 6.9-.97 9.94-1.69 13.48-3.62 4.5-2.45 6.79-4.44 23.46-19.68l3.14-2.85c9.65-8.71 16.12-13.83 21.42-16.48 4.25-2.12 7.6-4.69 11.22-8.6v1.45c-3.42 3.57-6.69 6-10.78 8.05-5.18 2.59-11.61 7.67-21.2 16.32l-3.12 2.85c-16.8 15.35-19.05 17.3-23.66 19.82-3.68 2-6.8 2.75-13.82 3.73-1.97.28-2.78.4-3.84.57-7.56 1.26-12.52 3.48-17.21 8.6a22.47 22.47 0 0 1-9.97 6.5c-3.2 1-5.72 1.27-11.25 1.45-5.98.2-8.39.57-10.89 2.13a144 144 0 0 1-4.25 2.61 50.48 50.48 0 0 1-5.39 2.75c-5.04 2.2-12.15 4.37-25.5 7.7-9.74 2.44-15.26 7.65-24.4 20.56l-1.77 2.5c-8.9 12.54-14.82 18.34-24.78 21.93-6.57 2.36-10.85 4.57-13.4 6.82-2.1 1.86-3.05 3.74-3.22 6.04-.13 1.76 0 2.63.95 7.3.7 3.42 1 5.7 1 8.37 0 14.79-7.93 27-30.18 45.39-7.03 5.8-10.64 13-11.64 22-.78 7-.14 13.73 1.96 26.2l.32 1.85c2.15 12.65 2.8 18.07 2.54 24.58-.22 5.57-.32 10.2-.28 14.98zM95.9 600h-2.04c.68-3.82 1.14-8.8 1.61-15.98.2-3.11.27-4.06.39-5.6 1.3-17.54 4.04-27.14 11.5-33.2 4.65-3.77 7.22-8.92 8.67-16 .51-2.52.7-3.87 1.33-9.17.66-5.5 1.16-8.06 2.24-10.36 1.45-3.09 3.82-4.69 7.39-4.69 14.28 0 38.48 9.12 53.6 20.2 8.66 6.35 21.26 13.32 31.74 17.11 13.03 4.71 21.89 4.41 24.75-1.73 1.7-3.64 1.92-4.11 2.65-5.77 2.93-6.67 4.69-12.2 5.25-17.5.23-2.17.24-4.23.02-6.2-.32-2.75-1.42-4.55-4.08-7.35l-1.32-1.37a30.59 30.59 0 0 1-2.41-2.79 30.37 30.37 0 0 1-2.5-4.07l-1.13-2.14c-1.62-3.1-2.68-4.6-4.12-5.56-5.26-3.5-14.8-5.5-28.55-6.83a272.42 272.42 0 0 0-9.04-.71l-2.18-.17c-9.57-.73-15.12-1.56-19.06-3.2C156.57 471.07 136 450.5 136 440c0-5.34 1.74-9.53 5.47-14.13 1.98-2.44 11.12-11.71 12.79-13.54 4.52-4.97 10.16-9.54 17.68-14.66 2.8-1.9 14.78-9.6 17.49-11.49a50.54 50.54 0 0 0 6.34-5.43c1.53-1.5 6.96-7.13 7.12-7.3 7.18-7.3 12.7-11.56 19.74-14.38 3.36-1.34 8.13-2.79 17.45-5.38a9577.18 9577.18 0 0 1 11.78-3.28 602.6 602.6 0 0 0 12.67-3.7c20.4-6.24 34-12.08 40.79-18.44 8.74-8.2 11.78-13.84 15.73-26.02 2.02-6.22 3.09-9.04 5.07-12.72 9.54-17.71 28.71-39.37 43.5-45.45C383.77 238.25 389 232.34 389 226c0-2.89 2.73-8.4 6.83-13.73 4.76-6.2 10.65-11.36 16.75-14.18 12.5-5.77 33.5-10.09 47.42-10.09 5.32 0 9.83-1.5 16.42-4.89 9.2-4.71 10.1-5.11 13.58-5.11 10.42 0 32.06-2.55 45.76-5.97l3.88-.98 3.47-.89c2.6-.66 4.33-1.08 5.93-1.43 3.9-.86 6.76-1.23 9.58-1.17 2.74.06 5.47.52 8.67 1.48 4.56 1.37 13.71-.9 22.87-5.68a68.07 68.07 0 0 0 9.84-6.2v2.4c-11.09 8.14-25.76 13.66-33.29 11.4a29.72 29.72 0 0 0-8.13-1.4c-2.63-.05-5.36.3-9.11 1.12a238 238 0 0 0-9.33 2.3l-3.9.99C522.38 177.43 500.58 180 490 180c-2.99 0-3.91.4-12.67 4.89-6.85 3.51-11.61 5.11-17.33 5.11-13.65 0-34.35 4.26-46.58 9.9-5.78 2.67-11.42 7.62-16 13.58-3.85 5.02-6.42 10.2-6.42 12.52 0 7.27-5.8 13.82-20.62 19.92-14.27 5.88-33.16 27.21-42.5 44.55-1.9 3.55-2.95 6.28-4.93 12.4-4.05 12.47-7.23 18.39-16.27 26.86-7.08 6.64-20.87 12.57-41.57 18.89a604.52 604.52 0 0 1-12.7 3.71 1495.1 1495.1 0 0 1-11.8 3.28c-9.24 2.58-13.97 4.01-17.24 5.32-6.73 2.69-12.05 6.8-19.05 13.92-.15.15-5.6 5.8-7.15 7.32a52.4 52.4 0 0 1-6.6 5.65c-2.74 1.92-14.75 9.63-17.5 11.5-7.4 5.04-12.94 9.52-17.33 14.35-1.72 1.9-10.8 11.11-12.71 13.46-3.47 4.26-5.03 8.03-5.03 12.87 0 9.5 20 29.5 33.38 35.08 3.67 1.53 9.1 2.34 18.45 3.05a586.23 586.23 0 0 0 4.34.32c3.24.23 5.07.37 6.93.55 14.08 1.37 23.82 3.4 29.45 7.17 1.82 1.2 3.02 2.91 4.8 6.29l1.11 2.13a28.55 28.55 0 0 0 2.34 3.81c.62.83 1.3 1.6 2.26 2.61.23.24 1.1 1.16 1.32 1.37 2.93 3.09 4.24 5.23 4.61 8.5.24 2.12.23 4.33-.01 6.64-.59 5.55-2.4 11.25-5.41 18.1-.74 1.67-.96 2.15-2.66 5.8-3.49 7.47-13.33 7.8-27.25 2.77-10.67-3.86-23.43-10.92-32.25-17.38C164.62 515.96 140.82 507 127 507c-5 0-6.4 3.02-7.64 13.29a99.03 99.03 0 0 1-1.36 9.33c-1.53 7.5-4.3 13.04-9.37 17.16-6.87 5.58-9.5 14.78-10.77 31.8-.11 1.52-.18 2.47-.38 5.57-.46 7.01-.91 11.99-1.57 15.85zm8.05 0h-1.02c.29-1.41.58-2.94.9-4.59l1.05-5.62c2.5-13.3 4.2-19.92 6.68-24.05 1.7-2.84 3.68-5.5 8.05-11.03 8.21-10.36 10.88-14.55 10.88-18.71l-.02-1.69c-.02-1.78-.02-2.7.02-3.77.21-5.05 1.47-8.2 4.64-9.4 3.92-1.5 10.39.44 20.12 6.43 9.56 5.88 17.53 10.7 25.91 15.66 1.31.78 14.27 8.41 17.67 10.45a714.21 714.21 0 0 1 6.42 3.9c13.82 8.5 38.94 5.05 46.3-7.83 3.6-6.28 4.54-8.52 7.78-17.32a82.3 82.3 0 0 1 1.18-3.07 42.27 42.27 0 0 1 4.06-7.64c9.33-13.98 14.92-26.1 14.92-36.72 0-3.66.75-6.62 3.36-14.85.52-1.64.83-2.66 1.15-3.73 3.64-12.23 3.04-19.12-4.29-24a23.1 23.1 0 0 0-9.98-3.78c-7.2-.93-14.49 1.17-23.91 5.88-1.55.78-6.64 3.44-7.6 3.93a62.6 62.6 0 0 0-4.14 2.3l-4.4 2.66c-11.62 6.92-20.4 9.18-32.81 6.08-3.32-.84-6.24-1.4-13.1-2.64-13.25-2.39-18.7-3.75-23.33-6.46-6.23-3.67-7.46-9.02-2.88-16.65A93.1 93.1 0 0 1 172 415.42a157 157 0 0 1 8.32-7.66c-.07.05 6.16-5.3 7.82-6.77a85.12 85.12 0 0 0 6.5-6.33c7.7-8.46 12.78-13.36 20.08-18.57 9.94-7.1 21.4-12.36 35.18-15.58 37.03-8.64 51-12.7 58.83-17.93 8.6-5.73 21.3-24.77 36.84-54.81 5.22-10.1 12.27-18.4 21.13-25.71 5.13-4.24 9.56-7.25 17.55-12.23 7.42-4.62 9.62-6.14 11.38-8.16a21.15 21.15 0 0 0 2.95-4.87c.61-1.3 2.87-6.47 3-6.77 1.36-3 2.56-5.4 3.95-7.73 6.53-10.97 16.03-18 31.4-20.8 12.73-2.3 19.85-2.7 29.68-2.3 3.25.13 4.13.16 5.6.14 5.15-.07 9.71-1.04 16.61-3.8 20.74-8.3 38.75-12.04 59.19-12.04 3.05 0 6.03.15 10.48.48l2.09.16c12.45.96 18.08.96 25.34-.63a49.65 49.65 0 0 0 14.09-5.45v1.15a50.52 50.52 0 0 1-13.88 5.28c-7.38 1.61-13.08 1.61-25.63.65l-2.08-.16c-4.43-.33-7.39-.48-10.41-.48-20.3 0-38.2 3.72-58.81 11.96-7.01 2.8-11.7 3.8-16.97 3.88-1.5.02-2.39-.01-5.66-.14-9.76-.4-16.8-.01-29.47 2.3-15.06 2.73-24.32 9.58-30.71 20.31a72.8 72.8 0 0 0-3.9 7.63c-.12.28-2.39 5.47-3.01 6.79a22 22 0 0 1-3.1 5.1c-1.86 2.13-4.07 3.66-11.6 8.35-7.95 4.96-12.35 7.95-17.44 12.15-8.76 7.23-15.73 15.43-20.89 25.4-15.61 30.2-28.36 49.32-37.16 55.19-7.98 5.32-21.97 9.39-59.17 18.07-13.65 3.18-24.98 8.39-34.82 15.42-7.22 5.16-12.27 10.01-19.92 18.43a86.07 86.07 0 0 1-6.57 6.4c-1.67 1.48-7.91 6.83-7.84 6.77-3.27 2.84-5.8 5.16-8.26 7.62a92.1 92.1 0 0 0-14.27 18.13c-4.3 7.16-3.22 11.89 2.53 15.26 4.47 2.63 9.88 3.99 23.24 6.39a185.7 185.7 0 0 1 12.92 2.6c12.11 3.03 20.64.84 32.06-5.96l4.4-2.65c1.66-1 2.96-1.73 4.2-2.35.95-.48 6.04-3.14 7.6-3.92 9.59-4.8 17.04-6.94 24.49-5.98a24.1 24.1 0 0 1 10.4 3.93c7.82 5.21 8.45 12.52 4.7 25.13-.32 1.07-.64 2.1-1.16 3.74-2.57 8.12-3.31 11.04-3.31 14.55 0 10.88-5.66 23.14-15.08 37.28a41.28 41.28 0 0 0-3.97 7.46c-.37.9-.73 1.82-1.18 3.04-3.25 8.85-4.21 11.13-7.84 17.47-7.67 13.42-33.43 16.95-47.7 8.18a578.4 578.4 0 0 0-6.4-3.89c-3.4-2.04-16.36-9.67-17.67-10.45-8.38-4.97-16.36-9.78-25.92-15.66-9.5-5.85-15.7-7.7-19.24-6.36-2.68 1.02-3.8 3.82-4 8.51a61.12 61.12 0 0 0-.02 3.72l.02 1.7c0 4.5-2.69 8.73-11.52 19.87-3.92 4.95-5.87 7.59-7.55 10.39-2.39 3.97-4.08 10.56-6.56 23.72l-1.05 5.62-.86 4.4zm10.5 0h-1c.03-.34.04-.68.04-1 0-12.39 8.48-33.57 19.16-43.37a26.18 26.18 0 0 0 3.67-4.17 35.8 35.8 0 0 0 2.88-4.9c.36-.72 1.75-3.66 2.1-4.36 3.22-6.29 6.84-6.54 16.97.39 1.34.9 6.07 4.16 6.4 4.38 2.62 1.8 4.67 3.2 6.7 4.56 5.03 3.39 9.37 6.2 13.51 8.7 14.33 8.67 25.49 13.27 34.11 13.27 16.86 0 32.71-5.95 39.6-14.8 1.59-2.04 3.2-5.17 5.06-9.63.8-1.92 1.64-4.06 2.67-6.8l2.74-7.33c4.66-12.44 7.76-19.06 11.56-23.27 7.9-8.79 14.87-36 14.87-52.67 0-1.9.17-3.11 1.02-8.27.37-2.2.58-3.6.74-5.07.63-5.51.21-9.46-1.68-12.39-4.6-7.1-19.7-9.23-38.46-4.78a100.57 100.57 0 0 0-18.94 6.3c-5.17 2.37-17.11 9.74-16.5 9.4-6.72 3.64-12.97 4.15-24.8 1.3-29.55-7.14-30.43-8.62-15.26-26.81 17.44-20.93 47.12-46.18 56.38-46.18 9.92 0 53.84-11.98 65.78-17.95 9.46-4.73 24.32-21.18 36.82-37.85.71-.95 13.5-21.6 19.2-29.6 9.35-13.13 18.22-22.55 26.95-27.53 7.29-4.17 13.16-10.28 18.8-18.73 1.93-2.9 10.52-17.65 12.73-20.41 1.54-1.93 3-3.21 4.52-3.89 14.07-6.25 24.22-9.04 39.2-9.04h29c4.05 0 7.36-.4 22.93-2.5l4.3-.57c9.92-1.3 16.57-1.93 21.77-1.93 1.66 0 2.95.01 6.03.04 18.61.19 28.55-.48 44.86-4.03 3.1-.67 6.13-1.78 9.11-3.31v1.12a37.96 37.96 0 0 1-8.9 3.17c-16.4 3.56-26.4 4.24-45.08 4.05-3.08-.03-4.36-.04-6.02-.04-5.15 0-11.76.63-21.64 1.92l-4.3.58c-15.64 2.11-18.94 2.5-23.06 2.5h-29c-14.81 0-24.84 2.75-38.8 8.96-1.34.6-2.69 1.78-4.14 3.6-2.16 2.68-10.72 17.39-12.68 20.33-5.72 8.57-11.7 14.8-19.13 19.04-8.57 4.9-17.36 14.23-26.63 27.24-5.68 7.97-18.47 28.64-19.22 29.63-12.6 16.8-27.52 33.32-37.18 38.15-12.06 6.03-56.14 18.05-66.22 18.05-8.82 0-38.39 25.15-55.62 45.82-14.6 17.52-14.19 18.21 14.74 25.2 11.6 2.8 17.6 2.3 24.09-1.2-.67.35 11.31-7.03 16.56-9.44 5.41-2.48 11.6-4.59 19.11-6.37 19.13-4.53 34.65-2.35 39.54 5.22 2.05 3.17 2.48 7.32 1.84 13.04a96.34 96.34 0 0 1-.75 5.13c-.84 5.08-1.01 6.29-1.01 8.1 0 16.9-7.03 44.33-15.13 53.33-3.68 4.09-6.76 10.65-11.37 22.96-.35.93-2.2 5.94-2.73 7.33-1.04 2.76-1.88 4.9-2.68 6.84-1.9 4.53-3.55 7.73-5.2 9.85-7.1 9.13-23.25 15.19-40.39 15.19-8.86 0-20.15-4.65-34.63-13.42-4.15-2.51-8.5-5.32-13.55-8.72a861.54 861.54 0 0 1-6.71-4.56l-6.4-4.39c-9.68-6.63-12.61-6.42-15.5-.75-.35.68-1.74 3.62-2.1 4.35a36.77 36.77 0 0 1-2.96 5.03c-1.12 1.57-2.37 3-3.81 4.33-10.47 9.6-18.84 30.51-18.84 42.63l-.03 1zm-29.65 0h-1.1c1.17-2.52 1.79-5.2 1.79-8 0-20 4.83-42.04 12.15-49.35 5.17-5.18 7.77-8.38 9.9-12.74 2.64-5.41 3.95-12 3.95-20.91 0-6.82 1.14-11.59 3.37-15.07 1.74-2.7 3.6-4.21 8.91-7.52a31.64 31.64 0 0 0 3.9-2.79c4.61-3.96 6.58-6.2 7.72-9.41 1.43-4.02.93-9.04-1.86-16.02a68.98 68.98 0 0 0-3.99-8.07l-.93-1.7a75.47 75.47 0 0 1-2.64-5c-5.16-10.71-3.77-18.9 7.68-29.78a204 204 0 0 1 26.81-21.55c3.96-2.69 16.8-10.8 19.24-12.5 1.99-1.4 4.33-3.3 7.77-6.3-.02 0 7.23-6.39 9.47-8.3 4.97-4.26 9.09-7.5 13.05-10.15 4.72-3.15 8.97-5.28 12.87-6.32 12.78-3.41 15.6-4.18 21.77-5.97 12.55-3.64 21.96-6.9 28.14-10a45.47 45.47 0 0 1 7.47-2.79c8.66-2.66 12.02-4.1 16.97-8.1 6.78-5.46 13.07-14.25 19.33-27.87 15.97-34.77 19.08-39.39 32.15-49.19 3.14-2.36 6.37-4.1 11.43-6.4l2.33-1.04c11.93-5.35 16.87-8.93 21.1-17.38 1.88-3.77 2.48-6.29 3.37-12.27.78-5.19 1.48-7.56 3.53-10.25 2.57-3.4 7.03-6.27 14.36-9.01 3.37-1.26 7.36-2.5 12.05-3.73 16.33-4.3 25.28-5.36 39.6-5.81 6.9-.22 9.5-.56 12.66-2 1.19-.54 2.36-1.23 3.58-2.11 3.7-2.7 8.14-4.54 13.24-5.67 5.71-1.27 10.69-1.54 18.7-1.45l2.35.02c2.82 0 6.8-1 19.7-4.69 10.83-3.08 15.95-4.31 19.3-4.31.82 0 1.9.13 3.55.41l5.01.9c9.82 1.68 17.44 1.89 25.15-.21 7.98-2.18 14.8-6.77 20.29-14.24V147c-5.47 7.04-12.21 11.42-20.03 13.55-7.88 2.15-15.63 1.94-25.58.23l-5-.9c-1.6-.26-2.64-.39-3.39-.39-3.2 0-8.32 1.22-19.74 4.48-12.35 3.53-16.3 4.52-19.26 4.52l-2.36-.02c-7.94-.1-12.85.17-18.47 1.42-4.97 1.11-9.3 2.9-12.88 5.5a21.4 21.4 0 0 1-3.75 2.22c-3.32 1.5-6 1.87-13.04 2.09-14.25.44-23.13 1.5-39.37 5.77a125.56 125.56 0 0 0-11.95 3.7c-7.17 2.7-11.49 5.46-13.93 8.68-1.9 2.52-2.58 4.76-3.33 9.8-.9 6.08-1.53 8.68-3.47 12.56a30.6 30.6 0 0 1-9.66 11.45c-3.12 2.26-5.95 3.73-11.93 6.4l-2.31 1.04c-5.01 2.27-8.18 3.99-11.25 6.29-12.9 9.68-15.93 14.17-31.85 48.8-6.31 13.76-12.7 22.68-19.6 28.25-5.08 4.1-8.53 5.57-17.3 8.27a44.64 44.64 0 0 0-7.33 2.73c-6.24 3.12-15.7 6.4-28.3 10.06a867.4 867.4 0 0 1-21.8 5.97c-3.77 1.01-7.93 3.1-12.56 6.19a137.35 137.35 0 0 0-12.95 10.07c-2.24 1.92-9.48 8.3-9.48 8.3a98.2 98.2 0 0 1-7.84 6.37c-2.46 1.72-15.32 9.83-19.26 12.5a203 203 0 0 0-26.69 21.45c-11.13 10.58-12.43 18.3-7.47 28.63a74.52 74.52 0 0 0 2.62 4.95l.94 1.7a69.84 69.84 0 0 1 4.03 8.17c2.88 7.2 3.4 12.46 1.89 16.73-1.22 3.43-3.28 5.77-8.02 9.84-1.14.97-2.32 1.8-5.3 3.67-3.92 2.45-5.69 3.89-7.31 6.42-2.13 3.3-3.22 7.89-3.22 14.53 0 9.05-1.34 15.79-4.05 21.34-2.19 4.49-4.85 7.77-10.1 13.01-7.07 7.07-11.85 28.9-11.85 48.65 0 2.8-.58 5.48-1.7 8zm282.54 0h-1.01l-1.1-5.8c-3.08-16.26-4.05-26.2-2.74-37.26.7-5.8.77-9.68.55-15.3-.18-4.45-.17-5.68.19-7.63.78-4.3 3.44-8.53 10.39-16.34 9.07-10.2 12.26-15.41 19.8-30.15 1.35-2.64 2.33-4.47 3.38-6.3.9-1.58 1.82-3.06 2.77-4.5 3.14-4.7 7.03-8.42 16.84-16.81 11.22-9.6 15.5-13.86 18.13-19.13.7-1.4 1.3-2.8 1.93-4.4a206 206 0 0 0 1.49-4.05c3.63-9.94 8.01-13.93 22.9-17.81 4.99-1.3 20.55-5.13 21.38-5.34 16.19-4.1 25.33-7.36 33.48-12.6 5.86-3.77 5.84-3.76 27.66-16.53l2.6-1.52c10.23-6 17.1-10.2 22.73-13.95a149.3 149.3 0 0 0 8.8-6.3 723.7 723.7 0 0 0 6.37-5.08A87.74 87.74 0 0 1 600 342.95v1.12a85.76 85.76 0 0 0-15.49 9.9c.18-.14-4.76 3.84-6.38 5.1a150.3 150.3 0 0 1-8.85 6.35c-5.65 3.76-12.53 7.96-22.78 13.97l-2.6 1.53c-21.8 12.75-21.78 12.74-27.63 16.5-8.27 5.32-17.49 8.61-33.78 12.73-.83.21-16.39 4.04-21.36 5.33-8.03 2.1-13.15 4.5-16.45 7.5-2.66 2.42-4 4.86-5.77 9.7l-1.5 4.07a51.12 51.12 0 0 1-1.96 4.47c-2.72 5.45-7.04 9.75-18.38 19.45-9.73 8.32-13.6 12.02-16.65 16.6a77.18 77.18 0 0 0-2.74 4.45c-1.05 1.81-2.01 3.63-3.35 6.25-7.58 14.81-10.82 20.08-19.96 30.36-6.83 7.7-9.4 11.78-10.15 15.86-.34 1.85-.34 3.04-.17 7.4.22 5.68.14 9.6-.55 15.47-1.3 10.92-.34 20.79 2.73 36.95l1.12 5.99zm-76.59 0h-2.1l1.39-4.3c1.04-3.3 1.93-6.78 2.68-10.4 2.65-12.73 3.27-23.63 3.27-41.3 0-5.71-1.86-9.75-4.13-9.75-2.94 0-6.96 5.61-10.93 17.08C271.14 579.68 258.3 593 238 593c-22.42 0-29.26-1.35-48.42-10.09a87.69 87.69 0 0 1-9.42-5.04c-2.95-1.8-12.78-8.57-14.84-9.72-4.2-2.36-7-2.71-9.72-.99-.63.4-1.26.91-1.9 1.55a57.69 57.69 0 0 1-4.31 3.86 147.88 147.88 0 0 1-3.06 2.44l-1 .8C137.01 582.43 134 587.18 134 597c0 1.02-.02 2.01-.07 3h-2c.05-.99.07-1.98.07-3 0-10.52 3.33-15.78 12.09-22.76a265.61 265.61 0 0 1 2-1.6c.83-.64 1.43-1.13 2.03-1.61a55.76 55.76 0 0 0 4.17-3.74c.74-.73 1.48-1.34 2.24-1.82 3.47-2.2 7-1.75 11.77.93 2.15 1.21 12.03 8 14.9 9.76a85.7 85.7 0 0 0 9.22 4.93C209.29 589.7 215.85 591 238 591c19.25 0 31.49-12.7 41.06-40.33 4.24-12.25 8.66-18.42 12.81-18.42 3.8 0 6.13 5.06 6.13 11.75 0 17.8-.63 28.8-3.3 41.7-.77 3.7-1.68 7.23-2.75 10.6-.4 1.3-.8 2.53-1.19 3.7zm-149.25 0l.5-.94a160.1 160.1 0 0 0 6.53-13.26c2.73-6.29 5.78-9.64 9.24-10.52 3.74-.95 7.15.74 12.56 5.13 5.43 4.4 6.07 4.86 7.73 5.1 1.6.22 4.28 1.14 8.86 2.95 1.3.5 10.78 4.35 13.85 5.55 3.07 1.2 5.85 2.25 8.49 3.18 3.1 1.1 5.98 2.04 8.65 2.81h-3.45c-1.76-.56-3.6-1.18-5.54-1.87a281.2 281.2 0 0 1-8.51-3.19c-3.08-1.2-12.57-5.04-13.86-5.55-4.5-1.78-7.15-2.68-8.63-2.9-1.94-.27-2.53-.7-8.22-5.3-5.17-4.2-8.36-5.78-11.69-4.94-3.1.78-5.94 3.92-8.56 9.95a161 161 0 0 1-6.82 13.8h-1.13zm112.89 0a30.34 30.34 0 0 0 11.27-6.27c1.55-1.36 3.32-3.46 5.34-6.29 1.05-1.46 2.15-3.1 3.41-5.04a349.73 349.73 0 0 0 2.5-3.9l.47-.75.93-1.47a89.17 89.17 0 0 1 3.25-4.86c1.05-1.43 1.82-2.23 2.44-2.46 1.02-.37 1.49.48 1.49 2.04l.01 2.11c.05 6.91-.08 11.32-.7 16.33a48.4 48.4 0 0 1-2.38 10.56h-1.07a46.47 46.47 0 0 0 2.45-10.68c.62-4.96.75-9.33.7-16.2l-.01-2.12c0-.97-.08-1.12-.15-1.1-.36.14-1.05.85-1.97 2.1a88.44 88.44 0 0 0-3.22 4.82l-.92 1.46-.48.75a1268.1 1268.1 0 0 1-2.5 3.92c-1.26 1.95-2.38 3.6-3.44 5.08-2.06 2.88-3.87 5.04-5.5 6.45a30.87 30.87 0 0 1-8.94 5.52h-2.98zm-183.72 0H69.3c3.37-3.43 5.19-8.33 5.19-15 0-18.6-.04-17.35 1.02-20.77.6-1.93 1.5-3.74 3.27-6.63.42-.7 4.92-7.8 6.78-10.86 3.04-4.97 11.04-16.5 12.21-18.56 3.48-6.08 4.72-12.06 4.72-24.18 0-7.85 2.5-14.2 8.1-23.44l2.84-4.63a72.67 72.67 0 0 0 2.49-4.4c1.62-3.15 2.48-5.78 2.62-8.28.2-3.78-1.3-7.29-4.9-10.9-5.13-5.12-8.6-5.43-11.2-1.85-2.12 2.92-3.48 7.74-5.06 16.47-.2 1.03-.82 4.6-.82 4.57-.83 4.67-1.4 7.33-2.1 9.6-1.35 4.42-3.7 7.61-8.36 12.26l-3.26 3.2c-6.38 6.39-9.68 11.51-11.36 19.5l-1.16 5.52c-.87 4.1-1.56 7.04-2.33 9.94-3.67 13.74-9.65 25.97-22.59 44.72-7.68 11.14-11.05 18.87-10.92 23.72h-1c-.12-5.16 3.35-13.05 11.1-24.28 12.87-18.67 18.8-30.8 22.44-44.42.77-2.88 1.45-5.8 2.32-9.89l1.16-5.51c1.73-8.22 5.13-13.5 11.64-20 .63-.64 2.84-2.8 3.25-3.21 4.57-4.54 6.82-7.62 8.12-11.84a81.58 81.58 0 0 0 2.07-9.48l.81-4.57c1.62-8.9 3-13.8 5.24-16.89 3-4.15 7.2-3.78 12.71 1.74 3.8 3.8 5.42 7.58 5.2 11.66-.15 2.66-1.05 5.41-2.73 8.68a73.6 73.6 0 0 1-2.52 4.46l-2.84 4.63c-5.52 9.1-7.96 15.3-7.96 22.92 0 12.28-1.28 18.43-4.85 24.68-1.2 2.1-9.21 13.65-12.22 18.58-1.87 3.06-6.37 10.18-6.78 10.86-1.73 2.82-2.6 4.57-3.17 6.4-1.02 3.28-.98 2.1-.98 20.48 0 6.52-1.7 11.44-4.82 15zM310.09 0h1.06c-.37.9-.77 1.83-1.2 2.82-3.9 9.06-5.45 15.15-5.45 25.18 0 7.64-2.1 11.6-6.64 13.05-3.46 1.1-5.72.98-17.57-.43-11.55-1.36-19.17-1.58-28.16-.14-6.24 2.49-25.91 7.02-32.13 7.02-11.15 0-36.76-2.88-54.12-7.01a22.08 22.08 0 0 0-16.95 2.48c-4.05 2.33-7.09 5.03-13.9 11.97-6.28 6.39-9.53 9.23-13.8 11.5-7.09 3.79-11.22 7.65-13.4 12.27-1.82 3.85-2.33 7.84-2.33 15.29 0 4.4-2.65 6.69-9.45 9.74.1-.05-2.97 1.31-3.84 1.71-8.78 4.06-12.71 8.29-12.71 16.55 0 12.52-4.86 19.22-17.34 27.96l-4.56 3.14c-1.9 1.3-3.3 2.3-4.67 3.3-.92.68-1.79 1.34-2.62 2-7.16 5.62-11 14.54-15.56 33.28-.63 2.57-3.3 14-4.07 17.14a350.44 350.44 0 0 1-5.2 19.33c-1.37 4.5-4.5 15.07-4.96 16.53-1.05 3.4-1.64 4.94-2.46 6.32-.82 1.4-6.85 9.08-12.64 18.27L0 277.98v-1.9l4.58-7.35a270.8 270.8 0 0 1 12.61-18.23c-.3.5 1.35-2.8 2.38-6.12.45-1.44 3.58-12.01 4.95-16.53 1.83-6.03 3.44-12.09 5.19-19.27.76-3.13 3.44-14.56 4.06-17.14 4.62-18.95 8.52-28.02 15.92-33.83.84-.67 1.72-1.33 2.65-2.01 1.38-1.02 2.8-2.01 4.7-3.32l4.54-3.14C73.83 140.57 78.5 134.13 78.5 122c0-8.74 4.2-13.26 13.29-17.45.88-.41 3.96-1.77 3.85-1.73 6.46-2.9 8.86-4.97 8.86-8.82 0-7.6.53-11.7 2.42-15.71 2.29-4.84 6.57-8.85 13.84-12.73 4.15-2.21 7.35-5 14.15-11.93 6.28-6.4 9.36-9.13 13.52-11.53a23.07 23.07 0 0 1 17.69-2.59c17.27 4.12 42.8 6.99 53.88 6.99 6.1 0 25.73-4.53 31.92-7 9.12-1.46 16.83-1.25 28.49.13 11.63 1.38 13.9 1.5 17.15.47 4.06-1.3 5.94-4.85 5.94-12.1 0-10.1 1.56-16.3 6.6-28zm25.12 0h1c.05 5.62.26 11.48.65 19.4.47 9.7.64 14.57.64 21.6 0 9.81-4.68 17.46-13.1 23.16-6.53 4.43-14.94 7.46-24.33 9.33-3.74.54-9.42.56-22.68.23-6.74-.17-9.35-.22-12.39-.22-2.77 0-4.97.43-7.63 1.36-.88.3-4.55 1.74-5.58 2.11-6.55 2.35-13.59 3.53-24.79 3.53-8.1 0-13.58-1.38-22.46-4.9l-3.18-1.25c-12.55-4.87-21.27-5.15-37.18 1.12-11.15 4.39-18.13 9.2-22.28 14.81-3.15 4.26-4.33 7.8-5.94 15.8-1.22 6.09-1.93 8.74-3.5 12.13-1.65 3.53-3.97 5.81-7.07 7.22-2.33 1.07-4.35 1.5-9.32 2.19-9.04 1.27-12.77 3.09-15.61 9.58-3.71 8.48-7.72 13.87-14.22 19.76-2.4 2.18-13.14 11.02-15.91 13.42-8.2 7.1-13.85 17.37-18.7 31.97a258.81 258.81 0 0 0-3.27 10.7c-.01.05-2.26 7.97-2.88 10.1-8.49 28.85-17.88 52.95-26.13 61.2-2.8 2.8-5.06 5.64-10.4 12.96-3.4 4.68-6.23 8.25-8.95 11.1v-1.55c2.74-2.98 5.73-6.82 9.48-11.97 4.03-5.52 6.32-8.4 9.17-11.24 8.07-8.08 17.44-32.14 25.87-60.8.62-2.1 2.86-10.03 2.88-10.08 1.21-4.24 2.21-7.53 3.28-10.74 4.9-14.75 10.63-25.16 19-32.4 2.78-2.42 13.5-11.25 15.89-13.4 6.4-5.8 10.32-11.09 13.97-19.43 1.68-3.83 4.05-6.31 7.2-7.86 2.4-1.17 4.64-1.67 9.53-2.36 4.54-.63 6.5-1.05 8.7-2.06 2.89-1.31 5.03-3.42 6.58-6.73 1.53-3.3 2.23-5.9 3.43-11.9 1.64-8.14 2.85-11.79 6.11-16.2 4.28-5.79 11.41-10.7 22.73-15.16 16.15-6.36 25.13-6.07 37.9-1.11l3.19 1.26c8.77 3.47 14.13 4.82 22.09 4.82 11.09 0 18.02-1.16 24.46-3.47 1-.36 4.68-1.8 5.58-2.11A22.5 22.5 0 0 1 265 72.5c3.05 0 5.67.05 14.07.26 11.53.29 17.2.27 20.83-.25 9.25-1.85 17.54-4.83 23.94-9.17C332 57.8 336.5 50.46 336.5 41c0-7-.17-11.86-.7-22.7-.35-7.26-.55-12.83-.59-18.3zM93.87 0h2.04c-.7 4-1.61 6.82-3.03 9.47-2.33 4.38-2.85 5.75-5.26 13.03a40.46 40.46 0 0 1-1.94 5.03c-2.24 4.66-5.92 8.8-13.07 14.26-8.01 6.13-14.27 16.55-20.03 31.55-2.4 6.23-8.75 25.63-9.64 28.01-2.69 7.16-6.56 12.7-15.63 23.68l-2.68 3.24c-6.02 7.34-9.35 12.07-11.72 17.15-2.3 4.94-7.12 9.9-12.91 14.15v-2.4c5.14-3.94 9.1-8.3 11.1-12.6 2.46-5.27 5.87-10.1 11.98-17.56l2.68-3.26c8.94-10.8 12.72-16.22 15.3-23.1.88-2.33 7.24-21.74 9.65-28.03 5.89-15.31 12.3-26 20.68-32.41 6.92-5.3 10.4-9.2 12.48-13.55.65-1.35 1.16-2.7 1.85-4.79 2.45-7.4 3-8.83 5.4-13.34A27.68 27.68 0 0 0 93.87 0zm9.07 0h1.02c-1.66 8.3-2.91 12.67-4.54 15.26a59.14 59.14 0 0 0-4.1 8.21c-1.27 3-2.44 6.2-3.5 9.4-.38 1.12-.7 2.16-2.41 5.39a251.48 251.48 0 0 0-12.81 13.3c-3.48 3.96-5.95 7.27-7.15 9.66-.95 1.9-2.06 5.99-3.61 12.97-.64 2.9-3.65 17.15-4.51 21.07-3.63 16.45-6.63 26.69-9.9 32-7.66 12.45-10.64 15.71-37.08 41.1A69.78 69.78 0 0 1 0 179.21v-1.15a69.39 69.39 0 0 0 13.65-10.42c26.4-25.33 29.32-28.55 36.92-40.9 3.2-5.18 6.18-15.37 9.78-31.7.86-3.91 3.87-18.16 4.51-21.06 1.57-7.09 2.7-11.2 3.7-13.2 1.24-2.5 3.76-5.86 7.29-9.89.9-1.03 1.86-2.1 2.86-3.18 2.4-2.6 4.96-5.22 7.53-7.76.9-.88 1.73-1.7 3.37-3.4a129.02 129.02 0 0 1 4.78-13.46 60.07 60.07 0 0 1 4.19-8.35c1.52-2.44 2.74-6.71 4.36-14.74zM83.71 0h1.1c-2.09 4.74-6.03 8.92-11.42 12.3-7.2 4.52-16.5 7.2-24.39 7.2-8.9 0-11.8 7-11.74 21.52 0 1.7.04 3.17.12 5.99.1 3.3.12 4.45.12 5.99 0 5.73-.76 11.3-2.01 16.5a66.67 66.67 0 0 1-2.15 6.97 2597.76 2597.76 0 0 1-7 15.86A4270.8 4270.8 0 0 1 6.44 136.2 54.64 54.64 0 0 1 0 147v-1.65a54.87 54.87 0 0 0 5.55-9.57A4269.82 4269.82 0 0 0 30.7 79.97c.53-1.2.99-2.23 2.44-5.9A69.23 69.23 0 0 0 36.5 53c0-1.52-.03-2.66-.12-5.95-.08-2.83-.12-4.31-.12-6.01-.03-6.79.53-11.62 2.07-15.34 1.94-4.68 5.39-7.19 10.67-7.19 7.7 0 16.81-2.63 23.86-7.05C77.93 8.27 81.66 4.38 83.7 0zm282.63 0h1.01c1.86 10.02 2.18 12.67 2.32 18.3a123.43 123.43 0 0 1 .37 27.83c-.96 8.78-3.1 16.01-6.63 21.15-11.34 16.5-39.8 29.22-66.41 29.22-5.09 0-10.47.28-16.31.83a413.8 413.8 0 0 0-24.37 3.16c-21.56 3.26-27.66 4.01-36.32 4.01-6.92 0-12.2-1.05-21.69-3.9l-2.78-.83c-1.39-.41-2.54-.74-3.65-1.02-8-2.05-14.22-2.04-21.7.72a16.32 16.32 0 0 0-9.17 8.18c-1.6 3.05-2.5 6.06-4.02 12.83-1.5 6.64-2.34 9.52-3.99 12.64a16.16 16.16 0 0 1-9.85 8.36 104.8 104.8 0 0 0-9.5 3.42c-6.55 2.8-10.1 5.57-13.8 10.47-1.33 1.75-1.03 1.3-5.43 7.9-1.98 2.97-4.66 5.8-8.48 9.14-2.01 1.76-10.71 8.83-12.88 10.7-7.37 6.35-12.58 12.14-16.63 19.14-4.22 7.3-7.8 18.3-11.28 33.26-.87 3.73-1.72 7.64-2.64 12.14l-1.18 5.8-1.09 5.45c-1.8 8.96-2.77 13.28-3.77 16.26-6.8 20.44-17.26 42.16-27.13 51.2-5.11 4.7-8.1 7.07-11.1 8.86-.9.54-1.84 1.04-2.92 1.57-.44.22-9.6 4.4-14.1 6.66l-1.22.62v-1.13l.78-.39c4.52-2.26 13.67-6.44 14.1-6.65a41.19 41.19 0 0 0 2.84-1.54c2.94-1.75 5.88-4.09 10.94-8.73 9.71-8.9 20.1-30.51 26.87-50.79.97-2.92 1.94-7.22 3.73-16.13l1.1-5.46a490.5 490.5 0 0 1 3.82-17.96c3.5-15.06 7.1-26.14 11.39-33.54 4.11-7.11 9.4-12.98 16.83-19.4 2.19-1.88 10.88-8.95 12.88-10.7 3.77-3.28 6.39-6.05 8.3-8.93 4.43-6.64 4.12-6.18 5.47-7.96 3.8-5.03 7.5-7.91 14.21-10.78 2.61-1.12 5.74-2.24 9.59-3.46a15.17 15.17 0 0 0 9.27-7.86c1.59-3.02 2.42-5.85 4.03-12.99 1.41-6.27 2.32-9.33 3.98-12.48a17.31 17.31 0 0 1 9.7-8.66c7.7-2.83 14.1-2.84 22.3-.75 1.12.29 2.28.61 3.68 1.03l3.73 1.11c8.47 2.54 13.66 3.58 20.46 3.58 8.59 0 14.67-.75 36.18-4a414.64 414.64 0 0 1 24.41-3.17c5.88-.54 11.29-.83 16.41-.83 26.3 0 54.45-12.58 65.59-28.78 3.42-4.98 5.5-12.06 6.46-20.7.84-7.74.73-16.02.02-23.9a136.2 136.2 0 0 0-.57-5.12c0-4.47-.3-6.94-2.16-17zM18.88 0h1.03C18 7.57 17.15 10.18 14.46 16.2c-1.95 4.37-2.67 9.19-2.42 14.89.2 4.33.71 7.7 2.28 16.13 1.09 5.88 1.57 8.77 1.94 12.2.96 8.9.24 16.08-2.8 22.79A463.4 463.4 0 0 1 0 109.43v-2.12a465 465 0 0 0 12.54-25.52c2.97-6.52 3.67-13.53 2.72-22.27-.36-3.4-.84-6.26-1.93-12.12-1.57-8.47-2.1-11.88-2.29-16.27-.26-5.84.48-10.81 2.5-15.33 2.64-5.9 3.48-8.47 5.34-15.8zm280.47 0a70.78 70.78 0 0 1-4.91 11.24c-2.56 4.7-4.01 8.45-4.86 11.98l-.4 1.8-.28 1.45a5.28 5.28 0 0 1-.74 2.07c-.74 1.03-1.93 1.28-5.13 1.25.92 0-9.85-.29-15.03-.29-10.2 0-18.45.82-29.46 2.56-16.87 2.66-17.73 2.77-23.66 2.52a42.57 42.57 0 0 1-8-1.09c-17.7-4.16-46.18-5.86-54.72-3.01-2.72.9-5.88 2.8-9.52 5.59a112.37 112.37 0 0 0-6.54 5.48c-1.4 1.25-9.17 8.5-10.78 9.84-1.45 1.2-8.18 7.42-8.85 8.02a114.65 114.65 0 0 1-4.55 3.9c-4.99 4.03-8.9 6.2-11.92 6.2-3.52.05-4.32 0-5.14-.4-1.13-.56-1.5-1.72-1.13-3.57.74-3.63 4.47-10.84 12.84-24.8 5.69-9.48 9.42-18 11.78-26.2 1.45-5.04 1.94-7.4 2.97-14.54h1.01c-1.05 7.3-1.54 9.7-3.01 14.82-2.39 8.28-6.16 16.89-11.9 26.44-8.3 13.84-12 21.01-12.7 24.48-.3 1.45-.08 2.14.59 2.47.6.3 1.35.35 3.48.3 3.92 0 7.69-2.1 12.5-5.98 1.4-1.13 2.87-2.39 4.51-3.86.66-.59 7.41-6.83 8.88-8.05 1.59-1.33 9.34-8.55 10.75-9.82 2.4-2.15 4.55-3.96 6.6-5.53 3.72-2.85 6.97-4.8 9.81-5.74 8.76-2.92 37.41-1.22 55.27 2.99 2.57.6 5.14.95 7.81 1.06 5.84.25 6.7.14 23.47-2.51 11.05-1.75 19.36-2.57 29.6-2.57 5.2 0 15.99.3 15.05.29 2.87.03 3.84-.17 4.3-.83.23-.32.4-.8.58-1.7l.28-1.43.4-1.85c.88-3.6 2.36-7.44 4.96-12.22 1.87-3.43 3.44-7 4.73-10.76h1.06zm-8.59 0c-5.91 17.94-9.55 22-19.76 22-4.5 0-10.22.32-28.69 1.5l-1.53.1c-15.6.99-23.47 1.4-28.78 1.4-5.35 0-13.24-.96-28.86-3.28l-1.54-.23C163.18 18.75 157.47 18 153 18c-4.45 0-7.3 1.01-10.96 3.34-.1.06-1.8 1.17-2.3 1.47-2.43 1.5-4.32 2.19-6.74 2.19-2.8 0-4.11-1.46-4.11-4.22 0-1.04.16-2.29.5-4.1.16-.82.9-4.4 1.07-5.32.8-4.11 1.3-7.68 1.47-11.36h2c-.17 3.82-.68 7.5-1.5 11.75-.19.94-.92 4.5-1.07 5.31a21.04 21.04 0 0 0-.47 3.72c0 1.7.46 2.22 2.11 2.22 1.99 0 3.55-.57 5.7-1.9.47-.28 2.15-1.37 2.26-1.44C144.92 17.14 148.12 16 153 16c4.62 0 10.3.74 28.9 3.51l1.53.23C198.93 22.04 206.8 23 212 23c5.25 0 13.11-.41 28.65-1.4l1.54-.1C260.73 20.32 266.43 20 271 20c8.95 0 12.15-3.4 17.66-20h2.1zM141.51 0h1.13c-2.06 3.86-2.63 5.1-2.77 6.19-.15 1.12.42 1.64 2.32 1.96 1.8.3 3.85.35 10.81.35 6.02 0 13 .56 21.35 1.62 3.95.5 8.03 1.1 13.13 1.89 24 3.7 22.5 3.49 26.83 3.49 24.02 0 51.83-2.24 60.45-6.94 2.88-1.57 5.05-4.49 6.6-8.56h1.07c-1.64 4.47-3.98 7.69-7.2 9.44-8.83 4.82-36.67 7.06-60.92 7.06-4.41 0-2.84.22-26.98-3.5-5.1-.8-9.17-1.38-13.1-1.88-8.31-1.06-15.26-1.62-21.23-1.62-7.04 0-9.1-.05-10.97-.37-2.38-.4-3.38-1.32-3.15-3.07.16-1.22.69-2.41 2.63-6.06zm76.4 0c5.69 1.64 10.37 2.5 14.09 2.5 9.59 0 16.7-.71 22.4-2.5h2.98C251.12 2.53 243.2 3.5 232 3.5c-4.5 0-10.32-1.21-17.53-3.5h3.45zM70.69 0c-2.87 3.27-6.95 5.39-12.02 6.53-3.98.89-7.5 1.08-12.92 1A97.24 97.24 0 0 0 44 7.5c-5.37 0-8.86-1.24-10.1-4.97A8.6 8.6 0 0 1 33.5 0h.99c.02.82.14 1.56.36 2.22C35.91 5.39 39.02 6.5 44 6.5l1.76.02c5.35.09 8.8-.1 12.69-.97C62.95 4.54 66.63 2.74 69.3 0h1.37zM0 207.87c7.31-.16 11.5 3.33 11.5 11.13 0 11.41-5.05 28.35-11.5 41.5v-2.3c5.93-12.72 10.5-28.47 10.5-39.2 0-7.18-3.7-10.3-10.5-10.13v-1zm0 7.05c1.23.14 2.18.58 2.87 1.31 1.4 1.48 1.6 3.72 1.16 7.58l-.16 1.3A28.93 28.93 0 0 0 3.5 229c0 3.2-1.48 9.52-3.5 15.9v-3.45c1.49-5.13 2.5-9.87 2.5-12.45 0-.98.08-1.75.37-4.02l.16-1.29c.42-3.56.24-5.59-.88-6.77-.5-.53-1.21-.87-2.15-1v-1zM0 410.9v-1.47a21.67 21.67 0 0 0 2.97-4.7c1.32-2.7 2.68-6.28 4.56-11.89 7.85-23.55 7.83-26.6.25-30.4-2.25-1.12-4.8-1.43-7.78-.91v-1.02a13.1 13.1 0 0 1 8.22 1.04c8.24 4.12 8.26 7.6.25 31.6-1.88 5.66-3.25 9.27-4.6 12.02A20.82 20.82 0 0 1 0 410.9zM33.64 452c1.68 0 3.04-.23 8.34-1.31l2.38-.47c8.26-1.57 12.72-1.3 14.53 2.33 1.38 2.75-.47 5.86-4.75 9.68a75.6 75.6 0 0 1-5.08 4.07c-.94.7-4.89 3.59-5.79 4.27-1.86 1.4-2.97 2.37-3.47 3.03a19.08 19.08 0 0 0-2.89 5.5c.07-.2-4.02 13.65-6.96 22.22-2.7 7.85-5.56 10.72-8.82 8.59-2.11-1.4-3.66-4.24-6.6-11.03-1.98-4.62-2.5-5.76-3.4-7.4-4.55-8.18-3.9-23.9-.05-32.87a9.6 9.6 0 0 1 6.98-5.96c2.59-.66 4.86-.75 11.78-.67l3.8.02zm0 2c-1.13 0-2.09 0-3.82-.02-12.07-.13-14.83.57-16.9 5.41-3.63 8.47-4.26 23.55-.05 31.12.96 1.73 1.48 2.88 3.5 7.58 2.72 6.3 4.24 9.08 5.86 10.14 1.64 1.08 3.5-.8 5.82-7.55a682.9 682.9 0 0 0 6.97-22.24 21.03 21.03 0 0 1 3.18-6.04c.65-.87 1.85-1.9 3.86-3.43.92-.7 4.87-3.57 5.8-4.27 2.02-1.5 3.6-2.77 4.95-3.97 3.63-3.23 5.09-5.7 4.3-7.28-1.21-2.42-5.07-2.65-12.38-1.27l-2.35.47c-5.49 1.11-6.86 1.35-8.74 1.35zm345.63 146c-3.45-12.26-3.77-14.13-3.77-19 0-3.33-.13-6.27-.43-11.34-.63-10.33-.65-13.5.26-17.07 1.21-4.74 4.21-7.1 9.67-7.1h26c4.08 0 5.19 1.85 5.93 7.11.1.79.13.97.19 1.32.84 5.35 2.8 7.58 8.88 7.58 3.64 0 5.54.4 6.43 1.37.76.83.76 1.44.36 3.93-.85 5.26.5 8.85 7.5 13.8 6.32 4.45 11.63 5.36 16.55 3.37 3.8-1.54 6.73-4.16 11.92-10l1.1-1.23 1.09-1.23a75.6 75.6 0 0 1 2.7-2.86 35.81 35.81 0 0 1 9.57-6.73c1.52-.76 1.72-.86 5.66-2.63 6.1-2.73 9.01-4.5 11.74-7.62 2.63-3 4.67-4.85 6.7-6.04 3.18-1.85 5.46-2.13 13.68-2.13 5.98 0 10.56-4.32 18-14.99l2.82-4.03c1.06-1.5 1.94-2.7 2.79-3.79 7.87-10.12 19.38-10.4 30.74.96 5.54 5.53 10.17 19.43 13.64 38.51 2.5 13.75 4.18 29.46 4.47 39.84h-1c-.3-10.32-1.96-25.97-4.45-39.66-3.43-18.87-8.02-32.65-13.36-37.99-10.95-10.95-21.76-10.68-29.26-1.04-.83 1.07-1.7 2.26-2.75 3.75l-2.81 4.02c-7.65 10.95-12.38 15.42-18.83 15.42-8.04 0-10.21.26-13.17 2-1.92 1.12-3.9 2.9-6.45 5.83-2.86 3.26-5.87 5.09-12.09 7.88a103.35 103.35 0 0 0-5.62 2.6 34.84 34.84 0 0 0-9.32 6.54 74.67 74.67 0 0 0-3.75 4.05l-1.1 1.24c-5.28 5.95-8.29 8.64-12.28 10.25-5.26 2.13-10.92 1.17-17.5-3.48-7.33-5.17-8.82-9.15-7.92-14.77.34-2.12.34-2.6-.1-3.1-.64-.69-2.34-1.04-5.7-1.04-6.63 0-8.96-2.63-9.87-8.42l-.2-1.34c-.67-4.82-1.53-6.24-4.93-6.24h-26c-5 0-7.6 2.04-8.7 6.34-.88 3.43-.85 6.57-.23 16.76a177 177 0 0 1 .43 11.4c0 4.78.32 6.63 3.81 19h-1.04zm13.68 0c-1.31-6.58-1.61-10.71-1.36-14.84.04-.7.1-1.44.18-2.38l.23-2.56c.34-3.81.5-6.97.5-11.22 0-4.94 1.46-7.76 4.21-8.42 2.38-.58 5.56.54 9.2 3 6.64 4.52 13.99 13.07 16.55 19.23 4.77 11.44 14.12 15.69 33.54 15.69 8.6 0 14.32-2.35 20.67-7.88 1.45-1.26 15.06-15 21-20 7.21-6.07 11.77-7.59 20.62-8.32 5.52-.45 7.98-.9 11.44-2.36 4.58-1.95 9.36-5.48 14.9-11.29 7.43-7.76 13.25-8.92 17.47-4.3 3.32 3.63 5.46 10.58 6.82 20.24.73 5.17.94 7.74 1.58 17.38.25 3.75.17 5.32-.92 18.03h-1c1.09-12.7 1.17-14.28.92-17.97-.64-9.6-.85-12.16-1.57-17.3-1.33-9.47-3.43-16.27-6.56-19.7-3.76-4.11-8.93-3.08-16 4.32-5.65 5.9-10.54 9.5-15.25 11.5-3.58 1.53-6.13 1.99-11.6 2.44-8.8.72-13.17 2.18-20.2 8.1-5.9 4.96-19.5 18.7-21 19.99-6.52 5.68-12.47 8.12-21.32 8.12-19.78 0-29.5-4.42-34.46-16.3-2.49-5.97-9.71-14.38-16.2-18.79-3.42-2.32-6.36-3.35-8.4-2.86-2.2.53-3.44 2.92-3.44 7.45 0 4.28-.16 7.47-.5 11.31l-.23 2.56c-.09.93-.14 1.65-.19 2.35-.24 4.08.06 8.18 1.39 14.78h-1.02zm113.75 0c2.52-3.26 8.93-11.79 10.9-14.3 5.48-6.98 13.05-12.38 19.4-13.94 7.01-1.71 11.5 1.45 11.5 9.24 0 4.02-.04 5.16-.74 19h-1c.7-13.85.74-15 .74-19 0-7.12-3.86-9.83-10.26-8.26-6.11 1.5-13.5 6.77-18.85 13.57-1.86 2.36-7.65 10.07-10.43 13.69h-1.26zm-9.86-338.96c3.44 2.71 7 5.1 11.44 7.75 1.06.64 8.42 4.9 10.35 6.1 11.27 7 15 13.35 12.35 25.33-1.45 6.52-4.53 11.1-9.39 14.44-3.83 2.63-8.07 4.26-16.08 6.56-11.97 3.45-13.68 3.99-18.82 6.28a60.18 60.18 0 0 0-7.81 4.18c-11.11 7.07-19.1 7.7-27.96 3.28-3.56-1.77-17.2-11-17.2-11.01a101.77 101.77 0 0 0-5.2-3.07c-16.04-8.83-34.27-24.16-34.52-31.85-.11-3.46 1.99-6.57 6.28-10.26 1.03-.9 2.18-1.81 3.68-2.95.72-.55 3.38-2.56 3.94-3 4.47-3.4 7.18-5.79 9.32-8.45 11.12-13.82 26.55-28.68 34.36-32.28 12.06-5.54 19.84-5.77 27.37.12 3.25 2.54 5.65 6.54 8.58 13.35.29.65 2.3 5.45 2.88 6.74 1.62 3.65 2.9 5.8 4.24 6.94.72.6 1.45 1.2 2.2 1.8zm-3.49-.28c-1.63-1.39-3.03-3.74-4.77-7.65-.58-1.3-2.6-6.12-2.88-6.76-2.81-6.5-5.08-10.3-7.98-12.56-6.83-5.35-13.85-5.15-25.3.12-7.45 3.42-22.7 18.12-33.64 31.72-2.27 2.82-5.08 5.3-9.67 8.79l-3.94 2.98a79.98 79.98 0 0 0-3.59 2.88c-3.87 3.33-5.67 6-5.58 8.69.21 6.64 18.14 21.72 33.48 30.15 1.76.97 3.5 2 5.3 3.13.12.08 13.61 9.22 17.03 10.92 8.22 4.1 15.46 3.52 26-3.18a62.17 62.17 0 0 1 8.07-4.31c5.25-2.35 7-2.9 19.08-6.38 7.8-2.24 11.9-3.82 15.5-6.3 4.44-3.04 7.23-7.18 8.56-13.22 2.44-11.02-.83-16.6-11.45-23.2-1.9-1.18-9.23-5.42-10.32-6.08-4.5-2.69-8.13-5.12-11.64-7.9-.77-.6-1.52-1.21-2.26-1.84zM87.72 241.6c4.3-2.98 7.88-5 12.14-6.95.84-.4 1.73-.78 2.78-1.24l4.37-1.88a164.3 164.3 0 0 0 17.74-8.96 320.67 320.67 0 0 1 27.87-14.5c4.22-1.95 21.89-9.84 21.17-9.52 19.17-8.62 28.1-6.93 49.5 8.05 7.91 5.54 13.24 13.25 16.45 22.66 3.02 8.83 3.76 16.51 3.76 27.75 0 8.32-.66 12.95-3.68 18.97-4.18 8.36-12.3 16.14-25.58 23.47-24.45 13.49-38.83 27.55-52.83 47.84-8.83 12.8-47.76 44.21-65.16 54.15C75.04 413.55 48.89 423.5 31 423.5c-10.05 0-14.67-4.78-14.76-13.37-.07-6.32 2.06-13.73 6.3-24.32 2.95-7.37 2.02-12.9-2.16-22.29-3.19-7.17-3.88-9.14-3.88-12.52 0-3.35 1.87-6.9 5.52-11.07 2.61-3 3.5-3.83 11.9-11.5 5.09-4.66 8.08-7.6 10.7-10.75 9.46-11.36 12.62-19.47 17.9-44.78 3.12-15.05 6.63-20.28 15.12-25.25.8-.47 3.95-2.25 4.7-2.68a76.66 76.66 0 0 0 5.38-3.38zm.56.82a77.63 77.63 0 0 1-5.44 3.43l-4.7 2.67c-8.23 4.82-11.57 9.81-14.65 24.6-5.3 25.45-8.51 33.7-18.1 45.21-2.66 3.19-5.68 6.16-10.8 10.84-8.36 7.64-9.24 8.48-11.82 11.42-3.5 4.01-5.27 7.36-5.27 10.42 0 3.18.68 5.1 3.8 12.12 4.27 9.6 5.24 15.37 2.16 23.07-4.18 10.47-6.29 17.78-6.22 23.93.08 8.06 4.26 12.38 13.76 12.38 17.67 0 43.68-9.9 64.75-21.93 17.28-9.88 56.1-41.2 64.84-53.85 14.08-20.42 28.57-34.59 53.17-48.16 13.12-7.23 21.09-14.87 25.17-23.03 2.92-5.86 3.57-10.35 3.57-18.53 0-11.13-.74-18.73-3.7-27.43-3.15-9.22-8.36-16.75-16.09-22.16-21.13-14.8-29.7-16.42-48.5-7.95.7-.32-16.96 7.56-21.17 9.5-1.7.8-3.3 1.55-4.86 2.3a319.68 319.68 0 0 0-22.93 12.17 165.3 165.3 0 0 1-17.85 9.01l-4.37 1.88c-1.04.45-1.92.84-2.76 1.23a74.56 74.56 0 0 0-11.99 6.86zm-7.6 12.2c7.7-6.25 12.3-8.17 23.68-11.27 6.12-1.67 9.12-2.95 12.31-5.72 3.8-3.3 7.47-4.52 15.86-6.1 2.75-.52 3.67-.7 5.06-1.02 5.48-1.24 9.48-2.93 13.1-5.89 10.42-8.53 25.4-14.11 36.31-14.11 5.33 0 16.77 7.58 25.74 17.16 10.73 11.46 15.96 23.27 12.73 32.5-3.18 9.1-11.39 18.57-23.03 27.86-8.44 6.73-18.36 13-25.22 16.43-3.72 1.86-6.59 4.88-9.77 9.99-.69 1.1-11.1 20.25-16.03 27.83-5.62 8.65-15.4 17.36-30.23 27.96a552.58 552.58 0 0 1-9.2 6.42c-.13.09-6.81 4.65-8.6 5.89-6.47 4.46-10.35 7.35-13.05 9.83-11.64 10.67-37.14 15.54-43.7 8.98-1.96-1.96-2.2-4.06-1.95-10.52.37-9.42-.5-14.5-4.95-20.51a34.09 34.09 0 0 0-7.04-6.92c-3.93-2.95-6.07-6.11-6.56-9.49-.97-6.61 3.87-13.06 14.17-21.69 1.58-1.32 6.67-5.44 7.09-5.78a48.03 48.03 0 0 0 5.23-4.77c4.1-4.63 5.85-9.55 7.8-20.07a501.52 501.52 0 0 0 .8-4.37c.33-1.87.6-3.3.88-4.73.74-3.78 1.5-7.18 2.4-10.63 1-3.78 1.38-5.5 2.36-10.37.6-3.02.93-4.21 1.56-5.47 1.22-2.45 1.27-2.5 12.25-11.42zm.64.78c-10.77 8.74-10.88 8.84-12 11.08-.58 1.16-.88 2.3-1.47 5.22-.98 4.89-1.36 6.63-2.37 10.44-.9 3.43-1.65 6.8-2.39 10.56a339.79 339.79 0 0 0-1.29 6.95l-.39 2.15c-1.98 10.68-3.77 15.74-8.04 20.54a48.77 48.77 0 0 1-5.34 4.88c-.42.34-5.5 4.47-7.07 5.78-10.04 8.4-14.72 14.65-13.83 20.78.45 3.1 2.44 6.03 6.17 8.83 3 2.25 5.39 4.62 7.24 7.12 4.63 6.24 5.52 11.52 5.15 21.15-.25 6.14-.01 8.1 1.66 9.78 6.1 6.1 31.02 1.33 42.31-9.02 2.75-2.52 6.66-5.43 13.16-9.92l8.6-5.89c3.63-2.48 6.45-4.44 9.19-6.4 14.73-10.54 24.44-19.18 29.97-27.7 4.9-7.54 15.31-26.68 16.02-27.8 3.27-5.26 6.26-8.41 10.18-10.37 6.79-3.4 16.65-9.63 25.03-16.32 11.52-9.18 19.61-18.53 22.72-27.4 3.07-8.78-2.02-20.27-12.52-31.49-8.8-9.4-20.04-16.84-25.01-16.84-10.67 0-25.43 5.5-35.68 13.89-3.76 3.07-7.9 4.81-13.5 6.09-1.41.32-2.35.5-5.11 1.02-8.21 1.55-11.76 2.73-15.38 5.88-3.34 2.9-6.45 4.22-12.7 5.92-11.26 3.07-15.75 4.94-23.31 11.09zM212 251.85c0 7.56-.6 10.92-2.6 14.3-1.1 1.84-7.66 10.05-8.6 11.3-5.96 7.94-9.33 10.28-17.26 13.76-1.34.58-2.2 1-3.03 1.5-.55.33-1.2.66-2 1.02-.71.33-4.46 1.9-5.52 2.39-6.05 2.78-8.99 5.8-8.99 10.73 0 10.97-18.95 36.12-34.51 44.87-8.18 4.6-21.3 9.36-32.78 11.86-13.33 2.9-22.49 2.48-24.62-2.32-1.32-2.97-4.4-4.26-11.98-5.81l-.6-.12c-4.84-.99-6.94-1.55-9.03-2.64-2.92-1.5-4.48-3.7-4.48-6.84 0-2.74 1.08-5.77 3.25-9.67.85-1.53 1.82-3.13 3.23-5.35-.16.25 2.83-4.4 3.67-5.76 6.69-10.7 9.85-18.5 9.85-27.22 0-18.41 11.22-33.37 27.5-42.86 5.22-3.05 9.23-3.31 15.2-2.12 5.04 1 6.05.9 7.43-1.52 4.5-7.85 7.04-9.5 15.87-9.5 3.93 0 6.97-.98 10.47-3.16 1.56-.97 8.67-6.17 10.99-7.68 9.2-5.98 11.34-7 25.2-11.95 6.95-2.48 15.18 1.28 22.33 9.12 6.55 7.19 11.01 16.61 11.01 23.67zm-2 0c0-6.5-4.25-15.48-10.49-22.32-6.67-7.32-14.16-10.74-20.17-8.59-13.73 4.9-15.73 5.85-24.8 11.75-2.24 1.46-9.37 6.68-11.01 7.7-3.8 2.36-7.2 3.46-11.53 3.46-8.08 0-9.98 1.23-14.13 8.5-1.1 1.91-2.51 2.88-4.35 3.09-1.3.14-1.9.05-5.22-.61-5.53-1.1-9.07-.88-13.8 1.88-15.72 9.17-26.5 23.55-26.5 41.14 0 9.2-3.28 17.29-10.15 28.28l-3.68 5.77c-1.39 2.19-2.35 3.77-3.17 5.25-2.02 3.63-3 6.38-3 8.7 0 4.19 2.87 5.67 11.9 7.52l.61.12c8.27 1.7 11.7 3.13 13.4 6.95 3.17 7.14 36 0 54.6-10.46 14.98-8.43 33.49-32.99 33.49-43.13 0-5.9 3.47-9.48 10.16-12.55 1.1-.5 4.85-2.08 5.52-2.38.74-.34 1.32-.64 1.8-.93.92-.55 1.85-1 3.25-1.62 7.65-3.35 10.75-5.5 16.47-13.12 1.02-1.36 7.47-9.42 8.47-11.11 1.79-3.01 2.33-6.06 2.33-13.3zm-37.18-22.4c.15-.1 2.4-1.51 2.95-1.84.96-.57 1.7-.94 2.43-1.17 2.57-.83 5.06-.1 11.04 3.12 14.86 8 19.43 22.87 9.18 38.71-4.04 6.24-9.37 9-18.72 11.11-.85.2-1.2.27-3.13.68-6.04 1.29-8.78 2.08-11.6 3.65-3.63 2.02-6.09 4.98-7.5 9.44-7.87 24.93-19.72 43.34-36.28 50.31-16.45 6.93-21.13 8.53-27.98 8.89-4.94.25-9.8-.65-15.4-2.89a44.45 44.45 0 0 1-5.64-2.6c-4.02-2.33-5.14-4.74-4.5-9.31.3-2.13 3.77-15.53 4.84-20.65.63-3.05 1.19-6.14 1.75-9.69a464.04 464.04 0 0 0 1.35-8.9c1.42-9.41 2.5-14.27 4.49-18.65 2.46-5.43 6.13-9.03 11.72-11.13 6.59-2.47 10.54-3.1 18.03-3.53 4.75-.27 6.68-.64 9-2.05.61-.37 1.22-.81 1.82-1.33a30.61 30.61 0 0 0 3.37-3.4c.59-.69 2.38-2.9 2.63-3.19 3.36-4 6.3-5.53 12.33-5.53 3.94 0 5.9-.92 8.18-3.36-.17.18 2.75-3.14 3.85-4.22a30.95 30.95 0 0 1 6.79-5c1.5-.83 3.15-1.62 4.99-2.38a64.92 64.92 0 0 0 10.01-5.1zm-14.52 8.34a29.95 29.95 0 0 0-6.57 4.84 116.68 116.68 0 0 0-3.82 4.2c-2.46 2.63-4.68 3.67-8.91 3.67-5.72 0-8.39 1.39-11.57 5.17-.23.28-2.03 2.5-2.63 3.2a31.6 31.6 0 0 1-3.47 3.51c-.65.55-1.3 1.03-1.96 1.43-2.5 1.51-4.55 1.9-9.47 2.19-7.39.42-11.25 1.04-17.72 3.47-5.34 2-8.82 5.4-11.17 10.6-1.93 4.27-3 9.07-4.41 18.39l-.65 4.34-.7 4.57c-.57 3.56-1.12 6.67-1.76 9.73-1.08 5.18-4.54 18.53-4.83 20.59-.59 4.17.35 6.18 4.01 8.3 1.35.77 3.1 1.58 5.52 2.55 5.46 2.18 10.18 3.05 14.97 2.8 6.69-.34 11.32-1.93 27.65-8.8 16.21-6.83 27.92-25.01 35.71-49.7 1.49-4.7 4.12-7.86 7.97-10 2.93-1.63 5.74-2.45 11.87-3.76 1.92-.4 2.28-.49 3.12-.68 9.12-2.06 14.24-4.7 18.1-10.67 9.92-15.34 5.55-29.55-8.82-37.29-5.75-3.1-8.03-3.76-10.25-3.05-.65.2-1.33.54-2.23 1.08-.55.32-2.77 1.72-2.93 1.82a65.91 65.91 0 0 1-10.16 5.17c-1.8.75-3.42 1.52-4.89 2.33zm-42.39 32.72c16.15-2.87 26.36-.97 32.47 6.16 5.08 5.93 1.13 21.42-5.93 35.55-4.79 9.58-10.6 16.21-23.16 25.19-14.15 10.1-35.5 12.2-40.71 3.85-1.86-2.97-2.1-8.14-1.06-15.73.78-5.68 1.86-10.71 4.73-22.98l.12-.51c1.59-6.8 2.37-10.31 3.14-14.14 1.45-7.25 3.74-11.47 7.26-13.74 2.81-1.8 5.53-2.28 12.33-2.62 5.33-.27 7.56-.46 10.81-1.03zm.18.98c-3.3.59-5.56.78-10.94 1.05-6.62.33-9.23.78-11.84 2.46-3.25 2.1-5.42 6.09-6.82 13.1-.77 3.84-1.56 7.35-3.15 14.17l-.12.5c-2.86 12.24-3.93 17.26-4.7 22.9-1.03 7.36-.79 12.36.9 15.07 4.82 7.7 25.54 5.67 39.29-4.15 12.43-8.88 18.13-15.39 22.84-24.81 6.86-13.72 10.75-29 6.07-34.45-5.84-6.81-15.7-8.65-31.53-5.84zM132 276.5c7.12 0 10.66 3.08 11.25 8.7.42 4.02-.43 8.14-2.77 15.94-2.56 8.52-18.36 25.38-27.2 31.28-7.01 4.67-20.02 5.67-26.57.99-3.99-2.85-3.53-12.08.02-26.46.68-2.75 1.47-5.65 2.37-8.76a412.6 412.6 0 0 1 3.05-10.14l.37-1.2c1.48-4.8 5.1-7.75 10.73-9.27 4.4-1.2 9.54-1.5 17.48-1.33l3.89.1c3.87.11 5.42.15 7.38.15zm0 1c-1.97 0-3.53-.04-7.41-.15l-3.88-.1c-7.85-.17-12.92.13-17.2 1.3-5.32 1.43-8.67 4.16-10.03 8.6a1277.83 1277.83 0 0 1-1.6 5.21c-.68 2.2-1.27 4.17-1.82 6.1-.9 3.1-1.68 5.99-2.36 8.73-3.43 13.88-3.87 22.93-.4 25.4 6.17 4.42 18.73 3.45 25.42-1 8.66-5.78 24.33-22.49 26.8-30.73 2.3-7.67 3.14-11.71 2.73-15.56-.53-5.1-3.64-7.8-10.25-7.8zm-17.79 7a31.3 31.3 0 0 1 8.57 1.4c5.42 1.78 8.72 5.03 8.72 10.1 0 9.59-9.51 17.2-22.34 21.47-9.82 3.28-13.62-1.79-11.66-16.54.84-6.28 3.82-10.67 8.24-13.46a20.38 20.38 0 0 1 8.47-2.97zm-.6 1.08a19.39 19.39 0 0 0-7.34 2.73c-4.18 2.64-6.98 6.78-7.77 12.76-1.89 14.11 1.36 18.45 10.34 15.46C121.3 312.37 130.5 305 130.5 296c0-4.56-2.98-7.5-8.03-9.15a28.05 28.05 0 0 0-8.2-1.35c-.13 0-.35.03-.66.08zm80.87-23.45c-2.72 9.8-14.93 9.86-26.72 3.3-10.17-5.64-13.8-17.98-5-22.87a66.53 66.53 0 0 0 4.48-2.7l2.03-1.3a50.15 50.15 0 0 1 3.92-2.3c4.73-2.43 8.82-2.8 14-.72 9.16 3.66 10.98 13.33 7.3 26.6zm-20.83-24.98a49.26 49.26 0 0 0-3.84 2.25l-2.03 1.3c-.84.53-1.5.95-2.16 1.35-.82.5-1.6.96-2.38 1.39-7.94 4.4-4.59 15.8 5 21.12 11.31 6.29 22.8 6.23 25.28-2.7 3.57-12.83 1.85-21.97-6.7-25.4-4.9-1.95-8.69-1.62-13.17.7zm17.85 12.15c0 5.7-2.44 9-6.64 9.96-3.3.76-7.56-.05-11.08-1.81l-1.89-.94c-.67-.34-1.18-.62-1.63-.88-4.07-2.38-4.13-4.97.34-10.93 6.8-9.06 20.9-7.16 20.9 4.6zm-1 0c0-5.3-2.87-8.55-7.32-9.16-4.23-.57-8.99 1.44-11.78 5.16-4.15 5.54-4.1 7.44-.64 9.47.44.25.93.51 1.59.85l1.87.93c3.34 1.67 7.36 2.44 10.42 1.74 3.73-.86 5.86-3.74 5.86-9zM387 530.3c0-12.8 2.44-16.74 18.48-29.77a56.8 56.8 0 0 1 7.61-5.2c2.6-1.5 5.33-2.82 8.5-4.18 1.24-.53 2.48-1.05 4.1-1.7l3.92-1.57c9.4-3.83 13.74-6.7 16.62-12.05 1.2-2.22 2.21-4.4 3.23-6.83a148.57 148.57 0 0 0 1.54-3.84l.3-.74.56-1.44c3.2-8.02 6.05-12.08 12.7-16.5a35.26 35.26 0 0 0 4.96-4 46.36 46.36 0 0 0 3.88-4.29c.27-.34 2.55-3.2 3.2-3.98 3.48-4.15 6.51-5.9 11.51-5.9 3.08 0 5.62-.63 9.57-2.1 5.42-2.02 6.53-2.34 8.96-2.2 2.53.13 4.85 1.26 7.18 3.59 1.3 1.3 5.55 5.83 6.52 6.78 5.06 5 9.44 6.92 17.77 6.92a197.5 197.5 0 0 1 12.08.45c15.93.87 21.94.57 25.28-2.21 6.91-5.77 11.64-2.73 11.64 7.76 0 10.73-8.6 20-19 20-4.8 0-8.32 1.43-9.34 3.67-1.12 2.48.68 6.15 5.98 10.57 13.6 11.33 11.24 20.76-7.64 20.76a21.91 21.91 0 0 0-14.6 5.24c-3.28 2.71-5.8 5.86-9.85 11.82l-1.52 2.25c-3.1 4.57-5.01 7.1-7.32 9.4-6.21 6.21-9.3 7.64-13.05 6.89l-1-.23a10.82 10.82 0 0 0-2.66-.37c-1.6 0-2.41.67-8.18 6.22-4.85 4.67-8.07 6.78-11.82 6.78-1.33 0-3.46 1.15-6.45 3.45-1.27.98-2.68 2.14-4.5 3.7l-4.92 4.29a181.11 181.11 0 0 1-4.54 3.82c-9.33 7.56-15.63 10.2-20.21 6.52-2.7-2.15-4.14-4.51-4.63-7.26-.37-2.04-.26-3.63.29-7.3.87-5.85.65-8.42-1.83-11.6-2.32-2.98-2.96-3.22-3.77-2.39-.25.26-1.35 1.63-1.61 1.94-2.21 2.5-4.85 3.57-9 2.82-4.6-.84-5.57-4.11-4.72-10.09l.24-1.56c.6-3.66.68-4.93.25-5.8-.44-.86-1.9-.94-5.23.4l-.74.29c-13.78 5.54-15.26 6.09-19.43 6.67-6.03.84-9.31-1.6-9.31-7.9zm2 0c0 5 2.14 6.6 7.04 5.92 3.91-.55 5.43-1.1 18.95-6.55l.75-.3c4.17-1.66 6.7-1.54 7.76.58.71 1.43.62 2.76-.06 7l-.24 1.53c-.72 5.04-.06 7.27 3.09 7.84 3.43.62 5.38-.17 7.15-2.18.2-.23 1.34-1.66 1.68-2 1.9-1.96 3.82-1.25 6.78 2.55 2.9 3.74 3.17 6.77 2.22 13.12-1 6.75-.52 9.4 3.62 12.71 3.49 2.8 9.1.45 17.7-6.51 1.35-1.1 2.75-2.28 4.49-3.78l4.93-4.3c1.84-1.58 3.27-2.76 4.58-3.77 3.34-2.56 5.74-3.86 7.67-3.86 3.04 0 5.95-1.9 10.43-6.22l2.46-2.39c.94-.89 1.67-1.56 2.37-2.13 1.81-1.49 3.3-2.26 4.74-2.26 1.03 0 1.81.13 3.1.42.7.16.71.17.96.21 2.96.6 5.45-.55 11.23-6.33 2.2-2.2 4.06-4.65 7.09-9.11l1.52-2.25c4.15-6.11 6.76-9.37 10.22-12.24a23.9 23.9 0 0 1 15.88-5.7c16.87 0 18.62-7.01 6.36-17.23-5.9-4.92-8.12-9.41-6.52-12.93 1.42-3.12 5.67-4.84 11.16-4.84 9.25 0 17-8.34 17-18 0-8.94-2.88-10.79-8.36-6.23-3.94 3.28-9.98 3.59-26.67 2.68l-1.02-.06c-5.09-.27-7.99-.39-10.95-.39-8.88 0-13.76-2.14-19.18-7.5-1-.98-5.26-5.53-6.53-6.79-1.99-1.99-3.86-2.9-5.87-3-2.03-.12-3.06.18-8.15 2.07-4.15 1.55-6.9 2.22-10.27 2.22-4.33 0-6.84 1.46-9.98 5.2-.63.74-2.89 3.6-3.18 3.95a48.29 48.29 0 0 1-4.04 4.46 37.26 37.26 0 0 1-5.24 4.23c-6.26 4.17-8.9 7.91-11.95 15.58l-.57 1.43-.28.74a531.5 531.5 0 0 1-1.56 3.88 77.49 77.49 0 0 1-3.32 7c-3.16 5.88-7.82 8.97-17.63 12.96l-3.92 1.58c-1.6.64-2.84 1.15-4.05 1.67a79.2 79.2 0 0 0-8.3 4.08 54.8 54.8 0 0 0-7.35 5.02C391.12 514.78 389 518.21 389 530.31zm133.22-79.76c3.06 1.53 6.54 2.02 10.68 1.7 2.53-.2 4.91-.62 8.8-1.49 5.36-1.19 6.33-1.38 8.33-1.54 2.78-.23 4.82.17 6.29 1.4 1.58 1.31 1.96 2.72 1.26 4.22-.66 1.38-1.05 1.74-5.05 5.07-3.53 2.93-5.03 4.83-5.03 7.09 0 7.3 1.29 10.02 7.83 15.62 3.86 3.3 5.93 6.84 5.28 9.62-.75 3.25-4.96 5.02-12.61 5.02-7.18 0-12.7 4.61-20.03 14.68-.5.7-3.96 5.57-4.94 6.87a38.89 38.89 0 0 1-4.72 5.5c-1.06.98-2.09 1.7-3.1 2.15-2.85 1.26-5.05 1.57-9.83 1.74-7.66.27-10.87 1.45-14.98 7.1-1.58 2.17-3.11 4-4.68 5.6a42.87 42.87 0 0 1-8.65 6.69c-.15.08-10.69 6.19-14.8 8.83-3.76 2.42-6.45 2.04-8.22-.77-1.28-2.03-1.9-4.54-2.87-10.35-.84-5.08-1.27-7.08-2.06-8.93-.97-2.3-2.21-3.24-4.02-2.88-6.2 1.24-8.95 1.39-10.98.2-2.37-1.4-3.13-4.62-2.62-10.73.16-1.96-1.04-2.87-3.76-3.04-2.24-.13-4.9.2-9.94 1.12l-.69.12c-7.97 1.45-10.72 1.72-12.72.73-2.91-1.43-1.6-5.27 4.23-12.21 5.48-6.53 10.6-10.81 15.76-13.53 3.74-1.97 5.94-2.65 12.16-4.1 7.29-1.72 10.4-3.51 14.04-9.31 2.96-4.75 10.74-18.62 12.14-20.84 3.59-5.67 6.8-9.1 11.05-11.34 2.6-1.38 4.72-2.82 9.17-6.07l1.38-1.01c7.85-5.72 12.3-7.98 17.68-7.98 4.22 0 6.49 1.36 9.13 4.77.34.43 1.67 2.22 2 2.67.85 1.09 1.6 1.98 2.45 2.83a24.29 24.29 0 0 0 6.64 4.78zm-.44.9c-2.8-1.4-5-3.03-6.92-4.97-.87-.9-1.65-1.81-2.51-2.93-.35-.46-1.68-2.25-2.01-2.67-2.47-3.18-4.46-4.38-8.34-4.38-5.09 0-9.4 2.2-17.09 7.78l-1.38 1.01c-4.49 3.29-6.63 4.74-9.3 6.15-4.06 2.15-7.16 5.45-10.66 11-1.39 2.19-9.16 16.05-12.15 20.82-3.79 6.07-7.13 7.98-14.66 9.75-6.13 1.45-8.27 2.1-11.92 4.02-5.04 2.66-10.05 6.86-15.46 13.3-5.43 6.46-6.53 9.69-4.55 10.66 1.7.84 4.48.57 12.1-.81l.7-.13c5.12-.93 7.82-1.27 10.17-1.12 3.21.2 4.92 1.48 4.7 4.11-.48 5.76.2 8.64 2.13 9.78 1.73 1.02 4.34.88 10.27-.31 2.35-.47 4 .78 5.14 3.47.83 1.95 1.27 4 2.07 8.8l.06.36c.94 5.65 1.55 8.11 2.72 9.98 1.46 2.3 3.52 2.6 6.84.46 4.14-2.66 14.69-8.77 14.81-8.85a41.9 41.9 0 0 0 8.46-6.54 47.89 47.89 0 0 0 4.6-5.48c4.32-5.95 7.81-7.23 15.74-7.5 4.66-.17 6.76-.47 9.46-1.67.9-.4 1.85-1.06 2.84-1.96a38.03 38.03 0 0 0 4.6-5.36c.96-1.3 4.4-6.16 4.93-6.87 7.5-10.31 13.22-15.09 20.83-15.09 7.24 0 11.02-1.6 11.64-4.24.54-2.32-1.36-5.55-4.97-8.64-6.75-5.79-8.17-8.79-8.17-16.38 0-2.67 1.64-4.74 5.39-7.86 3.8-3.17 4.23-3.56 4.78-4.73.5-1.06.25-1.99-.99-3.03-2.23-1.85-4.72-1.65-13.76.36-3.93.87-6.35 1.3-8.94 1.5-4.3.34-7.97-.18-11.2-1.8zm-28-3.9c5.65-2.82 8.96-2.2 12.9 1.37.56.5 2.6 2.47 3.02 2.87 4.2 3.89 8.07 5.71 14.3 5.71 11.37 0 14 1.41 16.1 8.09.26.83 1.35 4.6 1.66 5.62.8 2.63 1.64 5.03 2.7 7.6 2.13 5.17 2.64 8.32 1.72 10.24-.77 1.61-2.1 2.18-5.37 2.79-2.32.43-2.8.53-3.85.85-1.85.58-3.35 1.4-4.6 2.66-1 1-2.02 2.13-3.31 3.66-.6.71-2.91 3.5-3.46 4.14-7.2 8.54-12.43 12.35-19.59 12.35-3.76 0-6.95 1.28-10.59 4-1.84 1.37-11.62 10.31-15.22 13.06a73.09 73.09 0 0 1-8.95 5.88c-4.58 2.54-7.35 3.22-8.98 2.23-1.32-.8-1.65-2.07-1.94-5.5a52.53 52.53 0 0 0-.16-1.81c-.54-4.73-2.24-6.86-7.16-6.86-7.11 0-8.85-1.23-9.73-5.41-.96-4.61-2.1-6.7-6.55-9.67-3.97-2.65-4.31-5.42-1.52-8.22 2-2 4.63-3.5 11.35-6.87 6.61-3.3 9.2-4.8 11.1-6.68a39.09 39.09 0 0 0 5.3-6.48c.98-1.5 1.83-3.04 2.88-5.13l2.12-4.3c.91-1.83 1.72-3.37 2.61-4.98 5.74-10.32 10.37-14.78 23.22-21.2zm-22.34 21.7c-.89 1.59-1.69 3.12-2.6 4.94l-2.11 4.3a52.9 52.9 0 0 1-2.94 5.23 40.08 40.08 0 0 1-5.44 6.63c-2 2-4.62 3.51-11.35 6.87-6.6 3.3-9.2 4.8-11.1 6.69-2.33 2.34-2.08 4.37 1.38 6.67 4.7 3.14 5.96 5.46 6.97 10.3.78 3.7 2.09 4.62 8.75 4.62 5.5 0 7.57 2.57 8.15 7.75.06.5.09.82.17 1.84.25 3.06.55 4.17 1.46 4.72 1.2.74 3.69.13 7.98-2.25a72.09 72.09 0 0 0 8.82-5.8c3.55-2.7 13.34-11.65 15.24-13.07 3.79-2.83 7.18-4.19 11.18-4.19 6.77 0 11.8-3.67 18.83-12l3.45-4.13a60.07 60.07 0 0 1 3.37-3.72 11.72 11.72 0 0 1 5.01-2.91c1.1-.34 1.6-.45 3.97-.89 2.95-.55 4.07-1.02 4.65-2.23.76-1.59.28-4.5-1.74-9.43a84.46 84.46 0 0 1-2.74-7.69c-.31-1.03-1.4-4.8-1.66-5.61-1.95-6.2-4.16-7.39-15.14-7.39-6.5 0-10.61-1.93-14.98-5.98-.44-.4-2.46-2.37-3.01-2.86-3.65-3.3-6.52-3.85-11.79-1.21-12.67 6.33-17.15 10.65-22.78 20.8zm55.86 11.93c-2.98 6.45-16.78 15.26-26.74 15.26-5.33 0-7.56-2.98-7.11-7.86.32-3.48 2.1-7.91 3.93-10.61l1.52-2.32a44.95 44.95 0 0 1 1.88-2.7c3.66-4.8 7.85-7.45 13.62-7.45 9.06 0 15.75 9.52 12.9 15.68zm-.9-.42c2.52-5.47-3.65-14.26-12-14.26-5.4 0-9.33 2.48-12.82 7.06-.6.8-1.17 1.6-1.85 2.64 0 0-1.2 1.87-1.52 2.33-1.74 2.57-3.46 6.85-3.77 10.14-.4 4.33 1.43 6.77 6.12 6.77 9.57 0 23.02-8.58 25.83-14.68zm-69.67 20.74c2.08.18 4.44.81 5.88 1.8 2.12 1.47 2.2 3.6-.26 6.05-5.14 5.15-12.85 4.34-12.85-1.35 0-4.66 3.14-6.84 7.23-6.5zm-.09 1c-3.56-.3-6.14 1.5-6.14 5.5 0 4.58 6.53 5.26 11.15.65 2.03-2.04 1.98-3.43.4-4.52-1.27-.88-3.48-1.47-5.4-1.63zm29.59-225.95c4.64 2.35 17.27 8.24 19.39 9.43a24.14 24.14 0 0 1 7.05 5.64 45.03 45.03 0 0 1 3.75 5.2c2.4 3.78.04 7.66-6.2 11.63-4.97 3.16-12.18 6.3-21.95 9.82-4.84 1.74-19.63 6.68-21.1 7.2-6.59 2.33-14.85.1-25.14-5.86-3.93-2.27-8-5-12.94-8.54-2.23-1.61-9.5-6.99-10.7-7.85a81.21 81.21 0 0 0-8.63-5.7c-4.82-2.6-4.45-6.64.17-12.13 3.27-3.88 4.17-4.67 18.1-16.33a230.2 230.2 0 0 0 8.89-7.74 95.2 95.2 0 0 0 4.72-4.66c5.08-5.43 9.8-6.49 14.97-3.92 2.24 1.1 4.53 2.85 7.43 5.52 1.48 1.37 6.94 6.72 7.98 7.7 5.2 4.91 9.46 8.2 14.2 10.6zm-.46.9c-4.85-2.45-9.18-5.79-14.44-10.76-1.05-1-6.5-6.34-7.97-7.69-2.83-2.61-5.06-4.3-7.2-5.37-4.75-2.36-9-1.4-13.8 3.71a96.18 96.18 0 0 1-4.76 4.71c-2.48 2.3-5.16 4.62-8.92 7.77-13.86 11.6-14.77 12.4-17.98 16.21-4.28 5.08-4.58 8.4-.46 10.61 2.23 1.2 4.9 2.99 8.74 5.77 1.2.87 8.47 6.24 10.7 7.85a154.8 154.8 0 0 0 12.85 8.49c10.06 5.82 18.07 7.98 24.3 5.78 1.48-.52 16.27-5.47 21.1-7.2 9.7-3.5 16.86-6.61 21.75-9.72 5.84-3.71 7.9-7.1 5.9-10.26a44.09 44.09 0 0 0-3.67-5.08 23.16 23.16 0 0 0-6.78-5.42c-2.08-1.16-14.68-7.05-19.36-9.4zm-38.83 8.05c3.11-.37 5.7-.13 8.4.7 2.15.66 2.74.93 8.64 3.77 4.75 2.29 8.39 3.86 13.19 5.56 8.38 2.97 11.32 6.23 8.83 9.76-2.08 2.94-8.04 5.92-17.84 9.18-8.45 2.82-15.48 2.35-21.43-.9-4.65-2.55-8.33-6.5-12.15-12.3-2.9-4.41-2.73-8.2.16-11.06 2.48-2.45 6.87-4.07 12.2-4.7zm.12 1c-5.13.6-9.33 2.16-11.62 4.42-2.53 2.5-2.68 5.77-.02 9.8 3.73 5.68 7.3 9.51 11.8 11.97 5.7 3.11 12.43 3.57 20.62.84 9.59-3.2 15.44-6.12 17.34-8.82 1.94-2.75-.5-5.45-8.35-8.24-4.84-1.72-8.5-3.3-13.28-5.6-5.84-2.81-6.42-3.07-8.5-3.71a18.42 18.42 0 0 0-8-.66zM202.5 500.38c0 4.78-1.45 7.56-4.43 8.93-2.29 1.05-4.55 1.23-10.79 1.2l-1.78-.01c-9.19 0-17-7.65-17-15.5 0-7.59 10.6-10.51 19.74-5.44 2.78 1.55 4.21 1.94 8.57 2.75 4.44.83 5.69 2.27 5.69 8.07zm-1 0c0-5.3-.9-6.34-4.88-7.08-4.45-.83-5.96-1.25-8.86-2.86-8.57-4.76-18.26-2.1-18.26 4.56 0 7.3 7.36 14.5 16 14.5h1.79c6.06.04 8.26-.14 10.36-1.1 2.6-1.2 3.85-3.6 3.85-8.02zm33.33-117.85c3.71-1.31 8.7-2.7 16.1-4.55 2.58-.65 16.53-4.04 20.56-5.05 19.59-4.93 31.55-8.9 38.23-13.35 14.93-9.95 36.87-33.88 43.83-47.8 2.25-4.5 4.65-6.38 7.68-6.25 1.26.06 2.61.45 4.32 1.2a50.81 50.81 0 0 1 3.54 1.7l1.26.63c4.78 2.34 8.38 3.44 12.65 3.44 7.2 0 10.01 3.07 8.35 7.91-1.4 4.06-5.92 8.91-11.1 12.02-8.3 4.98-11.75 17.3-11.75 33.57 0 3.59-1.37 6.28-3.98 8.36-1.98 1.58-4.2 2.6-8.47 4.16l-1.02.37c-4.85 1.75-6.98 2.77-8.68 4.46-5.09 5.1-12.54 7.15-20.35 7.15-1.38 0-2.47.92-3.99 3.1-.29.41-1.32 1.95-1.47 2.18-2.68 3.92-4.93 5.72-8.54 5.72-7.84 0-10.74.93-21.76 6.94-5.18 2.82-8.8 3.58-14.66 3.68-.26 0-.47 0-.92.02-4.82.06-7.12.3-10.51 1.34a73.43 73.43 0 0 0-8.89 3.56c-2.17 1-10.53 5.01-10.23 4.87-7.79 3.7-13.32 5.98-18.9 7.57-12.41 3.55-18.58 2.24-27.42-4.07-2.58-1.85-2.72-4.43-.83-7.62 1.45-2.45 3.9-5.09 8.08-8.97l1.78-1.64c3.92-3.6 4.48-4.11 5.9-5.53 2.32-2.32 3.12-3.5 5.48-7.63 1.93-3.36 3.37-5.11 6.27-7.06 2.3-1.54 5.34-2.98 9.44-4.43zm.34.94c-4.03 1.42-7 2.83-9.22 4.32-2.75 1.85-4.1 3.49-5.96 6.73-2.4 4.2-3.24 5.44-5.64 7.83-1.43 1.44-2 1.96-5.94 5.57l-1.77 1.63c-4.1 3.82-6.52 6.41-7.9 8.75-1.65 2.79-1.54 4.8.55 6.3 8.6 6.14 14.46 7.38 26.57 3.92 5.5-1.57 11-3.84 18.74-7.51-.3.14 8.06-3.88 10.24-4.88a74.3 74.3 0 0 1 9.01-3.6c3.51-1.09 5.89-1.33 10.8-1.4h.91c5.72-.1 9.18-.83 14.2-3.57 11.16-6.08 14.2-7.06 22.24-7.06 3.19 0 5.2-1.6 7.71-5.28l1.48-2.2c1.7-2.43 3-3.52 4.81-3.52 7.57 0 14.78-2 19.65-6.85 1.83-1.84 4.04-2.9 9.04-4.7l1.02-.37c8.6-3.13 11.79-5.67 11.79-11.58 0-16.6 3.53-29.2 12.24-34.43 5-3 9.35-7.67 10.66-11.48 1.42-4.13-.83-6.59-7.4-6.59-4.45 0-8.19-1.14-13.09-3.54-7.52-3.67-6.78-3.34-8.72-3.43-2.58-.1-4.65 1.52-6.74 5.7-7.04 14.07-29.1 38.14-44.17 48.19-6.81 4.54-18.84 8.52-38.55 13.48-4.03 1.02-17.98 4.4-20.56 5.05-7.37 1.84-12.33 3.23-16 4.52zM252 387.5c2.08 0 4-.2 7.25-.69 5.22-.77 6.64-.9 8.46-.5 2.52.56 3.79 2.35 3.79 5.69 0 4.05-2.27 7.29-6.62 10.11-3.24 2.1-6.53 3.53-14.15 6.4l-.27.1-2.28.86c-3.04 1.16-5.27 2.52-9.33 5.43l-.8.57c-8.19 5.88-13.35 8.03-23.05 8.03-4.98 0-6.88-2.03-5.75-5.62.87-2.81 3.58-6.56 7.8-11.13 1.26-1.37 2.64-2.8 4.15-4.3 3.17-3.14 11.25-10.61 11.45-10.8.46-.47.93-.89 1.4-1.26 3.38-2.71 5.77-3.08 14.18-2.93 1.65.03 2.63.04 3.77.04zm0 1c-1.15 0-2.13-.01-3.79-.04-8.18-.14-10.4.2-13.54 2.71-.44.35-.88.74-1.32 1.18-.2.21-8.3 7.69-11.45 10.82a134.6 134.6 0 0 0-4.12 4.26c-4.12 4.47-6.76 8.12-7.58 10.75-.9 2.88.45 4.32 4.8 4.32 9.46 0 14.44-2.07 22.46-7.84l.8-.57c4.13-2.96 6.42-4.36 9.56-5.56l2.3-.86.25-.1c7.55-2.84 10.8-4.25 13.97-6.3 4.08-2.65 6.16-5.6 6.16-9.27 0-2.89-.97-4.26-3-4.7-1.65-.37-3.05-.25-8.1.5-3.3.5-5.26.7-7.4.7zm112.47-45.34c-1.88 5.44-1.98 6.76-.98 12.76 1.18 7.06-1.38 16.58-5.49 16.58a16.89 16.89 0 0 0-1.51.07l-.64.04c-2.86.18-4.83.17-6.94-.17-6.55-1.06-10.41-5.14-10.41-13.44 0-13.9 2.14-19.69 8.13-26.33a21.9 21.9 0 0 0 2.52-3.75c.59-1.03 2.78-5.13 2.72-5.01 4.44-8.14 7.71-11.53 12.25-10.4 1.17.3 2.2.77 3.58 1.59l1.39.84a20 20 0 0 0 3.1 1.6c.7.27 1.8.32 4.75.26l.72-.01c3.16-.05 4.78.08 5.83.66 1.61.89 1.2 2.56-1.14 4.9a215.9 215.9 0 0 1-3.86 3.76c-10.6 10.1-12.75 12.4-14.02 16.05zm-.94-.32c1.34-3.9 3.46-6.17 14.27-16.46 1.55-1.47 2.73-2.62 3.85-3.73 1.94-1.95 2.17-2.88 1.35-3.33-.82-.45-2.37-.58-5.32-.53l-.72.01c-3.14.06-4.26.02-5.14-.34-1.06-.41-1.97-.9-3.25-1.67l-1.38-.83a12.1 12.1 0 0 0-3.31-1.47c-3.88-.97-6.92 2.17-11.13 9.9.07-.13-2.14 3.98-2.73 5.02a22.71 22.71 0 0 1-2.65 3.92c-5.81 6.47-7.87 12-7.87 25.67 0 7.79 3.48 11.47 9.57 12.45 2.01.33 3.92.34 6.71.16a371.33 371.33 0 0 0 1.23-.07c.42-.03.73-.04.99-.04 3.2 0 5.6-8.9 4.5-15.42-1.02-6.16-.91-7.64 1.03-13.24zm-9.26 12.42c.58.52 2.5 1.9 2.55 1.93 1.96 1.57 2.04 3.31.01 6.36-3.74 5.64-8.83 3.09-8.83-4.55 0-3.81.51-5.67 2.07-6.02 1.18-.26 2 .3 4.2 2.28zm-1.34 1.48c-1.5-1.35-2.23-1.85-2.43-1.8-.17.03-.5 1.23-.5 4.06 0 5.87 2.67 7.21 5.17 3.45 1.5-2.26 1.47-2.84.4-3.7.03.03-1.95-1.4-2.64-2zm222.9-130.19c2.2-1.1 3.67-1.66 5.88-2.36l.28-.09a48.92 48.92 0 0 0 8.79-3.55c4.17-2.08 6.35-1.88 6.96.84.44 2 .2 4.01-1.25 12.7-2.27 13.62-9.16 26.14-21.17 36.3-4.3 3.63-7.41 4.39-9.75 2.44-1.88-1.57-3.1-4.57-4.61-10.48-.3-1.15-1.43-5.83-1.72-6.96a114.18 114.18 0 0 0-2.71-9.22c-2.4-6.82-3.03-10.78-2.1-12.94.77-1.83 2.08-2.24 5.6-2.45 1.49-.09 2.09-.14 2.97-.28l1.95-.33c.72-.12 1.22-.2 1.68-.29 1.1-.2 1.92-.38 2.71-.6 1.7-.49 3.42-1.2 6.49-2.73zm.44.9c-3.11 1.54-4.88 2.29-6.65 2.79-.84.23-1.69.42-2.81.63a108.77 108.77 0 0 1-3.81.63c-.77.13-1.39.19-2.92.28-3.13.18-4.17.51-4.74 1.85-.78 1.84-.2 5.62 2.13 12.2a115.12 115.12 0 0 1 2.74 9.31l1.72 6.96c1.46 5.7 2.62 8.58 4.28 9.96 1.87 1.56 4.49.93 8.47-2.44 11.82-10 18.6-22.3 20.83-35.7 1.4-8.45 1.65-10.51 1.25-12.31-.41-1.87-1.86-2-5.54-.16a49.87 49.87 0 0 1-8.93 3.6l-.28.1a35.4 35.4 0 0 0-5.74 2.3zm-4.5 6.58c1.37-.32 2.5-.75 3.9-1.42.35-.18 2.57-1.31 3.32-1.67 1.5-.71 2.97-1.31 4.7-1.89 2.7-.9 4.64-.77 5.88.4.98.94 1.34 2.26 1.41 4.18.02.4.02.7.02 1.37 0 5.63-4.63 16.88-11.34 22.75-4.34 3.8-7.31 4.67-9.92 2.52-2.06-1.7-3.5-4.65-6.67-12.91-1.86-4.83-2.05-8.1-.68-10.2 1.12-1.7 2.9-2.36 5.83-2.7l1.26-.12c1.19-.12 1.75-.19 2.3-.31zm-2.1 2.3l-1.22.12c-2.4.27-3.7.76-4.39 1.81-.93 1.43-.78 4.1.87 8.38 3.02 7.84 4.41 10.71 6.08 12.09 1.63 1.34 3.64.75 7.33-2.48C584.6 250.77 589 240.08 589 235c0-.64 0-.93-.02-1.29-.05-1.44-.3-2.33-.79-2.8-.6-.57-1.8-.65-3.87.04a37.95 37.95 0 0 0-4.47 1.8c-.72.34-2.93 1.47-3.32 1.66a19.54 19.54 0 0 1-4.3 1.56c-.66.16-1.28.24-2.56.36zm-227.73-88.98c-1.59 4.3-3.54 7.25-7.14 11.4l-2.6 2.97a67.02 67.02 0 0 0-2.63 3.23 46.4 46.4 0 0 0-4.68 7.5c-2.85 5.7-7.14 10.18-12.85 13.89-4.25 2.76-8.25 4.62-15.67 7.59-11.01 4.4-16.43 1.26-27.22-16.4-2.86-4.69-8.8-8.63-17.98-12.66-3-1.33-12.88-5.24-14.43-5.92-4.96-2.18-7.04-3.72-6.42-5.85.67-2.32 5.3-4.05 15.48-6.08 16.63-3.32 26.93-3.82 39.93-3.02 7.9.49 9.67.5 12.74-.26 1.99-.48 3.92-1.3 6-2.6l2.79-1.71c9.86-6.14 12.94-7.96 17.3-9.9 6.03-2.71 10.57-3.32 13.94-1.4 7.2 4.12 7.68 7.7 3.44 19.22zm-1.88-.7c3.95-10.7 3.6-13.26-2.56-16.78-2.66-1.52-6.62-.99-12.12 1.48-4.24 1.9-7.3 3.7-17.07 9.77l-2.79 1.73a22.6 22.6 0 0 1-6.57 2.84c-3.36.81-5.22.8-13.34.3-12.84-.78-22.97-.29-39.41 3-4.9.97-8.45 1.88-10.79 2.75-2.03.76-3.04 1.45-3.17 1.91-.16.57 1.48 1.79 5.3 3.46 1.5.67 11.39 4.58 14.44 5.93 9.52 4.19 15.74 8.3 18.87 13.44 10.35 16.93 14.87 19.56 24.78 15.6 7.3-2.93 11.21-4.75 15.33-7.42 5.42-3.53 9.47-7.75 12.15-13.1 1.44-2.9 3.02-5.4 4.86-7.82a68.95 68.95 0 0 1 2.72-3.33l2.6-2.97c3.46-3.99 5.28-6.75 6.77-10.79zm-6.64-.39c-7.94 12.8-18.53 21.75-33.3 25.23-7.82 1.83-12.47-.79-13.12-5.93-.55-4.45 2.29-9.06 6-9.06 3.02 0 5.6-1.68 15.38-9.16 1.47-1.12 2.57-1.96 3.66-2.74 4.4-3.2 7.77-5.17 10.82-6.08 5.57-1.67 9.33-2.15 11.35-1.22 2.5 1.14 2.22 4.13-.79 8.96zm-.84-.52c2.72-4.4 2.94-6.74 1.21-7.53-1.71-.79-5.32-.33-10.65 1.27-2.9.87-6.2 2.79-10.51 5.92-1.08.79-2.18 1.62-3.65 2.74-10.08 7.72-12.62 9.36-15.98 9.36-3.02 0-5.5 4.02-5 7.94.56 4.5 4.62 6.78 11.89 5.07 14.48-3.4 24.86-12.18 32.69-24.77zM461.17 33.53c13.88 4.96 20.75 4.96 31.62.01 3.02-1.37 5.47-2.94 11-6.82 5.57-3.92 8.05-5.51 11.14-6.92 4.14-1.88 7.78-2.38 11.22-1.28 3.92 1.26 6.2 12.3 6.78 28.45.5 14.2-.52 28.93-2.46 34.2-1.82 4.93-5.86 8.17-11.51 10.02A41.7 41.7 0 0 1 506 93.01c-5.79 0-9 2.4-12.2 7.64-.37.59-1.55 2.6-1.71 2.87-1.75 2.9-3.05 4.33-4.93 4.95-.94.32-2.07.83-3.87 1.74l-2.43 1.23c-1.03.53-1.87.94-2.7 1.34-6.43 3.1-11.73 4.72-17.16 4.72-5.71 0-10.04 2.09-14.02 5.92-1.16 1.11-4.2 4.53-4.63 4.94-2.54 2.44-5.93 4.24-10.85 6.1-1.4.52-5.98 2.13-6.25 2.22l-2.06.78c-.89.36-1.78.63-2.7.81-5.55 1.14-11.14-.54-17.98-4.42-1.27-.73-5.13-3.06-5.76-3.42-2.05-1.16-4.12-1.53-9.09-1.9l-1.73-.15c-4.78-.4-7.68-1.14-10.22-2.97-5-3.61-6.77-7.76-5.65-12.33 1.33-5.42 6.5-11.02 14.85-17.28a169.2 169.2 0 0 1 6.5-4.61c-.33.23 4.33-2.92 5.3-3.6 2.73-1.91 4.8-3.9 12.75-12.04l1.09-1.1c3.49-3.56 5.89-5.89 8.12-7.83 2.9-2.5 4.72-5.95 7.5-13.05l.63-1.61c2.7-6.92 4.28-10 6.87-12.33 1.42-1.28 6.68-6.54 7.93-7.5 3.98-3 8.01-2.73 19.57 1.4zm-.34.94c-11.26-4.02-15-4.28-18.62-1.53-1.19.9-6.4 6.11-7.88 7.43-2.42 2.18-3.96 5.19-6.6 11.95l-.63 1.61c-2.83 7.26-4.72 10.8-7.77 13.45a141.85 141.85 0 0 0-9.16 8.87c-8.02 8.2-10.08 10.2-12.88 12.16-.99.69-5.65 3.84-5.31 3.6-2.5 1.71-4.52 3.13-6.47 4.59-8.17 6.13-13.23 11.6-14.48 16.72-1.02 4.15.58 7.9 5.26 11.27 2.36 1.7 5.11 2.4 9.72 2.8l1.73.13c5.12.4 7.28.78 9.5 2.05.65.36 4.5 2.7 5.76 3.4 6.66 3.78 12.04 5.4 17.29 4.32.86-.17 1.7-.42 2.52-.75a67 67 0 0 1 2.1-.8c.28-.1 4.86-1.7 6.24-2.22 4.8-1.8 8.08-3.56 10.5-5.88.4-.38 3.44-3.8 4.63-4.94 4.16-4 8.72-6.2 14.72-6.2 5.25 0 10.42-1.59 16.73-4.62.82-.4 1.65-.8 2.68-1.33.12-.06 1.93-.99 2.43-1.23 1.84-.93 3-1.46 4-1.8 1.6-.52 2.76-1.82 4.39-4.52l1.7-2.88c3.39-5.5 6.87-8.11 13.07-8.11 4.45 0 8.73-.49 12.64-1.77 5.4-1.76 9.2-4.8 10.9-9.41 1.87-5.11 2.9-19.75 2.39-33.83-.56-15.53-2.81-26.48-6.08-27.52-3.18-1.02-6.57-.55-10.5 1.23-3.02 1.37-5.47 2.94-11 6.83-5.57 3.92-8.05 5.5-11.14 6.92-11.13 5.05-18.26 5.05-32.38.01zM475 55c5.38 0 7.55-.21 9.72-.96 1.26-.43 9.95-4.8 14.88-6.96 1.9-.82 3.56-2.44 6.6-6.04 2.56-3.04 3.19-3.75 4.4-4.84 3.7-3.35 7.07-3.28 10.22 1.23 6.23 8.9 5.61 15.94.07 27.02a71.26 71.26 0 0 0-2.5 5.48c-.32.8-1 2.7-1.09 2.9-.17.45-.34.81-.54 1.17-.63 1.14-1.56 2.21-4.05 4.7-2.4 2.4-5.16 3.27-11.68 4.33-1.81.3-2.2.36-3 .51-6.02 1.1-9.6 2.69-12.24 6.07-3.57 4.59-7.9 7.48-14.98 10.74-.55.24-1.1.5-1.8.8l-1.78.8a60.08 60.08 0 0 0-7.7 3.9c-2.57 1.6-4.79 2.35-9.42 3.46-8.58 2.06-12.28 3.76-17.37 9.36-5.12 5.64-10.17 7.64-16.63 6.7-5.36-.79-10.63-3.01-23.56-9.48-6.3-3.15-6.43-7.78-1.5-13.56 3.38-3.94 3.52-4.06 19.4-16.44 8.12-6.33 12.97-10.57 16.63-14.88 2.53-2.98 4.2-5.73 4.96-8.3 5.5-18.3 12.5-21.98 22.78-15.56 1.95 1.22 6.61 4.55 7.18 4.9 3.36 2.15 6.52 2.95 13 2.95zm0 2c-6.84 0-10.37-.89-14.08-3.26-.63-.4-5.27-3.71-7.16-4.9-9.05-5.65-14.66-2.7-19.8 14.45-.86 2.87-2.67 5.85-5.35 9.01-3.78 4.45-8.7 8.75-16.94 15.17-15.66 12.21-15.86 12.38-19.1 16.16-4.17 4.9-4.09 8 .88 10.48 12.71 6.35 17.89 8.54 22.94 9.28 5.78.84 10.18-.9 14.87-6.06 5.42-5.96 9.45-7.82 18.38-9.96 4.43-1.07 6.5-1.76 8.83-3.22a61.7 61.7 0 0 1 7.94-4.02l1.78-.8 1.78-.8c6.82-3.13 10.91-5.87 14.24-10.14 3-3.87 7-5.64 13.46-6.82.83-.15 1.21-.21 3.04-.51 6.1-1 8.6-1.78 10.58-3.77 2.36-2.36 3.21-3.34 3.72-4.26.15-.27.29-.56.44-.94.06-.15.75-2.06 1.09-2.9.64-1.6 1.45-3.4 2.57-5.64 5.24-10.49 5.8-16.8.07-24.98-2.4-3.44-4.37-3.48-7.24-.89-1.11 1-1.73 1.7-4.22 4.65-3.24 3.85-5.04 5.59-7.32 6.59-4.82 2.1-13.62 6.53-15.03 7.01-2.44.84-4.79 1.07-10.37 1.07zm-12.7 8.6c5.47 3.9 10.34 3.72 18.23.88 5.39-1.94 5.92-2.1 7.7-2.1 2.5-.01 4.21 1.36 5.24 4.46 1.66 4.98-2.32 8.52-12.3 12.68-2.7 1.13-16.25 6.18-20 7.73-7.86 3.24-13.93 6.42-18.87 10.15-13.02 9.84-18.36 11.93-23.71 9.68a24.67 24.67 0 0 1-3.62-1.98l-1.99-1.28a90.4 90.4 0 0 0-2.24-1.4c-3.33-2-2.82-4.28.85-7.34 1.35-1.13 10.66-7.61 13.53-9.91 7.1-5.69 11.91-11.47 14.41-18.34 3.07-8.45 4.89-12.1 6.8-13.39 1.73-1.16 3.36-.53 6.18 1.9.63.56 3.4 3.08 4.11 3.7 1.93 1.7 3.71 3.15 5.67 4.55zm-.6.8c-1.98-1.42-3.79-2.88-5.74-4.6-.73-.64-3.48-3.16-4.1-3.7-2.5-2.16-3.75-2.65-4.97-1.83-1.66 1.11-3.44 4.7-6.42 12.9-2.57 7.07-7.5 12.99-14.72 18.78-2.91 2.33-12.21 8.8-13.52 9.9-3.22 2.68-3.56 4.17-.97 5.72l2.26 1.4 1.99 1.28c1.47.93 2.48 1.5 3.47 1.91 4.9 2.07 9.96.07 22.72-9.56 5.02-3.79 11.15-7 19.1-10.28 3.76-1.55 17.3-6.6 20-7.72 9.5-3.97 13.14-7.2 11.73-11.44-.9-2.71-2.25-3.8-4.3-3.79-1.6 0-2.15.17-7.36 2.05-8.17 2.94-13.34 3.14-19.16-1.01z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n@media print {\n  ._CSS-main {\n    background: white !important;\n  }\n}","name":"Anlagen Aufnahme: Root Layout","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<!-- Load translations! They will be there before any content loading I hope 😬  -->\n<ae-layout style=\"display: none\" layout-id=\"7a66c0bd-aaa4-406d-80da-0b0d5a6ee330\"></ae-layout>\n\n<!-- FIXME: without key, page is never reloaded -->\n<ae-layout\n  v-if=\"locals.ready\"\n  :key=\"'_CSS' + locals.startup?.id\"\n  layout-id=\"5913cb1e-9979-4eb7-84e8-488cdd658cbb\"\n  param-layout-id=\"f6811177-daaf-4f7d-b9a6-b5aae0960800\"\n  :param-query-params=\"params.queryParams\"\n  :param-page-document-id=\"params.pageDocumentId || locals.startup?.id\"\n  :param-no-navigation=\"true\"\n  class=\"_CSS-root\"\n></ae-layout>\n<div v-else class=\"bg-slate-50\" style=\"height: 100%; display: flex; justify-content: center; align-items: center\">\n  <ae-icon class=\"fa fa-spinner-third fa-2x fa-spin text-theme-400\"></ae-icon>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"3e4651ee-fd1d-412b-94ae-d0586f15beba","inheritedLocks":[null,null,null,null],"locks":[],"meta":{},"modified":{"at":"2026-02-19T15:50:38+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"abc36759-63ce-423b-9176-69d395e76082","text":"Wartung: Root Layout","v":"a3cbdca31193dbac"},"p":"594e6b26-7310-4d00-aad9-2a577ccab542","previous":{"v":"a99f60f7101badd6"},"stamps":[],"t":1771516238089,"v":"9ce8e72779e504c5"},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","594e6b26-7310-4d00-aad9-2a577ccab542"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2026-04-09T08:57:27+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"ct":1775725047382,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.Forms = {\n      Areal: '5f4a87a7-5557-4004-bfdc-2fb26c71e0c9',\n      StammdatenFolder: '6138e497-f561-430e-b3f1-8c3c7db046a7',\n      ArealeFolder: '1a0affea-08fc-467f-8a09-0e170f5ea96e',\n    }\n\n    locals.drilldownConfig = []\n    locals.drilldownConfig = await this.drilldownConfig()\n  }\n\n  async drilldownConfig() {\n    return [\n      {\n        documents: await this.getAreale(),\n        title: 'Areal',\n      },\n      {\n        resolve: 'AppKeeptrack-Gebäude(pl.)',\n        title: 'Gebäude',\n      },\n      {\n        resolve: 'AppKeeptrack-Gebäudeteile',\n        title: 'Gebäudeteil',\n      },\n      {\n        resolve: 'AppKeeptrack-TechnischePlätze',\n        title: 'Technischer Platz',\n      },\n      {\n        resolve: 'AppKeeptrack-Anlagen',\n        title: 'Anlage',\n      },\n    ]\n  }\n\n  async getAreale() {\n    if (!params.document) {\n      console.error('The Drilldown Wizard requires a context document.')\n    }\n    const stammdatenFolder = await Aeppic.findOne(`p:${params.document.a[0]} f.id:${this.Forms.StammdatenFolder}`)\n    const arealeFolder = await Aeppic.findOne(`p:${stammdatenFolder.id} f.id:${this.Forms.ArealeFolder}`)\n    const areale = await Aeppic.find(`p:${arealeFolder.id} f.id:${this.Forms.Areal}`, {size: 1000})\n    return areale\n  }\n}","css":"","name":"Anlagen DrillDownWizard","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<ae-layout\n  class=\"h-full w-full\"\n  layout-id=\"5ac9cc46-c68b-475e-a8fb-6bb5039fe118\"\n  :param-layers=\"locals.drilldownConfig\"\n  param-options-design=\"rd:card\"\n  param-selected-design=\"rd:card\"\n  @selected=\"$emit('selected', $event, arguments[1])\"\n></ae-layout>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"7bbea473-8b07-47de-950a-e93c996adaa2","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-04-10T11:28:32+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"p":"594e6b26-7310-4d00-aad9-2a577ccab542","previous":{"v":"4154b05aa26180ae"},"stamps":[],"t":1775820512883,"v":"5cd67f424100b375"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2017-08-24T10:36:08+02:00","by":"","client":"6d38103e-eed4-4603-82b6-79fbf34368ec","from":""},"ct":1753435547547,"data":{"applies":"","controller":"\n    constructor() {\n      locals.devMode = true\n    }\n  ","css":"\n    body {\n      position: absolute;\n      display: flex;\n      min-width: 0px;\n      width: 100%;  \n      height: 100%;\n      overflow: auto;\n      padding: 0;\n      margin: 0;\n      font-family: Roboto, Arial, Helvetica, sans-serif;\n      background:white;\n      color: black;\n    }\n    .dev-bar {\n      color:black;\n      background:white;\n    }\n    pre {\n      white-space: pre-wrap;\n    }\n    #app {\n      min-width: 0px;\n      flex:1;\n      display:flex;\n    }\n    .ae-root {\n      overflow: auto;\n      display: flex;\n      flex: 1;\n    }\n    .ae-root > .ae-layout {\n      display: flex;\n    }\n    .ae-layout {\n      flex: 1;\n    }\n    .ae-vars {\n      display: flex;\n      flex: 1;\n    }\n    .page {\n      display: flex;\n      flex: 1;\n    }\n  \n  .page h1 {\n    background: lightblue;\n    padding-left: 8px;\n  }\n\n  .page h3 {\n    background: #e4e4f7;\n    padding-left: 8px;\n  }","name":"Application Layout","packages":[],"template":"<div @keydown.ctrl.50.stop.prevent=\"locals.devMode = !locals.devMode\" style=\"position:absolute;left:0;right:0;top:0;bottom:0\" class=\"ae-row-noGutter\">\n  <div v-if=\"!locals.devMode\" class=\"page ae-row-noGutter\" tabindex=\"0\">\n    <div class=\"ae-col\" style=\"position:relative\" >\n      <h1>{{params.pageDocumentId}}</h1>\n      <h3>Form</h3>\n      <ae-form :document-id=\"params.pageDocumentId\" :readonly=\"true\"></ae-form>\n      <h3>Fields</h3>\n      <ae-design :document-id=\"params.pageDocumentId\" name=\"fields\"></ae-design>\n      <!-- <ae-link href=\"system\">Goto System</ae-link> -->\n    </div>\n  </div>\n  <ae-splitter v-else style=\"flex:1;\">\n    <div slot=\"left-pane\" class=\"page ae-row-noGutter\" tabindex=\"1\" style=\"height:100%;align-items:stretch\">\n      <div class=\"ae-col\" style=\"position:relative\">\n        <div style=\"position:absolute;left:0;right:0;top:0;bottom:0\">\n          <h1>{{params.pageDocumentId}}</h1>\n          <h3>Page</h3>\n          <ae-design :document-id=\"params.pageDocumentId\" name=\"page\"></ae-design>\n          <h3>Form</h3>\n          <ae-form :document-id=\"params.pageDocumentId\" :readonly=\"true\"></ae-form>\n          <h3>Fields</h3>\n          <ae-design :document-id=\"params.pageDocumentId\" name=\"fields\"></ae-design>\n          <!-- <ae-link href=\"system\">Goto System</ae-link> -->\n        </div>\n      </div>\n    </div>\n    <div slot=\"right-pane\" class=\"dev-bar\" v-if=\"locals.devMode\" style=\"height:100%;position:relative\">\n      <ae-layout layout-id=\"956d0d01-3f82-4f11-9569-3f292044da8e\" :watch-lrevisions=\"false\" style=\"height: 100%;\"></ae-layout>\n    </div>\n  </ae-splitter>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"79a054bd-b7c7-4525-86ba-676243d69642","inheritedLocks":[null,null,null],"locks":[],"meta":{"modified":{"at":"2025-07-25T09:25:47+00:00","backedBy":null,"by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","client":"server","from":"","impersonatedBy":null}},"modified":{"at":"2021-05-19T12:48:01+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"v":"5549ccfdcb12b9ac"},"stamps":[],"t":1753435547547,"v":"10c73cbb249871e2"},{"id":"46644ef3-95a9-49f0-902b-d2c879ee3966","v":"96e28ce749349921","p":"85cd7d8f-35be-4092-a40c-274f50729126","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Arbeitszeit Button","applies":"","template":"<button v-if=\"locals.visible\" class=\"ae-button _CSS-button\" @click.stop=\"controller.showTimer()\" :class=\"[ locals.running && '_CSS-button--active',  params.overlay && '_CSS-action-button--overlay'  ]\" title=\"Arbeitszeit\"> \n  <ae-icon class=\"fa fa-user-clock\"></ae-icon>\n  <div v-if=\"locals.running && locals.timer.data.started\">\n    {{ Aeppic.DateTime.fromISO(locals.timer.data.started).toLocaleString(Aeppic.DateTime.TIME_SIMPLE ) }}\n  </div>\n</button>\n\n<ae-dialog ref=\"timer\" :backdrop-close=\"false\" :dialog-size=\"{ height: 'var(--ae-dialog__height--medium)' }\">\n  <template #header=\"scope\"> \n    <div class=\"_CSS-header\">\n      <div>Arbeitszeit Timer</div>\n      <div style=\"flex:1\"></div>\n      <button   class=\"ae-button\"\n                @click.stop=\"scope.close()\"\n                :disabled=\"locals.timer && locals.timer.f.id === locals.FORMS.Arbeitszeit\"\n      >\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n  <template #body>\n    <div class=\"_CSS-timer\" v-if=\"$refs.timer && $refs.timer.isOpen && locals.timer\"> \n      <ae-form :document=\"locals.timer\" @data-changed=\"Aeppic.commit(locals.timer)\"></ae-form>\n\n      <div style=\"flex: 1\"></div>\n\n    </div>\n  </template>\n  <template #commands>\n      <div class=\"_CSS-actions\" v-if=\"locals.timer\">\n        <button v-if=\"!locals.timer.data.running && locals.timer.f.id === locals.FORMS.Arbeitszeit\" class=\"ae-button ae-button--primary\" @click=\"controller.save()\">\n          Speichern\n        </button>\n        <button v-else-if=\"!locals.timer.data.running\" class=\"ae-button ae-button--primary\" @click=\"controller.start()\">\n          Start\n        </button>\n        <template v-else>\n          <button class=\"ae-button\" @click=\"controller.save()\">\n            Änderungen speichern\n          </button>\n          <button class=\"ae-button ae-button--secondary\" @click=\"controller.stop()\">\n            Stoppen & Bearbeiten\n          </button>\n          <button class=\"ae-button ae-button--primary\" @click=\"controller.stopAndSave()\">\n            Stoppen & Speichern\n          </button>\n        </template>\n      </div> \n  </template>\n \n</ae-dialog>\n","css":"._CSS ._CSS-action-button--overlay {\n  color: var(--ae-ui-background);\n  filter: drop-shadow( 0px 0px 1px rgba(0,0,0,1) ) drop-shadow( 0px 0px 10px rgba(0,0,0,0.8));\n}\n\n._CSS-button--active {\n  color: var(--ae-accent-red) !important;\n}\n\n._CSS-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n._CSS-actions {\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n}\n\n._CSS-button {\n  display: flex;\n  gap: var(--ae-space-1);\n}","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      ArbeitszeitTimer: '9345c72f-a8f6-4fb1-aac5-847ef33d2552',\n      ErfassteZeit: 'f9279010-1935-4139-abbb-82d928aa09dc',\n      Arbeitszeit: '32db2e83-2e88-4162-b680-698423aef2c3'\n    }\n    locals.FORMS = this.FORMS\n    locals.visible = false\n    \n    const trackingIsEnabled = await Aeppic.Preferences.getSettingForDocument('bizpin:timetracking:enableWorkingTime', params.document || Aeppic.ProfilePage)\n\n    if (!trackingIsEnabled) {\n      return\n    }\n\n    locals.visible = true\n\n    locals.running = false\n    locals.timer = await this.getTimer()  \n\n    this.subscribeTimer()\n  }\n\n  async subscribeTimer() {\n    Aeppic.subscribe(`p:${Aeppic.Account.id} f.id:${this.FORMS.ArbeitszeitTimer}`, (documents) => {\n      const timer = documents[0]\n\n      locals.running = !!(timer && timer.data.running)\n    })\n  }\n\n  async getTimer() { \n    let timer = null\n\n    const existingTimer = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.ArbeitszeitTimer}`)\n\n    if (existingTimer) {\n      console.log('existing')\n      timer = await Aeppic.edit(existingTimer)\n    } else {\n      console.log('new')\n      timer = await Aeppic.new(this.FORMS.ArbeitszeitTimer, Aeppic.Account.id)\n    }\n\n    // if (params.document || params.documentId) {\n    //   const target = params.document || await Aeppic.get(params.documentId)\n\n    //   if (target) {\n    //     timer.addReference('dokument', target)\n    //   }\n    // }\n\n    return timer\n  }\n\n  async start() {\n    locals.timer.data.started = Aeppic.DateTime.local().toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n\n    Aeppic.save(locals.timer)\n\n    $refs.timer.close()\n    $emit('close')\n  }\n\n  async stopAndSave() {\n    await this.stop()\n    await this.save()\n  }\n\n  async save() {\n    Aeppic.save(locals.timer)\n\n    $refs.timer.close()\n    $emit('close')\n  }\n\n  async stop() {\n    console.log('stop', locals.timer)\n\n    // if (!locals.timer.data.dokument.id) {\n    //   return\n    // }\n\n    locals.timer.data.ended = Aeppic.DateTime.local().toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n\n    Aeppic.save(locals.timer)\n    Aeppic.delete(locals.timer)\n\n    const trackedTime = await Aeppic.new(this.FORMS.Arbeitszeit, Aeppic.Account.id)\n\n    trackedTime.data = { ...trackedTime.data, ...{\n      name: locals.timer.data.name,\n      dauer: locals.timer.data.dauer,\n      von: locals.timer.data.started,\n      bis: locals.timer.data.ended,\n    }}\n\n    Aeppic.save(trackedTime)\n\n    locals.timer = trackedTime\n  }\n\n  async showTimer() {\n    locals.timer = await this.getTimer()  \n    $refs.timer.show()\n  }\n\n} ","packages":[]},"locks":[],"created":{"at":"2022-03-16T09:19:47+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-05-13T12:09:02+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1740666014590,"ct":1740666014590,"a_depth":3,"a":["apps","0c440c7a-219d-4465-9cbe-2d0eff6ec7ad","85cd7d8f-35be-4092-a40c-274f50729126"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"previous":{"v":"d9c14e82fe8c2dd6","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"}},"meta":{"modified":{"at":"2025-02-27T14:20:14+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9"],"a_depth":4,"a_forms":["system-folder-form","folder","form","folder"],"created":{"at":"2025-10-07T13:47:06+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759844826513,"data":{"applies":"","controller":"","css":"","name":"Aufgaben","packages":[],"template":"<section\n    class=\"bg-surface text-on-surface rounded-2xl p-4 \"\n  >\n  <h1 class=\"\">Aufgaben</h1>\n  <section\n    class=\"flex justify-center\"\n  >\n    <ae-layout\n      layoutId=\"4a4f4c51-5b0f-4ff2-bd67-c2acbfb09fb2\"\n      class=\"w-1/3 p-2 rounded-md shadow-2\"\n    ></ae-layout>\n  </section>\n</section>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"3e2e1673-085b-4252-807b-e99153df7bb0","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-07T13:47:15+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"6ad6f21b-b086-4e9c-aa38-4893fd343fb9","previous":{"v":"initial"},"stamps":[],"t":1759844835314,"v":"d11a20d7b9225a03"},{"a":["apps","43f84041-0fd7-4ccb-b7b5-7a38f89ada37","d3d08873-80a4-471b-b999-eadf1f28c038"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2018-12-03T09:18:12+00:00","by":"c5ed555f-cc11-463b-960b-0a60b3118e69","client":"server","from":""},"ct":1543828692230,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.overdueTasks = []\n    locals.tasks = []\n    \n    this._todayIndex = 3\n    locals.days = []\n\n    locals.activeDayIndex = this._todayIndex\n\n    for (let i = -3; i <= 3; i++) {\n      const date = Aeppic.DateTime.local().startOf('day').plus({ days: i })\n      locals.days.push(date)\n    }\n\n    this.setupOverdueTasksWatcher()\n  }\n\n  setupOverdueTasksWatcher() {\n    locals.overdueTasks = []\n    locals.tasks = []\n \n    const search = `a:${params.companyId} f.id:3d456c38-6282-416e-8c5e-7d20b0517a6e data.verantwortlich:${params.userId} data.bis: [* TO now+3d/d] data.erledigt: false`\n\n    Aeppic.subscribeQuery('c364c57a-150e-44ed-a5e5-9ab3beecf2d9', params.companyId, `data.verantwortlich:${params.userId} data.bis: [* TO now+3d/d]`, (tasks) => {\n      const overdues = []\n      \n      for(const task of tasks) {\n        if (this.isTaskOverdue(task)) {\n          overdues.push(task)\n        }\n      }\n\n      locals.overdueTasks = overdues\n      locals.tasks = tasks\n    })\n  }\n\n  isTaskOverdue(task) {\n    const data = task.data\n\n    if (!data.erledigt && data.bis) {\n      return Aeppic.DateTime.local().diff(Aeppic.DateTime.fromISO(data.bis)).as('days') > 0\n    }\n\n    return false\n  }\n\n  get currentDay() {\n    if (locals.activeDayIndex === this._todayIndex) {\n      return 'Heute'\n    }\n\n    return locals.days[locals.activeDayIndex].toLocaleString({weekday: 'long', month: 'long', day: '2-digit'})\n  }\n\n  queryFilter(forDayIndex) {\n    const index = forDayIndex != null ? forDayIndex : locals.activeDayIndex\n\n    const dayStart = locals.days[index].toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n    const dayEnd = locals.days[index].endOf('day').toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n\n    // FIXME: query-parser cannot handle date with time\n    return `data.verantwortlich:${params.userId} data.bis:[${dayStart}/d TO ${dayEnd}]`\n  }\n\n  tasksForDay(dayIndex) {\n    const index = dayIndex != null ? dayIndex : locals.activeDayIndex\n\n    const dayStart = locals.days[index].startOf('day')\n    const dayEnd = locals.days[index].endOf('day')\n\n    const interval = Aeppic.DateTimeInterval.fromDateTimes(dayStart, dayEnd)\n    const tasks = locals.tasks.filter(t => interval.contains(Aeppic.DateTime.fromISO(t.data.bis)))\n\n    return tasks\n  }\n\n} ","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n  width: 400px;\n}\n\n._CSS-card {\n  background: var(--ae-ui-card-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-overdues {\n  padding: 10px;\n  margin-bottom: 15px;\n}\n\n._CSS-overdues__clickable {\n  color: var(--ae-primary-600);\n  display: inline-block;\n  cursor: pointer;\n}\n\n._CSS-day--current {\n  padding: 10px;\n  font-size: 1.2em;\n  margin-bottom: 10px;\n}\n\n._CSS-days {\n  padding: 0 10px;\n  display: flex;\n  justify-content: space-between;\n}\n\n._CSS-day {\n  display: flex;\n  flex-flow: column;\n  align-items: center;\n  cursor: pointer;\n}\n\n._CSS-day__dayOfWeek {\n  color: var(--ae-background-500);\n}\n\n._CSS-day__dayOfMonth--today,\n._CSS-day__dayOfWeek--today {\n  color: var(--ae-primary);\n  font-weight: 600;\n}\n\n._CSS-day__dayOfMonth {\n  border-radius: 50%;\n  width: 30px;\n  height: 30px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n._CSS-day__dayOfMonth--current {\n  color: var(--ae-primary-900);\n  background-color: var(--ae-primary-200);\n}\n\n._CSS-tasks {\n  background: var(--ae-background-d1);\n  border-radius: 0 0 var(--ae-border-radius) var(--ae-border-radius);\n  margin-top: 20px;\n  padding: 5px;\n\n  overflow: auto;\n}\n\n._CSS-day__circle {\n  background: var(--ae-primary-200);\n  border-radius: 50%;\n  width: 6px;\n  height: 6px;\n  margin: 4px 4px 0 4px;\n}","name":"Aufgaben Agenda eines Users","packages":[],"template":"<!-- <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n          :root-document-id=\"params.companyId\"\n          query-id=\"98b88863-e4f7-4dd1-83fb-779df8f5c234\"\n          param-design=\"ref-card\"\n          :param-design-params=\"{ readonly: true }\"\n          param-min-column-width=\"300px\"\n          param-title=\"Überfällig\"\n></ae-list> -->\n\n<div class=\"_CSS-card\">\n  <section class=\"_CSS-overdues\" v-if=\"locals.overdueTasks.length\">\n    Sie haben insgesamt {{ locals.overdueTasks.length }} <div class=\"_CSS-overdues__clickable\" @click=\"$refs.overduesDialog.show()\">überfällige</div> Aufgaben\n  </section>\n  <section class=\"_CSS-day--current\">\n    {{ controller.currentDay }}\n  </section>\n  <section class=\"_CSS-days\">\n    <div v-for=\"(dateTime, index) of locals.days\" class=\"_CSS-day\" @click=\"locals.activeDayIndex = index\">\n      <div class=\"_CSS-day__dayOfWeek\" :class=\"{ '_CSS-day__dayOfWeek--today': index === 3 }\">\n        {{ dateTime.toFormat('ccccc') }}\n      </div>\n      <div class=\"_CSS-day__dayOfMonth\" :class=\"{ '_CSS-day__dayOfMonth--today': index === 3, '_CSS-day__dayOfMonth--current': index === locals.activeDayIndex }\">\n        <span>{{ dateTime.toFormat('d') }}</span>\n      </div>\n      <div class=\"_CSS-day__circle\" v-if=\"controller.tasksForDay(index).length\" :title=\"controller.tasksForDay(index).length + ' Aufgaben zu erledigen'\">\n      </div>\n\n    </div>\n  </section>\n  <section class=\"_CSS-tasks\">\n      <!-- <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n                :root-document-id=\"params.companyId\"\n                query-id=\"c364c57a-150e-44ed-a5e5-9ab3beecf2d9\"\n                :filter=\"controller.queryFilter()\"\n                param-design=\"ref-card\"\n                :param-design-params=\"{ readonly: true }\"\n                param-min-column-width=\"300px\"\n                @selected=\"Aeppic.navigateTo($event)\"\n                param-empty-text=\"Keine Aufgaben zu erledigen\"\n      ></ae-list> -->\n      <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n                :documents=\"controller.tasksForDay()\"\n                param-design=\"ref-card\"\n                :param-design-params=\"{ readonly: true }\"\n                param-min-column-width=\"300px\"\n                @selected=\"Aeppic.navigateTo($event)\"\n                param-empty-text=\"Keine Aufgaben zu erledigen\"\n      ></ae-list>\n    </section>\n</div>\n\n<ae-dialog ref=\"overduesDialog\" title=\"Meine überfälligen Aufgaben\">\n  <div slot=\"header\" slot-scope=\"scope\" style=\"display: flex; justify-content: space-between;\">\n    <div>Überfällige Aufgaben</div>\n    <button class=\"ae-button\" @click=\"scope.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div class=\"_CSS-body\" slot=\"body\">\n    <ae-list list-id=\"058195c7-9ba4-4f79-ab01-4a50ef2347fe\"\n              query-id=\"98b88863-e4f7-4dd1-83fb-779df8f5c234\"\n              :root-document-id=\"params.companyId\"\n              :filter=\"'data.verantwortlich:' + params.userId\"\n              @selected=\"Aeppic.navigateTo($event)\"\n    ></ae-list>\n\n  </div>\n</ae-dialog>\n<!-- <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n          :root-document-id=\"params.companyId\"\n          query-id=\"98b88863-e4f7-4dd1-83fb-779df8f5c234\"\n          :filter=\"'data.verantwortlich:' + params.userId\"\n          param-design=\"ref-card\"\n          :param-design-params=\"{ readonly: true }\"\n          param-min-column-width=\"300px\"\n          param-hide-empty=\"true\"\n></ae-list>  -->\n\n<!-- \n<div v-for=\"(dayInLocale, dayAsIsoDate) of locals.days\">\n  <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n            :root-document-id=\"params.companyId\"\n            query-id=\"c364c57a-150e-44ed-a5e5-9ab3beecf2d9\"\n            :filter=\"controller.queryFilter(dayAsIsoDate)\"\n            param-design=\"ref-card\"\n            :param-design-params=\"{ readonly: true }\"\n            :param-hide-empty=\"true\"\n            param-min-column-width=\"300px\"\n\n            :param-title=\"dayAsIsoDate === Aeppic.DateTime.local().toISODate() ? 'Heute' : dayInLocale\"\n  ></ae-list>\n</div>\n\n<ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n          :root-document-id=\"params.companyId\"\n          query-id=\"98b88863-e4f7-4dd1-83fb-779df8f5c234\"\n          param-design=\"ref-card\"\n          :param-design-params=\"{ readonly: true }\"\n          param-min-column-width=\"300px\"\n          param-title=\"Überfällig\"\n></ae-list> -->\n"},"f":{"id":"layout-form","text":"Layout","v":"dc3356051e0928cf"},"id":"21d68267-a17e-4436-8cbf-5f59b7441a8e","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-07-03T11:52:52+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"d3d08873-80a4-471b-b999-eadf1f28c038","previous":{"v":"609ebccfc8b944ea"},"stamps":[],"t":1751543572821,"v":"7ff7b8a21be0b4de"},{"a":["apps","8fa52498-fa07-4bad-87b3-5c8df671aca4","c3df0a76-ded1-4a65-92f0-8f78ecbde232"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1568969971327,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this.FORMS = {\n      Aufgabe: '3d456c38-6282-416e-8c5e-7d20b0517a6e',\n      LeistungsAufgabe: '88b1f60e-71f6-46f5-94ea-3d7bbe972950'\n    }\n\n    locals.overdueTasks = []\n    locals.tasks = []\n    \n    this._todayIndex = 3\n    locals.days = []\n\n    locals.activeDayIndex = this._todayIndex\n\n    for (let i = -3; i <= 3; i++) {\n      const date = Aeppic.DateTime.local().startOf('day').plus({ days: i })\n      locals.days.push(date)\n    }\n\n    this.setupOverdueTasksWatcher()\n  }\n\n  setupOverdueTasksWatcher() {\n    locals.overdueTasks = []\n    locals.tasks = []\n \n    const search = `a:${params.companyId} (f.id:${this.FORMS.Aufgabe} OR f.id:${this.FORMS.LeistungsAufgabe}) data.verantwortlich:${params.userId} data.bis: [* TO now+3d/d] data.erledigt: false`\n\n    Aeppic.subscribe(search, (tasks) => {\n      const overdues = []\n      \n      for(const task of tasks) {\n        if (this.isTaskOverdue(task)) {\n          overdues.push(task)\n        }\n      }\n\n      locals.overdueTasks = overdues\n      locals.tasks = tasks\n    })\n  }\n\n  isTaskOverdue(task) {\n    const data = task.data\n\n    if (!data.erledigt && data.bis) {\n      return Aeppic.DateTime.local().diff(Aeppic.DateTime.fromISO(data.bis)).as('days') > 0\n    }\n\n    return false\n  }\n\n  get currentDay() {\n    if (locals.activeDayIndex === this._todayIndex) {\n      return 'Heute'\n    }\n\n    return locals.days[locals.activeDayIndex].toLocaleString({weekday: 'long', month: 'long', day: '2-digit'})\n  }\n\n  queryFilter(forDayIndex) {\n    const index = forDayIndex != null ? forDayIndex : locals.activeDayIndex\n\n    const dayStart = locals.days[index].toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n    const dayEnd = locals.days[index].endOf('day').toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n\n    // FIXME: query-parser cannot handle date with time\n    return `data.verantwortlich:${params.userId} data.bis:[${dayStart}/d TO ${dayEnd}]`\n  }\n\n  tasksForDay(dayIndex) {\n    const index = dayIndex != null ? dayIndex : locals.activeDayIndex\n\n    const dayStart = locals.days[index].startOf('day')\n    const dayEnd = locals.days[index].endOf('day')\n\n    const interval = Aeppic.DateTimeInterval.fromDateTimes(dayStart, dayEnd)\n    const tasks = locals.tasks.filter(t => interval.contains(Aeppic.DateTime.fromISO(t.data.bis)))\n\n    return tasks\n  }\n\n} ","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n}\n\n._CSS-card {\n  background: var(--ae-ui-card-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-overdues {\n  padding: 10px;\n  margin-bottom: 15px;\n}\n\n._CSS-overdues__clickable {\n  color: var(--ae-primary-600);\n  display: inline-block;\n  cursor: pointer;\n}\n\n._CSS-day--current {\n  padding: 10px;\n  font-size: 1.2em;\n  margin-bottom: 10px;\n}\n\n._CSS-days {\n  padding: 0 10px;\n  display: flex;\n  justify-content: space-between;\n}\n\n._CSS-day {\n  display: flex;\n  flex-flow: column;\n  align-items: center;\n  cursor: pointer;\n}\n\n._CSS-day__dayOfWeek {\n  color: var(--ae-background-500);\n}\n\n._CSS-day__dayOfMonth--today,\n._CSS-day__dayOfWeek--today {\n  color: var(--ae-primary);\n  font-weight: 600;\n}\n\n._CSS-day__dayOfMonth {\n  border-radius: 50%;\n  width: 30px;\n  height: 30px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n._CSS-day__dayOfMonth--current {\n  color: var(--ae-primary-900);\n  background-color: var(--ae-primary-200);\n}\n\n._CSS-tasks {\n  background: var(--ae-background-d1);\n  border-radius: 0 0 var(--ae-border-radius) var(--ae-border-radius);\n  margin-top: 20px;\n  padding: 5px;\n\n  overflow: auto;\n}\n\n._CSS-day__circle {\n  background: var(--ae-primary-200);\n  border-radius: 50%;\n  width: 6px;\n  height: 6px;\n  margin: 4px 4px 0 4px;\n}","name":"Aufgaben Agenda eines Users","packages":[],"template":"<!-- <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n          :root-document-id=\"params.companyId\"\n          query-id=\"98b88863-e4f7-4dd1-83fb-779df8f5c234\"\n          param-design=\"ref-card\"\n          :param-design-params=\"{ readonly: true }\"\n          param-min-column-width=\"300px\"\n          param-title=\"Überfällig\"\n></ae-list> -->\n\n<div class=\"_CSS-card\">\n  <section class=\"_CSS-overdues\" v-if=\"locals.overdueTasks.length\">\n    Sie haben insgesamt {{ locals.overdueTasks.length }} <div class=\"_CSS-overdues__clickable\" @click=\"$refs.overduesDialog.show()\">überfällige</div> Aufgaben\n  </section>\n  <section class=\"_CSS-day--current\">\n    Aufgaben-Agenda:\n    {{ controller.currentDay }}\n  </section>\n  <section class=\"_CSS-days\">\n    <div v-for=\"(dateTime, index) of locals.days\" class=\"_CSS-day\" @click=\"locals.activeDayIndex = index\">\n      <div class=\"_CSS-day__dayOfWeek\" :class=\"{ '_CSS-day__dayOfWeek--today': index === 3 }\">\n        {{ dateTime.toFormat('ccccc') }}\n      </div>\n      <div class=\"_CSS-day__dayOfMonth\" :class=\"{ '_CSS-day__dayOfMonth--today': index === 3, '_CSS-day__dayOfMonth--current': index === locals.activeDayIndex }\">\n        <span>{{ dateTime.toFormat('d') }}</span>\n      </div>\n      <div class=\"_CSS-day__circle\" v-if=\"controller.tasksForDay(index).length\" :title=\"controller.tasksForDay(index).length + ' Aufgaben zu erledigen'\">\n      </div>\n\n    </div>\n  </section>\n  <section class=\"_CSS-tasks\">\n      <!-- <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n                :root-document-id=\"params.companyId\"\n                query-id=\"c364c57a-150e-44ed-a5e5-9ab3beecf2d9\"\n                :filter=\"controller.queryFilter()\"\n                param-design=\"ref-card\"\n                :param-design-params=\"{ readonly: true }\"\n                param-min-column-width=\"300px\"\n                @selected=\"Aeppic.navigateTo($event)\"\n                param-empty-text=\"Keine Aufgaben zu erledigen\"\n      ></ae-list> -->\n      <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n                :documents=\"controller.tasksForDay()\"\n                param-design=\"ref-card\"\n                :param-design-params=\"{ readonly: true }\"\n                param-min-column-width=\"300px\"\n                @selected=\"Aeppic.navigateTo($event)\"\n                param-empty-text=\"Keine Aufgaben zu erledigen\"\n                :param-disable-search-filter=\"true\"\n                param-max-column-width=\"100%\"\n      ></ae-list>\n    </section>\n</div>\n\n<ae-dialog ref=\"overduesDialog\" title=\"Meine überfälligen Aufgaben\">\n  <div slot=\"header\" slot-scope=\"scope\" style=\"display: flex; justify-content: space-between;\">\n    <div>Überfällige Aufgaben</div>\n    <button class=\"ae-button\" @click=\"scope.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div class=\"_CSS-body\" slot=\"body\">\n    <ae-list  list-id=\"058195c7-9ba4-4f79-ab01-4a50ef2347fe\"\n              :documents=\"locals.overdueTasks\"\n              @selected=\"Aeppic.navigateTo($event)\"\n              :param-disable-search-filter=\"true\"\n              param-max-column-width=\"100%\"\n    ></ae-list>\n              <!-- query-id=\"98b88863-e4f7-4dd1-83fb-779df8f5c234\"\n              :root-document-id=\"params.companyId\"\n              :filter=\"'data.verantwortlich:' + params.userId\" -->\n  </div>\n</ae-dialog>\n"},"f":{"id":"layout-form","text":"Layout","v":"dc3356051e0928cf"},"id":"f8cc7d89-6bdc-4099-9d33-b384996bbbcc","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-07-03T11:53:32+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"c3df0a76-ded1-4a65-92f0-8f78ecbde232","previous":{"v":"26d8cf5762e845df"},"stamps":[],"t":1751543612433,"v":"1185f2b3567f1a73"},{"id":"9d6ba0de-4e22-4291-b1d8-4e73b55ed3b9","v":"7d144057ae838417","cloneOf":{"id":"21d68267-a17e-4436-8cbf-5f59b7441a8e","v":"43540535bc67cdd3","text":"Aufgaben Agenda"},"originalCloneOf":{"id":"21d68267-a17e-4436-8cbf-5f59b7441a8e","v":"43540535bc67cdd3","text":"Aufgaben Agenda"},"previous":{"v":"24cbcb5bf7e4a90b"},"p":"77223328-2527-4344-84b1-4092bdf006ba","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Aufgaben eines Users","applies":"","packages":[],"template":"<div class=\"_CSS-card\">\n  <div class=\"_CSS-card__title\">\n    Meine Aufgaben\n  </div>\n  <ae-list  list-id=\"058195c7-9ba4-4f79-ab01-4a50ef2347fe\"\n            :documents=\"locals.tasksWithoutDue\"\n            param-design=\"ref-card\"\n            :param-design-params=\"{ readonly: true }\"\n            param-min-column-width=\"300px\"\n            class=\"_CSS-card__list\"\n            @selected=\"$emit('selected', $event, arguments[1])\"\n  ></ae-list>\n</div>\n","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n  width: 400px;\n}\n\n._CSS-card {\n  background: var(--ae-ui-card-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-card__title {\n  padding: 10px;\n  font-size: 1.2em;\n}\n\n._CSS-card__list {\n  background: var(--ae-background-100);\n  padding: 5px;\n  overflow: auto;\n\n  border-radius: 0 0 var(--ae-border-radius) var(--ae-border-radius);\n}","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Aufgabe: '3d456c38-6282-416e-8c5e-7d20b0517a6e',\n      AufgabeCore: '0deb4864-cbb6-420c-99ee-337c7444ab24',\n      MeineAufgabeBizpin: '544d11b1-a156-4568-aeb3-2a60b2b57807',\n      MeineAufgabeEnergy: '90877d25-bbae-421e-9ea7-0631dcbf11c2',\n    }\n\n    locals.tasksWithoutDue = await this.tasksWithoutDue()\n  }\n\n  async tasksWithoutDue() {\n    const queryString = [\n      `(a:${Aeppic.Account.a[0]} (f.id:${this.FORMS.Aufgabe} OR f.id:${this.FORMS.AufgabeCore}) data.verantwortlich:${params.userId} data.erledigt:false)`,\n      `(a:${Aeppic.Account.id} (f.id:${this.FORMS.MeineAufgabeBizpin} f.id:${this.FORMS.MeineAufgabeEnergy}) data.erledigt:false)`\n    ].join(' OR ')\n\n    console.log(queryString)\n\n    return Aeppic.find(queryString, { \n      sort: [\n        'data.bis',\n        'data.bisStart',\n        'data.bisEnde',\n        'data.name',\n        'id'\n      ],\n      size: 9999\n    })\n    // return Aeppic.find((task) => {\n    //   return task.data.bis === ''\n    // }, queryString)\n  }\n}\n"},"locks":[],"created":{"at":"2018-12-03T10:07:22+00:00","by":"c5ed555f-cc11-463b-960b-0a60b3118e69","from":"","client":"server"},"modified":{"at":"2023-09-20T11:54:10+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1695210850454,"ct":1543831642857,"a_depth":3,"a":["apps","5acfd7a2-33e4-498a-9150-71e1ab772bfc","77223328-2527-4344-84b1-4092bdf006ba"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","0c440c7a-219d-4465-9cbe-2d0eff6ec7ad","85cd7d8f-35be-4092-a40c-274f50729126"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2019-09-13T09:20:42+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1740666014593,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Timer: '9b1d0329-8699-4382-bda3-8eae27e35d03',\n      Arbeitszeit: 'f9279010-1935-4139-abbb-82d928aa09dc'\n    }\n\n    this.NEW_COMMANDS = {\n      Estimate: 'e7e76d3d-1d97-4979-8b13-2d25faab4d67',\n      TrackedTime: '600b9480-9ea0-473f-86b0-b63c05ccb24d'\n    }\n\n    locals.timer = await this.getTimer()\n  }\n\n  async getTimer() {\n    let timer = null\n\n    const existingTimer = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.Timer}`)\n\n    if (existingTimer) {\n      console.log('existing')\n      timer = await Aeppic.edit(existingTimer)\n    } else {\n      console.log('new')\n      timer = await Aeppic.new(this.FORMS.Timer, Aeppic.Account.id)\n      timer.data.abrechenbar = true\n    }\n\n    if (params.document || params.documentId) {\n      const target = params.document || (await Aeppic.get(params.documentId))\n\n      if (target) {\n        timer.addReference('dokument', target)\n      }\n    }\n\n    return timer\n  }\n\n  async start() {\n    locals.timer.data.started = Aeppic.DateTime.local().toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n\n    Aeppic.save(locals.timer)\n\n    $emit('close')\n  }\n\n  async stop() {\n    console.log('stop', locals.timer)\n\n    if (!locals.timer.data.dokument.id) {\n      return\n    }\n\n    locals.timer.data.ended = Aeppic.DateTime.local().toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n\n    Aeppic.save(locals.timer)\n    Aeppic.delete(locals.timer)\n\n    const trackedTimeResult = await Aeppic.Commands.execute(this.NEW_COMMANDS.TrackedTime, locals.timer.data.dokument, {\n      Account: Aeppic.Account,\n      ProfilePage: Aeppic.ProfilePage\n    })\n\n    if (!trackedTimeResult.ok || trackedTimeResult.error) {\n      console.error('Error creating tracked time', trackedTimeResult)\n      return\n    }\n\n    const trackedTime = trackedTimeResult.value\n\n    trackedTime.data = {\n      ...trackedTime.data,\n      ...{\n        name: locals.timer.data.name,\n        dauer: locals.timer.data.dauer,\n        tag: locals.timer.data.tag,\n        abrechenbar: locals.timer.data.abrechenbar\n      }\n    }\n\n    Aeppic.save(trackedTime)\n\n    // TODO: navigate to data.dokument? show track completion?\n    $emit('close')\n  }\n}\n","css":"._CSS-timer {\n  height: 100%;\n\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-actions {\n  display: flex;\n  justify-content: flex-end;\n}","name":"Automatic Timer","packages":[],"template":"<div class=\"_CSS-timer\" v-if=\"locals.timer\">\n  <ae-form :document=\"locals.timer\"\n          :layout-id=\"Aeppic.LocalStorage.getValue('appLayoutId') ? 'efdb156e-9350-4cb3-8e00-4a69adec691b' : null\"\n  ></ae-form>\n\n  <div style=\"flex: 1\"></div>\n\n  <div class=\"_CSS-actions\">\n    <button v-if=\"!locals.timer.data.running\" class=\"ae-button ae-button--primary\" @click=\"controller.start()\">\n      Start\n    </button>\n    <button v-else class=\"ae-button ae-button--primary\" @click=\"controller.stop()\" :disabled=\"!locals.timer.data.dokument.id\">\n      Stoppen & Speichern\n    </button>\n  </div> \n\n</div>  "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"3de67155-ac4d-4e0a-9e04-4c80679a2d65","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-03-04T15:41:21+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"85cd7d8f-35be-4092-a40c-274f50729126","previous":{"v":"d74e4a2944178fdc"},"stamps":[],"t":1741102881545,"v":"08ee8b0cd97e4b59"},{"id":"156ca056-e777-41d3-ba0c-2e5c07108914","v":"ac00b62572d18a27","previous":{"v":"0cb803d2a98631f6"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Avatar Button","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"d4ce6dec568c3dc1","text":"Window"}],"template":"<button v-if=\"!params.hideProfile\"\n  class=\"ae-button\"\n  @click.stop=\"$refs.accountPopupMenu.show({ target: $refs.button })\"\n  ref=\"button\"\n  >\n <ae-design v-if=\"locals.profile\" name=\"avatar--tiny\" :document=\"locals.profile\"></ae-design>\n<ae-icon v-else class=\"fa fa-user-circle\"></ae-icon>\n</button>\n\n <ae-popup ref=\"accountPopupMenu\" base-attachment=\"top right\" popup-attachment=\"center center\" :close-delay=\"200\">\n  <div slot=\"popup\" class=\"_CSS-menu\" slot-scope=\"scope\">    \n    <template v-if=\"Aeppic.Account.data.isGroupAccount\">\n      <button class=\"ae-button ae-button--small\" @click=\"scope.close(); $refs.loginDialog.show()\">\n        <ae-icon class=\"fa fa-sign-in\"></ae-icon>\n        Anmelden\n      </button>\n      <button class=\"ae-button ae-button--small _CSS-button--faded\" @click=\"scope.close(); controller.logoutGroupAccount()\">\n        <ae-icon class=\"fa fa-sign-out\"></ae-icon>\n        Gruppenkonto abmelden\n      </button>\n    </template>\n    <template v-else>\n      <button v-if=\"Aeppic.ProfilePage\" class=\"ae-button ae-button--small\" @click=\"scope.close(); Aeppic.navigateToProfile()\">\n        <ae-icon class=\"fa fa-user-circle\"></ae-icon>\n        Mein Profil\n      </button>\n      <button class=\"ae-button ae-button--small\" @click=\"scope.close(); Aeppic.logout()\">\n        <ae-icon class=\"fa fa-sign-out\"></ae-icon>\n        Abmelden\n      </button>\n    </template>\n  </div>\n</ae-popup>\n\n<ae-dialog ref=\"loginDialog\">\n  <template #header=\"scope\">\n    <div class=\"_CSS-header\">\n      <div style=\"flex:1\">\n      </div>\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n  \n  <template #body=\"scope\">\n    <div class=\"_CSS-body\">\n      <ae-layout style=\"width:100%; flex:1;\" layout-id=\"1a4a9a3c-bf9d-4e8f-8932-c18ac2ac0825\" @close=\"scope.close()\"></ae-layout>\n    </div>\n  </template>\n</ae-dialog>\n","css":"._CSS-menu {\n  background: var(--ae-ui-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  display:flex;\n  flex-direction: column;\n  align-items: stretch;\n}\n\n._CSS-action-button:hover {\n  background: var(--ae-theme-hover-on-background);\n  border-radius: 50%;\n}\n\n\n._CSS ._CSS-button--faded {\n  color: var(--ae-background-500);\n}","controller":"class Controller {\n  async init() {\n    locals.profile = await this.currentAccountAsProfile()\n\n    Aeppic.on('login', async () => locals.profile = await this.currentAccountAsProfile())\n    Aeppic.on('logout', async () => locals.profile = await this.currentAccountAsProfile())\n  }\n\n  async currentAccountAsProfile() {\n    const profile = Aeppic.ProfilePage\n\n    if (profile?.f.id === 'd2ac3563-3c3f-4f02-b923-9b67abf98d10') {\n      return profile\n    }\n\n    return null\n  }\n\n  logoutGroupAccount() {\n    if (confirm('Wollen Sie das Gruppenkonto auf diesem Arbeitsplatz entfernen ?') ) {\n      Aeppic.logout()\n    }\n  }\n}\n"},"locks":[],"created":{"at":"2018-04-20T12:23:58+02:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"f8312258-bdc9-438a-a510-de77a69e61e9"},"modified":{"at":"2022-03-21T14:42:20+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1647873740491,"ct":null,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"67289d03-f2f2-46bc-a801-1fa3193ffaba","v":"initial","p":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"},"data":{"name":"avatar--small LAYOUT","applies":"","packages":[],"template":"<template v-if=\"locals.document\">\n  <div :title=\"controller.title\" v-if=\"locals.data.foto.dataUrl\" :style=\"{ 'background-color': locals.color, 'background-image': 'url(' + Aeppic.Content.getThumbnailSrc(locals.document, 'foto') + ')' }\" class=\"_CSS-image\" >\n    <!-- <img style=\"height:52px\" :src=\"Aeppic.Content.getThumbnailSrc(locals.document, 'foto')\">  -->\n  </div>\n  <span :title=\"controller.title\" v-else-if=\"locals.data.name\" :style=\"{ 'background-color': locals.color }\" class=\"_CSS-initials\" >{{locals.initials}}</span>\n  <span :title=\"controller.title\" v-else :style=\"{ color: locals.color }\" class=\"_CSS--no-image\"  ><ae-icon class=\"fa fa-user \" style=\"color:gray\" ></ae-icon></span>\n</template>","css":"._CSS {\n  display: flex;\n  justify-content: flex-start;\n  width: auto;\n  /* padding-left: 8px; */\n  /* height: 64px; */\n  align-items: center;\n}\n\n._CSS--no-image {\n  background: lightgray;\n  width: 36px;\n  height: 36px;\n  border-radius: 50%;\n  overflow:none;\n  display:flex;\n  align-items:center;\n  justify-content: center;\n}\n\n._CSS--no-image > * {\n  width: 16px;\n  height: 16px;\n}\n\n._CSS--name-avatar {\n\n}\n\n._CSS-initials {\n  height: 36px;\n  width: 36px;\n  border-radius: 50%;\n  display: flex;\n  align-items:center;\n  justify-content: center;\n  color:white;\n  font-size: 14px;\n  font-weight: bold;\n  font-family:'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;\n  box-shadow: var(--ae-shadow-inset);\n}\n \n._CSS--no-image {\n  opacity: 0.4;\n  font-size: 36px;\n}\n\n._CSS-image {\n  height: 36px;\n  width: 36px;\n  border-radius: 50%;\n  background-repeat: no-repeat;\n  background-size: cover;\n  xbackground-position: center;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  overflow:hidden;\n}","controller":"async init() {\n  locals.document = null\n  locals.data = null\n  locals.color  = null\n  locals.initials = null\n\n  await this.updateLocals(params.document)  \n\n  watchParam('document', async (newDocument) => {\n    await this.updateLocals(newDocument)\n  })\n}\n\nasync updateLocals(document) {\n  if (!params.document || !params.document.id) {\n    locals.document = null\n    locals.data = null\n    locals.color  = null\n    locals.initials = null\n    return\n  }\n\n  locals.document = await Aeppic.get(document)\n  locals.data = locals.document.data\n  locals.color = this.intToRGB(this.hashCode(locals.document.id))\n\n  if (locals.data.vorname.length === 0) {\n    locals.initials = (locals.data.nachname.slice(0,1)).toUpperCase()\n  } else {\n    locals.initials = (locals.data.vorname.slice(0,1) + locals.data.nachname.slice(0,1)).toUpperCase()\n  }\n}\n\nhashCode(str) { // java String#hashCode\n  var hash = 0;\n  for (var i = 0; i < str.length; i++) {\n      hash = str.charCodeAt(i) + ((hash << 5) - hash);\n  }\n  return hash;\n} \n\n intToRGB(i) {\n  var c = (i & 0x00FFFFFF)\n      .toString(16)\n      .toUpperCase();\n\n  return '#' + '00000'.substring(0, 6 - c.length) + c;\n}\n\nget title() {\n  const parts = []\n  \n  locals.data.vorname && parts.push(locals.data.vorname)\n  locals.data.name && parts.push(locals.data.name)\n  locals.data.position && parts.push(`(${locals.data.position})`)\n  \n  return parts.join(' ')\n}"},"locks":[],"created":{"at":"2020-09-17T11:55:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-09-17T11:55:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1600343721180,"ct":1600343721180,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","2add3026-2869-40ea-9e6d-dcb14ef0ba19"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"e8f8cc49-0118-43ba-ac25-0c016d6dea1d","v":"7829e890728b32c1","previous":{"v":"a2ab3266f26b6368"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Background","applies":"","packages":[],"template":"<div  v-if=\"locals.background\"\n      class=\"_CSS-background\"\n      :style=\"{ 'background-image': 'url(' + Aeppic.Content.getSrc(locals.background, 'file') + ')' }\">\n</div>\n","css":"._CSS,\n._CSS-background {\n  position: absolute;\n  left:0;\n  right:0;\n  bottom:0;\n  top:0px;\n  z-index:-1;\n}\n\n._CSS-background {\n  background-position-x: 50%;\n  background-position-y: 0px;\n  background-size: 100% auto;\n}\n","controller":"class Controller {\n  init() {\n      locals.background = Aeppic.get('5e30fc36-1b4d-416c-a087-325b8b58a848')\n  }\n}"},"locks":[],"created":{"at":"2018-06-14T08:46:15+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583893690,"ct":1528965975839,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"cb92d818-e25d-43ff-8c41-5b6e6a58a7bd","v":"093a33bbeab58abe","previous":{"v":"fe8eec5d85207c4c"},"p":"5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Barcode and NFC Scanner","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"d4ce6dec568c3dc1","text":"Window"}],"template":"<div v-if=\"locals.ready\" class=\"flex gap-4\">\n  <div v-if=\"locals.mode === 'BUTTON'\">\n    <ae-layout  layout-id=\"a2cd7699-9b46-494f-8f89-cb1f62151d82\"\n                param-icon=\"fa fa-wrench\"\n                param-text=\"Wartung beginnen\"\n                param-classes=\"text-2xl\"\n                @selected=\"$emit('code', params.document.data.barcode)\"\n                :param-disabled=\"params.readonly\"\n    ></ae-layout>\n  </div>\n  <template v-else>\n    <div class=\"flex flex-col gap-2\">\n      <ae-layout  v-if=\"locals.barcodeSupported\"\n                  layout-id=\"a2cd7699-9b46-494f-8f89-cb1f62151d82\"\n                  param-icon=\"fa fa-barcode-read\"\n                  class=\"text:lg sm:text-5xl\"\n                  @selected=\"controller.showNativeBarcodeScanner()\" \n                  :param-disabled=\"params.readonly\"\n      ></ae-layout>\n      <ae-layout  v-if=\"controller.nfcSupported\"\n                  layout-id=\"a2cd7699-9b46-494f-8f89-cb1f62151d82\"\n                  param-icon=\"custom-nfc\"\n                  class=\"text:lg sm:text-5xl animate-pulse\"\n                  :param-disabled=\"params.readonly\"\n      ></ae-layout>\n\n      <ae-layout  v-if=\"(locals.mode === 'BARCODE' || locals.mode === 'BARCODE_NFC' || locals.mode === 'NFC') && !controller.nfcSupported && !locals.barcodeSupported\"\n                  layout-id=\"a2cd7699-9b46-494f-8f89-cb1f62151d82\"\n                  param-icon=\"fa fa-barcode\"\n                  class=\"text:lg sm:text-5xl\"\n                  :param-disabled=\"true\"\n      ></ae-layout>\n    </div>\n\n    <div class=\"flex-1\">\n      <input :id=\"locals.barcodeFieldId\" \n              :disabled=\"params.readonly\"\n              class=\"w-full border rounded-lg p-1 bg-theme-100 text-theme-900 placeholder:text-theme-500\" \n              v-model=\"locals.code\" \n              placeholder=\"Code manuell eingeben\" \n              type=\"tel\" \n              pattern=\"\\d*\" \n              @input=\"$emit('code', locals.code)\"\n              :param-disabled=\"params.readonly\"\n      >\n      <div>\n        <template v-if=\"locals.barcodeSupported\">\n          <span>Barcode des Wartungspunktes</span>\n          <span class=\"font-bold\">einscannen</span>\n        </template>\n        <template v-if=\"controller.nfcSupported\">\n          <span v-if=\"locals.barcodeSupported\">oder</span>\n          <span class=\"font-bold\">\n            NFC Tag einlesen\n          </span>\n        </template>\n\n        <span v-if=\"(locals.mode === 'BARCODE_NFC' || locals.mode === 'BARCODE')\">\n          <span v-if=\"(locals.mode === 'BARCODE_NFC' && controller.nfcSupported || locals.barcodeSupported)\">\n            oder\n          </span>\n          Barcode manuell eingeben.\n        </span>\n        <span v-if=\"(locals.mode === 'BARCODE_NFC' || locals.mode === 'NFC') && !controller.nfcSupported\">\n          Code manuell eingeben.\n        </span>\n\n        <div class=\"mt-2\">Ziffern sind ausreichend.</div>\n      </div>\n    </div>\n  </template>\n\n\n</div>\n\n\n<div ref=\"entry\"></div>","css":".x_CSS_disabled {\n  pointer-events: none;\n  opacity: 0.5;\n  position: relative;\n}\n\n.x_CSS_disabled::after {\n  content: '';\n  position: absolute;\n  top:0;\n  left:0;\n  right:0;\n  bottom:30px;\n  background: red;\n  opacity: 0.5;\n}","controller":"class Controller {\n  async init() {\n    locals.ready = false\n\n    locals.code = null\n    locals.webNfcSupported = false\n    locals.kioskNfcSupported = false\n    locals.barcodeSupported = false\n    locals.barcodeFieldId = Aeppic.newDOMId()\n    locals.mode = ''\n\n    if (!params.preferenceKey) {\n      throw new Error('Missing preference to lookup mode')\n    }\n\n    const mode = await Aeppic.Preferences.getSettingForDocument(params.preferenceKey, params.document)\n\n    if (!mode) {\n      throw new Error('Could not resolve mode of preference' + params.preferenceKey)\n    }\n\n    locals.mode = mode\n\n    if (mode === 'BARCODE') {\n      if (this.isRunningOnKioskDevice()) {\n        // FIXME: barcode crashes KioskBrowser on Sony Tablet\n        // locals.barcodeSupported = !!Android.openBarcodeScannerInput\n        // locals.barcodeSupported = false\n      }\n    }\n\n    if (mode === 'NFC' || mode === 'BARCODE_NFC') {\n      if (this.isRunningOnKioskDevice()) {\n        // FIXME: barcode crashes KioskBrowser on Sony Tablet\n        // locals.barcodeSupported = !!Android.openBarcodeScannerInput\n        // locals.barcodeSupported = false\n\n        this.global = await this.getGlobal()\n\n        locals.kioskNfcSupported = true\n\n        this.registerKioskFeatures()\n      } else if (this.webNfcAvailable()) {\n        locals.webNfcSupported = true\n\n        try {\n          const ndef = new NDEFReader()\n\n          ndef.onreadingerror = () => {\n            locals.error = \"Cannot read data from the NFC tag. Try another one?\"\n          }\n\n          ndef.onreading = event => {\n            const message = event.message\n            const textParts = []\n            \n            for (const record of message.records) {\n              if (record.recordType === 'text') {\n                const textDecoder = new TextDecoder(record.encoding)\n                textParts.push(textDecoder.decode(record.data))\n              } else {\n                throw new Error(`Unsupported record type: ${record.recordType}`)\n              }\n            }\n\n            const text = textParts.join(' ')\n            locals.code = text\n            $emit('code', text)\n          }\n\n          await ndef.scan()\n        } catch (e) {\n          locals.error = e\n        }\n      }\n\n    }\n\n    locals.ready = true\n  }\n\n  webNfcAvailable() {\n    return typeof NDEFReader !== 'undefined' /* Scan and write NFC tags */\n  }\n\n  isRunningOnKioskDevice() {\n    return typeof Android != 'undefined'\n  }\n\n  showNativeBarcodeScanner() {\n    if (!locals.barcodeSupported) {\n      packages.window.confirm('This device does not support barcode reading')\n      return\n    }\n\n    Android.openBarcodeScannerResultCallback()\n  }\n\n  get prefix() {\n    return params.prefix || 'WP'\n  }\n\n  get nfcSupported() {\n    return locals.webNfcSupported || locals.kioskNfcSupported\n  }\n\n  registerKioskFeatures() {\n    if (locals.kioskNfcSupported) {\n      this.global.nfcScanResult = (data) => {\n        console.log('NFC', data)\n        locals.code = data\n\n        // TODO: removed prefix handling because prefix is handled in action anyway\n        // if (data.startsWith(`${this.prefix} `) || data.startsWith(`${this.prefix}-`)) {\n        //   const code = data.substring(3)\n        //   console.log('scanned code', code)\n\n        //   $emit('code', code)\n        // } else {\n        $emit('code', data)\n        // }\n      }\n\n      Android.useJavaScriptCallbackNFC(true)\n    }\n\n    if (locals.barcodeSupported) {\n      this.global.barcodeScanResult = (data) => {\n        window.confirm(\"Result Data:\" + JSON.stringify(data))\n      }\n    }\n  }\n\n  unregisterKioskFeatures() {\n    Android.useJavaScriptCallbackNFC(false)\n\n    delete this.global?.nfcScanResult\n    delete this.global?.barcodeScanResult\n  }\n\n  async getGlobal() {\n    await Aeppic.nextRenderPass()\n\n    const window = $refs.entry?.ownerDocument.defaultView\n    return window\n  }\n\n  destroy() {\n    if (this.isRunningOnKioskDevice()) {\n      this.unregisterKioskFeatures()\n    }\n  }\n}"},"locks":[],"created":{"at":"2022-03-04T10:11:49+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-06-28T13:21:52+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1656422512211,"ct":1646388709169,"a_depth":3,"a":["apps","d4581623-f542-4ade-86be-8b3ecec56f0e","5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"fd173d48-72be-4323-b1a8-5c6b0b8de2b3","v":"51e061499ccb32c5","p":"594e6b26-7310-4d00-aad9-2a577ccab542","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Barcode and NFC Scanner","applies":"","template":"<div v-if=\"locals.ready\" class=\"flex gap-4\">\n  <div v-if=\"locals.mode === 'BUTTON'\">\n    <ae-layout  layout-id=\"f6bdd129-3852-4bac-9375-559b929486bc\"\n                param-icon=\"fa fa-wrench\"\n                param-text=\"Wartung beginnen\"\n                param-classes=\"text-2xl\"\n                @selected=\"$emit('code', params.document.data.barcode)\"\n                :param-disabled=\"params.readonly\"\n    ></ae-layout>\n  </div>\n  <template v-else>\n    <div class=\"flex flex-col gap-2\">\n      <ae-layout  v-if=\"locals.barcodeSupported\"\n                  layout-id=\"f6bdd129-3852-4bac-9375-559b929486bc\"\n                  param-icon=\"fa fa-barcode-read\"\n                  class=\"text:lg sm:text-5xl\"\n                  @selected=\"controller.showNativeBarcodeScanner()\" \n                  :param-disabled=\"params.readonly\"\n      ></ae-layout>\n      <ae-layout  v-if=\"controller.nfcSupported\"\n                  layout-id=\"f6bdd129-3852-4bac-9375-559b929486bc\"\n                  param-icon=\"custom-nfc\"\n                  class=\"text:lg sm:text-5xl animate-pulse\"\n                  :param-disabled=\"params.readonly\"\n      ></ae-layout>\n\n      <ae-layout  v-if=\"(locals.mode === 'BARCODE' || locals.mode === 'BARCODE_NFC' || locals.mode === 'NFC') && !controller.nfcSupported && !locals.barcodeSupported\"\n                  layout-id=\"f6bdd129-3852-4bac-9375-559b929486bc\"\n                  param-icon=\"fa fa-barcode\"\n                  class=\"text:lg sm:text-5xl\"\n                  :param-disabled=\"true\"\n      ></ae-layout>\n    </div>\n\n    <div class=\"flex-1\">\n      <input :id=\"locals.barcodeFieldId\" \n              :disabled=\"params.readonly\"\n              class=\"w-full border rounded-lg p-1 bg-theme-100 text-theme-900 placeholder:text-theme-500\" \n              v-model=\"locals.code\" \n              placeholder=\"Code manuell eingeben\" \n              type=\"tel\" \n              pattern=\"\\d*\" \n              @input=\"$emit('code', locals.code)\"\n              :param-disabled=\"params.readonly\"\n      >\n      <div>\n        <template v-if=\"locals.barcodeSupported\">\n          <span>Barcode des Wartungspunktes</span>\n          <span class=\"font-bold\">einscannen</span>\n        </template>\n        <template v-if=\"controller.nfcSupported\">\n          <span v-if=\"locals.barcodeSupported\">oder</span>\n          <span class=\"font-bold\">\n            NFC Tag einlesen\n          </span>\n        </template>\n\n        <span v-if=\"(locals.mode === 'BARCODE_NFC' || locals.mode === 'BARCODE')\">\n          <span v-if=\"(locals.mode === 'BARCODE_NFC' && controller.nfcSupported || locals.barcodeSupported)\">\n            oder\n          </span>\n          Barcode manuell eingeben.\n        </span>\n        <span v-if=\"(locals.mode === 'BARCODE_NFC' || locals.mode === 'NFC') && !controller.nfcSupported\">\n          Code manuell eingeben.\n        </span>\n\n        <div class=\"mt-2\">Ziffern sind ausreichend.</div>\n      </div>\n    </div>\n  </template>\n\n\n</div>\n\n\n<div ref=\"entry\"></div>","css":".x_CSS_disabled {\n  pointer-events: none;\n  opacity: 0.5;\n  position: relative;\n}\n\n.x_CSS_disabled::after {\n  content: '';\n  position: absolute;\n  top:0;\n  left:0;\n  right:0;\n  bottom:30px;\n  background: red;\n  opacity: 0.5;\n}","controller":"class Controller {\n  async init() {\n    locals.ready = false\n\n    locals.code = null\n    locals.webNfcSupported = false\n    locals.kioskNfcSupported = false\n    locals.barcodeSupported = false\n    locals.barcodeFieldId = Aeppic.newDOMId()\n    locals.mode = ''\n\n    if (!params.preferenceKey) {\n      throw new Error('Missing preference to lookup mode')\n    }\n\n    const mode = await Aeppic.Preferences.getSettingForDocument(params.preferenceKey, params.document)\n\n    if (!mode) {\n      throw new Error('Could not resolve mode of preference' + params.preferenceKey)\n    }\n\n    locals.mode = mode\n\n    if (mode === 'BARCODE') {\n      if (this.isRunningOnKioskDevice()) {\n        // FIXME: barcode crashes KioskBrowser on Sony Tablet\n        // locals.barcodeSupported = !!Android.openBarcodeScannerInput\n        // locals.barcodeSupported = false\n      }\n    }\n\n    if (mode === 'NFC' || mode === 'BARCODE_NFC') {\n      if (this.isRunningOnKioskDevice()) {\n        // FIXME: barcode crashes KioskBrowser on Sony Tablet\n        // locals.barcodeSupported = !!Android.openBarcodeScannerInput\n        // locals.barcodeSupported = false\n\n        this.global = await this.getGlobal()\n\n        locals.kioskNfcSupported = true\n\n        this.registerKioskFeatures()\n      } else if (this.webNfcAvailable()) {\n        locals.webNfcSupported = true\n\n        try {\n          const ndef = new NDEFReader()\n\n          ndef.onreadingerror = () => {\n            locals.error = \"Cannot read data from the NFC tag. Try another one?\"\n          }\n\n          ndef.onreading = event => {\n            const message = event.message\n            const textParts = []\n            \n            for (const record of message.records) {\n              if (record.recordType === 'text') {\n                const textDecoder = new TextDecoder(record.encoding)\n                textParts.push(textDecoder.decode(record.data))\n              } else {\n                throw new Error(`Unsupported record type: ${record.recordType}`)\n              }\n            }\n\n            const text = textParts.join(' ')\n            locals.code = text\n            $emit('code', text)\n          }\n\n          await ndef.scan()\n        } catch (e) {\n          locals.error = e\n        }\n      }\n\n    }\n\n    locals.ready = true\n  }\n\n  webNfcAvailable() {\n    return typeof NDEFReader !== 'undefined' /* Scan and write NFC tags */\n  }\n\n  isRunningOnKioskDevice() {\n    return typeof Android != 'undefined'\n  }\n\n  showNativeBarcodeScanner() {\n    if (!locals.barcodeSupported) {\n      packages.window.confirm('This device does not support barcode reading')\n      return\n    }\n\n    Android.openBarcodeScannerResultCallback()\n  }\n\n  get prefix() {\n    return params.prefix || 'WP'\n  }\n\n  get nfcSupported() {\n    return locals.webNfcSupported || locals.kioskNfcSupported\n  }\n\n  registerKioskFeatures() {\n    if (locals.kioskNfcSupported) {\n      this.global.nfcScanResult = (data) => {\n        console.log('NFC', data)\n        locals.code = data\n\n        // TODO: removed prefix handling because prefix is handled in action anyway\n        // if (data.startsWith(`${this.prefix} `) || data.startsWith(`${this.prefix}-`)) {\n        //   const code = data.substring(3)\n        //   console.log('scanned code', code)\n\n        //   $emit('code', code)\n        // } else {\n        $emit('code', data)\n        // }\n      }\n\n      Android.useJavaScriptCallbackNFC(true)\n    }\n\n    if (locals.barcodeSupported) {\n      this.global.barcodeScanResult = (data) => {\n        window.confirm(\"Result Data:\" + JSON.stringify(data))\n      }\n    }\n  }\n\n  unregisterKioskFeatures() {\n    Android.useJavaScriptCallbackNFC(false)\n\n    delete this.global?.nfcScanResult\n    delete this.global?.barcodeScanResult\n  }\n\n  async getGlobal() {\n    await Aeppic.nextRenderPass()\n\n    const window = $refs.entry?.ownerDocument.defaultView\n    return window\n  }\n\n  destroy() {\n    if (this.isRunningOnKioskDevice()) {\n      this.unregisterKioskFeatures()\n    }\n  }\n}","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"d4ce6dec568c3dc1","text":"Window"}]},"locks":[],"created":{"at":"2025-08-06T15:38:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2025-08-06T15:38:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1754494711128,"ct":1754494711128,"a_depth":3,"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","594e6b26-7310-4d00-aad9-2a577ccab542"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"previous":{"v":"initial","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"}},"meta":{"modified":{"at":"2025-08-06T15:38:31+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"id":"26b9ced7-b6b6-48bb-9629-4f9f2248d661","v":"initial","p":"c3df0a76-ded1-4a65-92f0-8f78ecbde232","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Benachrichtigungen","applies":"","packages":[],"template":"<div class=\"_CSS-card\">\n    <ae-layout class=\"_CSS-card__content\" layout-id=\"2eaa0d5f-36ed-4e10-9834-03613633b55f\"></ae-layout>\n</div>\n","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n}\n\n._CSS-card {\n  background: var(--ae-ui-card-background);\n}\n\n._CSS-card__content {\n  max-height: 600px;\n}\n","controller":"class Controller {\n  async markReadAndNavigateTo(event) {\n    $refs.dialog && $refs.dialog.close()\n\n    const notification = await Aeppic.edit(event)\n\n    notification.data.read = true\n    notification.data.readAt = Aeppic.DateTime.local().toFormat(\"yyyy-MM-dd'T'T\")\n\n    Aeppic.save(notification)\n\n    Aeppic.navigateTo(notification.data.document)\n  }\n\n  destroy() {\n    $refs.dialog && $refs.dialog.close()\n  }\n}"},"locks":[],"created":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1568969971410,"ct":1568969971410,"a_depth":3,"a":["apps","8fa52498-fa07-4bad-87b3-5c8df671aca4","c3df0a76-ded1-4a65-92f0-8f78ecbde232"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"5090a8cb-f75c-4bc7-a9b9-795e759b812c","v":"d43a07e34538dbc1","previous":{"v":"2183ca5b12224c89"},"p":"d3d08873-80a4-471b-b999-eadf1f28c038","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Benachrichtigungen","applies":"","packages":[],"template":"<div class=\"_CSS-card\">\n    <ae-layout class=\"_CSS-popup\" layout-id=\"2eaa0d5f-36ed-4e10-9834-03613633b55f\"></ae-layout>\n</div>\n","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n  width: 400px;\n}\n\n._CSS-card {\n  background: var(--ae-ui-card-background);\n}\n","controller":"class Controller {\n  async markReadAndNavigateTo(event) {\n    $refs.dialog && $refs.dialog.close()\n\n    const notification = await Aeppic.edit(event)\n\n    notification.data.read = true\n    notification.data.readAt = Aeppic.DateTime.local().toFormat(\"yyyy-MM-dd'T'T\")\n\n    Aeppic.save(notification)\n\n    Aeppic.navigateTo(notification.data.document)\n  }\n\n  destroy() {\n    $refs.dialog && $refs.dialog.close()\n  }\n}"},"locks":[],"created":{"at":"2018-12-03T13:55:23+00:00","by":"c5ed555f-cc11-463b-960b-0a60b3118e69","from":"","client":"server"},"modified":{"at":"2019-05-03T13:06:33+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1556888793790,"ct":1543845323300,"a_depth":3,"a":["apps","43f84041-0fd7-4ccb-b7b5-7a38f89ada37","d3d08873-80a4-471b-b999-eadf1f28c038"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"4415380f-56fe-4d59-8c4c-590691185cf4","v":"5d826a285983cf6c","p":"157b00c5-406d-4a8d-b94b-14df194ff987","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Beschichtung: Vertrieb Inline Form","applies":"","template":"<ae-form  layout-id=\"6c39f2cc-6059-42b2-8796-5c803899367c\"\n          :document=\"params.document\"\n          :view=\"locals.view\"\n          :readonly=\"true\"\n></ae-form>\n\n<!-- <ae-layout  layout-id=\"6c39f2cc-6059-42b2-8796-5c803899367c\"\n            :params=\"params\"\n            :param-hide-empty=\"false\"\n            :param-fields-to-display=\"[\n              'description',\n              'revisionFileNames',\n              'hasDrawing',\n              'drawingName',\n              'date',\n              'customerName',\n              'customerAddress',\n              'projectName',\n              'numberOfMoulds',\n              'plasticShrinkageAllowanceX',\n              'plasticShrinkageAllowanceY',\n              'plasticShrinkageAllowanceZ',\n              'plasticShrinkageAllowancePercent',\n              'plasticResin',\n              'patternPartAndOthers',\n              'numberOfMouldParts',\n              'numberOfLooseParts',\n              'manufacturingProcess',\n            ]\"\n></ae-layout> -->\n","css":"","controller":"class Controller {\n  init() {\n    locals.view = {\n      only: {\n        fields: [\n            'description',\n            'revisionFileNames',\n            'hasDrawing',\n            'drawingName',\n            'date',\n            'customerName',\n            'customerAddress',\n            'projectName',\n            'numberOfMoulds',\n            'plasticShrinkageAllowanceX',\n            'plasticShrinkageAllowanceY',\n            'plasticShrinkageAllowanceZ',\n            'plasticShrinkageAllowancePercent',\n            'plasticResin',\n            'patternPartAndOthers',\n            'numberOfMouldParts',\n            'numberOfLooseParts',\n            'manufacturingProcess',\n        ]\n      },\n    }\n  }\n}","packages":[]},"locks":[],"created":{"at":"2022-02-07T15:58:46+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-03-01T09:57:52+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1718866006697,"ct":1718866006697,"a_depth":3,"a":["apps","deeef973-ce03-4557-bf75-75a059001767","157b00c5-406d-4a8d-b94b-14df194ff987"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"previous":{"v":"62f309a431255163","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"}},"meta":{"modified":{"at":"2024-06-20T08:46:46+02:00","by":"427610a9-39dc-4014-9176-5f72aeb23263","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"a":["apps","3fbe0efd-713a-457a-a34c-3a12aa19d6bb","999c58bb-af30-4eb9-aece-b07fbdbb080c"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2024-09-27T09:57:18+00:00","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1727431038924,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    $emit('scroll-to-top')\n\n    locals.castingSheet = null\n\n    const castingSheet = await Aeppic.get(params.document.data.castingSheetDocument[0])\n    this.form = await Aeppic.getFormForDocument(castingSheet)\n\n    const sections = this.form.info.sections\n\n    // const sectionsWithFields = sections.filter(section => {\n    //   const { offset, length } = section\n    //   const sectionFields = this.form.getPlaceholders().filter(placeholder => placeholder.field && placeholder.offset >= offset && ((placeholder.offset + placeholder.length) < (offset + length))).map(placeholder => placeholder.field.name)\n      \n    //   return sectionFields.length > 0\n    // })\n\n    // locals.sections = sectionsWithFields\n\n    locals.sections = sections.filter(section => section.paragraphs.length > 0 || section.placeholders.length > 0)\n\n    locals.currentSectionIndex = -1\n    locals.progressParts = []\n    locals.currentSectionFields = []\n\n    this.nextSection()\n    \n    locals.castingSheet = await Aeppic.edit(params.document.data.castingSheetDocument[0])\n  }\n\n  nextSection(incrementBy) {\n    locals.currentSectionIndex += incrementBy != null ? incrementBy : 1\n\n    const currentSection = locals.sections[locals.currentSectionIndex]\n    const { offset, length } = currentSection\n\n    console.log({ offset, length })\n\n    locals.currentSectionFields = this.form.getPlaceholders().filter(placeholder => placeholder.field && placeholder.offset >= offset && ((placeholder.offset + placeholder.length) < (offset + length))).map(placeholder => placeholder.field.name)\n\n    const progress = Number(((100 / (locals.sections.length)) * (locals.currentSectionIndex + 1)).toFixed(2))\n\n    locals.progressParts = [\n      { label: '', value: locals.currentSectionIndex + 1, percent: progress, class: 'bg-slate-500' },\n      { label: '', value: locals.sections.length - 1 - locals.currentSectionIndex, percent: 100 - progress, class: 'bg-slate-100', },\n    ]\n\n    console.log(locals.progressParts)\n  }\n\n  nextSectionOrStep() {\n    if (locals.currentSectionIndex < locals.sections.length -1) {\n      this.nextSection()\n    } else {\n      Aeppic.save(locals.castingSheet)\n\n      $emit('next')\n      $emit('scroll-to-top')\n    }\n  }\n\n  previousSectionOrStep() {\n    if (locals.currentSectionIndex > 0) {\n      this.nextSection(-1)\n    } else {\n      Aeppic.save(locals.castingSheet)\n\n      $emit('previous')\n    }\n  }\n}\n","css":"","name":"Bewerbung: Casting Sheet Document","packages":[],"template":"<div class=\"min-h-[70vh] flex flex-col\">\n\n  <!-- <ae-design name=\"image\" document-id=\"edb9c29e-b796-4dcc-bdfd-4037db29f9f7\" param-height=\"200px\"></ae-design> -->\n\n      <!-- <ae-form  layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n            :document=\"params.document\" \n            :view=\"{ only: { fields: params.step.fields }}\" \n            style=\"width:100%;max-width: 100%;\"\n    ></ae-form>\n -->\n\n    <div class=\" pb-4 flex align-baseline gap-6\">\n      <div class=\"font-bold text-xl\">\n        Casting Sheet\n      </div>\n\n      <div>\n        <ae-layout \n          layout-id=\"b20de0e2-5660-44fc-aea2-82965627f078\"\n          :param-parts=\"locals.progressParts\"\n          class=\"w-full min-w-[200px]\"\n          :xparam-hide-value=\"true\"\n          param-label=\"translate:castingsheet:progress:questions\"\n        ></ae-layout>  \n      </div>\n    </div>\n\n    <!-- NOTE: the auto-save is not used to save but to run a debounced Aeppic.commit -->\n    <ae-icon v-if=\"!locals.castingSheet\" class=\"fa fa-spinner-third fa-spin text-xl\"></ae-icon>\n    <ae-form  v-else\n              layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n              :document=\"locals.castingSheet\" \n              class=\"flex-1 w-full max-w-full\"\n              :view=\"{ startWithSection: locals.sections[locals.currentSectionIndex].index, stopWithSection: locals.sections[locals.currentSectionIndex].index }\"\n              :key=\"'form' + id(locals.currentSectionIndex)\"\n              :auto-save=\"true\"\n              :auto-save-after=\"1000\"\n              @save=\"Aeppic.commit(locals.castingSheet)\"\n              ></ae-form>\n              \n    <!-- :xview=\"{ startWithSection: locals.sections[locals.currentSectionIndex].index, only: { fields: locals.currentSectionFields } }\" -->\n\n    <ae-layout layout-id=\"6093913b-0f0e-40d8-b289-2729e95ac43f\" \n              ref=\"errors\" \n              @valid=\"controller.nextSectionOrStep()\" \n              :param-document=\"locals.castingSheet\" \n              :param-fields=\"locals.currentSectionFields\"\n              :key=\"'errors' + id(locals.currentSectionIndex)\"\n    ></ae-layout>\n\n    <ae-layout layout-id=\"a7128e93-695c-46c9-b863-f7207fe439d0\" \n                :param-current-step-index=\"params.stepIndex\" \n                :param-settings=\"params.settings\" \n                @next=\"$refs.errors.$emit('validate')\" \n                @previous=\"controller.previousSectionOrStep()\" \n                :param-disable-next=\"Aeppic.Uploads.isUploading\"\n    ></ae-layout>\n  </template>\n</div>\n\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"509505c3-8429-42c2-8239-4309364989f4","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-04-21T12:00:35+00:00","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"999c58bb-af30-4eb9-aece-b07fbdbb080c","previous":{"v":"8f9567318a56b4a5"},"stamps":[],"t":1776772835531,"v":"b38913998f197a4c"},{"id":"2cbceeb0-a168-43b1-9ef7-fc8f55c730ee","v":"1ba3117ba13524ec","previous":{"v":"ad0aef3f612512fc"},"p":"999c58bb-af30-4eb9-aece-b07fbdbb080c","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Bewerbung: Datei Upload","applies":"","template":"<div class=\"_CSS-container\">\n  <ae-design name=\"image\" document-id=\"edb9c29e-b796-4dcc-bdfd-4037db29f9f7\" param-height=\"200px\"></ae-design>\n\n  <!-- <template v-if=\"!locals.showUploads\"> -->\n\n  <!-- NOTE: the auto-save is not used to save but to run a debounced Aeppic.commit -->\n    <ae-form  layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n          :document=\"params.document\" \n          :view=\"{ only: { fields: params.step.fields }}\" \n          style=\"width:100%;max-width: 100%;\"\n          :auto-save=\"true\"\n          :auto-save-after=\"1000\"\n          @save=\"Aeppic.commit(params.document)\"\n    ></ae-form>\n\n\n    <!-- <ae-layout style=\"width:100%;max-width: 100%;\" layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\" :param-document=\"params.document\" :param-fields-to-display=\"params.step.fields\"></ae-layout> -->\n\n    <ae-layout layout-id=\"6093913b-0f0e-40d8-b289-2729e95ac43f\" ref=\"errors\" @valid=\"$emit('next');$emit('scroll-to-top')\" :param-document=\"params.document\" :param-fields=\"params.step.fields\"></ae-layout>\n\n    <ae-layout layout-id=\"a7128e93-695c-46c9-b863-f7207fe439d0\" :param-current-step-index=\"params.stepIndex\" :param-settings=\"params.settings\" @next=\"$refs.errors.$emit('validate')\" @previous=\"$emit('previous')\" :param-disable-next=\"Aeppic.Uploads.isUploading\"></ae-layout>\n  </template>\n  <!-- <template v-else>\n    <section class=\"_CSS-uploads-list\" v-if=\"Aeppic.Uploads.isUploading\">\n        <div class=\"_CSS-upload\" :class=\"{ '_CSS-upload--finished': upload.status === 'finished' }\" :key=\"upload.id\" v-for=\"upload of Aeppic.Uploads.getAll()\"> \n            <ae-design name=\"title\" :document=\"upload.document\"></ae-design>\n            <template v-if=\"upload.status !== 'finished'\">\n            {{ (upload.progressPercent * 100).toFixed(0) }} % \n            </template>\n            <ae-icon v-else class=\"fa fa-check\"></ae-icon>\n        </div>\n    </section>\n\n    <section v-else class=\"_CSS-uploads-result\">\n      <div class=\"_CSS-upload-results__success bp-card bp-card--bordered\"\">\n        <ae-icon class=\"fa fa-check-circle fa-2x\"></ae-icon>\n\n        <div>\n          {{ Aeppic.translate('application:upload:success') }}\n        </div>\n      </div>\n\n      <ae-layout layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\" :param-document=\"params.document\" :param-fields-to-display=\"params.step.fields\" :param-readonly=\"true\"></ae-layout>\n    </section>\n\n    <ae-layout layout-id=\"a7128e93-695c-46c9-b863-f7207fe439d0\" :param-current-step-index=\"params.stepIndex\" :param-settings=\"params.settings\" @next=\"$emit('next')\" @previous=\"$emit('previous')\" :param-disable-next=\"Aeppic.Uploads.isUploading\"></ae-layout>\n  </template> -->\n</div>\n\n","css":"._CSS-container {\n  display: flex;\n  flex-flow: column;\n  align-items: center;\n\n  min-height: 100%;\n\n  padding: var(--bp-page-content-padding);\n}\n\n._CSS-uploads-list {\n  display: flex;\n  flex-flow:column;\n  width: 100%;\n  flex: 1;\n}\n\n._CSS-uploads-result {\n  flex: 1;\n  width: 100%;\n}\n\n._CSS-upload-results__success {\n  display: flex;\n  align-items: center;\n  flex-flow: column;\n\n  margin: var(--ae-space-4) 0 ;\n}\n\n._CSS-upload {\n  width: 100%;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  background: var(--ae-ui-background);\n  padding: var(--ae-space-2);\n}\n\n._CSS-upload--finished {\n  opacity: var(--ae-opacity);\n  color: var(--ae-background-700);\n}","controller":"class Controller {\n  async init() {\n    locals.showUploads = false\n\n    // const fakeFile = await Aeppic.get('914aa149-da30-4942-8334-1b725e7ea499')\n    // locals.fakeUploads = [{ status: 'pending', progressPercent: 0.63, document: fakeFile }]\n    $emit('scroll-to-top')\n  }\n} ","packages":[]},"locks":[],"created":{"at":"2020-12-10T13:06:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2025-01-20T13:31:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1737379892105,"ct":1728472068176,"a_depth":3,"a":["apps","3fbe0efd-713a-457a-a34c-3a12aa19d6bb","999c58bb-af30-4eb9-aece-b07fbdbb080c"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"a8fd5d11-0156-4623-b6a7-1c72addf7d06","v":"eed11f3da1c9c0b4","previous":{"v":"05a3c5fb4f66e207"},"p":"999c58bb-af30-4eb9-aece-b07fbdbb080c","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Bewerbung: Ende","applies":"","template":"<div class=\"flex flex-col gap-4 items-center p-2\">\n  <ae-design name=\"image\" document-id=\"edb9c29e-b796-4dcc-bdfd-4037db29f9f7\" param-height=\"200px\"></ae-design>\n\n  <div class=\"bg-white rounded-md p-4 flex flex-col items-center gap-4\">\n    <section class=\"\">\n      <span>\n      {{ Aeppic.translate('application:end:thanks') }} \n      <strong>\"{{ params.project.data.name }}\"</strong>\n      </span>\n    </section>\n    <span>\n      {{ Aeppic.translate('application:end:greeting-socialmedia') }}\n    </span>\n      <a class=\"ae-link\" href=\"https://www.instagram.com/deebeephunky.int.casting/\" target=\"_blank\">\n        <ae-icon class=\"fab fa-instagram fa-4x\"></ae-icon>\n      </a>\n  </div>\n</div>","css":"","controller":"init() {\n  $emit('scroll-to-top')\n}","packages":[]},"locks":[],"created":{"at":"2020-12-10T13:06:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2025-01-20T14:43:35+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1737384215240,"ct":1728472068177,"a_depth":3,"a":["apps","3fbe0efd-713a-457a-a34c-3a12aa19d6bb","999c58bb-af30-4eb9-aece-b07fbdbb080c"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"164ba64d-b506-4712-bba2-73ba2dc92c30","v":"da5bcd7949ff4707","previous":{"v":"ef3748e6f9909b64"},"p":"999c58bb-af30-4eb9-aece-b07fbdbb080c","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Bewerbung: Form","applies":"","template":"<div class=\"flex flex-col gap-4 items-center\" ref=\"content\">\n  <ae-design name=\"image\" document-id=\"edb9c29e-b796-4dcc-bdfd-4037db29f9f7\" param-height=\"200px\" class=\"_CSS--centered\"></ae-design>\n\n  <!-- NOTE: the auto-save is not used to save but to run a debounced Aeppic.commit -->\n  <ae-form  layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n            :document=\"params.document\" \n            :view=\"{ only: { fields: params.step.fields }}\" \n            style=\"flex: 1;width:100%;xwidth:300px;max-width:100%;\"\n            :auto-save=\"true\"\n            :auto-save-after=\"1000\"\n            @save=\"Aeppic.commit(params.document)\"\n  ></ae-form>\n\n\n  <ae-layout layout-id=\"6093913b-0f0e-40d8-b289-2729e95ac43f\" ref=\"errors\" @valid=\"$emit('next')\" :param-document=\"params.document\" :param-fields=\"params.step.fields\"></ae-layout>\n\n  <ae-layout layout-id=\"a7128e93-695c-46c9-b863-f7207fe439d0\" :param-current-step-index=\"params.stepIndex\" :param-settings=\"params.settings\" @next=\"$refs.errors.$emit('validate')\" @previous=\"$emit('previous')\"></ae-layout>\n\n</div>\n \n ","css":"","controller":"init() {\n  $emit('scroll-to-top')\n}","packages":[]},"locks":[],"created":{"at":"2020-12-10T13:06:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2025-01-20T13:52:30+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1737381150467,"ct":1728472068177,"a_depth":3,"a":["apps","3fbe0efd-713a-457a-a34c-3a12aa19d6bb","999c58bb-af30-4eb9-aece-b07fbdbb080c"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","3fbe0efd-713a-457a-a34c-3a12aa19d6bb","999c58bb-af30-4eb9-aece-b07fbdbb080c"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2020-12-10T13:06:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1728472068177,"data":{"applies":"","controller":"class Controller {\n  init() {\n\n    const progress = ((100 / (params.settings.steps.length - 1)) * params.currentStepIndex + 1).toFixed(2)\n\n    locals.parts = [\n      { label: '', value: params.currentStepIndex + 1, percent: progress, class: 'bg-slate-500' },\n      { label: '', value: params.settings.steps.length - params.currentStepIndex, percent: 100 - progress, class: 'bg-slate-100', },\n    ]\n  }\n\n  get currentStep() {\n    return params.settings.steps[params.currentStepIndex]\n  }\n}","css":"._CSS {\n  width: 100%;\n}","name":"Bewerbung: Fortschritt und Next","packages":[],"template":"<div class=\"w-full flex items-center gap-1 p-2\">\n  <ae-layout\n    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n    param-icon=\"far fa-chevron-circle-left text-xl\"\n    param-title=\"Previous\"\n    @selected=\"$emit('previous')\"\n    :param-disabled=\"params.disablePrevious || controller.currentStep.navigation && controller.currentStep.navigation.disablePrevious\"\n  ></ae-layout>\n\n  <ae-layout\n    layout-id=\"b20de0e2-5660-44fc-aea2-82965627f078\"\n    :param-parts=\"locals.parts\"\n    class=\"w-full\"\n    :param-hide-value=\"true\"\n  ></ae-layout>\n\n  <ae-layout\n    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n    param-icon=\"far fa-chevron-circle-right text-xl\"\n    param-title=\"Next\"\n    @selected=\"$emit('next')\"\n    :param-disabled=\"params.disableNext || controller.currentStep.navigation && controller.currentStep.navigation.disableNext\"\n  ></ae-layout>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"a7128e93-695c-46c9-b863-f7207fe439d0","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-04-21T11:59:45+00:00","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"999c58bb-af30-4eb9-aece-b07fbdbb080c","previous":{"v":"1b7354131643a6ff"},"stamps":[],"t":1776772785970,"v":"3046c532e2576841"},{"a":["apps","3fbe0efd-713a-457a-a34c-3a12aa19d6bb","999c58bb-af30-4eb9-aece-b07fbdbb080c"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2020-12-10T13:06:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1728472068178,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Bewerbung: '009c0da4-718f-43d0-964a-647e30074d94',\n    }\n\n    locals.creating = false\n    locals.applicationForPreload = {}\n\n    $emit('scroll-to-top')\n\n    locals.documentsToPreload = (await Promise.all([\n      Aeppic.new(this.FORMS.Bewerbung, params.applicationFolder),\n      params.project?.data.castingSheetForm?.id && Aeppic.new(params.project.data.castingSheetForm, params.applicationFolder),\n      params.role?.data.castingSheetForm?.id && Aeppic.new(params.role.data.castingSheetForm, params.applicationFolder),\n    ])).filter(Boolean)\n  }\n  async create() {\n    locals.creating = true\n\n    let documentsToCreate = []\n\n    const application = await Aeppic.new(this.FORMS.Bewerbung, params.applicationFolder)\n    documentsToCreate.push(application)\n\n    if (params.project && params.project.id === 'e4ce1061-fdc5-4b4a-97f0-d611feff2c27') {\n      application.data.internalCompanyCasting = true\n      application.data.noIntroductionVideo = true \n    }\n\n    if (params.role?.data.skipCastingSheet) {\n      application.data.noCastingSheet = true\n    } else {\n      if (params.role?.data.castingSheetForm?.id) {\n        const castingSheet = await Aeppic.new(params.role.data.castingSheetForm, application.id, { allowMissingParent: true })\n        documentsToCreate.push(castingSheet)\n        application.addReference('castingSheetDocument', castingSheet)\n      } else if (params.project?.data.castingSheetForm?.id) {\n        const castingSheet = await Aeppic.new(params.project.data.castingSheetForm, application.id, { allowMissingParent: true })\n        documentsToCreate.push(castingSheet)\n        application.addReference('castingSheetDocument', castingSheet)\n      }\n    }\n    \n    if (params.role?.data.additionalFiles?.length) {\n      const additionalFiles = await Aeppic.getAll(params.role.data.additionalFiles)\n\n      additionalFiles.forEach(fileRef => fileRef && application.addReference('additionalFiles', fileRef))\n    } else if (params.project?.data.additionalFiles?.length) {\n      const additionalFiles = await Aeppic.getAll(params.project.data.additionalFiles)\n\n      additionalFiles.forEach(fileRef => fileRef && application.addReference('additionalFiles', fileRef))\n    }\n\n    Aeppic.saveAll(documentsToCreate)\n\n    $emit('document', application.id)\n  }\n}","css":"","name":"Bewerbung: Start","packages":[],"template":"<div class=\"flex flex-col gap-4 items-center p-2\">\n  <ae-layout layout-id=\"7a66c0bd-aaa4-406d-80da-0b0d5a6ee330\" :params=\"{ inline: true }\"></ae-layout>\n\n  <section>\n    <ae-design name=\"image\" :document-id=\"params.imageId || 'edb9c29e-b796-4dcc-bdfd-4037db29f9f7'\" param-height=\"200px\"></ae-design>\n  </section>\n\n  <div class=\"bg-white rounded-md p-4 flex flex-col gap-4\">\n    <section class=\"\">\n      <span v-if=\"params.project\"> {{ Aeppic.translate('application:start:greeting' )}} </span>\n      <span v-else> {{ Aeppic.translate('application:start:not-available' )}} </span>\n    </section>\n\n    <template v-if=\"params.project\">\n      <section class=\"_CSS-section\">\n        <span>\n          {{ Aeppic.translate('application:start:project-intro' )}}\n          <strong>\"{{params.project.data.name}}\"</strong>\n          <template v-if=\"params.role && params.role.data.name\">\n            {{ Aeppic.translate('application:start:project-intro-role' )}}\n            <strong>\"{{ params.role.data.name }}\"</strong>\n          </template>\n        </span>\n      </section>\n\n      <section class=\"flex flex-col items-center\">\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          param-icon=\"\"\n          :param-text=\"Aeppic.translate('application:start:button-apply' )\"\n          :param-disabled=\"locals.creating\"\n          param-classes=\"text-xl\"\n          :param-primary=\"true\"\n          @selected=\"controller.create()\"\n        ></ae-layout>\n      </section>\n    </template>\n  </div>\n</div>\n\n<div style=\"display:none\">\n    <ae-form v-for=\"preload of locals.documentsToPreload\"\n            layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n            :document=\"preload\" \n  ></ae-form>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"9b0fa467-290e-4ed7-81b4-7761c9294db8","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-04-21T11:19:46+00:00","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"999c58bb-af30-4eb9-aece-b07fbdbb080c","previous":{"v":"2bb2ab6e535219df"},"stamps":[],"t":1776770386227,"v":"6e0efca7b2af071a"},{"a":["apps","3fbe0efd-713a-457a-a34c-3a12aa19d6bb","999c58bb-af30-4eb9-aece-b07fbdbb080c"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2020-12-10T13:06:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1728472068178,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Projekt: 'e170bb6c-f326-446d-870a-ada9d9f67230',\n      Bewerbung: '009c0da4-718f-43d0-964a-647e30074d94',\n      Rolle: '8fef472f-9220-484b-99cd-bb80f208f795',\n      Translations: 'b29709d0-8fd5-4da8-8bbc-4f61fb9f82d9',\n    }\n\n    locals.settings = null\n    locals.project = null\n    locals.application = null\n    locals.applicationFolder = null\n    locals.role = null\n    locals.currentStepIndex = 0\n    locals.imageId = 'edb9c29e-b796-4dcc-bdfd-4037db29f9f7'\n\n    const sharedDocument = await Aeppic.get(params.pageDocumentId)\n    const project = await Aeppic.get(sharedDocument.a[sharedDocument.a_forms.findIndex(a_form => a_form === this.FORMS.Projekt)])\n    const applicationFolder = await Aeppic.get(sharedDocument.a[sharedDocument.a_forms.findIndex(a_form => a_form === this.FORMS.Rolle)]) || project\n\n    let settingsDocument = null\n\n    if (project.id === '4374c31e-e2c4-4b72-bd58-fb2793ef7b32') {\n      settingsDocument = await Aeppic.get('61f93e10-f4d4-4bb3-9ba1-60618c89f075')\n      locals.imageId = '1be57427-adff-49ba-a034-60555865056e'\n    } else {\n      settingsDocument = await Aeppic.get('6285c9c3-71ea-4493-8498-ef2f3ab9257d')\n    }\n\n    // if (applicationFolder && applicationFolder.data.allowSkipMedia) {\n    //   settingsDocument = await Aeppic.get('f8b01901-5faf-494e-88a6-146537df0c12')\n    // } else {\n    //   settingsDocument = await Aeppic.get('3963516f-ef0f-40ac-9d74-e37ec80d7573')\n    // }\n\n    if (applicationFolder.f.id === this.FORMS.Rolle) {\n      locals.role = applicationFolder\n    }\n\n    const addFieldToStep = function (settings, id, field) {\n      const step = settings.steps.find(setting => setting.id === id)\n      \n      if (!step) {\n        console.warn(`Step ${id} is not defined. Ignoring field ${field}`)\n        return\n      }\n\n      step.fields.push(field)\n    }\n\n    const setDocumentField = function (settings, field, value) {\n      settings.documentFields[field] = value\n    }\n\n    const addStepAfter = function (settings, id, step) {\n      const index = settings.steps.findIndex(setting => setting.id === id)\n\n      settings.steps.splice(index + 1, 0, step)\n    }\n\n    const settings = JSON.parse(settingsDocument.data.configuration)\n    settings.documentFields = {}\n\n\n    if (applicationFolder) {\n      if (applicationFolder.data.allowSkipMedia) {\n        addFieldToStep(settings, 'photosAndAdditionalFiles', 'noPortraitPhoto')\n        addFieldToStep(settings, 'videos', 'noIntroductionVideo')\n      }\n      if (applicationFolder.data.allowSkipPortraitPhoto) {\n        addFieldToStep(settings, 'photosAndAdditionalFiles', 'noPortraitPhoto')\n      }\n      if (applicationFolder.data.allowSkipIntroductionVideo) {\n        addFieldToStep(settings, 'videos', 'noIntroductionVideo')\n      }\n      if (applicationFolder.data.showLinkRequired) {\n        addFieldToStep(settings, 'personal', 'linkRequired')\n        setDocumentField(settings, 'requestLinkRequired', true)\n      } else if (applicationFolder.data.showLink) {\n        addFieldToStep(settings, 'personal', 'linkOptional')\n        setDocumentField(settings, 'requestLink', true)\n      }\n      if (applicationFolder.data.showInstagramRequired) {\n        addFieldToStep(settings, 'personal', 'instagramRequired')\n        setDocumentField(settings, 'requestInstagramRequired', true)\n      } else if (applicationFolder.data.showInstagram) {\n        addFieldToStep(settings, 'personal', 'instagramOptional')\n        setDocumentField(settings, 'requestInstagram', true)\n      }\n\n      if (locals.role?.data.skipCastingSheet) {\n        //noCastingSheet\n      } else {\n        if (locals.role?.data.castingSheetForm?.id) {\n          addStepAfter(settings, 'personal', {\n            id: 'castingSheet',\n            layoutId: '509505c3-8429-42c2-8239-4309364989f4',\n          })\n        } else if (project.data.castingSheetForm?.id) {\n          addStepAfter(settings, 'personal', {\n            id: 'castingSheet',\n            layoutId: '509505c3-8429-42c2-8239-4309364989f4',\n          })\n        } else {\n          addStepAfter(settings, 'personal', {\n            id: 'castingSheet',\n            layoutId: '2cbceeb0-a168-43b1-9ef7-fc8f55c730ee',\n            fields: [],\n          })\n          addFieldToStep(settings, 'castingSheet', 'castingSheetFile')\n        }\n      }\n    }\n\n    // console.log({ applicationFolder, settings })\n\n    // load custom translations\n\n    const translations = await Aeppic.find(`a:${project.id} f.id:${this.FORMS.Translations}`)\n\n    for (const translation of translations) {\n      console.log(`Adding translations ${translation.id}`)\n      Aeppic.Translator.addTranslations(translation.data.translations)\n    }\n\n    locals.settings = settings\n    locals.project = project\n    locals.applicationFolder = applicationFolder\n  }\n\n  async editDocument(documentId) {\n    locals.application = await Aeppic.edit(documentId)\n\n    for (const field in locals.settings.documentFields) {\n      locals.application.data[field] = locals.settings.documentFields[field]\n    }\n\n    await this.next()\n  }\n\n  async next() {\n    const newIndex = locals.currentStepIndex + 1\n\n    const isLastPage = newIndex === locals.settings.steps.length - 1\n    if (isLastPage) {\n      locals.application.data.done = true \n      locals.application.data.doneDate = Aeppic.DateTime.local().toISO()\n    }\n\n    Aeppic.save(locals.application)\n\n    locals.currentStepIndex = newIndex\n  }\n\n  async scrollToTop() {\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $refs.content.$el.scrollTo(0,0)\n  }\n}","css":"","name":"Bewerbung: Steps Switcher","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"1e6bd8085315e112"}],"template":"<div  class=\"w-full max-w-xl mx-auto min-h-[500px]\" \n      @ae-drill-into.prevent.stop\n      @ae-will-navigate.prevent.stop\n>\n  <div class=\"h-full flex flex-col overflow-auto\" v-if=\"locals.settings\">\n    \n    <ae-layout  :layout-id=\"locals.settings.steps[locals.currentStepIndex].layoutId || '164ba64d-b506-4712-bba2-73ba2dc92c30'\"\n                :param-document=\"locals.application\"\n                :param-settings=\"locals.settings\"\n                :param-project=\"locals.project\"\n                :param-application-folder=\"locals.applicationFolder\"\n                :param-role=\"locals.role\"\n                :param-image-id=\"locals.imageId\"\n                :param-step-index=\"locals.currentStepIndex\"\n                :param-step=\"locals.settings.steps[locals.currentStepIndex]\"\n                @next=\"controller.next()\"\n                @previous=\"locals.currentStepIndex -= 1\"\n                @document=\"controller.editDocument($event)\"\n                :key=\"locals.currentStepIndex\"\n                class=\"w-full h-full\"\n                ref=\"content\"\n                @scroll-to-top=\"controller.scrollToTop()\"\n    ></ae-layout>\n\n  </div>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"1c2649f8-6406-486e-9f17-fee4b30c1204","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-04-21T11:20:00+00:00","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"999c58bb-af30-4eb9-aece-b07fbdbb080c","previous":{"v":"a211f33ce64a12ab"},"stamps":[],"t":1776770400139,"v":"bd66b39088adb6a5"},{"a":["apps","3fbe0efd-713a-457a-a34c-3a12aa19d6bb","999c58bb-af30-4eb9-aece-b07fbdbb080c"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2021-01-14T13:45:23+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1728472068178,"data":{"applies":"","controller":"async init() {\n  $emit('scroll-to-top')\n  locals.form = null\n\n  locals.form = await Aeppic.getFormForDocument(params.document)\n}\n\nget hasNoFiles() {\n  if (!params.document) {\n    return true\n  }\n\n  const hasFiles = (\n    !params.document.data.noPortraitPhoto ||\n    params.document.data.photos.length ||\n    !params.document.data.noIntroductionVideo ||\n    params.document.data.videos.length ||\n    !params.document.data.noCastingSheet\n  )\n\n  return !hasFiles\n}","css":"._CSS-container {\n  display: flex;\n  flex-flow: column;\n  align-items: center;\n\n  min-height: 100%;\n  padding: var(--bp-page-content-padding);\n}\n\n._CSS--centered {\n  align-self: center;\n}\n\n\n._CSS-files {\n  display: flex;\n  flex-flow: column;\n\n  align-items: center;\n}\n\n._CSS-heading {\n  margin: var(--ae-space-5) 0 var(--ae-space-1);\n}\n\n._CSS-intro {\n  font-size: var(--ae-font-size-7);\n  font-weight: bold;\n  margin: var(--ae-space-5) 0 var(--ae-space-4);\n}","name":"Bewerbung: Übersicht eingegebene Daten","packages":[],"template":"<div class=\"_CSS-container\" ref=\"content\">\n  <ae-design name=\"image\" document-id=\"edb9c29e-b796-4dcc-bdfd-4037db29f9f7\" param-height=\"200px\" class=\"_CSS--centered\"></ae-design>\n\n  <div class=\"_CSS-files\">\n    <div class=\"_CSS-intro\" v-if=\"!controller.hasNoFiles\">\n      {{ Aeppic.translate('application:overview:files-to-upload') }}\n      <span style=\"font-size: var(--ae-font-size-3);\">{{ Aeppic.translate('application:overview:files-are-uploaded') }}</span>\n    </div>\n    <div class=\"_CSS-intro\" v-else>\n      {{ Aeppic.translate('application:overview:no-files-to-upload') }}\n    </div>\n\n    <template v-if=\"!params.document.data.noPortraitPhoto\">\n      <div class=\"_CSS-heading\" v-if=\"locals.form\">\n        {{ Aeppic.translate(locals.form.getPlaceholder('portraitPhoto').label) }}\n      </div>\n      <div class=\"bp-card bp-card--bordered\">\n        <ae-design  name=\"rd:thumbnail\"\n           :document=\"params.document.data.portraitPhoto\"\n                    :params=\"{  readonly: true }\"\n        ></ae-design>\n      </div>\n    </template>\n\n    <template v-if=\"params.document.data.photos.length\">\n      <div class=\"_CSS-heading\" v-if=\"locals.form\">\n        {{ Aeppic.translate(locals.form.getPlaceholder('photos').label) }}\n      </div>\n      <ae-list  list-id=\"0069cfac-81c9-4fa8-ba34-f6f5f0e7bf7b\"\n                :documents=\"params.document.data.photos\"\n                :params=\"{ designName: 'rd:thumbnail',  readonly: true }\"\n      ></ae-list>\n    </template> \n\n    <template v-if=\"!params.document.data.noIntroductionVideo\">\n      <div class=\"_CSS-heading\" v-if=\"locals.form\">\n        {{ Aeppic.translate(locals.form.getPlaceholder('introductionVideo').label) }}\n      </div>\n      <ae-list  list-id=\"0069cfac-81c9-4fa8-ba34-f6f5f0e7bf7b\"\n                :documents=\"params.document.data.introductionVideo\"\n                :params=\"{ designName: 'rd:thumbnail',  readonly: true }\"\n      ></ae-list> \n    </template> \n\n    <template v-if=\"params.document.data.videos.length\">\n      <div class=\"_CSS-heading\" v-if=\"locals.form\">\n        {{ Aeppic.translate(locals.form.getPlaceholder('videos').label) }}\n      </div>\n      <ae-list  list-id=\"0069cfac-81c9-4fa8-ba34-f6f5f0e7bf7b\"\n                :documents=\"params.document.data.videos\"\n                :params=\"{ designName: 'rd:thumbnail',  readonly: true }\"\n      ></ae-list> \n    </template>\n\n    <template v-if=\"!params.document.data.noCastingSheet && params.document.data.castingSheetFile.length\">\n      <div class=\"_CSS-heading\" v-if=\"locals.form\">\n        {{ Aeppic.translate(locals.form.getPlaceholder('castingSheet').label) }}\n      </div>\n      <ae-list  list-id=\"0069cfac-81c9-4fa8-ba34-f6f5f0e7bf7b\"\n                :documents=\"[...params.document.data.castingSheetFile].filter(Boolean)\"\n                :params=\"{ designName: 'rd:thumbnail',  readonly: true }\" \n      ></ae-list> \n    </template>\n\n    <template v-if=\"params.document.data.additionalFiles.length\">\n      <div class=\"_CSS-heading\" v-if=\"locals.form\">\n        {{ Aeppic.translate(locals.form.getPlaceholder('additionalFilesUpload').label) }}\n      </div>\n      <ae-list  list-id=\"0069cfac-81c9-4fa8-ba34-f6f5f0e7bf7b\"\n                :documents=\"params.document.data.additionalFilesUpload\"\n                :params=\"{ designName: 'rd:thumbnail',  readonly: true }\"\n      ></ae-list> \n    </template>\n  </div>\n\n\n<!-- \n  <ae-layout layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\" :param-document=\"params.document\" :param-fields-to-display=\"params.step.fields\" style=\"flex: 1;width:300px;;max-width:100%;\"></ae-layout>\n\n  <ae-layout layout-id=\"6093913b-0f0e-40d8-b289-2729e95ac43f\" ref=\"errors\" @valid=\"$emit('next')\" :param-document=\"params.document\" :param-fields=\"params.step.fields\" class=\"_CSS--centered\"></ae-layout> -->\n\n  <ae-layout layout-id=\"a7128e93-695c-46c9-b863-f7207fe439d0\"\n            :param-current-step-index=\"params.stepIndex\"\n            :param-settings=\"params.settings\"\n            @next=\"$emit('next')\"\n            @previous=\"$emit('previous')\"\n            class=\"_CSS--centered\"\n  ></ae-layout>\n</div>\n \n "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"2fc669b5-4eea-4ef5-a3b4-a11bdc23001e","inheritedLocks":[null,null,null,null],"locks":[],"meta":{},"modified":{"at":"2026-04-21T11:55:43+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"999c58bb-af30-4eb9-aece-b07fbdbb080c","previous":{"v":"c206f7defa47bb2d"},"stamps":[],"t":1776772543253,"v":"8c28bcedb85feca5"},{"a":["apps","3fbe0efd-713a-457a-a34c-3a12aa19d6bb","999c58bb-af30-4eb9-aece-b07fbdbb080c"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2020-12-10T13:06:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1728472068178,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.errors = null\n    locals.genericError = ''\n    locals.form = null\n\n    $on('validate', () => this.validate())\n  }\n\n  async validate() {\n    locals.genericError = ''\n\n    if (await this.isDisconnected()) {\n      locals.genericError = 'connection-status:disconnected'\n      $emit('invalid')\n      return\n    }\n\n    const form = await Aeppic.getFormForDocument(params.document)\n    const errors = form.validateDocumentData(params.document.data)\n\n    if (!errors) {\n      $emit('valid')\n      return\n    }\n    locals.form = form\n\n    const fieldConditions = form.evaluateConditions(params.document.data)\n\n    const applicableErrors = {}\n    let hasErrors = false\n\n    for (const fieldName of params.fields) {\n      if (errors[fieldName]) {\n        \n        const placeholder = form.getPlaceholder(fieldName)\n\n        if (this._placeholderIs(placeholder, fieldConditions, 'hidden')) {\n          continue\n        }\n        if (this._placeholderIs(placeholder, fieldConditions, 'readonly')) {\n          continue\n        }\n\n        hasErrors = true\n        applicableErrors[fieldName] = errors[fieldName]\n      }\n    }\n\n    if (await this.isDisconnected()) {\n      locals.genericError = 'connection-status:disconnected'\n      $emit('invalid')\n      return\n    }\n\n    if (hasErrors) {\n      locals.errors = applicableErrors\n      $emit('invalid')\n    } else {\n      $emit('valid')\n    }\n  }\n\n  async isDisconnected() {\n    // FIXME: Aeppic.ConnectionStatus is not updating quick enough\n    try {\n      const response = await Aeppic.fetch('/api')\n      return response.ok === false || response.error === true\n    } catch (error) {\n      return true\n    }\n  }\n\n  _placeholderIs(placeholder, fieldConditions, nameOfStyle) {\n    const theStyle = placeholder.style[nameOfStyle]\n\n    if (!theStyle) {\n      return false\n    }\n\n    if (theStyle.condition) {\n      return fieldConditions[theStyle.condition.id]\n    }\n\n    return theStyle.value === 'true'\n  }\n} ","css":"._CSS-errors {\n  padding: var(--ae-space-3);\n  border: var(--ae-border-width) solid var(--ae-accent-red-900);\n  border-radius: var(--ae-border-radius);\n  background: var(--ae-accent-red-100);\n  color: var(--ae-accent-red-900);\n}\n\n._CSS-errors__label {\n  margin-bottom: var(--ae-space-2);\n  font-weight: bold;\n}","name":"Bewerbung: Validierung","packages":[],"template":"<div v-if=\"locals.errors\" class=\"_CSS-errors\">\n  <div class=\"_CSS-errors__label\">\n    {{ Aeppic.translate('application:validation:error-prompt') }}\n  </div>\n\n  <div class=\"_CSS-error\" v-for=\"(errors, fieldName) of locals.errors\">\n    <div class=\"_CSS-error__message\" v-for=\"message of errors\">\n      {{ Aeppic.translate( locals.form.getPlaceholder(fieldName).label ) }}\n      {{ Aeppic.translate('error:is-required') }}\n      <!-- FIXME: full error message translation -->\n    </div>\n  </div>\n</div>\n\n<div v-if=\"locals.genericError\" class=\"_CSS-errors\">\n  <div class=\"_CSS-errors__label\">\n    {{ Aeppic.translate('application:validation:error-prompt') }}\n  </div>\n\n  <div class=\"_CSS-error\">\n    <div class=\"_CSS-error__message\" >\n      {{ Aeppic.translate(locals.genericError) }}\n    </div>\n  </div>\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"6093913b-0f0e-40d8-b289-2729e95ac43f","inheritedLocks":[null,null,null,null],"locks":[],"meta":{},"modified":{"at":"2026-04-23T14:13:29+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"999c58bb-af30-4eb9-aece-b07fbdbb080c","previous":{"v":"5456c26b899fe588"},"stamps":[],"t":1776953609884,"v":"1c462aa6f5438885"},{"id":"4a0f8d91-6a8c-44a3-9c95-26c45bb1d54a","v":"3c1cf7af96abaa06","previous":{"v":"6d1a4d5d5a050e56"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"eb35b87870a33035","text":"Layout"},"data":{"name":"Bizpin Application Layout","applies":"","template":"<!-- {{params.pageDocument}}\n{{params.pageDocumentId}} -->\n<!-- {{params.queryParams}} -->\n<section v-if=\"params.pageDocument\" class=\"_CSS-container\"\n        @ae-drill-into.capture=\"controller.drillInto($event)\" \n>\n  <ae-design\n  v-if=\"!controller.showPrintLayout && Aeppic.Device === 'Desktop'\"\n  class=\"_CSS-navbar bp-navigation-panel ae-light\"\n  :document-id=\"params.companyId\"\n  name=\"navigation-vertical\"\n  :param-page-document=\"params.pageDocument\" \n  ></ae-design>\n\n  <section class=\"_CSS-main\">\n    <ae-layout\n      class=\"_CSS-header bp-page__header\"\n      :class=\"{ '_CSS-top-application-bar-overlay': params.topbarAsOverlay }\"\n      layout-id=\"abaf389e-81ae-4a56-870c-f5c28fe7579f\"\n      @toggle-developer=\"$emit('toggle-developer', $event)\"\n      :param-page-document-id=\"params.pageDocument.id\" \n      :param-show-print-layout=\"controller.showPrintLayout\"\n      :param-company-id=\"params.companyId\"\n      :param-overlay=\"params.topbarAsOverlay\"\n    ></ae-layout>\n    <ae-design\n      v-if=\"!controller.showPrintLayout && !params.hidePageToolbar\"\n      class=\"_CSS-page-toolbar bp-page__toolbar\"\n      :document=\"params.pageDocument\"\n      name=\"page-toolbar\"\n      @toolbar=\"controller.dispatchEventChildren('body', 'toolbar', $event)\"\n      :param-page-application-id=\"params.pageApplicationId\"\n      :param-document-changed-bus=\"params.documentChangedBus\"\n      :param-readonly=\"params.readonly\"\n      ></ae-design>\n\n    <div class=\"_CSS-page bp-page__body\" ref=\"mainPage\">\n      <!-- <div class=\"_CSS-loader\" :class=\"{ '_CSS-loader--hidden': !locals.spinner }\">\n        <div class=\"_CSS-loader__content\">\n        <ae-icon class=\"fa fa-spinner-third fa-5x fa-spin\"></ae-icon>\n        </div>\n      </div> -->\n\n      <ae-design  class=\"ae-stacking-context _CSS-page-body\"\n                  :document=\"params.pageDocument\"\n                  name=\"page\"\n                  ref=\"body\"\n                  :param-readonly=\"params.readonly\"\n                  :param-query-params=\"params.queryParams\"\n                  :param-page-application-id=\"params.pageApplicationId\"\n                  @show-selection-handler=\"controller.showSelectionHandler()\"\n                  @scroll.native=\"$emit('scroll', $event)\"\n                  :param-company-id=\"params.companyId\"\n                  @scroll-to=\"controller.scrollTo($event)\"\n                  :param-document-changed-bus=\"params.documentChangedBus\"\n      ></ae-design>\n    </div>\n\n  </section>\n\n    <ae-layout  layout-id=\"564e7028-6b98-49b8-ac43-50f7873930a1\"\n            :class=\"{ '_CSS-drill-into-container': locals.showDialogActive }\"\n            @activate=\"locals.showDialogActive = true\"\n            @deactive=\"locals.showDialogActive = false\"\n            ref=\"showDocumentDialog\"\n            :param-document-changed-bus=\"params.documentChangedBus\"\n  ></ae-layout>\n</section>\n  \n  <ae-layout  layout-id=\"e5accfd9-8d33-46e5-a4d7-69a91b5f8543\"\n          :param-document-changed-bus=\"params.documentChangedBus\"\n          v-if=\"params.documentChangedBus\"\n  ></ae-layout>\n  \n  <ae-design name=\"title\" document-id=\"root\" style=\"display:none;\" ref=\"hiddenDomElement\"></ae-design>\n\n\n","css":"._CSS {\n  overflow: hidden;\n\n  color-scheme: light; /* disable useragent sytling because of darkmode  */\n}\n\n._CSS-loader {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 10;\n\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  opacity: 1;\n\n  transition: opacity .2s 1s ease-in;\n}\n\n._CSS-loader:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: var(--ae-ui-background);\n\n  pointer-events: none;\n}\n\n._CSS-loader._CSS-loader--hidden {\n  opacity: 0;\n  pointer-events: none;\n}\n\n\n\n\n\n._CSS-main {\n  min-width: 0;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n  flex: 1;\n  align-items: stretch;\n  height: 100%;\n  width: 100%;\n  line-height: 1.4;\n  background: var(--ae-background-100);\n  color: var(--ae-background-900);\n}\n\n@media print {\n  ._CSS-main {\n    background: white !important;\n  }\n}\n \n._CSS-app-panel {\n  position:relative;\n}\n\n._CSS-container {\n  position: relative;\n  display: flex;\n  flex-direction: row;\n  width:100%;\n  height:100%;\n  flex:1;\n  overflow: hidden;\n}\n\n._CSS-page {\n  flex:1;\n\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: hidden;\n\n}\n\n\n._CSS-page-body {\n  min-height: 0;\n  min-width: 0;\n\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n\n  /* display: flex; */\n  /* flex-flow: column;  */\n  height: 100%;\n  width: 100%;\n}\n\n._CSS-navbar {\n  height: 100%;\n}\n\n\n._CSS-top-application-bar-overlay {\n  position: absolute;\n  background: transparent !important;\n  left: 0;\n  right: 0;\n  z-index: 1;\n}\n\n\n._CSS-drill-into-container {\n  position: absolute;\n  width: 100%;\n  height:100%;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n\n  /* page-toolbar has z-index of 1 */\n  z-index: 1;\n\n  /* ae-dialog has z-index of 9998 */\n  /* z-index: 9999; */\n}","controller":"class Controller {\n  async init() {\n    locals.showDialogActive = false\n\n    if (this.showPrintLayout) {\n      await Aeppic.nextRenderPass()\n      await Aeppic.nextRenderPass()\n\n      // Aeppic.setTimeout(() => {\n      //   packages && packages.window && packages.window.print()\n      // }, 5_000)\n    }\n\n    this._setupNavigationListener()\n  }\n\n  destroy() {\n    this._teardownNavigationListener()\n  } \n\n\n  _setupNavigationListener() {\n    this.listenerAeDrillInto = (...args) => this.drillInto(...args)\n\n    packages.window.addEventListener('ae-drill-into', this.listenerAeDrillInto)\n  }\n\n  _teardownNavigationListener() {\n    packages.window.removeEventListener('ae-drill-into', this.listenerAeDrillInto)\n  }\n\n  get showPrintLayout() {\n    return params.queryParams && params.queryParams && 'print' in params.queryParams\n  }\n\n\n  dispatchEventChildren(refName, eventName, eventValue) { \n    if (!$refs[refName] || !$refs[refName].$el || !$refs[refName].$el.children) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n\n  scrollTo(scrollToOptions) {\n    if (!scrollToOptions) {\n      return\n    }\n\n    if (typeof $refs.body.$el.scrollTo !== 'function') {\n      return\n    }\n\n    // FIXME: don't do this! \n    $refs.body.$el.scrollTo(scrollToOptions)\n  }\n\n\n  async drillInto(event) {\n    event.stopPropagation && event.stopPropagation()\n    event.preventDefault && event.preventDefault()\n\n    const document = await Aeppic.get(event.detail.targetDocument)\n\n    const isStructuralDocument = document.a_depth <= 1 || document.f.id === 'repository-folder-form' || document.f.id === 'folder'\n    const preferDialog = event.detail.mode === 'dialog'\n\n    if (!preferDialog && isStructuralDocument) {\n      this._navigateTo(document)\n      return\n    }\n\n    const formDocument = await Aeppic.get(document.f.id)\n    const applicationFormIndex = formDocument.a_forms.findIndex(a_form => a_form === 'application-form')\n    const application = await Aeppic.get(formDocument.a[applicationFormIndex])\n\n    let showInDialog = preferDialog\n\n    if (!showInDialog && application && application.f.id === 'application-form' && 'dialogForms' in application.data) {\n      showInDialog = !!application.data.dialogForms.find(ref => ref.id === formDocument.id)\n    }\n\n    if (showInDialog) {\n      const drillEventWithActualDocument = { ...event.detail, ... { targetDocument: document } }\n\n      $refs.showDocumentDialog.$emit('show', drillEventWithActualDocument)\n      return\n    }\n\n    this._navigateTo(document)\n  }\n\n  _navigateTo(document) {\n    Aeppic.navigateTo(document)\n  }\n}","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"d4ce6dec568c3dc1","text":"Window"}]},"locks":[],"created":{"at":"2018-01-24T16:16:16+01:00","by":"","from":"","client":"server"},"modified":{"at":"2023-10-18T08:23:58+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1697617438972,"ct":1516806976770,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2018-12-06T10:37:52+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1675081346320,"data":{"applies":" ","controller":"class Controller {\n  async init() {\n    console.log('INIT-bizpin-root-layout')\n\n    this.APPLICATION_LAYOUT_ID = '6670fc35-7bbd-40f5-bea7-6c068d323155'\n    this.LOGIN_LAYOUT_ID = '0cf9d513-88c6-406f-bb73-dcdfe544e85d'\n    this.PASSWORD_RESET_ROOT_LAYOUT_ID = '242a2262-352e-4df1-a792-253ce8b11f22'\n    this.PASSWORD_RESET_LAYOUT_ID = 'ea5a8b47-307a-4c0e-aa8e-068334e463ff' // old: '5cc2dfa4-9dbd-4b7a-a624-9b137eb22093'\n    this.OLD_PASSWORD_RESET_LAYOUT_ID = '5cc2dfa4-9dbd-4b7a-a624-9b137eb22093'\n    this.NO_COMPANY_LAYOUT_ID = 'ea6a9313-0978-4ebe-9b65-546d65f5ba68'\n    this.FORMS = {\n      Ping: '42cf6e7a-e304-49a6-86e1-c94d84f1d0d9',\n      Kommentar: 'cf155969-ede1-43a4-9b10-3a697b19db91',\n    }\n    locals.bizpinLegacyLayoutId = this.APPLICATION_LAYOUT_ID\n\n    locals.bizpinStylesheetVersion = ''\n\n\n\n    locals.devMode = false\n    locals.newDeveloper = true\n    locals.sidebarOverride = false\n    locals.showSidebar = false\n    locals.themeOld = 'ae-light' \n    locals.theme = { darkMode: false, dark: '', light: '' }\n\n    locals.noNavigation = params.noNavigation ?? false\n    locals.loading = true\n\n    this.FORMS_CACHE = new Map()\n\n    this._onScrollHandlerProcessing = false\n    this.addToRecentsAction = null\n    this.listenersToLayoutRefs = {}\n\n    locals.root = null\n    locals.additionalLayoutListeners = {}\n\n    locals.navbarOverride = false\n    locals.showNavbar = false\n    locals.showTitle = false\n    // locals.drillActive = false\n    locals.reloadNoficationTriggered = false\n    locals.showDialogActive = false\n  \n    locals.pageDocumentForm = null\n    locals.topbarAsOverlay = false\n    locals.pageDocument = null\n    locals.canEditPageDocument = false\n    locals.pageInfo = { document: null, canEditPageDocument: false, pageApplicationId: null }\n    locals.pageDocumentIsPrototype = false\n\n    locals.companyIdOfAccount = ''\n\n    locals.documentChangedBus = new Vue({\n      data: function() {\n        return {\n          documentChanged: false,\n        }\n      },\n      methods: {\n        changed() {\n          console.debug('.changed')\n\n          if (this.documentChanged) {\n            console.debug('Already editing document')\n          }\n\n          this.documentChanged = true\n        },\n        reset() {\n          console.debug('.reset')\n          this.documentChanged = false\n\n          // this.$emit('reset')\n        }\n      }\n    })\n    \n    locals.hideDevbar = await Aeppic.Preferences.getSetting('aeppic:developer:hideDevbarInPreview') ?? true\n\n\n    this.loadOrUnloadPrintStylesheet = () => {\n      if (locals.layoutId !== this.LOGIN_LAYOUT_ID && this.showPrintLayout) {\n        console.log('loading print stylesheet')\n        Aeppic.loadStylesheet('84f5c137-b17d-42ad-bb4f-2f4a8319ce80')\n      } else {\n        console.log('removing print stylesheet')\n        Aeppic.unloadStylesheet('84f5c137-b17d-42ad-bb4f-2f4a8319ce80')\n      }\n    }\n\n    this.refreshLogin = async () => {\n      console.log('refreshing login')\n      if (!Aeppic.LocalStorage.getValue('redesign-allow-darkmode')) {\n        // force light mode\n        Aeppic.loadStylesheet('91bb8b92-51d5-441f-be02-dec27ab3429d')\n      }\n\n      if (this.showPrintLayout && this.printLayoutId) {\n        locals.layoutId = this.printLayoutId\n      } else if (params.layoutId === this.PASSWORD_RESET_ROOT_LAYOUT_ID) {\n        locals.layoutId = this.PASSWORD_RESET_LAYOUT_ID\n      } else if (Aeppic.Auth.loggedIn || Aeppic.Auth.groupAccountId) {\n        await this.refreshCompanyIdOfAccount()\n\n        if (params.layoutId) {\n          locals.layoutId = params.layoutId\n        } else if (!locals.companyIdOfAccount) {\n          locals.layoutId = this.NO_COMPANY_LAYOUT_ID\n        } else {\n          locals.layoutId = this.APPLICATION_LAYOUT_ID\n        }\n      } else {\n        locals.layoutId = this.LOGIN_LAYOUT_ID\n      }\n\n      if (locals.devMode) {\n        // locals.bizpinStylesheetVersion = 'developer'\n        locals.bizpinStylesheetVersion = 'bizpin_1x'\n      } else {\n        locals.bizpinStylesheetVersion = 'bizpin_2x'\n\n        if (Aeppic.LocalStorage.getValue('redesign-allow-darkmode')) {\n          locals.bizpinStylesheetVersion = `${locals.bizpinStylesheetVersion} bizpin_2x-darkmode dark` \n        }\n      }\n\n      this.loadOrUnloadPrintStylesheet()\n\n      await this._announceNewPageDocumentId(\n        locals.layoutId === this.APPLICATION_LAYOUT_ID && !params.pageDocumentId\n          ? locals.companyIdOfAccount\n          : params.pageDocumentId\n      )\n\n      // FIXME: reload needed to display route layout immediatly and not only after manual reload\n      // // Navigate to /login if login layout is detected. This will lead to the System /login route to be evaluated\n      // if (locals.layoutId === this.LOGIN_LAYOUT_ID) {\n      //   Aeppic.navigateTo('/login')\n      //   Aeppic.reload()\n      // }\n    }\n\n    this.refreshLogin()\n\n    Aeppic.on('login', this.refreshLogin)\n    Aeppic.on('logout', this.refreshLogin)\n\n    watchParam('params', () => this.loadOrUnloadPrintStylesheet(), { immediate: true })\n\n    this._setupKeydownListener()\n    if (this.tailwindSupported) {\n      this._configureTailwind()\n    }\n\n    this._setupNavigationListener()\n\n    watchParam('pageDocumentId', (docId) => this._announceNewPageDocumentId(docId))\n \n    await this.refreshCompanyIdOfAccount()\n    locals.root = await Aeppic.get('root')\n\n    await this.refreshPageFormInfo(params.pageDocumentId)\n    await this._announceNewPageDocumentId(params.pageDocumentId)\n\n    this._setupReloadNotification()\n\n    await this._initializeRecents()\n\n    locals.loading = false\n  }\n\n\n  async mounted() {\n    let available = []\n    try {\n      available = (await (await fetch('/themes'))?.json())?.themes  ?? []\n    } catch (err) {\n      console.error('Could not load themes')\n    }\n    \n    // const defaultThemeName = await Aeppic.resolveToField?.('root', 'data.defaultTheme -> data.name')\n    locals.theme = SharedContext.set('ae:theme', {\n      id: Aeppic.LocalStorage.getValue('theme:id') || 'Blue',\n      contrast: Aeppic.LocalStorage.getValue('theme:contrast') || 'normal',\n      darkMode: Aeppic.LocalStorage.getValue('darkMode') || (packages.window.matchMedia?.('(prefers-color-scheme: dark)')?.matches ?? false),\n      light: Aeppic.LocalStorage.getValue('theme:light') ?? 'ae-theme-v4-light',\n      dark:  Aeppic.LocalStorage.getValue('theme:dark') ?? 'ae-theme-v4-dark',      \n      available\n    })\n\n    // Note: commented out until we make the switch to the redesign\n    //await Aeppic.loadStylesheetFromUrl(`/themes/${locals.theme.id}.css`).catch(() => console.warn(`Failed to load theme ${locals.theme.id}`))\n\n    SharedContext.watch('ae:theme', async () => {\n      Aeppic.LocalStorage.setValue('darkMode', locals.theme.darkMode) \n      Aeppic.LocalStorage.setValue('theme:id', locals.theme.id)\n      // Note: commented out until we make the switch to the redesign\n      await Aeppic.loadStylesheetFromUrl(`/themes/${locals.theme.id}.css`)\n\n      const theme = available.find(t => t.id === locals.theme.id)\n\n      const contrastVariants  = theme.variants.filter(v => v.contrast == locals.theme.contrast)\n\n      const lightVariant = contrastVariants.find(v => v.mode == 'light') \n      const darkVariant = contrastVariants.find(v => v.mode == 'dark') \n    \n      if (locals.theme.light !== lightVariant?.selector) {\n        Aeppic.LocalStorage.setValue('theme:light', lightVariant.selector)\n        locals.theme.light = lightVariant.selector\n      }\n      \n      if (locals.theme.dark !== darkVariant?.selector) {\n        Aeppic.LocalStorage.setValue('theme:dark', darkVariant.selector)\n        locals.theme.dark = darkVariant.selector\n      }\n\n    })\n  }\n\n\n  disableNavigationHandlers() {\n    this.disableNavigationHandling = true\n  }\n\n  async refreshCompanyIdOfAccount() {\n    const COMPANY_FORM = 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df'\n    const homePage = await Aeppic.get(Aeppic.HomePage)\n\n    if (homePage && homePage.id !== 'root') {\n      if (homePage.f.id === COMPANY_FORM) {\n        locals.companyIdOfAccount = homePage.id\n      } else {\n        if (homePage.a_forms !== null) {\n          const companyAncestorIndex = homePage.a_forms.findIndex(formId => formId === COMPANY_FORM)\n          locals.companyIdOfAccount = homePage.a[companyAncestorIndex]\n        }\n      }\n    } else if (Aeppic.Account && Aeppic.Account.data.isAdmin) {\n      const fallbackCompany = await Aeppic.findOne(`p:root f.id:${COMPANY_FORM}`)\n      locals.companyIdOfAccount = fallbackCompany && fallbackCompany.id\n    }\n  }\n\n  get tailwindSupported() {\n    return (typeof tailwind !== 'unknown')\n  }\n\n  _configureTailwind() {\n    tailwind.config = {\n      darkMode: 'class',\n      theme: {\n        extend: {\n          colors: {\n            'action': '#929eb2',\n            'accent': '#63748e',\n            'theme': { /* copy of default slate */\n              50: '#f8fafc',\n              100: '#f1f5f9',\n              200: '#e2e8f0',\n              300: '#cbd5e1',\n              400: '#94a3b8',\n              500: '#64748b',\n              600: '#475569',\n              700: '#334155',\n              800: '#1e293b',\n              900: '#0f172a',\n            },\n            'error': '#f43f5e',\n            'success': '#4ade80',\n          },\n          textColor: {\n            'action': '#ffffff'\n          }\n        },\n      },\n    }\n  }\n\n  destroy() {\n    Aeppic.off('login', this.refreshLogin)\n    Aeppic.off('logout', this.refreshLogin)\n\n    this._teardownKeydownListener()\n    // this._teardownNavigationListener()\n  }\n\n  _setupKeydownListener() {\n    if (packages.window) {\n      this._keydownHandler = (event) => {\n        if (event.ctrlKey && event.key) {\n          let handled = true\n \n          if (event.key === '2') {\n            this.toggleDeveloperMode()\n          } else if (event.key === '3') {\n            this.toggleDeveloperMode({oldMode:true})\n          } else if (event.key === '4') {\n            this.toggleDeveloperMode({client:true})\n          } else if (event.key === '5') {\n            this.toggleDeveloperMode({server:true})\n          } else if (event.key === 'p') {\n            this.openDeveloperSearch()\n          } else {\n            handled = false\n          }\n\n          // console.log({ key: event.key, handled })\n\n          if (handled) {\n            event.preventDefault()\n            event.stopPropagation()\n          }\n        }\n      }\n\n      packages.window.addEventListener('keydown', this._keydownHandler)\n    }\n  }\n\n  _setupNavigationListener() {\n    this.listenerAeWillNavigate = (...args) => this.onAeWillNavigate(...args)\n    this.listenerAeDrillInto = (...args) => this.drillInto(...args)\n\n    packages.window.addEventListener('ae-will-navigate', this.listenerAeWillNavigate)\n    packages.window.addEventListener('ae-drill-into', this.listenerAeDrillInto)\n  }\n\n  _teardownNavigationListener() {\n    packages.window.removeEventListener('ae-will-navigate', this.listenerAeWillNavigate)\n    packages.window.removeEventListener('ae-drill-into', this.listenerAeDrillInto)\n  }\n\n  _teardownKeydownListener() {\n    if (packages.window) {\n      packages.window.removeEventListener('keydown', this._keydownHandler)\n    } \n  }\n\n  toggleDeveloperMode(options) {\n    if (!Aeppic.Account || (!Aeppic.Account.data.allowDevMode && !Aeppic.Account.data.isAdmin)) {\n      return\n    }\n\n    if(options && options.client) {\n      if(Aeppic.Developer.remoteDeveloperMode === 'Client') {\n        this.endRemoteDeveloper()\n        return\n      }\n      console.log('starting remote developer client session...')\n      Aeppic.Developer.enableRemoteDeveloper(Aeppic.Account.id, 'Client')\n      locals.devMode = false\n    } else if(options && options.server) {\n        this.endRemoteDeveloper()\n      // if(Aeppic.Developer.remoteDeveloperMode === 'Server') {\n      //   this.endRemoteDeveloper()\n      //   Aeppic.navigateHome()\n      //   return\n      // }\n      console.log('starting remote developer server session')\n      Aeppic.Developer.enableRemoteDeveloper(Aeppic.Account.id, 'Server')\n      locals.devMode = true\n      // Aeppic.navigateTo('0b3240e3-b87f-4fe5-8851-6968ef35cf53')\n\n      this.refreshLogin()\n    } else {\n    locals.devMode = !locals.devMode\n    locals.newDeveloper = !(options && options.oldMode)\n    \n    this.refreshLogin()\n  }\n}\n\n  endRemoteDeveloper() {\n    Aeppic.Developer.disableRemoteDeveloper()\n  }\n\n  openDeveloperSearch() {\n    if (!$refs || !$refs.searchDialog || (!locals.devMode && Aeppic.Developer.remoteDeveloperMode === 'None')) {\n      return\n    }\n    $refs.searchDialog.show({ target: $refs.searchDialogAnchor })\n  }\n\n  closeDeveloperSearch() {\n    if (locals.devMode && $refs.searchDialog) {\n      $refs.searchDialog.close()\n    }\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) { \n    if (!$refs[refName] || !$refs[refName].$el) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n  get showPrintLayout() {\n    return params.queryParams && params.queryParams && 'print' in params.queryParams\n  }\n\n  get printLayoutId() {\n    if (params.queryParams && params.queryParams.printLayoutId) {\n      return params.queryParams.printLayoutId\n    }\n\n    return null\n  }\n\n  toggleTheme() {\n    locals.themeOld = (locals.themeOld === 'ae-light' ? 'ae-dark' : 'ae-light');\n  }\n\n  /**\n   * FROM BIZPIN APPLICATION LAYOUT\n   */\n\n\n\n   async _initializeRecents() {\n     try {\n      const referenceDocument = (await Aeppic.get(Aeppic.HomePage)) || Aeppic.Account\n\n      this.addToRecentsAction = await Aeppic.Preferences.getSettingForDocument('bizpin:recently-visited:addDocumenTorRecentlyVisitied', referenceDocument)\n     } catch (e) {\n       console.error(`Error initializing recents: ${e.toString()}`)\n     }\n  }\n\n  get isPageReadonly() {\n    return !locals.canEditPageDocument\n  }\n\n  async onScroll(event) {\n    if (this._onScrollHandlerProcessing) {\n      return\n    }\n\n    this._onScrollHandlerProcessing = true\n\n    await Aeppic.waitForNextAnimationFrame()\n\n    const y = event.target.scrollTop\n    const x = event.target.scrollLeft\n\n    this.persistScrollPosition(event)\n\n    this._onScrollHandlerProcessing = false\n  }\n\n async doubleRequestAnimationFrame() {\n    // Let browser re-render DOM by executing a doubleRequestAnimationFrame\n    // See: https://github.com/vuejs/vue/issues/9200\n    // See: https://bugs.chromium.org/p/chromium/issues/detail?id=675795\n\n    await Aeppic.waitForNextAnimationFrame()\n    await Aeppic.waitForNextAnimationFrame()\n  }\n\n  async _announceNewPageDocumentId(docId) {\n    console.log('_announceNewPageDocumentId', { docId })\n\n    if (locals.layoutId === this.PASSWORD_RESET_LAYOUT_ID || locals.layoutId === this.OLD_PASSWORD_RESET_LAYOUT_ID || locals.layoutId === this.LOGIN_LAYOUT_ID) {\n      console.warn('ignore new pageDocumentId because loginLayout or passwortResetLayout is loaded')\n      return\n    }\n    \n    const targetDocumentId = this._getAllowedTargetDocumentId(await Aeppic.get(docId))\n\n    if (locals.pageDocument?.id !== targetDocumentId) {\n      console.warn('new pageDocument, stopping pageDocumentWatcher', locals.pageDocument?.id, targetDocumentId)\n\n      if (this.pageDocumentWatcher) {\n        this.pageDocumentWatcher.stop()\n        this.pageDocumentWatcher = null\n      }\n    }\n\n    const [ document ] = await Promise.all([\n      Aeppic.get(targetDocumentId)\n    ])\n\n    if (document && !document.t) {\n      console.error('Document not yet imported from server. Waiting for it to be imported via Aeppic.watch', document.id)\n\n      locals.pageInfo = { \n        ...locals.pageInfo,\n        loading: true\n      }\n\n      if (this.pageDocumentWatcher) {\n        this.pageDocumentWatcher.stop()\n        this.pageDocumentWatcher = null\n      }\n  \n      this.pageDocumentWatcher = Aeppic.watch(targetDocumentId, async (document) => {\n        if (!document.t) {\n          console.warn('Document NOT imported from server yet, waiting...', document.id)\n          return\n        }\n        \n        console.warn(`Document imported from server. Reloading pageDocument ${document.id} ${document.t}`)\n        \n        // DEBUG helpers\n          // await Aeppic.fetch('/libs/fontawesome-pro-5.15.4-web/svgs/regular/vial.svg')\n          // const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms))\n          // await sleep(5000)\n\n        await this._announceNewPageDocumentId(document)\n      })\n\n      return\n    }\n\n    const [ canEditPageDocumentByRights ] = await Promise.all([\n      Aeppic.canEdit(document),\n    ])\n\n    const canEditPageDocument = !document?.readonly && canEditPageDocumentByRights\n\n    console.log('_announceNewPageDocumentId => canEdit', canEditPageDocument, { docId })\n\n    if (Aeppic.Account && Aeppic.Account.data.isGroupAccount === true) {\n      locals.canEditPageDocument = false\n    } else {\n      locals.canEditPageDocument = canEditPageDocument\n    }\n\n    console.log({ canEditPageDocument })\n\n\n    if (!document) {\n      console.warn('404: could not get pageDocumentId to display. Redirecting to HomePage')\n      this._navigateTo(locals.companyIdOfAccount, params.queryParams)\n      return\n    }\n\n    if ((document.id === 'apps' || document.a[0] === 'apps' || document.id === 'system' || document.a[0] === 'system') && !Aeppic.Account?.data.allowDevMode) {\n      console.warn('400: Only Developers can access system/apps. Redirecting to HomePage')\n      this._navigateTo(locals.companyIdOfAccount)\n      return\n    }\n\n    const { pageApplicationId } = await this.refreshPageFormInfo(document)\n\n    locals.pageDocument = document\n    this._updateRecentDocuments(document) \n\n    // if (locals.pageDocument && locals.pageDocument.data.name) {\n    //   $refs.hiddenDomElement.$el.ownerDocument.title = locals.pageDocument.data.name + ' | bizpin' || 'bizpin'\n    // } else {\n    //   $refs.hiddenDomElement.$el.ownerDocument.title = 'bizpin'\n    // }\n\n    locals.pageInfo = { \n      document, \n      canEdit: canEditPageDocument,\n      applicationId: pageApplicationId,\n      loading: false\n    }\n\n    await this.restoreScrollposition(document)\n  }\n\n  _setupReloadNotification() {\n      Aeppic.on('server:changed', () => {\n        console.log('changes:server-changed')\n        this._showReloadNotification()\n      })\n\n      this.missedChangesTimeoutId = null\n\n      Aeppic.on('changes:missed', () => {\n        console.log('changes:missed')\n        if (this.missedChangesTimeoutId) {\n          clearTimeout(this.missedChangesTimeoutId)\n        }\n\n        this.missedChangesTimeoutId = setTimeout(() => {\n          this._showReloadNotification()\n        }, 5000)\n      })\n\n      Aeppic.on('changes:missed-found', () => {\n        console.log('changes:missed-found')\n        if (this.missedChangesTimeoutId) {\n          clearTimeout(this.missedChangesTimeoutId)\n        }\n      })\n  }\n\n  _showReloadNotification() {\n    console.log('showReloadNotifation')\n      locals.reloadNoficationTriggered = true\n  }\n\n  get showPrintLayout() {\n    return params.queryParams && params.queryParams && 'print' in params.queryParams\n  }\n\n  async dragover(event) {\n    event.dataTransfer.dropEffect = \"none\"\n  }\n\n  async drop(event) {\n  }\n\n   async refreshPageFormInfo(document) {\n    const pageDoc = (document && typeof document === 'string') ? await Aeppic.get(params.pageDocumentId) : document\n\n    if (pageDoc) {\n      const formId = pageDoc.f.id\n      if (this.FORMS_CACHE.has(formId)) {\n        locals.pageDocumentForm = this.FORMS_CACHE.get(formId)\n      } else {\n        const form = await Aeppic.getFormForDocument(pageDoc)\n        this.FORMS_CACHE.set(formId, form)\n        locals.pageDocumentForm = form\n      }\n  \n      locals.pageApplicationId = await this._getCurrentApplicationId(locals.pageDocumentForm)\n\n      if (Aeppic.Device === 'Desktop' && locals.pageDocumentForm.data.tags) {\n        locals.topbarAsOverlay = locals.pageDocumentForm.data.tags.includes('full-page')\n      } else {\n        locals.topbarAsOverlay = false\n      }\n\n      locals.pageDocumentIsPrototype = locals.pageDocumentForm.data.tags && locals.pageDocumentForm.data.tags.includes('prototype')\n    } else {\n      locals.pageApplicationId = null\n      locals.pageDocumentForm = null\n      locals.topbarAsOverlay = false\n      locals.pageDocumentIsPrototype = false\n    }\n\n    return { pageApplicationId: locals.pageApplicationId }\n  }\n  \n  async _getCurrentApplicationId(formDocumentParam) {\n    const formDocument = await Aeppic.get(formDocumentParam?.document)\n\n    if (!formDocument) {\n      return null\n    }\n\n    const appIndex = formDocument.a_forms.findIndex(a_form => a_form === 'application-form')\n    return formDocument.a[appIndex]\n  }\n\n  drillInto(event) {\n    return this.onAeWillNavigate(event)\n  }\n\n  // async drillInto(event) {\n  //   event.stopPropagation && event.stopPropagation()\n  //   event.preventDefault && event.preventDefault()\n\n  //   const document = await Aeppic.get(event.detail.targetDocument)\n\n  //   const isStructuralDocument = document.a_depth <= 1 || document.f.id === 'repository-folder-form' || document.f.id === 'folder'\n  //   const preferDialog = event.detail.mode === 'dialog'\n\n  //   if (!preferDialog && isStructuralDocument) {\n  //     this._navigateTo(document)\n  //     return\n  //   }\n\n  //   const formDocument = await Aeppic.get(document.f.id)\n  //   const applicationFormIndex = formDocument.a_forms.findIndex(a_form => a_form === 'application-form')\n  //   const application = await Aeppic.get(formDocument.a[applicationFormIndex])\n\n  //   let showInDialog = preferDialog\n\n  //   if (!showInDialog && application && application.f.id === 'application-form' && 'dialogForms' in application.data) {\n  //     showInDialog = !!application.data.dialogForms.find(ref => ref.id === formDocument.id)\n  //   }\n\n  //   if (showInDialog) {\n  //     const drillEventWithActualDocument = { ...event.detail, ... { targetDocument: document } }\n\n  //     $refs.showDocumentDialog.$emit('show', drillEventWithActualDocument)\n  //     return\n  //   }\n\n  //   this._navigateTo(document)\n  // }\n\n  _getAllowedTargetDocumentId(targetDocument) {\n    if (!targetDocument) {\n      return targetDocument\n    }\n\n    if (targetDocument.f.id === this.FORMS.Kommentar && !(Aeppic.Account?.id === targetDocument.created.by)) {\n      return targetDocument.p\n    }\n\n    if (targetDocument.f.id === this.FORMS.Ping) {\n      return targetDocument.data.document?.id\n    }\n\n    return targetDocument.id\n  }\n\n  onAeWillNavigate(event) {\n    if (this.disableNavigationHandling) {\n      return\n    }\n\n    if (locals.noNavigation) {\n      event.stopPropagation && event.stopPropagation()\n      event.preventDefault && event.preventDefault()\n\n      this._navigateTo( event.detail.documentId // will-navigate\n                        || \n                        event.detail.targetDocument // drill-into\n                      )\n    }\n  }\n\n  _navigateTo(documentOrDocumentId, queryParams) { \n    if (locals.noNavigation) {\n      this._announceNewPageDocumentId(documentOrDocumentId)\n    } else {\n      Aeppic.navigateTo(documentOrDocumentId, queryParams)\n    }\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) { \n    if (!$refs[refName] || !$refs[refName].$el || !$refs[refName].$el.children) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n  onSizeChange(className, size) {\n    if (!locals.navbarOverride) {\n      locals.showNavbar = false\n    } else {\n      locals.showNavbar = true\n    }\n  }\n\n  toggleNavbar() {\n    if (!$refs.container.classList.contains('ae-large')) {    \n      locals.navbarOverride = true\n      locals.showNavbar = !locals.showNavbar\n    }\n  }\n\n  showSelectionHandler() {\n    if (!Aeppic.Account || Aeppic.Account.data.isGroupAccount) {\n      return\n    }\n\n    $refs.selectionHandler.$emit('show')\n  }\n\n  async _updateRecentDocuments(document) {\n    if (!this.addToRecentsAction) {\n      return\n    }\n\n    try {\n      const addToRecents = (await Aeppic.Actions.run([this.addToRecentsAction], { document }))[0].value\n      console.log('!!!', addToRecents)\n      if (!addToRecents) {\n        return\n      }\n\n      const LsKey = 'bizpin:recently-visited'\n      \n      let recents = JSON.parse(Aeppic.LocalStorage.getItem(LsKey)) || []\n      const existingIndex = recents.findIndex(doc => doc.id === document.id)\n      if (existingIndex !== -1) {\n        recents.splice(existingIndex, 1)\n      }\n      recents.push({ id: document.id, v: document.v, text: document.data.name })\n      if (recents.length > 9) {\n        recents = recents.slice(-10)\n      }\n      Aeppic.LocalStorage.setItem(LsKey, JSON.stringify(recents))\n\n      // Because LocalStorage cannot be watched, emit an event instead\n      $refs.hiddenDomElement.$root.$el.dispatchEvent(new CustomEvent(`local-storage:${LsKey}`))\n    } catch (e) {\n      console.error('Could not add to recently-visited', e)\n    }  \n  }\n\n  persistScrollPosition(event) {\n    if (!event || !event.target || !locals.pageDocument) {\n      return\n    }\n\n    const y = event.target.scrollTop\n    const x = event.target.scrollLeft\n\n    Aeppic.SessionStorage.setValue(this._generateScrollpositionStoragePrefix(locals.pageDocument), { x, y })\n  }\n\n  async restoreScrollposition(document) {\n    const isHistoricNavigation = Aeppic.Root.params && Aeppic.Root.params.history && Aeppic.Root.params.history.historic\n\n    if (!isHistoricNavigation) {\n      return\n    }\n\n    const oldScrollPosition = Aeppic.SessionStorage.getValue(this._generateScrollpositionStoragePrefix(document))\n\n    if (!oldScrollPosition) {\n      return\n    }\n\n    // FIXME: this will break once some designs take longer to render\n    // render fields with additional designs\n    for (let i = 0; i < 25; i += 1) {\n      await Aeppic.nextRenderPass() \n    }\n\n    if (!$refs.body || !$refs.body.$el) {\n      return\n    }\n\n    const { x, y } = oldScrollPosition\n\n\n    if (typeof $refs.body.$el.scrollTo !== 'function') {\n      return\n    }\n\n    // FIXME: don't do this! \n    $refs.body.$el.scrollTo(x, y)\n  }\n\n  scrollTo(scrollToOptions) {\n    if (!scrollToOptions) {\n      return\n    }\n\n    if (typeof $refs.body.$el.scrollTo !== 'function') {\n      return\n    }\n\n    // FIXME: don't do this! \n    $refs.body.$el.scrollTo(scrollToOptions)\n  }\n\n  _generateScrollpositionStoragePrefix(document) {\n    const timestamp = Aeppic.Root.params.history.timestamp\n\n    return `bp-pref__scrollPosition@document=${document.id}@form=${document.f.id}@time=${timestamp}`\n  }\n\n  registerLayoutListener(eventName, refIndex) {\n    if (!this.listenersToLayoutRefs[eventName]) {\n      this.listenersToLayoutRefs[eventName] = []\n    }\n\n    if (!this.listenersToLayoutRefs[eventName].find(existingIndex => existingIndex === refIndex)) {\n      this.listenersToLayoutRefs[eventName].push(refIndex)\n    }\n\n    if (!locals.additionalLayoutListeners[eventName]) {\n      locals.additionalLayoutListeners[eventName] = (event) => this.notifyLayoutListeners(eventName, event)\n    }\n  }\n\n  notifyLayoutListeners(eventName, nativeCustomEvent) {\n    for(const refIndex of this.listenersToLayoutRefs[eventName]) {\n      $refs.globalLayouts && $refs.globalLayouts[refIndex] && $refs.globalLayouts[refIndex].$emit(eventName, nativeCustomEvent.detail)\n    }\n  }\n\n  showSidebar(tabId) {\n    if ($refs.container.classList.contains('ae-large')) {    \n      return\n    }\n\n    locals.sidebarTabId = tabId\n    locals.showSidebar = true\n  }\n\n  hideSidebar(tabId) {\n      locals.showSidebar = false\n      locals.sidebarTabId = ''\n  }\n}\n ","css":"/* html {\n  font-size: 1.25rem;\n} */\n\n._CSS pre {\n  white-space: pre-wrap;\n}\n\n/*\n@media all and (min-width: 50em) {\n  html {\n    font-size: 1rem;\n  }\n}*/\n\n._CSS {\n  width:100%;\n  height:100%;\n}\n\n._CSS-root {\n  background: var(--ae-background-100);\n  flex-direction:column;\n  width:100%;\n  height:100%;\n  overflow: hidden;\n}\n \n._CSS-app {\n  width:100%;\n  height:100%;\n}\n\n\n._CSS-dev-mode {\n  width:100%;\n  height:100%;\n}\n\n._CSS-app-panel {\n  position:relative;\n}\n\n._CSS-dev-panel {\n  position:relative;\n  color:black;\n  background:white;\n  width:100%;\n  height:100%;\n  /*z-index:10001; */ /* just above the element-highlight */\n}\n\n\n\n/*\n* FROM BIZPIN APPLICATION LAYOUIT\n*/\n\n._CSS-main {\n  display: flex;\n  flex-direction: row;\n  position: relative;\n  flex:1;\n  align-items: stretch;\n  height:100%;\n  width:100%;\n  xline-height: 1.4;\n}\n\n@media print {\n  ._CSS-main {\n    background: white !important;\n  }\n}\n \n._CSS-app-panel {\n  position:relative;\n}\n\n._CSS-container {\n  position: relative;\n  display: flex;\n  flex-direction:column;\n  width:100%;\n  height:100%;\n  flex:1;\n  overflow: hidden;\n}\n\n._CSS-page {\n  flex:1;\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: hidden;\n\n  display: flex;\n\n\n  /* display: grid; \n  grid-template-rows: min-content min-content 1fr;\n  grid-template-columns: auto 1fr;\n  grid-template-areas: \n    \"page-header page-header\"\n    \"toolbar toolbar\"\n    \"tree body\"; */\n}\n\n\n.ae-phone ._CSS-page {\n  grid-row: 2/3;\n}\n\n._CSS-navbar-panel {\n    grid-row: 1/3;\n}\n.ae-phone ._CSS-navbar-panel {\n  grid-row: 1/3;\n}\n\n._CSS-header {\n  height: 81px;\n}\n\n._CSS-page-toolbar {\n  xz-index: 1; // overlap page-body e.g. with menu popups\n  min-height: 0;\n  min-width: 0;\n}\n\n._CSS-page-body {\n  min-height: 0;\n  min-width: 0;\n\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n\n  /* display: flex; */\n  /* flex-flow: column;  */\n  height: 100%;\n  width: 100%;\n}\n\n._CSS-drill-into-container {\n  position: absolute;\n  width: 100%;\n  height:100%;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n\n  /* page-toolbar has z-index of 1 */\n  z-index: 1;\n\n  /* ae-dialog has z-index of 9998 */\n  /* z-index: 9999; */\n}\n\n._CSS-sidebar-panel {\n  max-width: 300px;\n}\n\n._CSS-top-application-bar-overlay {\n  position: absolute;\n  background: transparent !important;\n  left: 0;\n  right: 0;\n  z-index: 1;\n}\n\n._CSS-loader {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 10;\n\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  opacity: 1;\n\n  transition: opacity .2s 1s ease-in;\n}\n\n._CSS-loader:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: var(--ae-ui-background);\n\n  pointer-events: none;\n}\n\n\n._CSS-loader._CSS-loader--hidden {\n  opacity: 0;\n  pointer-events: none;\n}\n\n","name":"Bizpin Root Layout","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"f769dafadd21766c"},{"id":"740716fd-9069-4a19-a16d-665a43894b7e","text":"Color","v":"f10dbf4a137e0e29"}],"template":"<div v-if=\"locals.loading\" class=\"bg-slate-50\" style=\"height:100%; display:flex; justify-content:center; align-items:center;\">\n  <ae-icon class=\"fa fa-spinner-third fa-2x fa-spin text-theme-400\"></ae-icon>\n</div>\n<template v-else>\n        <!-- @ae-drill-into.capture=\"controller.drillInto($event)\"  -->\n        <!-- @ae-will-navigate.capture=\"controller.onAeWillNavigate($event)\" -->\n  <div  class=\"_CSS-root ae-stacking-context ae-dialog-region ae-expand-region\"\n        tabindex=\"0\" \n        @drop.prevent\n        @dragover.prevent\n        :class=\"['ae-expand-region', 'ae-theme', locals.themeOld, Aeppic.Device === 'Phone' && 'ae-phone', locals.bizpinStylesheetVersion]\"\n      >\n    <ae-layout v-if=\"!locals.hideDevbar\" layout-id=\"b956d062-ba70-482d-b404-da5cec71afc6\"></ae-layout> \n    <ae-layout layout-id=\"8ad94a11-3afc-4eff-9d5c-99b7c69d4110\"></ae-layout>\n    <div ref=\"searchDialogAnchor\"></div>\n    \n \n\n  <section class=\"_CSS-dev-mode\" v-if=\"locals.devMode\">\n    <!-- only developer -->\n    <ae-design class=\"_CSS-dev-mode\" v-if=\"Aeppic.Developer.remoteDeveloperMode === 'Server'\" name=\"page\" document-id=\"0b3240e3-b87f-4fe5-8851-6968ef35cf53\"></ae-design>\n    <!-- main page with developer -->\n    <ae-splitter v-else-if=\"!Aeppic.Developer.remoteDeveloperMode || Aeppic.Developer.remoteDeveloperMode === 'None'\" class=\"_CSS-dev-mode\" :limit-expand=\"false\">\n      <ae-layout\n          slot=\"left-pane\"\n          tabindex=\"2\"\n          class=\"_CSS-app ae-stacking-context ae-app \"\n          :data-theme=\"locals.theme.darkMode ? locals.theme.dark : locals.theme.light\"\n          :class=\"{ dark: locals.theme.darkMode }\"\n          :layout-id=\"locals.layoutId\"\n          ref=\"body\" \n          :param-page-document=\"locals.pageDocument\" \n          :param-page-info=\"locals.pageInfo\"\n          :param-readonly=\"controller.isPageReadonly\"\n          :param-query-params=\"params.queryParams\"\n          :param-page-application-id=\"locals.pageApplicationId\"\n          :param-company-id=\"locals.companyIdOfAccount\"\n          :param-topbar-as-overlay=\"locals.topbarAsOverlay\"\n          :param-document-changed-bus=\"locals.documentChangedBus\"\n          :param-show-print-layout=\"controller.showPrintLayout\"\n          @show-selection-handler=\"controller.showSelectionHandler()\"\n          @scroll=\"controller.onScroll($event)\"\n          @scroll-to=\"controller.scrollTo($event)\"\n          @toggle-developer=\"controller.toggleDeveloperMode($event)\"\n      ></ae-layout>\n      <ae-design v-if=\"locals.newDeveloper\" slot=\"right-pane\" class=\"_CSS-dev-panel\" document-id=\"0b3240e3-b87f-4fe5-8851-6968ef35cf53\" name=\"page\" :watch-layout-revisions=\"false\" :param-info=\"locals.developerInfo\" @toggle-app-theme=\"controller.toggleTheme()\"></ae-design>\n      <ae-layout v-else slot=\"right-pane\" class=\"_CSS-dev-panel\" layout-id=\"956d0d01-3f82-4f11-9569-3f292044da8e\" :watch-layout-revisions=\"false\"></ae-layout>\n    </ae-splitter>\n  </section>\n  <section class=\"_CSS-main\" v-else>\n    <div class=\"_CSS-main  ae-dialog-region\"\n      v-responsive=\"(className, size) => controller.onSizeChange(className, size)\"\n      v-on=\"locals.additionalLayoutListeners\">\n\n      <ae-layout \n        xv-if=\"locals.pageInfo.document\"\n        :layout-id=\"locals.layoutId\"\n        class=\"_CSS-container bp-page ae-stacking-context _CSS-page-body\"\n        :data-theme=\"locals.theme.darkMode ? locals.theme.dark : locals.theme.light\"\n        :class=\"{ dark: locals.theme.darkMode }\"\n        ref=\"body\"\n        :param-page-document=\"locals.pageDocument\" \n        :param-page-info=\"locals.pageInfo\"\n        :param-readonly=\"controller.isPageReadonly\"\n        :param-query-params=\"params.queryParams\"\n        :param-page-application-id=\"locals.pageApplicationId\"\n        :param-company-id=\"locals.companyIdOfAccount\"\n        :param-topbar-as-overlay=\"locals.topbarAsOverlay\"\n        :param-document-changed-bus=\"locals.documentChangedBus\"\n        :param-show-print-layout=\"controller.showPrintLayout\"\n        @show-selection-handler=\"controller.showSelectionHandler()\"\n        @scroll=\"controller.onScroll($event)\"\n        @scroll-to=\"controller.scrollTo($event)\"\n        @toggle-developer=\"controller.toggleDeveloperMode($event)\"\n        @disable-navigation-handlers=\"controller.disableNavigationHandlers($event)\"\n      ></ae-layout>\n\n      <!-- <ae-layout  layout-id=\"564e7028-6b98-49b8-ac43-50f7873930a1\"\n                :class=\"{ '_CSS-drill-into-container': locals.showDialogActive }\"\n                @activate=\"locals.showDialogActive = true\"\n                @deactive=\"locals.showDialogActive = false\"\n                ref=\"showDocumentDialog\"\n                :param-document-changed-bus=\"locals.documentChangedBus\"\n      ></ae-layout> -->\n      </div>\n\n\n      <template v-if=\"locals.root && locals.root.data.globalLayouts\">\n      <ae-layout  v-for=\"(layout, index) of locals.root.data.globalLayouts\"\n                  ref=\"globalLayouts\"\n                  :layout-id=\"layout.id\"\n                  :param-page-document-id=\"locals.pageDocument && locals.pageDocument.id\"\n                  :param-page-document=\"locals.pageDocument\"\n                  :param-page-application-id=\"locals.pageApplicationId\"\n                  @register-listener=\"controller.registerLayoutListener($event, index)\"\n      ></ae-layout>\n      </template>\n\n\n      \n    </section>\n  </div>\n  \n  <ae-popup ref=\"searchDialog\" popup-attachment=\"top center\" base-attachment=\"top center\" popup-class=\"_CSS-popup\" max-width=\"null\">\n    <ae-layout\n      slot=\"popup\"\n      @keydown.esc.capture.native=\"$refs.searchDialog && $refs.searchDialog.close()\"\n      layout-id=\"9c604893-1a34-490a-b633-62b5064784cd\"\n      :params=\"{ positionSearchDialog: () => $refs.searchDialog.position() }\"\n      ></ae-layout>\n  </ae-popup>\n\n\n</template>\n\n<ae-design name=\"title\" document-id=\"root\" style=\"display:none;\" ref=\"hiddenDomElement\"></ae-design>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"5913cb1e-9979-4eb7-84e8-488cdd658cbb","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-07-14T13:18:56+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"99b3a019114e1202"},"stamps":[],"t":1784035136997,"v":"87941270ab094ca1"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2018-05-25T10:46:45+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","client":"server","from":""},"ct":1621428481249,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.rootDocuments = []\n    \n    locals.documentsOfRootDocuments = []\n\n    if (params.formId && params.refFieldName) {\n      console.error(`[${layout.data.name} ${layout.id}@${layout.v}]: params formId and refFieldName are mutually exclusive`, params)\n      return\n    }\n\n    if (!params.actionOnTransition) {\n      console.error(`[${layout.data.name} ${layout.id}@${layout.v}]: provide actionOnTransition param`, params)\n      return\n    }\n\n    let watchers = null\n\n    Aeppic.watchAll(params.columnRootDocumentIds.filter(id => id != null), async (rootDocuments) => {\n      console.log('watchAll', rootDocuments)\n      locals.rootDocuments = await Aeppic.editAll(rootDocuments)\n\n      if (watchers) {\n        watchers.map(w => w.stop())\n      }\n\n      watchers = this._watchDocumentsOfRootDocuments(rootDocuments, params.documentsFilters)\n\n      watchParam('documentsFilters', (filters) => {\n        if (watchers) {\n          watchers.map(w => w.stop())\n        }\n\n        watchers = this._watchDocumentsOfRootDocuments(rootDocuments, filters)\n      })\n    })\n\n  }\n\n  _watchDocumentsOfRootDocuments(rootDocuments, documentsFilters) {\n      for (let i = 0; i < rootDocuments.length; i += 1) {\n        const rootDocument = rootDocuments[i]\n        const filter = documentsFilters && documentsFilters[i] || ''\n\n        if (rootDocument.data[params.refFieldName].length === 0) {\n          locals.documentsOfRootDocuments.splice(i, 1, [])\n        }\n\n        Aeppic.watchAll(rootDocument.data[params.refFieldName], async (documents) => {\n          console.log('watchAll documents', i, documents)\n          const matches = await Aeppic.matchAll(documents, filter)\n\n          const matchedDocuments = documents.filter((_, i) => matches[i])\n          \n          locals.documentsOfRootDocuments.splice(i, 1, matchedDocuments)\n        })\n      }\n  }\n\n  get columnDesigns() {\n    if (params.columnDesigns) {\n      return params.columnDesigns\n    }\n\n    return new Array(params.columnRootDocumentIds.length).fill('title')\n  }\n \n  droppedReference(event, columnIndex) {\n    console.log('droppedReference', event, columnIndex)\n    if (params.refFieldName) {\n      if (params.actionOnTransition === 'clone') {\n        this._clone(columnIndex, locals.rootDocuments[columnIndex], params.refFieldName, event.index, event.droppedDocument)\n        return\n      }\n\n      // TODO: handle move\n      // if (params.actionOnTransition === 'move') {\n      // }\n\n      console.log(`TODO: implement actionOnTransition ${params.actionOnTransition}`)\n    }\n\n    // TODO: handle non-ref-fields\n    console.log(`TODO: handle non-ref-fields`)\n  }\n\n  async _clone(columnIndex, targetDocument, targetFieldName, targetIndex, ref) {\n    const refDocument = await Aeppic.get(ref)\n    \n    const refs = await Aeppic.getAll(targetDocument.data[targetFieldName])\n\n    let existingRefIndex = -1\n    const refExists = refs.find((existingRef, i) => {\n      console.log(this._compareRefField(refDocument, existingRef))\n      if (this._compareRefField(refDocument, existingRef)) {\n        existingRefIndex = i\n        return true\n      }\n\n      return false\n    })\n\n    if (refExists) {\n      console.log('_clone: move the existing ref')\n\n      const fixedIndex = existingRefIndex < targetIndex ? targetIndex + 1 : targetIndex\n\n      if (existingRefIndex !== fixedIndex) {\n        const removedRef = targetDocument.data[targetFieldName].splice(existingRefIndex, 1)[0]\n        console.log(removedRef)\n \n        targetDocument.data[targetFieldName].splice(fixedIndex, 0, removedRef)\n      }\n    } else {\n      console.log('_clone: add new ref')\n\n      const clone = await this._executeCloneAction(columnIndex, targetIndex, ref, targetDocument.id)\n\n      for (const clonedDocument of clone.documents) {\n        Aeppic.save(clonedDocument)\n      }\n\n      const cloneAsRef = await Aeppic.asReference(clone.root)\n      targetDocument.data[targetFieldName].splice(targetIndex, 0, cloneAsRef)\n    }\n\n    console.log('saving...', targetDocument.data.files)\n\n    Aeppic.save(targetDocument)\n  }\n\n  removeReference(documentToRemove, index) {\n    const targetDocument = locals.rootDocuments[index]\n    if (params.refFieldName) {\n      targetDocument.removeReference(params.refFieldName, documentToRemove)\n      // TODO: remove share\n\n      Aeppic.save(targetDocument)\n    }\n  }\n\n  async _executeCloneAction(columnIndex, targetIndex, documentToClone, newParentId) {\n    const actionId = params.commandsOnClone[columnIndex]\n\n    if (!actionId) {\n      return\n    }\n\n    const ensuredDocument = await Aeppic.get(documentToClone)\n\n    if (actionId === 'a-uuid-for-shortlist-cloning') {\n      const options = {\n        formFieldsNotToClone: {\n          '275b807f-7dbb-4351-b731-669e275fa97d': await this._getFieldsNotToCopy(newParentId, ensuredDocument)\n        }\n      }\n\n      const cloneResult = await Aeppic.cloneDeep(ensuredDocument, newParentId, options)\n\n      const model = cloneResult.root\n\n      await this._createShortlistModelShare(model)\n  \n      await Aeppic.Commands.execute('1f5ef8f8-01e5-4ebc-a1ff-0287c3eb650d', model)\n      \n      return cloneResult\n    }\n  \n    if (actionId === 'a-uuid-for-vorauswahl-cloning') {\n      const options = {\n        formFieldsNotToClone: {\n          '275b807f-7dbb-4351-b731-669e275fa97d': await this._getFieldsNotToCopy(newParentId, ensuredDocument)\n        }\n      }\n\n      return Aeppic.cloneDeep(ensuredDocument, newParentId, options)\n    }\n\n    return Aeppic.cloneDeep(ensuredDocument, newParentId)\n  }\n\n  async _getFieldsNotToCopy(parentId, documentToClone) {\n    const parentDocument = await Aeppic.get(parentId)\n    const fieldsToCopyDocument = await Aeppic.get(parentDocument.data.fieldsToCopy.id)\n\n    const documentForm = await Aeppic.getFormForDocument(documentToClone)\n\n    const fieldsNotToCopy = documentForm.fields.reduce((prev, cur) => {\n      console.log(cur.name)\n      if (!fieldsToCopyDocument.data.fields.includes(cur.name)) {\n        return prev.concat(cur.name)\n      }\n\n      return prev\n    }, [])\n\n    console.log(fieldsNotToCopy)\n    return fieldsNotToCopy\n  }\n\n  async _createShortlistModelShare(model) {\n    const project = await Aeppic.get(model.a.slice(-3)[0])\n\n    const share = await Aeppic.new('804bed89-803a-4090-8b1b-857cab8ec6dd', '4f2ebae5-4382-4717-9a10-83dcebfe34dd')\n\n    share.data.identifier = encodeURIComponent(`${model.id}_${Date.now()}`)\n\n    share.data.name = `${model.data.surname}, ${model.data.firstname} on Shortlist Questionnaire`\n\n    share.addReference('target', project)\n    share.data.targetInfo = model.id\n\n    const backingAccount = await Aeppic.get('8c914f6f-86ff-47d8-9e8a-89fefd3a5701')\n    share.addReference('backingAccount', backingAccount)\n\n    Aeppic.save(share)\n\n    return share\n  }\n\n  removeDraggedReference(event, columnIndex) {\n    if (params.actionOnTransition === 'clone') {\n      // Nothing to do\n      return\n    }\n\n    if (params.actionOnTransition === 'move') {\n    // TODO: handle 'move'\n      console.warn(\"TODO: handle 'move'\")\n    }\n  }\n\n  _compareRefField(documentA, documentB) {\n    const valueA = this._compareFieldValue(documentA)\n    const valueB = this._compareFieldValue(documentB)\n\n    if (valueA == null || valueB == null) {\n      return false\n    }\n\n    if(valueA === valueB) {\n      return true\n    }\n\n    return false\n  }\n\n  _compareFieldValue(document) {\n    if (!params.compareFieldPath) {\n      return document.id\n    }\n\n    const fieldParts = params.compareFieldPath.split('.')\n\n    let value = document\n\n    for(const part of fieldParts) {\n      if (typeof value[part] == 'undefined') {\n        return null\n      }\n\n      value = value[part]\n    }\n\n    return value\n  }\n}\n\n\n\n\n\n","css":"._CSS {\n  display: flex;\n  flex-flow: column;\n  flex: 1;\n}\n\n._CSS-board-container {\n  flex: 1;\n  display: flex;\n}\n\n._CSS-board-container--prevent-interaction {\n  flex: 1;\n  z-index: 1;\n  cursor: not-allowed;\n  background: rgba(255,255,255,0.3);\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n/* \n._CSS-board--prevent-interaction:after {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n\n  background: rgba(0,0,0,0.2);\n} */\n\n._CSS-board {\n  flex: 1;\n  display: flex;\n  position: relative;\n}\n\n._CSS-board__column {\n  display: flex;\n  flex-flow: column;\n  flex: 1;\n\n  overflow: hidden;\n}\n\n._CSS-board__header {\n  min-height: 5rem;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  font-weight: bold;\n  font-size: 1.3rem;\n  border-bottom: 1px solid var(--ae-primary);\n  margin: 0 1rem 0 1rem;\n}\n\n._CSS-board__body {\n  padding: 1rem;\n  overflow-y: auto;\n  display: flex;\n  flex: 1;\n}","name":"Board Layout","packages":[],"template":"<div class=\"_CSS-board-container\">\n    <div v-for=\"(columnDesign, index) in controller.columnDesigns\" class=\"_CSS-board__column\">\n      <div class=\"_CSS-board__header\">\n        <ae-design :name=\"columnDesign || 'title'\" :document=\"locals.rootDocuments[index]\" :params=\"params.columnDesignParams\"></ae-design>\n        <div :class=\"params.buttonClassSettings\" v-if=\"params.allowNavigation && params.allowNavigation[index]\" @click=\"Aeppic.navigateTo(params.columnRootDocumentIds[index])\">\n          <ae-icon class=\"fa fa-cog\"></ae-icon>\n        </div>\n      </div>\n\n      <div class=\"_CSS-board__body\">\n        <template v-if=\"locals.rootDocuments.length\">\n          <ae-list v-if=\"!params.formId && locals.rootDocuments[index]\"\n            :key=\"locals.rootDocuments[index].id + locals.rootDocuments[index].v\"\n            list-id=\"062ef57e-6140-4c55-951e-341a226e5457\"\n            :documents=\"locals.documentsOfRootDocuments[index]\"\n            :param-interaction-allowed=\"params.columnStatus ? params.columnStatus[index] : true\"\n            @selected=\"Aeppic.navigateTo($event.id)\"\n            @remove=\"controller.removeReference($event, index)\"\n            :param-listeners=\"['selected', 'remove']\"\n            @drop=\"controller.droppedReference($event, index)\"\n            @dropped=\"controller.removeDraggedReference($event, index)\"\n            :param-disable-remove=\"params.disableRemove && params.disableRemove[index]\"\n            :param-list-design-params=\"params.listDesignParams\"\n          ></ae-list>\n          <ae-list v-else-if=\"locals.rootDocuments[index]\"\n            :key=\"locals.rootDocuments[index].id + locals.rootDocuments[index].v\"\n            list-id=\"062ef57e-6140-4c55-951e-341a226e5457\"\n            query-id=\"f812861f-68c8-4818-9972-be7b5474c9b1\"\n            :root-document-id=\"params.columnRootDocumentIds[index]\"\n            :filter=\"'f.id:' + params.formId\" \n            :param-interaction-allowed=\"params.columnStatus ? params.columnStatus[index] : true\"\n            @selected=\"Aeppic.navigateTo($event.id)\"\n            @remove=\"controller.removeReference($event, index)\"\n            :param-listeners=\"['selected', 'remove']\"\n            @drop=\"controller.droppedReference($event, index)\"\n            @dropped=\"controller.removeDraggedReference($event, index)\"\n            :param-disable-remove=\"params.disableRemove && params.disableRemove[index]\"\n          ></ae-list>\n        <div v-else class=\"_CSS-board-container--prevent-interaction\">\n          <ae-icon class=\"fa fa-ban fa-3x\"></ae-icon>\n        </div>\n        </template>\n          \n      </div>\n    </div>\n  </div>\n</div>\n\n\n"},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"df78a07d-3d55-466b-8375-03a27019af60","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-07-03T11:53:53+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"3be85a9ab5c48602"},"stamps":[],"t":1751543633653,"v":"0d3d95591d5f9411"},{"id":"240e8d9d-eb21-4759-85c5-13d085e0219f","v":"0aa75c55b24037d2","previous":{"v":"062253a65e0b7d2d"},"p":"676a196c-72c0-44e3-bdcc-9ac195273e80","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"Board User Settings","applies":"","packages":[],"template":"<button class=\"ae-button\" @click.stop=\"controller.showDialog()\" :disabled=\"!locals.board\">\n  <ae-icon class=\"fa fa-cog\"></ae-icon>\n</button>\n\n\n<ae-dialog ref=\"dialog\" @close=\"locals.showDialog = false\">\n  <template #header>\n    <div>\n      Board Einstellungen bearbeiten\n    </div>\n  </template>\n  <template #body>\n    <div class=\"_CSS-dialog__body\" v-if=\"locals.showDialog\">\n      <ae-control v-if=\"locals.board && locals.fieldParams && locals.fieldName\"\n                  name=\"ref\"\n                  :document=\"locals.board\"\n                  :field-name=\"locals.fieldName\"\n                  :params=\"locals.fieldParams\"\n                  @ae-will-navigate.stop.prevent.native\n                  @ae-drill-into.stop.prevent.native\n      ></ae-control>\n    </div>\n  </template>\n\n  <template #commands=\"scope\">\n    <div class=\"_CSS-actions\">\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        Abbrechen\n      </button>\n      <button class=\"ae-button ae-button--primary\" @click.stop=\"controller.save()\">\n        Speichern\n      </button>\n    </div>\n  </template>\n</ae-dialog>\n\n   ","css":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      BoardSettings: '43420696-8097-4fc1-88e5-c69df9821470'\n    }\n    locals.showDialog = false\n    locals.board = null\n    locals.fieldParams = null\n    locals.fieldName = ''\n\n    locals.board = params.document.f.id === this.FORMS.BoardSettings ? params.document : await Aeppic.findOne(`p:${params.document.id} f.id:${this.FORMS.BoardSettings}`)\n\n    $on('show', () => {\n      this.showDialog()\n    }) \n  }\n\n  async showDialog() {\n    locals.showDialog = true\n\n    if (locals.board.data.useStamps) {\n      locals.fieldName = 'columnsByStamps'\n\n      const form = await Aeppic.getForm(locals.board.f.id)\n      const fieldParams = form.getFieldControlParams(locals.fieldName)\n\n      locals.fieldParams = { ...fieldParams, noAdd: true }\n    } else {\n      locals.fieldName = 'columnsByRef'\n\n      const firstForm = locals.board.data.form.id ? locals.board.data.form : locals.board.data.form[0]\n\n      const form = await Aeppic.getForm(firstForm.id)\n      const field = form.getField(locals.board.data.fieldName)\n\n      const fieldParams = form.getFieldControlParams(locals.board.data.fieldName)\n      const forms = fieldParams?.forms || field.formRef\n\n      locals.fieldParams = { ...fieldParams, forms }\n    }\n\n    locals.board = await Aeppic.edit(locals.board)\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $refs.dialog.show()\n  }\n\n  async save() {\n    Aeppic.save(locals.board)\n\n    $refs.dialog.close()\n  }\n}"},"locks":[],"created":{"at":"2021-10-04T11:08:07+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-01-17T14:37:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1673966254030,"ct":1633345687236,"a_depth":3,"a":["apps","089481c4-a42f-4a98-9bc9-12e9f1131f4b","676a196c-72c0-44e3-bdcc-9ac195273e80"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"a040e6dc-a985-456d-b2ee-435d4f5bdbc2","v":"initial","p":"65de949e-5426-41c2-a86c-97c74512280d","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Business Rules","applies":"","packages":[],"template":"{{\r\n  locals.log\r\n}}","css":"","controller":"class Controller {\r\n  async init() {\r\n    locals.log = []\r\n\r\n    this.FORMS = {\r\n      ReceivedDelivery: '6c4f14e0-a9ee-4f78-b75f-75249b074054'\r\n    }\r\n\r\n    this.STAMPS = {\r\n      OrderIncomplete: 'bb436a52-f586-4042-b3f4-df6640f7e67b',\r\n      OrderFullfilled: '444488df-8dc2-4b0b-824f-206b2253a197'\r\n    }\r\n\r\n    this.Workflow = await Aeppic.asReference('2abbfb9f-b03a-4fa2-8f72-d5ec95cec48f')\r\n\r\n    this.updateOrderStatus()\r\n  }\r\n \r\n  async updateOrderStatus() {\r\n    const receivedDeliveries = await Aeppic.find(`f.id:${this.FORMS.ReceivedDelivery}`)\r\n\r\n    const orders = new Map()\r\n \r\n    for (const delivery of receivedDeliveries) {\r\n      const orderId = delivery.data.order && delivery.data.order.id\r\n\r\n      if (!orderId) {\r\n        continue\r\n      }\r\n\r\n      if (!orders.has(orderId)) {\r\n        const order = await Aeppic.get(orderId)\r\n\r\n        if (!order) {\r\n          console.error('Order not available anymore', order.id)\r\n          continue\r\n        }\r\n\r\n        const orderedItems = new Map()\r\n\r\n        const orderedItemLines = await Aeppic.getAll(order.data.items)\r\n        let total = 0\r\n        \r\n        for (const line of orderedItemLines) {\r\n          const itemId = line.data.item.id\r\n\r\n          if (!itemId) {\r\n            continue\r\n          }\r\n\r\n          if (!orderedItems.has(itemId)) {\r\n            const item = await Aeppic.get(itemId)\r\n            \r\n            if (!item) {\r\n              continue\r\n            }\r\n\r\n            orderedItems.set(itemId, { item, amount: line.data.amount, received:0, complete: false })\r\n          } else {\r\n            const ordered = orderedItems.get(itemId)\r\n            ordered.amount += line.data.amount\r\n          }\r\n\r\n          total += line.data.amount\r\n        }\r\n \r\n        orders.set(orderId, { order, orderedItems, deliveredItems: new Map(), complete: false, receivedTotal: 0, total: total })\r\n      }\r\n\r\n      const order = orders.get(orderId)\r\n      const itemsDelivered = await Aeppic.getAll(delivery.data.items)\r\n      \r\n      for (const deliveredItem of itemsDelivered) {\r\n        const itemId = deliveredItem.data.item.id\r\n        const list = order.deliveredItems.get(itemId) || []\r\n        list.push(deliveredItem) \r\n        order.deliveredItems.set(itemId, list)\r\n      }\r\n    }   \r\n  \r\n    for (const order of orders.values()) {\r\n      // are all items delivered\r\n      for (const expectedItem of order.orderedItems.values()) {\r\n        const matchingDeliveriesForItem = order.deliveredItems.get(expectedItem.item.id)\r\n\r\n        if (!matchingDeliveriesForItem) {\r\n          continue\r\n        }\r\n\r\n        for (const delivered of matchingDeliveriesForItem) {\r\n          // console.log(delivered)\r\n          expectedItem.received += delivered.data.count\r\n \r\n          if (expectedItem.received >= expectedItem.amount) {\r\n            expectedItem.complete = true\r\n            console.log('Order items complete', order.order.id, expectedItem )\r\n          }\r\n \r\n          order.receivedTotal += delivered.data.count\r\n        }      \r\n      }\r\n\r\n      if (order.receivedTotal >= order.total) {\r\n        order.complete = true\r\n        console.log('Order complete', order.order.id, order.total, order.receivedTotal)\r\n\r\n        if (!this._isStampedWith(order.order, this.STAMPS.OrderFullfilled)) {\r\n          console.log('Stamp complete')\r\n          Aeppic.stamp(order.order, this.STAMPS.OrderFullfilled, { workflow: this.Workflow })\r\n        }\r\n      } else { \r\n        console.log('Order incomplete', order.order.id, order.total, order.receivedTotal)\r\n        const missing = order.total - order.receivedTotal\r\n \r\n        let pendingStamp = this._findStamp(order.order, this.STAMPS.PendingOrderItems)\r\n \r\n        if (pendingStamp) { \r\n          const fullStamp = await Aeppic.get(pendingStamp.id) \r\n \r\n          if (!fullStamp || fullStamp.data.missing !== missing) {\r\n            console.log('no pre-existing stamp or requires update')\r\n            pendingStamp = null\r\n          }\r\n        } \r\n \r\n        if (!pendingStamp) {\r\n          if (!this._isStampedWith(order.order, this.STAMPS.OrderIncomplete)) {\r\n            console.log('Stamp incomplete')\r\n            Aeppic.stamp(order.order, this.STAMPS.OrderIncomplete, { workflow: this.Workflow })         \r\n          }\r\n        }    \r\n \r\n      }\r\n        //break\r\n    }  \r\n\r\n    //locals.log.push(JSON.stringify(orders))\r\n  }\r\n  \r\n  _isStampedWith(document, stampTypeId) {\r\n    return !!this._findStamp(document, stampTypeId)\r\n  }\r\n  \r\n  _findStamp(document, stampTypeId) {\r\n    return document.stamps.find(s => s.type.id === stampTypeId)\r\n  } \r\n}"},"locks":[],"created":{"at":"2021-11-02T09:38:40+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-11-02T09:38:40+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1635845920402,"ct":1635845920402,"a_depth":3,"a":["apps","781ff5de-69db-49dc-99f0-f328b308cd7d","65de949e-5426-41c2-a86c-97c74512280d"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9","a6156e84-5588-48fd-aa0e-31ccd38c4c5b"],"a_depth":5,"a_forms":["system-folder-form","folder","form","folder","layout-form"],"created":{"at":"2025-10-07T13:49:45+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759992465088,"data":{"applies":"","controller":"class Controller {\n  init() {\n\n  }\n  \n  get shapeStyle() {\n    function getShape(shape) {\n      if (['round', 'square', 'very-square'].includes(shape)) {\n        return shape \n      }\n      return params.shape || 'round'\n    }\n    const left = `var(--_CSS-border-radius--${getShape(params.leftShape)}-${params.leftShapeStatic ? 'static' : 'dynamic'})`\n    const right = `var(--_CSS-border-radius--${getShape(params.rightShape)}-${params.rightShapeStatic ? 'static' : 'dynamic'})`\n    return {\n      'border-top-left-radius': left,\n      'border-bottom-left-radius': left,\n      'border-top-right-radius': right,\n      'border-bottom-right-radius': right,\n    }\n  }\n\n  get outline() {\n    if (params.outline) {\n      return 'var(--color-outline-variant)'\n    }\n    if (params.style === 'outlined' && !(params.mode === 'toggle' && params.selected)) {\n      return 'var(--color-outline-variant)'\n    }\n    return 'transparent'\n  }\n\n  get sizeClass() {\n    if (['xSmall', 'small', 'medium', 'large', 'xLarge'].includes(params.size)) {\n      return `_CSS-${params.size}`\n    }\n    return '_CSS-small'\n  }\n\n  get widthClass() {\n    if (['narrow', 'default', 'wide'].includes(params.width)) {\n      return `_CSS-width-${params.width}`\n    }\n    return null\n  }\n\n  get iconInCornerClasses() {\n    if (params.iconInCorner) {\n      return '_CSS-icon-in-corner'\n    }\n  }\n\n  colorVars(colorInput) {\n    function colorCss(options) {\n      const {color = colorInput ?? 'primary', isBackground = false, isContainer = false} = options\n      const colorIsExtended = !['primary', 'secondary', 'tertiary', 'neutral', 'neutral-variant', 'error'].includes(color)\n      return `var(--color-${colorIsExtended ? 'extended-' : ''}${isBackground ? '' : 'on-'}${color}${isContainer ? '-container' : ''})`\n    }\n    return {\n      '--m3-surface--color': colorCss({isBackground: true}),\n      '--m3-surface--on-color': colorCss({isBackground: false}),\n      '--m3-surface--color-container': colorCss({isBackground: true, isContainer: true}),\n      '--m3-surface--on-color-container': colorCss({isBackground: false, isContainer: true}),\n    }\n  }\n\n  get colorClasses() {\n    const style = ['elevated', 'filled', 'tonal', 'outlined', 'text'].includes(params.style) ? `m3-surface--${params.style}` : ''\n    const mode = params.mode === 'toggle' ? (!!params.selected ? 'm3-surface--selected' : 'm3-surface--unselected') : ''\n    \n    return `${style} ${mode} m3-surface--state-mapping state-disabled-use-element-state state-hover-use-element-state state-focus-use-element-state state-active-use-element-state`\n  }\n\n  get positionClass() {\n    return `justify-${this.position}`\n  }\n\n  get position() {\n    if (['start', 'center', 'end'].includes(params.position)) {\n      return params.position\n    }\n    return 'center'\n  }\n\n  iconClasses(side) {\n    // side 'left' or 'right'\n    return [\n      '_CSS-icon', \n      this.sizeClass, \n      params[`${side}Icon`],\n      params[`${side}IconSwapOpacity`] && 'fa-swap-opacity',\n    ]\n  }\n\n  iconStyles(side) {\n    // side 'left' or 'right'\n    const reverseSide = side === 'right' ? 'left' : 'right'\n    return {\n      color: 'var(--color-m3-surface--text)',\n      '--fa-primary-color': this.iconPrimaryColor(params[`${side}IconColor`]),\n      '--fa-secondary-color': this.iconSecondaryColor(params[`${side}IconSecondaryColor`]),\n      '--fa-primary-opacity': params.disabled || !params[`${side}IconPrimaryOpacity`] ? '100%' : params[`${side}IconPrimaryOpacity`],\n      '--fa-secondary-opacity': params.disabled || !params[`${side}IconSecondaryOpacity`] ? '40%' : params[`${side}IconSecondaryOpacity`],\n      'font-size': 'var(--_CSS-icon-font-size)',\n      ...(params.label && { [`margin-${reverseSide}`]: 'var(--_CSS-icon-margin)' }),\n    }\n  }\n\n  iconPrimaryColor(color) {\n    if (params.disabled) {\n      return 'var(--color-m3-surface--text)'\n    }\n    if (color) {\n      return color\n    }\n    return 'var(--color-m3-surface--text)'\n  }\n\n  iconSecondaryColor(color) {\n    if (params.disabled) {\n      return 'var(--color-m3-surface--text)'\n    }\n    if (color) {\n      return color\n    }\n    return this.iconPrimaryColor(color)\n  }\n}","css":"/* Extended Hitbox for smaller buttons\n */\n._CSS-btn::before {\n  content: ''; \n  position: absolute;\n  left: 0;\n  right: 0;\n  background-color: transparent; \n  &._CSS-xSmall {\n    top: -0.5rem;\n    bottom: -0.5rem;\n  }\n  &._CSS-small {\n    top: -0.25rem;\n    bottom: -0.25rem;\n  }\n}\n\n._CSS-btn {\n  --_CSS-icon-in-corner: \n    calc(\n      calc(\n        var(--_CSS-height)\n        -\n        calc(\n          calc(var(--_CSS-border-width) * 2)\n          +\n          var(--_CSS-icon-font-size)\n        )\n      )\n      / 2\n    );\n  &._CSS-xSmall {\n    --_CSS-border-width: 0.0625rem;\n    --_CSS-height: 2rem;\n    height: var(--_CSS-height);\n    border-width: var(--_CSS-border-width);\n    padding: 0 0.75rem;\n    font-weight: 500;\n    font-size: 14pt;\n    line-height: 20pt;\n    letter-spacing: 0.1;\n    --_CSS-icon-font-size: 1.25rem;\n    --_CSS-icon-margin: 0.5rem;\n\n    &._CSS-width-narrow {\n      width: 1.75rem;\n      padding: 0;\n    }\n    &._CSS-width-default {\n      width: 2rem;\n      padding: 0;\n    }\n    &._CSS-width-wide {\n      width: 2.25rem;\n      padding: 0;\n    }\n    &._CSS-icon-in-corner {\n      padding: 0 var(--_CSS-icon-in-corner);\n    }\n  }\n\n  &._CSS-small {\n    --_CSS-border-width: 0.0625rem;\n    --_CSS-height: 2.5rem;\n    height: var(--_CSS-height);\n    border-width: var(--_CSS-border-width);\n    padding: 0 1rem;\n    font-weight: 500;\n    font-size: 14pt;\n    line-height: 20pt;\n    letter-spacing: 0.1;\n    --_CSS-icon-font-size: 1.25rem;\n    --_CSS-icon-margin: 0.5rem;\n\n    &._CSS-width-narrow {\n      width: 2rem;\n      padding: 0;\n    }\n    &._CSS-width-default {\n      width: 2.5rem;\n      padding: 0;\n    }\n    &._CSS-width-wide {\n      width: 3.25rem;\n      padding: 0;\n    }\n    &._CSS-icon-in-corner {\n      padding: 0 var(--_CSS-icon-in-corner);\n    }\n  }\n\n  &._CSS-medium {\n    --_CSS-border-width: 0.0625rem;\n    --_CSS-height: 3.5rem;\n    height: var(--_CSS-height);\n    border-width: var(--_CSS-border-width);\n    padding: 0 1.5rem;\n    font-weight: 500;\n    font-size: 16pt;\n    line-height: 24pt;\n    letter-spacing: 0.15pt;\n    --_CSS-icon-font-size: 1.5rem;\n    --_CSS-icon-margin: 0.5rem;\n\n    &._CSS-width-narrow {\n      width: 3rem;\n      padding: 0;\n    }\n    &._CSS-width-default {\n      width: 3.5rem;\n      padding: 0;\n    }\n    &._CSS-width-wide {\n      width: 4.5rem;\n      padding: 0;\n    }\n    &._CSS-icon-in-corner {\n      padding: 0 var(--_CSS-icon-in-corner);\n    }\n  }\n\n  &._CSS-large {\n    --_CSS-border-width: 0.125rem;\n    --_CSS-height: 6rem;\n    height: var(--_CSS-height);\n    border-width: var(--_CSS-border-width);\n    padding: 0 3rem;\n    font-weight: 400;\n    font-size: 24pt;\n    line-height: 32pt;\n    letter-spacing: 0pt;\n    --_CSS-icon-font-size: 2rem;\n    --_CSS-icon-margin: 0.75rem;\n\n    &._CSS-width-narrow {\n      width: 4rem;\n      padding: 0;\n    }\n    &._CSS-width-default {\n      width: 6rem;\n      padding: 0;\n    }\n    &._CSS-width-wide {\n      width: 8rem;\n      padding: 0;\n    }\n    &._CSS-icon-in-corner {\n      padding: 0 var(--_CSS-icon-in-corner);\n    }\n  }\n\n  &._CSS-xLarge {\n    --_CSS-border-width: 0.1875rem;\n    --_CSS-height: 8.5rem;\n    height: var(--_CSS-height);\n    border-width: var(--_CSS-border-width);\n    padding: 0 4rem;\n    font-weight: 400;\n    font-size: 32pt;\n    line-height: 40pt;\n    letter-spacing: 0pt;\n    --_CSS-icon-font-size: 2.5rem;\n    --_CSS-icon-margin: 1rem;\n\n    &._CSS-width-narrow {\n      width: 6.5rem;\n      padding: 0;\n    }\n    &._CSS-width-default {\n      width: 8.5rem;\n      padding: 0;\n    }\n    &._CSS-width-wide {\n      width: 11.5rem;\n      padding: 0;\n    }\n    &._CSS-icon-in-corner {\n      padding: 0 var(--_CSS-icon-in-corner);\n    }\n  }\n}\n\n/* Border Radius must not be 9999px for fully rounded, because it also influences the sqaure corners.\n   https://github.com/tailwindlabs/tailwindcss/discussions/18447\n   50% does not work, because a button isnt a square\n */\n._CSS-btn {\n  &._CSS-xSmall {\n    --_CSS-border-radius--state-default-square: 0.75rem;\n    --_CSS-border-radius--state-default-very-square: 0.25rem;\n    --_CSS-border-radius--state-default-round: 1rem;\n    --_CSS-border-radius--state-active-square: 0.5rem;\n    --_CSS-border-radius--state-active-very-square: 0.5rem;\n    --_CSS-border-radius--state-active-round: 0.75rem;\n    &._CSS-width-narrow {\n      --_CSS-border-radius--state-default-round: 0.875rem;\n      --_CSS-border-radius--state-active-round: 0.75rem;\n    }\n  }\n  &._CSS-small {\n    --_CSS-border-radius--state-default-square: 0.75rem;\n    --_CSS-border-radius--state-default-very-square: 0.25rem;\n    --_CSS-border-radius--state-default-round: 1.25rem;\n    --_CSS-border-radius--state-active-square: 0.5rem;\n    --_CSS-border-radius--state-active-very-square: 1rem;\n    --_CSS-border-radius--state-active-round: 1rem;\n    &._CSS-width-narrow {\n      --_CSS-border-radius--state-default-round: 1rem;\n      --_CSS-border-radius--state-active-round: 0.75rem;\n    }\n  }\n  &._CSS-medium {\n    --_CSS-border-radius--state-default-square: 1rem;\n    --_CSS-border-radius--state-default-very-square: 0.25rem;\n    --_CSS-border-radius--state-default-round: 1.75rem;\n    --_CSS-border-radius--state-active-square: 0.75rem;\n    --_CSS-border-radius--state-active-very-square: 1rem;\n    --_CSS-border-radius--state-active-round: 1.25rem;\n    &._CSS-width-narrow {\n      --_CSS-border-radius--state-default-round: 1.5rem;\n      --_CSS-border-radius--state-active-round: 1rem;\n    }\n  }\n  &._CSS-large {\n    --_CSS-border-radius--state-default-square: 1.75rem;\n    --_CSS-border-radius--state-default-very-square: 0.5rem;\n    --_CSS-border-radius--state-default-round: 3rem;\n    --_CSS-border-radius--state-active-square: 1rem;\n    --_CSS-border-radius--state-active-very-square: 2rem;\n    --_CSS-border-radius--state-active-round: 2rem;\n    &._CSS-width-narrow {\n      --_CSS-border-radius--state-default-round: 2rem;\n      --_CSS-border-radius--state-active-round: 1.5rem;\n    }\n  }\n  &._CSS-xLarge {\n    --_CSS-border-radius--state-default-square: 1.75rem;\n    --_CSS-border-radius--state-default-very-square: 0.75rem;\n    --_CSS-border-radius--state-default-round: 4.25rem;\n    --_CSS-border-radius--state-active-square: 1rem;\n    --_CSS-border-radius--state-active-very-square: 2.5rem;\n    --_CSS-border-radius--state-active-round: 3.5rem;\n    &._CSS-width-narrow {\n      --_CSS-border-radius--state-default-round: 3.25rem;\n      --_CSS-border-radius--state-active-round: 2.5rem;\n    }\n  }\n\n  --_CSS-border-radius--square-static: var(--_CSS-border-radius--state-default-square);\n  --_CSS-border-radius--square-dynamic: var(--_CSS-border-radius--state-default-square);\n\n  --_CSS-border-radius--very-square-static: var(--_CSS-border-radius--state-default-very-square);\n  --_CSS-border-radius--very-square-dynamic: var(--_CSS-border-radius--state-default-very-square);\n\n  --_CSS-border-radius--round-static: var(--_CSS-border-radius--state-default-round);\n  --_CSS-border-radius--round-dynamic: var(--_CSS-border-radius--state-default-round);\n\n  &:active:enabled {\n    --_CSS-border-radius--square-dynamic: var(--_CSS-border-radius--state-active-square);\n    --_CSS-border-radius--very-square-dynamic: var(--_CSS-border-radius--state-active-very-square);\n    --_CSS-border-radius--round-dynamic: var(--_CSS-border-radius--state-active-round);\n  }\n}\n","name":"Button","packages":[],"parameters":["color","style","size","width","label","position","title","mode","selected","disabled","italic","shape","iconInCorner","leftIcon","leftIconAttached","leftIconSwapOpacity","leftIconColor","leftIconSecondaryColor","leftIconPrimaryOpacity","leftIconSecondaryOpacity","leftShape","leftShapeStatic","rightIcon","rightIconAttached","rightIconSwapOpacity","rightIconColor","rightIconSecondaryColor","rightIconPrimaryOpacity","rightIconSecondaryOpacity","rightShape","rightShapeStatic","outline","count","countColor"],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":["A semantic color defined in the scheme: primary, warn","Uses the provided color to give the button more or less emphasize: elevated, filled, tonal, outlined, text","How big the button is: xLarge, large, medium, small, xSmall","When using only leftIcon, allows you to stetch the button: narrow, default, wide","The button text","The position of the text and attached icons: start, center, end","The title of the button","Decide between single click or a potential different design, if the selected parameter is set: default, toggle","Styles the button differently if the mode is set to 'toggle'","Disable the button","Use italic font","Style the corner radius: round, square, very-square","Moves the left icon more to the left, putting it directly at the center of the border radius. Same for right icon","Classes for the left icon e.g. far fa-circle. Also use duotone classes here","Normally the left icon is at the very left. This attaches it to the text","leftIconSwapOpacity","leftIconColor: var(someVar), #123456, red, blue","When using duotone, use this to define the secondary color","leftIconPrimaryOpacity: var(someVar), '80%'","leftIconSecondaryOpacity","Overwrite the shape only for the left side","Disallow changing of the border radius on hover, active, etc.","rightIcon","rightIconAttached","rightIconSwapOpacity","rightIconColor","rightIconSecondaryColor","rightIconPrimaryOpacity","rightIconSecondaryOpacity","rightShape","rightShapeStatic","Force an outline (always uses --color-outline-variant)","Enables a bubble in the top right displaying a number","Set the color for the count. Use a semantic color in the scheme: primary, warn"],"parametersTypes":["string","string","string","string","string","string","string","string","boolean","boolean","boolean","string","boolean","string","boolean","string","string","string","string","string","string","boolean","string","boolean","string","string","string","string","string","string","boolean","boolean","number","string"],"template":"<button\n  class=\"_CSS-btn relative transition-all ease-in-out duration-[var(--state-hover-animation-duration)] w-full\"\n  :class=\"[\n    controller.sizeClass,\n    controller.widthClass,\n    controller.colorClasses,\n    controller.iconInCornerClasses,\n    controller.outline,\n    params.disabled ? 'cursor-not-allowed' : 'cursor-pointer',\n  ]\"\n  @click=\"!params.disabled && $emit('selected')\"\n  :style=\"{\n      ...controller.colorVars(params.color),\n      backgroundColor: 'color-mix(in srgb, var(--color-m3-surface--state-layer) var(--color-m3-surface--state-layer-opacity), var(--color-m3-surface--background))',\n      ...(params.disabled && { boxShadow: 'none' }),\n      ...controller.shapeStyle,\n      'box-shadow': 'var(--color-m3-surface--shadow)',\n      'border-color': controller.outline,\n    }\"\n  :title=\"params.title ?? params.label\"\n  :disabled=\"params.disabled\"\n> \n  <!-- Counter -->\n  <div \n    v-if=\"params.count\"\n    class=\"absolute rounded-full -top-[1px] -translate-y-1/2 shadow-1 flex items-center px-2 py-1\"\n    :class=\"[\n        params.count <= 9 && 'xtext-[12px]', \n        params.count > 9 && params.count <= 99 && 'xtext-[10px]', \n        params.count > 99 && 'xtext-[8px]',\n        controller.colorClasses,\n      ]\"\n    :style=\"{\n          ...controller.colorVars(params.countColor || params.color),\n          backgroundColor: 'color-mix(in srgb, var(--color-m3-surface--state-layer) var(--color-m3-surface--state-layer-opacity), var(--color-m3-surface--background))',\n          color: 'var(--color-m3-surface--text)',\n          'line-height': 'normal',\n          fontSize: '0.75em',\n          opacity: '100%',\n          right: '-10px',\n        }\"\n  >\n    <span \n      class=\"text-center\"\n      :class=\"[\n          {'xSmall': 'min-w-3', 'small': 'min-w-4', 'medium': 'min-w-6', 'large': 'min-w-8', 'xLarge': 'min-w-12'}[params.size],\n        ]\"\n    >\n      {{ params.count }}\n    </span>\n  </div>\n  <!-- Actual Button -->\n  <div\n    class=\"flex w-full h-full items-center\"\n    :class=\"[\n        controller.sizeClass,\n        controller.widthClass ? 'justify-center' : ''\n      ]\"\n  >\n    <!-- Icon Left at the edge -->\n    <ae-icon\n      v-if=\"!params.leftIconAttached && params.leftIcon\"\n      :class=\"controller.iconClasses('left')\"\n      :style=\"controller.iconStyles('left')\"\n    ></ae-icon>\n    <!-- Text Area -->\n    <div\n      v-if=\"!params.width\"\n      class=\"items-center flex-1 flex min-w-0\"\n      :class=\"[\n          controller.positionClass,\n        ]\"\n    >\n      <!-- Icon Left next to text -->\n      <ae-icon\n        v-if=\"params.leftIconAttached && params.leftIcon\"\n        :class=\"controller.iconClasses('left')\"\n        :style=\"controller.iconStyles('left')\"\n      ></ae-icon>\n      <!-- Text -->\n      <span\n        v-if=\"params.label\"\n        class=\"truncate flex-1\"\n        :class=\"[\n            params.italic ? 'italic' : '',\n            params.disabled ? 'cursor-not-allowed' : 'cursor-pointer'\n          ]\"\n        :style=\"{\n            color: 'var(--color-m3-surface--text)'\n          }\"\n      >\n        {{params.label}}\n      </span>\n      <!-- Icon Right next to text -->\n      <ae-icon\n        v-if=\"params.rightIconAttached && params.rightIcon\"\n        :class=\"controller.iconClasses('right')\"\n        :style=\"controller.iconStyles('right')\"\n      ></ae-icon>\n    </div>\n    <!-- Icon Right at the edge -->\n    <ae-icon\n      v-if=\"!params.rightIconAttached && params.rightIcon\"\n      :class=\"controller.iconClasses('right')\"\n      :style=\"controller.iconStyles('right')\"\n    ></ae-icon>\n  </div>\n</button>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15","inheritedLocks":[null,null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-09T08:11:30+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"a6156e84-5588-48fd-aa0e-31ccd38c4c5b","previous":{"v":"65f70af6c687bc59"},"stamps":[],"t":1759997490725,"v":"081a1f333d37b82e"},{"a":["apps","009b3a60-72d5-46f6-8dc6-7f9001e03283","b676aa47-5082-403c-bf82-6aeead137ec1"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2023-07-14T13:40:11+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1689342011478,"data":{"applies":"","controller":"class Controller {\n  async getReadonlyFields (ancestorId, limitOutputTo) {\n    const forms = await Aeppic.find(`(id:${ancestorId} OR p:${ancestorId}) f.id:form`, { size: 9999 })\n    const formsAsFormDocuments = await Promise.all(forms.map(form => Aeppic.getForm(form)))\n\n    const rows = []\n\n    for (const form of formsAsFormDocuments) {\n      for (const field of form.fields) {\n        const placeholder = form.getPlaceholder(field.name)\n\n        if (!placeholder) {\n          continue\n        }\n\n        const isReadonly = placeholder.style?.readonly?.value === true\n        console.log(placeholder)\n\n        const simpleRequired = placeholder.field?.tags?.required\n        const requiredExpression = simpleRequired && placeholder.field.tags?.required?.expression\n\n        if (limitOutputTo == undefined || limitOutputTo === isReadonly) {\n          rows.push({\n            form: form.data.name || form.id,\n            field: placeholder.label || field.name,\n            isReadonly,\n            isRequired: requiredExpression || simpleRequired || false\n          })\n        }\n\n      }\n    }\n    // console.table(rows)\n\n    return rows\n  }\n\n  async exportApplications() {\n    const rows = await this.getReadonlyFields('03d08db0-f873-48cd-a5b5-c34937bddc2f')\n    \n    $refs.exporter.$emit('export', {\n      rows:  rows,\n      name: 'Export Antrags Formulare'\n    })\n  }\n\n  async exportMasterdata() {\n    const rows = await this.getReadonlyFields('50c3c7c5-c3d4-460c-b34d-0d61a4cb09ae')\n    \n    $refs.exporter.$emit('export', {\n      rows:  rows,\n      name: 'Export Bestandseintrags Formulare'\n    })\n  }\n\n  async exportChecklists() {\n    const rows = await this.getReadonlyFields('b5dcdd5b-6a84-4e13-92a2-052a1f1d1492')\n    \n    $refs.exporter.$emit('export', {\n      rows:  rows,\n      name: 'Export Prüfkataloge Formulare'\n    })\n  }\n\n  async exportDecisions() {\n    const rows = await this.getReadonlyFields('5beeae17-7bb1-4eeb-bcb6-cf0e6950e27c')\n    \n    $refs.exporter.$emit('export', {\n      rows:  rows,\n      name: 'Export Beschluss Formulare'\n    })\n  }\n\n  async exportSammelinfo() {\n    const rows = await this.getReadonlyFields('c881dec7-95f5-434f-9423-93143aaa976b')\n    \n    $refs.exporter.$emit('export', {\n      rows:  rows,\n      name: 'Export Sammelinformation Formulare'\n    })\n  }\n}","css":"","name":"Button Antrags Forms CSV","packages":[],"template":"<div class=\"flex flex-col gap-2\">\n  <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-text=\"Anträge Forms\"\n            @selected=\"controller.exportApplications()\"\n            param-icon-design-document-id=\"03d08db0-f873-48cd-a5b5-c34937bddc2f\"\n  ></ae-layout>\n\n  <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-text=\"Prüfkatalog Forms\"\n            @selected=\"controller.exportChecklists()\"\n            param-icon-design-document-id=\"50c3c7c5-c3d4-460c-b34d-0d61a4cb09ae\"\n  ></ae-layout>\n\n    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-text=\"Beschluss Forms\"\n            @selected=\"controller.exportDecisions()\"\n            param-icon-design-document-id=\"50c3c7c5-c3d4-460c-b34d-0d61a4cb09ae\"\n  ></ae-layout>\n\n  <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-text=\"Bestandseinträge Forms\"\n            @selected=\"controller.exportMasterdata()\"\n            param-icon-design-document-id=\"50c3c7c5-c3d4-460c-b34d-0d61a4cb09ae\"\n  ></ae-layout>\n\n  <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-text=\"Sammelinformationen Forms\"\n            @selected=\"controller.exportSammelinfo()\"\n            param-icon-design-document-id=\"50c3c7c5-c3d4-460c-b34d-0d61a4cb09ae\"\n  ></ae-layout>\n</div>\n\n<ae-layout layout-id=\"a7c668bb-022c-4ffd-94bb-b3430fa73dbb\" ref=\"exporter\" v-show=\"false\"></ae-layout>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"ff1d7dd5-188f-4277-bba2-85e2df54487a","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-07-10T13:16:02+00:00","backedBy":null,"by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":null},"p":"b676aa47-5082-403c-bf82-6aeead137ec1","previous":{"v":"307273c2be44ebb9"},"stamps":[],"t":1752153362934,"v":"90e17b93476cc97a"},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9"],"a_depth":4,"a_forms":["system-folder-form","folder","form","folder"],"created":{"at":"2025-10-07T13:47:29+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759844849694,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.secondButtonSelected = false\n    locals.buttonsSomeSelected = this.buttonsSomeSelected()\n    locals.splitButton = [\n      {\n        identifier: '1',\n        color: 'primary',\n        label: 'Ich bin 1',\n        leftIcon: 'fad fa-camera',\n        leftIconAttached: true,\n        mode: 'default',\n      },\n      {\n        identifier: '2',\n        color: 'primary',\n        leftIcon: this.icon(),\n        width: 'default', \n        mode: 'toggle',\n        colorAsSelected: true,\n        selected: locals.secondButtonSelected,\n      },\n    ]\n  }\n\n  icon () {\n    return  locals.secondButtonSelected ? 'far fa-chevron-up' : 'far fa-chevron-down'\n  }\n\n\n  get buttonsDefault() {\n    return [\n      {\n        identifier: '1',\n        color: 'primary',\n        label: 'Ich bin 1',\n        leftIcon: 'fad fa-camera',\n        leftIconColor: '#ff0000',\n        leftIconColorSecondary: '#f000f0',\n        count: 9,\n      },\n      {\n        identifier: '2',\n        color: 'primary',\n        label: 'Ich bin 2',\n        leftIcon: 'far fa-headphones',\n        italic: true,\n        count: 99,\n      },\n      {\n        identifier: '3',\n        color: 'primary',\n        label: 'Ich bin 3',\n        leftIcon: 'far fa-headphones',\n        count: 999,\n      },\n      {\n        identifier: '4',\n        color: 'primary',\n        label: 'Ich bin 4',\n        leftIcon: 'far fa-headphones',\n        disabled: false,\n        count: 9999,\n      },\n    ]\n  }\n\n  buttonsSomeSelected() {\n    return [\n      {\n        identifier: '1',\n        color: 'primary',\n        label: 'Ich bin 1',\n        leftIcon: 'far fa-headphones',\n        selected: true,\n      },\n      {\n        identifier: '2',\n        color: 'primary',\n        label: 'Ich bin 22',\n        leftIcon: 'far fa-headphones',\n        selected: false,\n      },\n      {\n        identifier: '3',\n        color: 'primary',\n        label: 'Ich bin 3',\n        leftIcon: 'far fa-headphones',\n        selected: true,\n      },\n      {\n        identifier: '4',\n        color: 'primary',\n        label: 'Ich bin 4',\n        leftIcon: 'far fa-headphones',\n        selected: false,\n      },\n    ]\n  }\n\n  splitButton() {\n    return [\n      {\n        identifier: '1',\n        color: 'primary',\n        label: 'Ich bin 1',\n        leftIcon: 'fad fa-camera',\n        leftIconAttached: true,\n        mode: 'default',\n      },\n      {\n        identifier: '2',\n        color: 'primary',\n        leftIcon: locals.secondButtonSelected ? 'far fa-chevron-up' : 'far fa-chevron-down',\n        width: 'default', \n        mode: 'toggle',\n        colorAsSelected: true,\n        selected: locals.secondButtonSelected,\n      },\n    ]\n  }\n\n  toggleSelected(event, buttons) {\n    const button = buttons.find(button => button.identifier === event)\n    if (button) {\n      button.selected = !button.selected\n    }\n  }\n}","css":"","name":"Buttongroups","packages":[],"template":"<section\n    class=\"bg-surface text-on-surface rounded-2xl inline-block p-4\"\n  >\n  <h1>Buttongroups</h1>\n  <h1>Default</h1>\n  <section\n    class=\"flex gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      layoutId=\"f8b28bc5-081c-4c39-aa9f-8ab9357f5466\"\n      class=\"w-[1500px]\"\n      :param-shape=\"'round'\"\n      :param-color=\"'primary'\"\n      :param-style=\"'filled'\"\n      :param-size=\"'large'\"\n      :param-disabled=\"false\"\n      :param-buttons=\"controller.buttonsDefault\"\n      :param-leftIconAttached=\"true\"\n    ></ae-layout>\n  </section>\n\n  <h1>Middle and End selected</h1>\n  <section\n    class=\"flex gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      layoutId=\"f8b28bc5-081c-4c39-aa9f-8ab9357f5466\"\n      class=\"w-[1500px]\"\n      :param-shape=\"'round'\"\n      :param-color=\"'primary'\"\n      :param-style=\"'filled'\"\n      :param-size=\"'large'\"\n      :param-disabled=\"false\"\n      :param-buttons=\"locals.buttonsSomeSelected\"\n      param-mode=\"toggle\"\n      :param-leftIconAttached=\"true\"\n      @selected=\"controller.toggleSelected($event, locals.buttonsSomeSelected)\"\n    ></ae-layout>\n  </section>\n\n  <h1>Disabled except last</h1>\n  <section\n    class=\"flex gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      layoutId=\"f8b28bc5-081c-4c39-aa9f-8ab9357f5466\"\n      class=\"w-[1500px]\"\n      param-label=\"Click Me\"\n      :param-shape=\"'round'\"\n      :param-color=\"'primary'\"\n      :param-style=\"'filled'\"\n      :param-size=\"'large'\"\n      :param-disabled=\"true\"\n      :param-buttons=\"controller.buttonsDefault\"\n      :param-leftIconAttached=\"true\"\n    ></ae-layout>\n  </section>\n\n  <h1>Split Button</h1>\n  <section\n    class=\"flex gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      layoutId=\"f8b28bc5-081c-4c39-aa9f-8ab9357f5466\"\n      class=\"xw-64\"\n      style=\"width: 500px\"\n      param-label=\"Click Me\"\n      :param-shape=\"'round'\"\n      :param-color=\"'primary'\"\n      :param-style=\"'filled'\"\n      :param-size=\"'large'\"\n      :param-buttons=\"locals.splitButton\"\n      @selected=\"controller.toggleSelected($event, locals.splitButton)\"\n    ></ae-layout>\n    <ae-layout\n      layoutId=\"f8b28bc5-081c-4c39-aa9f-8ab9357f5466\"\n      class=\"xw-64\"\n      style=\"width: 300px\"\n      param-label=\"Click Me\"\n      :param-shape=\"'round'\"\n      :param-color=\"'primary'\"\n      :param-style=\"'filled'\"\n      :param-size=\"'large'\"\n      :param-buttons=\"locals.splitButton\"\n      @selected=\"controller.toggleSelected($event, locals.splitButton)\"\n    ></ae-layout>\n  </section>\n  \n</section>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"63b6cadb-9c72-4418-9e64-01291117a51e","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-09T10:30:44+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"6ad6f21b-b086-4e9c-aa38-4893fd343fb9","previous":{"v":"ad105f706a62fb03"},"stamps":[],"t":1760005844240,"v":"8a670ea560a732b7"},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9"],"a_depth":4,"a_forms":["system-folder-form","folder","form","folder"],"created":{"at":"2025-10-07T13:48:55+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759844935736,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.defaultCombinations = {\n      style: ['elevated', 'filled', 'tonal', 'outlined', 'text'],\n      size: ['xSmall', 'small', 'medium', 'large', 'xLarge'],\n    }\n    locals.defaultFiller = {\n      shape : ['round', 'square'],\n      color : ['primary'],\n      leftIcon: ['far fa-circle'],\n      disabled: [false, false, false, false, false, false, false]\n    }\n  }\n\n  generateCombinations(combinations, filler) {\n    const combinationKeys = Object.keys(combinations).filter(key => Array.isArray(combinations[key]) && combinations[key].length > 0)\n    const results = []\n\n    function buildCombinations(index, currentCombination) {\n      if (index === combinationKeys.length) {\n        for (const key in filler) {\n          const options = filler[key]\n          if (Array.isArray(options) && options.length > 0) {\n            currentCombination[key] = options[Math.floor(Math.random() * options.length)]\n          }\n        }\n        results.push(currentCombination)\n        return\n      }\n\n      const currentKey = combinationKeys[index]\n      const values = combinations[currentKey]\n\n      for (const value of values) {\n        const newCombination = { ...currentCombination, [currentKey]: value }\n        buildCombinations(index + 1, newCombination)\n      }\n    }\n\n    buildCombinations(0, {})\n    return results\n  }\n\n  get buttonsShape() {\n    const defaultCombinations = {\n      size: ['xSmall', 'small', 'medium', 'large', 'xLarge'],\n      shape : ['round', 'square', 'very-square'],\n    }\n    const defaultFiller = {\n      leftIcon: ['far fa-circle'],\n      label: ['Click Me'],\n      style: ['filled'],\n      color : ['primary'],\n      disabled: [false]\n    }\n    const withText = this.generateCombinations(defaultCombinations, defaultFiller)\n    const withoutText = this.generateCombinations({...defaultCombinations, width: ['narrow', 'default', 'wide']}, {...defaultFiller, label: null})\n    return [...withText, ...withoutText]\n  }\n\n  get buttonsStyleColor() {\n    const defaultCombinations = {\n      style: ['elevated', 'filled', 'tonal', 'outlined', 'text'],\n      color : ['primary', 'secondary', 'warn'],\n    }\n    const defaultFiller = {\n      shape : ['round'],\n      size: ['medium'],\n      leftIcon: ['far fa-circle'],\n      label: ['Click Me'],\n      disabled: [false]\n    }\n    const withText = this.generateCombinations(defaultCombinations, defaultFiller)\n    return withText\n  }\n\n  get buttonsStyleColorToggle() {\n    const defaultCombinations = {\n      style: ['elevated', 'filled', 'tonal', 'outlined'],\n      color : ['primary', 'secondary', 'warn'],\n    }\n    const defaultFiller = {\n      shape : ['round'],\n      size: ['medium'],\n      leftIcon: ['far fa-circle'],\n      label: ['Click Me'],\n      disabled: [false]\n    }\n    const withText = this.generateCombinations(defaultCombinations, defaultFiller)\n    return [...withText]\n  }\n\n  get buttonsPositioningOneIconWithText() {\n    const defaultCombinations = {\n      leftIconAttached: [true, false],\n      position: ['start', 'center', 'end'],\n    }\n    const defaultFiller = {\n      color : ['primary'],\n      style: ['filled'],\n      shape : ['round'],\n      size: ['medium'],\n      leftIcon: ['far fa-circle'],\n      disabled: [false]\n    }\n    return this.generateCombinations(defaultCombinations, defaultFiller)\n  }\n\n  get buttonsPositioningTwoIconsWithText() {\n    const defaultCombinations = {\n      leftIconAttached: [true, false],\n      rightIconAttached: [true, false],\n      position: ['start', 'center', 'end'],\n    }\n    const defaultFiller = {\n      color : ['primary'],\n      style: ['filled'],\n      shape : ['round'],\n      size: ['medium'],\n      leftIcon: ['fas fa-camera fa-duotone'],\n      rightIcon: ['far fa-square'],\n      disabled: [false]\n    }\n    return this.generateCombinations(defaultCombinations, defaultFiller)\n  }\n\n  get buttonsPositioningOneIconWithoutText() {\n    const defaultCombinations = {\n      leftIconAttached: [true, false],\n    }\n    const defaultFiller = {\n      color : ['primary'],\n      style: ['filled'],\n      shape : ['round'],\n      size: ['medium'],\n      leftIcon: ['far fa-circle'],\n      disabled: [false]\n    }\n    return this.generateCombinations(defaultCombinations, defaultFiller)\n  }\n\n  get buttonsPositioningTwoIconsWithoutText() {\n    const defaultCombinations = {\n      leftIconAttached: [true, false],\n      rightIconAttached: [true, false],\n    }\n    const defaultFiller = {\n      color : ['primary'],\n      style: ['filled'],\n      shape : ['round'],\n      size: ['medium'],\n      leftIcon: ['far fa-circle'],\n      rightIcon: ['far fa-square'],\n      disabled: [false]\n    }\n    return this.generateCombinations(defaultCombinations, defaultFiller)\n  }\n\n  get buttonsCount() {\n    const defaultCombinations = {\n      size: ['xSmall', 'small', 'medium', 'large', 'xLarge'],\n      shape : ['round', 'square', 'very-square'],\n    }\n    const defaultFiller = {\n      color : ['primary'],\n      style: ['filled'],\n      leftIcon: ['far fa-circle'],\n      rightIcon: ['far fa-camera'],\n      leftIconAttached: [true],\n      disabled: [false],\n      label: ['Click Me'],\n      count: [9], //, 99, 999, 9999, 99999, 999999],\n      countColor: ['secondary', 'tertiary', 'warn', 'error']\n    }\n    return this.generateCombinations(defaultCombinations, defaultFiller)\n  }\n\n  get buttonsIconInCorner() {\n    const defaultCombinations = {\n      size: ['xSmall', 'small', 'medium', 'large', 'xLarge'],\n      shape : ['round', 'square', 'very-square'],\n      label: ['Click Me', ''],\n    }\n    const defaultFiller = {\n      iconInCorner: [true],\n      color : ['primary'],\n      style: ['filled'],\n      leftIcon: ['far fa-circle'],\n      leftIconAttached: [false],\n      disabled: [false],\n      count: [9], //, 99, 999, 9999, 99999, 999999],\n      countColor: ['secondary', 'tertiary', 'warn', 'error']\n    }\n    return this.generateCombinations(defaultCombinations, defaultFiller)\n  }\n}","css":"","name":"Buttons","packages":[],"template":"<section\n    class=\"bg-surface text-on-surface rounded-2xl inline-block p-4\"\n  >\n  <h1>Buttons</h1>\n  <h1>Shapes</h1>\n  <section\n    class=\"flex gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsShape\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :params=\"{...button}\"\n    ></ae-layout>\n  </section>\n  <h1>Styles and Colors</h1>\n  <h1>Default</h1>\n  <section\n    class=\"flex gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsStyleColor\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :params=\"{...button}\"\n    ></ae-layout>\n  </section>\n    <h1>Unselected</h1>\n  <section\n    class=\"flex gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsStyleColorToggle\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :params=\"{...button, mode: 'toggle', selected: false}\"\n    ></ae-layout>\n  </section>\n    <h1>Selected</h1>\n  <section\n    class=\"flex gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsStyleColorToggle\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :params=\"{...button, mode: 'toggle', selected: true}\"\n    ></ae-layout>\n  </section>\n\n    <h1>Styles and Colors Disabled</h1>\n  <h1>Default</h1>\n  <section\n    class=\"flex gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsStyleColor\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :params=\"{...button, disabled: true}\"\n    ></ae-layout>\n  </section>\n    <h1>Unselected</h1>\n  <section\n    class=\"flex gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsStyleColorToggle\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :params=\"{...button, disabled: true, selected: false, mode: 'toggle'}\"\n    ></ae-layout>\n  </section>\n    <h1>Selected</h1>\n  <section\n    class=\"flex gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsStyleColorToggle\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :params=\"{...button, disabled: true, selected: true, mode: 'toggle'}\"\n    ></ae-layout>\n  </section>\n\n  <h1>Positioning</h1>\n  <h1>One Icon With Text</h1>\n  <section\n    class=\"flex flex-wrap gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsPositioningOneIconWithText\"\n      class=\"w-[700px]\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :param-label=\"'text:' + button.position + '  attached' + button.leftIconAttached\"\n      :params=\"{...button}\"\n    ></ae-layout>\n  </section>\n  <h1>Two Icons With Text</h1>\n  <section\n    class=\"flex flex-wrap gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsPositioningTwoIconsWithText\"\n      class=\"w-[700px]\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :param-label=\"'text:' + button.position + '  attached:' + button.leftIconAttached + ',' + button.rightIconAttached\"\n      :params=\"{...button}\"\n    ></ae-layout>\n  </section>\n  <h1>One Icon Without Text</h1>\n  <section\n    class=\"flex flex-wrap gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsPositioningOneIconWithoutText\"\n      class=\"w-[700px]\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :params=\"{...button}\"\n    ></ae-layout>\n  </section>\n  <h1>Two Icons Without Text</h1>\n  <section\n    class=\"flex flex-wrap gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsPositioningTwoIconsWithoutText\"\n      class=\"w-[700px]\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :params=\"{...button}\"\n    ></ae-layout>\n  </section>\n\n  <h1>Counts</h1>\n  <section\n    class=\"flex flex-wrap gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsCount\"\n      class=\"xw-[700px]\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :params=\"{...button}\"\n    ></ae-layout>\n  </section>\n\n  <h1>Icon in Corner</h1>\n  <section\n    class=\"flex flex-wrap gap-4 flex-wrap items-center\"\n  >\n    <ae-layout\n      v-for=\"button in controller.buttonsIconInCorner\"\n      class=\"xw-[700px]\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :params=\"{...button}\"\n    ></ae-layout>\n  </section>\n</section>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"a6156e84-5588-48fd-aa0e-31ccd38c4c5b","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-07T13:49:27+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"6ad6f21b-b086-4e9c-aa38-4893fd343fb9","previous":{"v":"916d3c72db460910"},"stamps":[],"t":1759844967785,"v":"4adb04a7fd48bedf"},{"id":"a5aa9e37-d6fb-4a81-9a29-0a68719f5ae7","v":"452f345713e88fcb","previous":{"v":"8712c2b6c0f95ef4"},"p":"d3295b12-08f1-47f2-b73d-5a48cdba162e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Calendar Test Layout","applies":"","packages":[],"template":"<ae-list \r\n  style=\"height:800px\"\r\n  list-id=\"03b5c1ad-c7f1-4bc9-8fa8-8aa6037e8561\"\r\n  :param-show-version=\"true\"\r\n  param-title=\"Kalender\"\r\n  xparam-popup-design=\"card\"\r\n  search=\"id:apps OR a:apps\"\r\n  :sort=\"{ field: 'modified.at', descending: true } \"\r\n  > \r\n</ae-list>\r\n","css":"._CSS {\r\n  background: var(--ae-background-d1);\r\n  padding: 1em;\r\n}","controller":""},"locks":[],"created":{"at":"2019-01-31T15:07:01+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2019-03-13T17:58:06+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1552499886456,"ct":1548947221775,"a_depth":3,"a":["apps","7d22534a-76b5-4f1c-8761-af3d7a1d5111","d3295b12-08f1-47f2-b73d-5a48cdba162e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"f7f81967-3fd9-4e04-9873-e223f7c999d7","v":"9f8936aeff982b16","p":"4551c597-7595-4858-8b7f-207a7fb15b3e","f":{"id":"layout-form","v":"3d11330b5bf3982d","text":"Layout"},"data":{"name":"Casting Form Layout","applies":"","packages":[],"template":"<div class=\"_CSS-card\">\n  <div class=\"_CSS-title\">\n    <ae-design name=\"title\" :document=\"params.document\"></ae-design>\n  </div>\n\n  <div class=\"_CSS-subtitle\">Castings</div>\n  <ae-control class=\"_CSS-list\" name=\"children\" :document=\"params.document\" field-name=\"castings\"\n  :param-template-parent-id=\"params.document.id\" param-design=\"card--wide,card\" :readonly=\"params.readonly\"></ae-control>\n</div>","css":"._CSS-card {\n  display: flex;\n  flex-flow: column;\n\n  overflow: hidden;\n\n  background: rgba(255,255,255,0.7);\n  padding: 1rem;\n}\n\n._CSS-title {\n  font-size: 1.5rem;\n  font-weight: bold;\n  text-transform: uppercase;\n  display: flex;\n  align-items: center;\n}\n\n._CSS-subtitle {\n  font-size: 1.3rem;\n  text-transform: uppercase;\n}\n\n._CSS-list {\n  margin-bottom: 2rem;\n}\n","controller":""},"locks":[],"created":{"at":"2018-06-22T09:08:47+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:31+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583891704,"ct":1602583891704,"a_depth":4,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","e89b29a9-6ab9-47dc-a6fe-91ebda92871d","4551c597-7595-4858-8b7f-207a7fb15b3e"],"a_forms":["folder","application-form","folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[],"previous":{"v":"7ef818303ba5f407","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"}}},{"id":"273516ed-deb4-43ce-9fa8-ca00aae0ae6c","v":"ad7fb39ee0bb1d7e","previous":{"v":"initial"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Casting Sheet of Model Application in eCasting","applies":"","packages":[],"template":"<div class=\"bp-page\">\n  <ae-design name=\"hero--intra-company\" :document=\"locals.document\"></ae-design>\n\n  <template v-if=\"controller.files.images.length\">\n    <h1 v-translate=\"'images'\">Bilder</h1>\n    <ae-list  list-id=\"731c1d99-6cef-4d97-b265-184d63f9d0a6\"\n              :documents=\"controller.files.images\"\n              :param-design-params=\"{ highlightStartingDate: params.highlightStartingDate }\"\n              param-min-column-width=\"var(--dbps-thumbnail-width)\"\n              param-max-column-width=\"var(--dbps-thumbnail-width)\"\n    ></ae-list>\n  </template>\n\n  <template v-if=\"controller.files.videos.length\">\n    <h1 v-translate=\"'movies'\">Videos</h1>\n    <ae-list  list-id=\"731c1d99-6cef-4d97-b265-184d63f9d0a6\"\n              :documents=\"controller.files.videos\"\n              :param-design-params=\"{ highlightStartingDate: params.highlightStartingDate }\"\n              param-min-column-width=\"var(--dbps-thumbnail-width)\"\n              param-max-column-width=\"var(--dbps-thumbnail-width)\"\n    ></ae-list>\n  </template>\n\n  <template v-if=\"controller.files.others.length\">\n    <h1 v-translate=\"'other-files'\">Andere Dateien</h1>\n    <ae-list  list-id=\"731c1d99-6cef-4d97-b265-184d63f9d0a6\"\n              :documents=\"controller.files.others\"\n              :param-design-params=\"{ highlightStartingDate: params.highlightStartingDate }\"\n              param-min-column-width=\"var(--dbps-thumbnail-width)\"\n              param-max-column-width=\"var(--dbps-thumbnail-width)\"\n    ></ae-list>\n  </template>\n\n  <template v-if=\"locals.projectSpecificInformations\">\n    <h1 v-translate=\"'projectRelatedModelData'\">Projektbezogene Modeldaten</h1>\n    <ae-layout v-if=\"locals.projectSpecificInformations\" layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\" :param-hide-empty=\"true\" :param-document=\"locals.projectSpecificInformations\" :param-readonly=\"true\"></ae-layout>\n  </template>\n\n  <ae-layout v-if=\"locals.document\" layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\" :param-hide-empty=\"true\" :param-document=\"locals.document\" :param-readonly=\"true\"></ae-layout>\n</div>\n","css":"@media print {\n  ._CSS {\n    background: white;\n  }\n}","controller":"class Controller {\n  async init() {\n    locals.projectSpecificInformations = null\n\n    if (params.pageDocumentId) {\n      // when in print mode\n      this._document = await Aeppic.get(params.pageDocumentId)\n    } else {\n      this._document = params.document || await Aeppic.get(params.documentId)\n    }\n\n    this._files = await Aeppic.getAll(this._document.data[this._filesFieldName])\n\n    locals.document = this._document\n\n    if (Aeppic.Account.id === 'bb0abc92-1952-4761-a0d2-be44d1c4440b') {\n      const commandResult = await Aeppic.Commands.execute('e75bb44b-91af-46a1-a526-b0c807b30237', this._document)\n      locals.projectSpecificInformations = commandResult.value\n    }\n  }\n\n  get files() {\n    const images = []\n    const videos = []\n    const others = []\n\n    if (this._files) {\n      for (const file of this._files) {\n        if (!file) {\n          continue\n        }\n\n        if (file.data[this._fileFieldName].type.startsWith('image/')) {\n          images.push(file)\n          continue\n        }\n\n        if (file.data[this._fileFieldName].type.startsWith('video/')) {\n          videos.push(file)\n          continue\n        }\n\n        others.push(file)\n      }\n    }\n    \n    return {\n      images,\n      videos,\n      others\n    }\n  }\n\n  get _filesFieldName() {\n    return params.fieldName || 'files'\n  }\n\n  get _fileFieldName() {\n    return params.fileFieldName || 'datei'\n  }\n\n  get filesLength () {\n    if (!this._document) {\n      return 0\n    }\n    \n    return this._document.data[params.fieldName].length\n  }\n}"},"locks":[],"created":{"at":"2019-04-12T14:13:54+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583893713,"ct":1555078434955,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"26ce1c07-fff9-41da-9c8d-d1159a272ed2","v":"7f807777be0beb8a","previous":{"v":"f725cc02afb7e586"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"Changelog Button","applies":"","packages":[],"template":"        <!-- xclass=\"{ '_CSS-action-button--overlay': params.overlay }\" -->\n<button  class=\"ae-button\"\n        @click.stop=\"controller.show()\"\n        title=\"Changelog\"\n        style=\"color:white;\"\n>\n  <ae-icon class=\"fa fa-info-circle\"></ae-icon>\n</button>\n\n<ae-dialog ref=\"dialog\" v-if=\"locals.showDialog\" :dialog-size=\"{ height: 'var(--ae-dialog__height--big)', width: 'var(--ae-dialog__width--big' }\">\n  <template #header=\"scope\">\n    <div class=\"_CSS-header\">\n      <div>Changelog</div>\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n  <template #body>\n    <ae-design name=\"changelog\" :document-id=\"params.companyId\"></ae-design>\n  </template>\n</ae-dialog>","css":"// ._CSS ._CSS-action-button--overlay {\n//   color: var(--ae-ui-background);\n//   filter: drop-shadow( 0px 0px 1px rgba(0,0,0,1) ) drop-shadow( 0px 0px 10px rgba(0,0,0,0.8));\n// }\n\n._CSS-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}","controller":"init() {\n  locals.showDialog = false\n}\n\nasync show() {\n  locals.showDialog = true\n  await Aeppic.nextRenderPass()\n  await Aeppic.nextRenderPass()\n  $refs.dialog.show()\n}\n\nclose() {\n  locals.showDialog = false\n  $refs.dialog && $refs.dialog.close()\n}\n\ndestroy() {\n  this.close()\n}"},"locks":[],"created":{"at":"2021-07-23T13:20:44+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-07-26T08:41:14+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1627288874843,"ct":1627046444215,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"8c425dba-2523-40f0-947f-f9ccb50718d7","v":"230b19141f55c915","previous":{"v":"d4fa86fb8723eaa8"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"Click control to edit","applies":"","packages":[],"template":"<!-- <ae-design v-if=\"params.document?.data[params.fieldName]?.id\" :name=\"params.selectedDesign\" :document-id=\"params.fieldName ? params.document.data[params.fieldName] : params.document.id\"></ae-design> \n<div v-else> -->\n  <div @mouseover=\"locals.hover = true\" @mouseleave=\"locals.hover = false\">\n    <!-- <button v-if=\"!locals.showControl\" class=\"ae-button\" @click.stop=\"controller.openRef($event)\">\n      <ae-icon :class=\"params.placeholderIcon\"  style=\"font-size:1.5em;\"></ae-icon>\n    </button> -->\n    <ae-control   :document=\"locals.editable\"\n                  :field-name=\"params.fieldName\"\n                  :params=\"controller.params\"\n                  :name=\"params.control\"\n                  :readonly=\"params.readonly\"\n                  v-if=\"locals.editable\"\n                  :key=\"'_CSS' + params.readonly\"\n      ></ae-control> \n  </div>\n<!-- </div> -->","css":"","controller":"class Controller {\n  async init() {\n    this.vue = null\n    locals.hover = false\n    locals.showControl = false\n    locals.editable = null\n    locals.controlParams = null\n\n    locals.editable = await Aeppic.edit(params.document)\n\n    Aeppic.watch(params.document.id, async () =>     locals.editable = await Aeppic.edit(params.document))\n  \n    locals.controlParams = (await Aeppic.getFormForDocument(params.document)).getPlaceholderControlParams(params.fieldName)\n\n    this.vue = new Vue({\n      computed: {\n        editable() { return locals.editable.data[params.fieldName] }\n      },\n      watch: {\n        editable: {\n          handler() {\n            Aeppic.save(locals.editable)\n          },\n          deep: true\n        }\n      }\n    })\n  }\n\n  get params() {\n    return { \n      ... locals.controlParams, \n      ...params,\n      ...{\n          icon: params.placeholderIcon,\n          noBorder: true,\n          list: 'tiles',\n          designParams: { design: 'avatar--tiny' }\n      }\n    }\n  }\n\n  destroy () {\n    if (this.vue) {\n      this.vue.$destroy()\n      this.vue = null\n    }\n  }\n\n//   async openRef(clickEvent) {\n//     locals.showControl = true\n\n//     await Aeppic.nextRenderPass()\n//     await Aeppic.nextRenderPass()\n//     await Aeppic.nextRenderPass()\n//     await Aeppic.nextRenderPass()\n//     await Aeppic.nextRenderPass()\n//     await Aeppic.nextRenderPass()\n//     await Aeppic.nextRenderPass()\n//     await Aeppic.nextRenderPass()\n// debugger\n//     $refs.control.$emit('click', clickEvent)\n//   } \n}"},"locks":[],"created":{"at":"2021-07-01T09:41:30+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-02-25T16:19:52+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1645805992241,"ct":1625132490157,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"32cea84f-c22f-4e6f-a0bf-1ce332ee5c5a","v":"8fa93a13b2191eea","p":"177b1d7c-255c-4d16-b367-e9622b4db575","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Command as Button with Lookup","applies":"","template":"<button v-if=\"locals.command\" class=\"ae-button\" :class=\"{ 'ae-button--primary': params.primaryButton }\" @click.stop=\"controller.executeCommand()\">\n  <ae-design name=\"title\" :document-id=\"locals.command.id\"></ae-design>\n</button>\n","css":"","controller":"class Controller {\n  async init() {\n    locals.command = null\n    locals.command = await Aeppic.get(params.fallbackCommand)\n    this.name = locals.command.data.name\n\n    await this.updateCommandByForm(params.document)\n\n    watchParam('document', async (document) => {\n      await this.updateCommandByForm(document)\n    })\n  }\n\n  async updateCommandByForm(document) {\n    if (!document) {\n      return\n    }\n\n    const queryString = `p:${document.f.id} f.id:command-form data.name:\"${this.name}\"`\n    const command = await Aeppic.findOne(queryString)  \n    \n    if (command) {\n      locals.command = command\n    }\n  }\n\n  async executeCommand() {\n    const command = await Aeppic.get(locals.command)\n\n    if (!command) {\n      throw new Error('Command not accessible')\n    }\n\n    if (!params.document) {\n      console.error('No document provided. Skipping command execution')\n\n      $emit('executed')\n\n      return\n    }\n\n    const result = await Aeppic.Commands.execute(command, params.document, { ...params.controlParams, fieldName: params.fieldName })\n\n    if (!result.ok) {\n      throw new Error('Command Execution error')\n    }\n\n    $emit('executed')\n  }\n}\n","packages":[]},"locks":[],"created":{"at":"2020-08-26T13:03:48+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-02-11T14:58:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719319448675,"ct":1719319448675,"a_depth":2,"a":["system","177b1d7c-255c-4d16-b367-e9622b4db575"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"a6a4f551db8ccb6b","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"}},"meta":{"modified":{"at":"2024-06-25T14:44:08+02:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"id":"ced88b5f-50d0-47d4-9410-a6f0dc8da778","v":"7afa758a437dc699","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Command Button","applies":"","packages":[],"template":"<button style=\"padding: 8px 16px;\" class=\"bp-button bp-button--raised\" @click=\"$emit('click', $event)\">\n  Aktionen\n</button>","css":"","controller":""},"locks":[],"created":{"at":"2019-01-24T16:05:10+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481249,"ct":1621428481249,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"77c57f95b91c2299","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"c80364ed-8a1f-40fa-a169-5cc7b45d4fb4","v":"98595a3319cb7572","previous":{"v":"e1c93e23aab76d8f"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Command Buttons with Dialog","applies":"","packages":[],"template":"<div class=\"_CSS-commands\" v-if=\"locals.commands.length\">\n  <template v-for=\"(commandOrGroup, index) of locals.commands\">\n    <button v-if=\"commandOrGroup.f.id === locals.forms.Command\" class=\"ae-button _CSS-button\" :class=\"{ 'ae-button--primary': index === 0 && !params.noPrimaryHighlight }\" @click.stop=\"controller.showExecutionDialog(commandOrGroup)\">\n      <ae-design name=\"icon\" :document=\"commandOrGroup\"></ae-design>&nbsp;\n      <ae-design v-if=\"!params.onlyIcon\" name=\"title\" :document=\"commandOrGroup\"></ae-design> \n    </button>\n    <button v-if=\"commandOrGroup.f.id === locals.forms.CommandGroup\" class=\"ae-button \" :class=\"{ 'ae-button--primary': index === 0 && !params.noPrimaryHighlight }\" @click.stop=\"controller.showGroup(commandOrGroup)\" :ref=\"'commandGroup_' + commandOrGroup.id\">\n      <ae-design name=\"title\" :document=\"commandOrGroup\"></ae-design>\n    </button>\n  </template>\n</div>\n\n<!-- <div class=\"ae-noselect\" :ref=\"'button_' + groupId\" v-for=\"(_, groupId, index) in locals.commandGroups\" @click.capture.stop=\"controller.showGroup(groupId)\">\n  <div class=\"ae-button ae-button--primary\">\n    <ae-design name=\"title\" :document-id=\"groupId\"></ae-design>\n  </div>\n</div>  -->\n\n<ae-layout  layout-id=\"066b41f7-036f-422c-9afc-4c3015ddc4b4\"\n            v-if=\"locals.activeCommandGroup\"\n            :param-documents=\"locals.activeCommandGroupCommands\"\n            ref=\"commandsPopup\"\n            param-list-id=\"71bdf479-64dd-474d-b6ce-44e65b4ce1d9\"\n            @selected=\"controller.showExecutionDialog($event)\"\n></ae-layout>\n\n<ae-layout  layout-id=\"5886531d-7ae8-47ec-8b16-adc3378fcd1f\" \n            ref=\"executionDialog\"\n></ae-layout>\n            <!-- :param-dialog=\"locals.executionDialog\"\n            :param-command=\"locals.executionDialogCommand\" -->\n","css":"._CSS-commands {\n  display: grid;\n  grid-gap: 2px;\n  grid-auto-columns: auto;\n  grid-auto-flow:column;\n}\n\n/* DIALOG */\n\n._CSS-dialog__header {\n  flex: 1;\n  display: flex;\n  justify-content: center;\n}\n\n._CSS-dialog__commands {\n  flex: 1;\n  display: flex;\n  justify-content: flex-end;\n}\n\n\n._CSS ._CSS-button {\n  display: flex;\n}","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      CommandGroup: 'command-group-form',\n      Command: 'command-form'\n    }\n\n    locals.forms = this.FORMS\n\n    locals.executionError = null\n    locals.executionDocument = null\n    locals.executionDialog = null\n\n    locals.document = null\n    locals.commands = []\n    locals.activeCommandGroup = null\n    locals.activeCommandGroupCommands = []\n\n    const showHandler = async (event) => {\n      let commandRef = event\n\n      if (typeof event === 'object' ) {\n        await this.initialize(event.document, [event.command])\n\n        commandRef = event.command\n      }\n\n      this.showExecutionDialog(commandRef)\n    }\n\n    $on('force-show', showHandler)\n    $on('show', showHandler)\n\n    watchParam('document', async (newDocument) => await this.initialize(newDocument, params.commands))\n    watchParam('commands', async (newCommands) => await this.initialize(params.document, newCommands))\n\n    await this.initialize(params.document, params.commands)\n  }\n\n  async initialize(document, commands) {\n    locals.document = document\n\n    this.deletionWatcher?.stop()\n\n    this.deletionWatcher = Aeppic.watch(document, (doc, reason) => {\n      if (reason.deleted) {\n        Aeppic.navigateTo(document.p)\n      }\n    })\n\n    locals.commands = await this._getCommands(document, commands)\n  }\n\n  async _form() {\n    if (!locals.document) {\n      return null\n    }\n\n    return Aeppic.getForm(locals.document.f.id)\n  }\n\n  async _getCommands(document, commandsParam) {\n    const commands = []\n\n    if (!document) {\n      return commands\n    }\n    \n    if (commandsParam) {\n      commands.push(...commandsParam)\n    } else {\n      const form = await this._form()\n\n      if (form && form.data.commands && form.data.commands.length) {\n        commands.push(...form.data.commands)\n      }\n    }\n\n    const ensuredCommands = await Aeppic.getAll(commands)\n\n    return this._filterVisibleCommands(ensuredCommands, document)\n  }\n\n  async _filterVisibleCommands(commands, document) {\n    const visibleCommands = await Promise.all(\n      commands.map(async (command) => {\n        if (!command || command.data.name?.startsWith('rd:')) {\n          return \n        }\n\n        if (command.f.id === this.FORMS.CommandGroup) {\n          if (!command.data.commands.length) {\n            return\n          }\n \n          return command\n        }\n\n        if (!('isVisible' in Aeppic.Commands)) { \n          return command\n        }\n\n        if (await Aeppic.Commands.isVisible(command, document, { Account: Aeppic.Account, ProfilePage: Aeppic.ProfilePage })) {\n          return command\n        }\n\n        return\n      })\n    )\n\n    return visibleCommands.filter(c => c != null)\n  }\n\n  \n\n  async showGroup(group) {\n    locals.activeCommandGroup = group\n\n    const commands = await Aeppic.getAll(locals.activeCommandGroup.data.commands)\n    locals.activeCommandGroupCommands = await this._filterVisibleCommands(commands, locals.document)\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $emit('show')\n\n    const fakeEvent = {\n      target: $refs['commandGroup_' + group.id][0]\n    }\n\n    $refs.commandsPopup.$emit('show', fakeEvent)\n  }\n\n  close() {\n    locals.activeGroupId = null\n\n    $emit('close')\n\n    $refs.commandsPopup && $refs.commandsPopup.$emit('close')\n  }\n  async showExecutionDialog(commandRef) { \n    // TODO: support non-dialog mode\n    const command = await Aeppic.get(commandRef)\n\n    if (!command) {\n      return\n    }\n\n    const commandResult = await Aeppic.Commands.execute(command, locals.document, { Account: Aeppic.Account, ProfilePage: Aeppic.ProfilePage })\n    if (!commandResult.ok) {\n      console.error(`Error executing command ${command}`)\n      return\n    }\n    \n    const document = commandResult.value\n\n    if (command.data.navigation === 'navigate') {\n      Aeppic.navigateTo(document)\n      return\n    }\n\n    if (command.data.navigation !== 'dialog') {\n      console.error(`unsupported mode \"${command.data.navigation}\". Expected \"dialog\"`, command)\n      return\n    }\n\n    const dialog = await Aeppic.get(command.data.navigationTarget)\n\n    if (!dialog) {\n      console.error('could not find dialog', dialog)\n      return\n    }\n\n    $refs.executionDialog.$emit('show', { dialog, command, document })\n  }\n\n  destroy() {\n    this.close()\n  }\n} "},"locks":[],"created":{"at":"2019-01-24T15:43:15+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2023-01-24T10:02:51+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1674554571570,"ct":1621428481249,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2019-05-08T08:11:45+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1621428481249,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this._fallbackShowTimeout = null\n\n    if (Aeppic.LocalStorage.getValue('appLayoutId')) {\n      this.defaultDialogId = '458bacf5-0b5f-44ec-9ad4-c2302183ab89'\n    } else {\n      this.defaultDialogId = 'b480e243-5d21-4ced-be02-3ceb4c820032'\n    }\n\n    locals.ready = false\n\n    locals.dialogId = this.defaultDialogId\n    locals.loadedDialogId =  ''\n    locals.showOptions = null\n\n    $on('show', (options) => this.show(options))\n  }\n\n  onDialogReady(loadedDialogId) {\n    console.log('onDialogReady', { loadedDialogId, timeout: this._fallbackShowTimeout, showOptions: locals.showOptions })\n\n    locals.loadedDialogId = loadedDialogId\n\n    // If every dialog is ensured to $emit('ready') after loading, one can remove this logic\n    if (this._fallbackShowTimeout) {\n      clearTimeout(this._fallbackShowTimeout)\n      this._fallbackShowTimeout = null\n    }\n    \n    $refs.dialog.$emit('show', locals.showOptions)\n  }\n\n  async show(options) {\n    // reset previously rendered dialog\n    locals.ready = false\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    locals.showOptions = options\n\n    if (options?.dialog?.data?.layout?.id) {\n      locals.dialogId = options.dialog.data.layout.id\n    } else {\n      locals.dialogId = this.defaultDialogId\n    }\n\n    locals.ready = true\n\n    // wait for ae-layout to render\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    const isRequestedDialogRendered = locals.dialogId === locals.loadedDialogId\n    console.log({ isRequestedDialogRendered })\n\n    if (!isRequestedDialogRendered) {\n      // opening the dialog will be handled in this.onDialogReady()\n      this._fallbackShowTimeout = Aeppic.setTimeout(() => {\n        this.onDialogReady(locals.dialogId)\n      }, 300)\n\n      return\n    } \n\n    $refs.dialog.$emit('show', locals.showOptions)\n  }\n}     ","css":"","name":"Command Dialog Manager","packages":[],"template":"<!-- Only run $emit('show') within dialog when it announces readyness via @ready -->\n<!-- re-emit @close to allow to react to dialog success/cancel/abort/... event -->\n\n<ae-layout\n  v-if=\"locals.ready\"\n  :layout-id=\"locals.dialogId\"\n  :param-document=\"params.document\"\n  ref=\"dialog\"\n  @ready=\"controller.onDialogReady(locals.dialogId)\"\n  @close=\"$emit('close')\"\n></ae-layout>\n"},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"5886531d-7ae8-47ec-8b16-adc3378fcd1f","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-01-09T10:44:39+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"5b2615163e16f2f0"},"stamps":[],"t":1767955479554,"v":"4891cf5679b5721d"},{"id":"ed784d22-af86-420e-b70c-15a6e4dc7512","v":"2a3ab8ad74e1ed7f","previous":{"v":"0bc6d2625c09f553"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Command executor with Dialog","applies":"","packages":[],"template":"<template v-if=\"locals.command\">\n  <button class=\"ae-button _CSS-button\" @click.stop=\"controller.executeCommand()\">\n    <ae-design style=\"margin-right: var(--ae-space-1);\" name=\"icon\" :document=\"locals.command\"></ae-design> \n    <ae-design name=\"title\" :document=\"locals.command\"></ae-design> \n  </button>\n\n\n  <ae-layout  layout-id=\"5886531d-7ae8-47ec-8b16-adc3378fcd1f\"\n              ref=\"commandDialog\"\n  ></ae-layout>\n</template>\n\n","css":"._CSS-button {\n  display: flex;\n}","controller":"class Controller {\n  async init() {\n    locals.command = await Aeppic.get(params.commandId)\n  }\n\n  async executeCommand() {\n    const command = locals.command\n\n    console.log({command})\n\n    const result = await Aeppic.Commands.execute(command, params.target, {...params.options})\n\n    if (!result.ok) {\n      console.error('Could not execute command', command, result)\n      return\n    }\n\n    if (command.data.navigation !== 'dialog') {\n      console.error(`unsupported mode \"${command.data.navigation}\". Expected \"dialog\"`, command)\n      return\n    }\n\n    const dialog = await Aeppic.get(command.data.navigationTarget)\n\n    if (!dialog) {\n      console.error('could not find dialog', dialog)\n      return\n    }\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $refs.commandDialog.$emit('show', { dialog, document: result.value, command: locals.command })\n  }\n}"},"locks":[],"created":{"at":"2020-10-02T13:53:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-07-28T12:22:31+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1690546951092,"ct":1621428481250,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"35303033-f60a-49b7-b3ef-9cc3bb00f129","v":"1371d47297785862","previous":{"v":"2d69bbdcd9fa7929"},"p":"8675fac2-1fb2-4704-bc87-de0345194e6a","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"comparison-pane","applies":"","packages":[{"id":"66f907a9-2472-4ff3-b281-811bda7fb6ed","v":"27b7eeca532a9994","text":"Monaco Merge"}],"template":"<div>\n  <div v-if=\"locals.selected && locals.selected.node\" style=\"border-bottom:gray 2px solid; padding-left:10px\">\n    <dl>\n      <dt>Comparison:</dt><dd>{{locals.selected.getDifferenceText()}}</dd>\n      \n      <dt v-if=\"locals.selected.node.differenceInfo && locals.selected.node.differenceInfo.fields && locals.selected.node.differenceInfo.fields.length\">Fields:</dt>\n      <dd v-if=\"locals.selected.node.differenceInfo && locals.selected.node.differenceInfo.fields && locals.selected.node.differenceInfo.fields.length\">\n        <span v-for=\"field of locals.selected.node.differenceInfo.fields\" @click=\"controller.showFieldMerge(field)\" style=\"cursor:pointer\">{{field}} </span>\n      </dd>\n    </dl>\n    \n  </div>\n</div> \n<ae-expandable v-if=\"controller.shouldShowFieldMerge() \">\n  <button @click=\"controller.saveFieldMerge()\">Save</button> <button @click=\"controller.cancelFieldMerge()\">Close</button>\n  <monaco-merge :left=\"locals.fieldIncoming\" :right=\"locals.fieldExisting\" v-model=\"locals.fieldMerged\" style=\"min-height:400px;height:100%\" theme=\"vs-dark\" language=\"javascript\" ></monaco-merge> \n</ae-expandable>\n<div v-show=\"!controller.shouldShowFieldMerge()\">\n  <ae-splitter v-show=\"locals.selected && locals.selected.node\">\n    <div slot=\"left-pane\">\n      <h3 style=\"background:red;color:white;margin-top:0;padding-left:10px\" :title=\"locals.selected.node && locals.selected.node.document1 && locals.selected.node.document1.modified.at\">\n        <span v-if=\"locals.selected.node && locals.selected.node.differenceInfo && locals.selected.node.differenceInfo.newer===1\">newer: </span>\n        Incoming\n      </h3>\n      <div id=\"otherAeppicVue\"></div>\n    </div>\n    <div slot=\"right-pane\">\n      <div v-if=\"locals.selected && locals.selected.node\">\n        <h3  style=\"background:green;color:white;margin-top:0;padding-left:10px\" :title=\"locals.selected.node && locals.selected.node.document2 && locals.selected.node.document2.modified.at\">\n          <span v-if=\"locals.selected.node && locals.selected.node.differenceInfo && locals.selected.node.differenceInfo.newer===2\">newer: </span>\n          Existing \n          <span v-if=\"locals.selected.getOperationText()\">({{locals.selected.getOperationText()}})</span>\n        </h3>\n        <!-- <div v-if=\"locals.selected.resultDocument\">\n          (edited {{locals.selected.resultDocument.data.name}})\n          <ae-design :document=\"locals.selected.resultDocument\" name=\"inspect\"  :watch=\"false\" :xxxedit=\"true\" key=\"1\"></ae-design>\n        </div> -->\n        <div>\n          <ae-design  v-if=\"locals.selected.node.document2\"  :document-id=\"locals.selected.node.document2.id\" name=\"inspect\" :edit=\"true\"></ae-design>\n          <ae-design  v-else-if=\"locals.selected.node.$operation && locals.selected.node.$operation.has('ADD_INCOMING')\"  :document-id=\"locals.selected.node.document1.id\" name=\"inspect\" :edit=\"true\"></ae-design>\n        </div>\n      </div>\n    </div>\n  </ae-splitter>\n</div>\n ","css":"._CSS .monaco-diff-editor{\n  min-height: 600px;\n  height: 100%;\n}    ","controller":"class Controller{\n  init(){\n    locals.selected=params.selected\n    locals.fieldIncoming = 'incoming'\n    locals.fieldExisting = 'existing'\n    locals.fieldMerged = null\n    locals.fieldToMerge = null\n\n    this.nodeWhoseFieldToMerge = null\n    this._shouldShowFieldMerge = false\n  }\n\n  async showFieldMerge(field){\n\n    if(!locals.selected.node || !locals.selected.node.document1 || !locals.selected.node.document2)\n      return\n\n    locals.nodeWhoseFieldToMerge = locals.selected.node\n    \n    const incoming = locals.selected.node.document1\n    const existing = await Aeppic.get(locals.selected.node.document2.id)\n\n    if(!existing || !existing.data.hasOwnProperty(field)){\n      return\n    }\n\n    this._shouldShowFieldMerge = true\n    locals.fieldToMerge = field\n    locals.fieldIncoming = incoming.data[field]\n    locals.fieldExisting   = existing.data[field]\n  }\n\n  async saveFieldMerge(){\n    const mergeDoc = await Aeppic.edit(locals.selected.node.document2.id)\n\n    if(mergeDoc){\n      mergeDoc.data[locals.fieldToMerge] = locals.fieldMerged\n      Aeppic.save(mergeDoc)\n    }\n\n    this._shouldShowFieldMerge = false;\n  }\n\n  cancelFieldMerge(){\n    this._shouldShowFieldMerge = false;\n  }\n\n  shouldShowFieldMerge(){\n    return (this._shouldShowFieldMerge && locals.nodeWhoseFieldToMerge===locals.selected.node)\n  }\n}"},"locks":[],"created":{"at":"2018-05-23T11:47:17+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2019-03-18T11:54:20+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1552910060525,"ct":1527068837088,"a_depth":5,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","64807bcd-1efa-4a43-a950-e10de2e0125c","8675fac2-1fb2-4704-bc87-de0345194e6a"],"a_forms":["folder","application-form","folder","folder","folder"],"inheritedLocks":[null,null,null,null,null,null],"stamps":[]},{"id":"973a04b9-67ba-41ce-b7c7-2e1c4cb7f428","v":"348cf440393b502d","previous":{"v":"35cbd26a9ba5d987"},"p":"e6ffdfd0-88dd-429d-965b-a4634b065b3b","f":{"id":"layout-form","v":"eb35b87870a33035","text":"Layout"},"data":{"name":"comparison-pane","applies":"","template":"<div>\n  <div v-if=\"locals.selected && locals.selected.node\" style=\"border-bottom:gray 2px solid\">\n    <dl>\n      <dt>Comparison:</dt><dd>{{locals.selected.getDifferenceText()}}</dd>\n      \n      <dt v-if=\"locals.selected.node.differenceInfo && locals.selected.node.differenceInfo.fields && locals.selected.node.differenceInfo.fields.length\">Fields:</dt>\n      <dd v-if=\"locals.selected.node.differenceInfo && locals.selected.node.differenceInfo.fields && locals.selected.node.differenceInfo.fields.length\">\n        <span v-for=\"field of locals.selected.node.differenceInfo.fields\" @click=\"controller.showFieldMerge(field)\" style=\"cursor:pointer\">{{field}} </span>\n      </dd>\n    </dl>\n    \n  </div>\n</div> \n<ae-expandable v-if=\"controller.shouldShowFieldMerge() \">\n  <button @click=\"controller.saveFieldMerge()\">Save</button> <button @click=\"controller.cancelFieldMerge()\">Close</button>\n  <monaco-merge :left=\"locals.fieldIncoming\" :right=\"locals.fieldExisting\" v-model=\"locals.fieldMerged\" style=\"min-height:400px;height:100%\" theme=\"vs-dark\" language=\"javascript\" ></monaco-merge> \n</ae-expandable>\n<div v-show=\"!controller.shouldShowFieldMerge()\">\n  <ae-splitter v-show=\"locals.selected && locals.selected.node\">\n    <div slot=\"left-pane\">\n      <h3 style=\"background:red;color:white;margin-top:0\" :title=\"locals.selected.node && locals.selected.node.document1 && locals.selected.node.document1.modified.at\">\n        <span v-if=\"locals.selected.node && locals.selected.node.differenceInfo && locals.selected.node.differenceInfo.newer===1\">newer: </span>\n        Incoming\n      </h3>\n      <div id=\"otherAeppicVue\"></div>\n    </div>\n    <div slot=\"right-pane\">\n      <div v-if=\"locals.selected && locals.selected.node\">\n        <h3  style=\"background:green;color:white;margin-top:0\" :title=\"locals.selected.node && locals.selected.node.document2 && locals.selected.node.document2.modified.at\">\n          <span v-if=\"locals.selected.node && locals.selected.node.differenceInfo && locals.selected.node.differenceInfo.newer===2\">newer: </span>\n          Existing \n          <span v-if=\"locals.selected.getOperationText()\">({{locals.selected.getOperationText()}})</span>\n        </h3>\n        <!-- <div v-if=\"locals.selected.resultDocument\">\n          (edited {{locals.selected.resultDocument.data.name}})\n          <ae-design :document=\"locals.selected.resultDocument\" name=\"inspect\"  :watch=\"false\" :xxxedit=\"true\" key=\"1\"></ae-design>\n        </div> -->\n        <div>\n          <ae-design  v-if=\"locals.selected.node.document2\"  :document-id=\"locals.selected.node.document2.id\" name=\"inspect\" :edit=\"true\"></ae-design>\n          <ae-design  v-else-if=\"locals.selected.node.$operation === 'ADD_INCOMING'\"  :document-id=\"locals.selected.node.document1.id\" name=\"inspect\" :edit=\"true\"></ae-design>\n        </div>\n      </div>\n    </div>\n  </ae-splitter>\n</div>\n ","css":"._CSS .monaco-diff-editor{\n  min-height: 600px;\n  height: 100%;\n}    ","controller":"class Controller{\n  init(){\n    locals.selected=params.selected\n    locals.fieldIncoming = 'incoming'\n    locals.fieldExisting = 'existing'\n    locals.fieldMerged = null\n    locals.fieldToMerge = null\n\n    this.nodeWhoseFieldToMerge = null\n    this._shouldShowFieldMerge = false\n  }\n\n  async showFieldMerge(field){\n\n    if(!locals.selected.node || !locals.selected.node.document1 || !locals.selected.node.document2)\n      return\n\n    locals.nodeWhoseFieldToMerge = locals.selected.node\n    \n    const incoming = locals.selected.node.document1\n    const existing = await Aeppic.get(locals.selected.node.document2.id)\n\n    if(!existing || !existing.data.hasOwnProperty(field)){\n      return\n    }\n\n    this._shouldShowFieldMerge = true\n    locals.fieldToMerge = field\n    locals.fieldIncoming = incoming.data[field]\n    locals.fieldExisting   = existing.data[field]\n  }\n\n  async saveFieldMerge(){\n    const mergeDoc = await Aeppic.edit(locals.selected.node.document2.id)\n\n    if(mergeDoc){\n      mergeDoc.data[locals.fieldToMerge] = locals.fieldMerged\n      Aeppic.save(mergeDoc)\n    }\n\n    this._shouldShowFieldMerge = false;\n  }\n\n  cancelFieldMerge(){\n    this._shouldShowFieldMerge = false;\n  }\n\n  shouldShowFieldMerge(){\n    return (this._shouldShowFieldMerge && locals.nodeWhoseFieldToMerge===locals.selected.node)\n  }\n}","packages":[{"id":"66f907a9-2472-4ff3-b281-811bda7fb6ed","v":"27b7eeca532a9994","text":"Monaco Merge"}]},"locks":[],"created":{"at":"2018-01-06T11:14:13+01:00","by":"","from":"","client":"dbe513d3-76e2-4c06-98d8-d0a7f2ae2ad3"},"modified":{"at":"2018-02-06T11:44:40+01:00","by":"","from":"","client":"server"},"t":1517913880831,"ct":1515233653878,"a_depth":4,"a":["apps","90340217-c9b1-46fe-9b56-163953318522","2acd7a85-e378-49d3-a959-75ea2cab13a4","e6ffdfd0-88dd-429d-965b-a4634b065b3b"],"a_forms":["folder","application-form","folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"a":["apps","0af4f8a7-729e-4318-8f82-7e976555004e","1a5cdbcd-a718-43d4-bf29-3ab419f174ff"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2026-01-06T14:41:23+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"ct":1767710483647,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this._initialize()\n\n    locals.rerenderKey += 0\n    locals.state = await Aeppic.get(params.pageDocumentId)\n    locals.design = await Aeppic.get(locals.state.p)\n\n    watchParam('pageDocumentId', async (id) => {\n      locals.rerenderKey += 1\n      locals.state = await Aeppic.get(id)\n      locals.design = await Aeppic.get(locals.state.p)\n    })\n  }\n\n  _initialize() {\n    // TODO: tailwind etc \n  }\n}","css":"body {\n  height: auto;\n}\n\n.ae-root {\n  overflow: visible !important;\n}\n\n.ae-root .hide-ci {\n  display: none;\n}","name":"Component Test Root Layout","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<ae-design v-if=\"locals.state\"\n  :key=\"'_CSS' + locals.rerenderKey\"\n  name=\"rd:epic-page\"\n  :document=\"locals.design\"\n  :param-state=\"locals.state\"\n  class=\"flex-1 overflow-x-scroll overflow-y-scroll pb-10\"\n></ae-design>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"bf882afb-eeb0-4d28-bce8-b3d957deac1e","inheritedLocks":[null,null,null,null],"locks":[],"meta":{},"modified":{"at":"2026-02-09T14:05:54+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"1a5cdbcd-a718-43d4-bf29-3ab419f174ff","previous":{"v":"59c11e0e6420aebe"},"stamps":[],"t":1770645954299,"v":"36d3c1a37069a92a"},{"id":"e5accfd9-8d33-46e5-a4d7-69a91b5f8543","v":"15f7edcfb4bfee71","previous":{"v":"5679cf95ff5e242c"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"ba4773a99025b07a","text":"Layout"},"data":{"name":"Confirm Leave Handler Layout","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"150e1aeee6052825","text":"Window"}],"template":"<!-- <ae-design name=\"title\" document-id=\"root\" style=\"display:none;\" ref=\"hiddenDomElement\"></ae-design>\n<div style=\"display:none\">\n  { changed? {{ params.documentChangedBus ? params.documentChangedBus.documentChanged : null }} }\n</div> -->\n\n<!-- {{locals.id}} -->","css":"","controller":"// class Controller {\n//   async init() {\n//     // NOTE: this layout is initialized multiple times, but I dont know why.\n//     //       This will guard against multiple listeners to be registered\n//     const globalInitializationMarker = `layout-${layout.id}-init`\n\n//     if (globalThis[globalInitializationMarker]) {\n//       return\n//     }\n\n//     globalThis[globalInitializationMarker] = true\n\n//     this._setup()\n\n//     await Aeppic.nextRenderPass()\n \n//     this.bus = params.documentChangedBus\n//     this.willNavigateHandler = (event) => this.handleWillNavigate(event)\n//     const events = params.events || ['ae-drill-into', 'ae-will-navigate', 'popstate', 'beforeunload']\n\n//     if ($refs.hiddenDomElement && $refs.hiddenDomElement.$root && $refs.hiddenDomElement.$root.$el) {\n//       if (events.includes('ae-drill-into')) {\n//         $refs.hiddenDomElement.$root.$el.addEventListener('ae-drill-into', this.willNavigateHandler, { capture: true })\n//       }\n//       if (events.includes('ae-will-navigate')) {\n//         $refs.hiddenDomElement.$root.$el.addEventListener('ae-will-navigate', this.willNavigateHandler, { capture: true })\n//       }\n//     }\n\n//     if (!packages.window) {\n//       console.warn('[WARN]: not attaching to browser events due to missing window package')\n//     }\n\n//     if (events.includes('popstate')) {\n//       packages.window.onpopstate = null\n//       packages.window && packages.window.removeEventListener('popstate', this.willNavigateHandler)\n\n//       packages.window && packages.window.addEventListener('popstate', this.willNavigateHandler)\n//     }\n\n//     if (events.includes('beforeunload')) {\n//       packages.window && packages.window.addEventListener('beforeunload', this.willNavigateHandler)\n//     }\n//   }\n\n//   _setup() {\n//     // taken from server/src/app.js\n//     const BIZPIN_LAYOUT_ID = '5913cb1e-9979-4eb7-84e8-488cdd658cbb'\n//     const layoutId = BIZPIN_LAYOUT_ID\n//     async function renderPage(layoutId, pageDocumentId, options = {}) {\n//       // console.log('(app) render', pageDocumentId)\n//       // console.log('rendering layout', layoutId, pageDocumentId)\n//       Aeppic.renderLayout(layoutId, {\n//         params: {\n//           pageDocumentId,\n//           queryParams: options.queryParams,\n//           urlHash: options.urlHash,\n//           history: {\n//             historic: options.historic || false,\n//             timestamp: options.timestamp\n//           }\n//         }\n//       })\n//     }\n\n//     this.buildinPopstateHandler = function (e) {\n//       const isPopStateEvent = e instanceof PopStateEvent\n//       if (!isPopStateEvent) {\n//         return\n//       }\n\n//       console.log('pop', e.state)\n//       if (e.state) {\n//         const pageDocumentId = e.state.href\n//         const queryParams = e.state.queryParams\n//         const timestamp = e.state.timestamp\n\n//         renderPage(layoutId, pageDocumentId, {\n//           queryParams,\n//           historic: true,\n//           timestamp\n//         })\n\n//         // event.preventDefault()\n//       }\n//     }\n  \n//   }\n\n//   handleWillNavigate(event) {\n//     console.log('confirm_leave_handler:handleWillNavigate', event, this.bus && this.bus.documentChanged, params.forceWarn)\n\n//     if (!params.forceWarn && (!this.bus || (this.bus && !this.bus.documentChanged))) {\n//       this.buildinPopstateHandler(event)\n//       return true\n//     }\n\n//     // console.log('###########', event, locals.id)\n\n//     const leave = packages.window.confirm(params.meesage || 'Sie haben ungespeicherte Änderungen. Seite trotzdem verlassen?')\n\n//     if (leave) {\n//       this.bus && this.bus.reset()\n\n//       this.buildinPopstateHandler(event)\n//       return true\n//     }\n\n//     if ('returnValue' in event) {\n//       event.returnValue = ''\n//     }\n\n//     if ('preventDefault' in event) {\n//       event.preventDefault()\n//     }\n//     if ('stopPropagation' in event) {\n//       event.stopPropagation()\n//     }\n//   }\n\n\n//   destroy() {\n//     if ($refs.hiddenDomElement && $refs.hiddenDomElement.$root && $refs.hiddenDomElement.$root.$el) {\n//       $refs.hiddenDomElement.$root.$el.removeEventListener('ae-drill-into', this.willNavigateHandler, { capture: true })\n//       $refs.hiddenDomElement.$root.$el.removeEventListener('ae-will-navigate', this.willNavigateHandler, { capture: true })\n//     }\n\n//     packages.window && packages.window.removeEventListener('popstate', this.willNavigateHandler)\n//     packages.window && packages.window.removeEventListener('beforeunload', this.willNavigateHandler)\n//   }\n// }"},"locks":[],"created":{"at":"2020-06-12T08:29:53+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2024-01-23T17:05:42+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1706029542182,"ct":1591950593435,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"ee288bba-3301-4d3b-b2bd-e6e86128e0e6","v":"5e610bd544fe7c73","cloneOf":{"id":"36614477-3d62-4545-bcc6-cba534a6331d","v":"06abf3fcd0cf8cc0","text":"Reload Notification Button"},"originalCloneOf":{"id":"36614477-3d62-4545-bcc6-cba534a6331d","v":"06abf3fcd0cf8cc0","text":"Reload Notification Button"},"previous":{"v":"3b6e2c97f4d31f1f"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Connection Status","applies":"","packages":[],"template":"<button \n  title=\"Die Verbindung zum Server wurde unterbrochen. Bitte warten Sie, bis die Verbindung wiederhergestellt wurde.\"\n  class=\"ae-button\"\n  @click=\"$refs.popup.show($event)\"\n  >\n    <ae-icon class=\"fad fa-wifi-slash\" style=\"color: var(--ae-theme-warning, red);\"></ae-icon>\n</button>\n\n\n<ae-popup ref=\"popup\" base-attachment=\"top right\" popup-attachment=\"center center\" :close-delay=\"200\">\n  <div slot=\"popup\" class=\"_CSS-menu\" slot-scope=\"scope\">    \n    <p>Bizpin ist derzeit nicht mit dem Server verbunden.</p>\n    <p>Bitte warten Sie, bis die Verbindung wiederhergestellt wurde.</p>\n  </div>\n</ae-popup>\n\n\n<ae-layout layout-id=\"e5accfd9-8d33-46e5-a4d7-69a91b5f8543\" :param-force-warn=\"!params.connected\"></ae-layout>","css":"._CSS-action-button {\n  transition: scale 0.2s ease-in-out;\n  /* margin: 0 16px; */\n  \n}\n\n._CSS-action-button {\n  display:flex;\n  align-items: center;\n}\n\n._CSS-action-button._CSS-action-button--active {\n  color: var(--ae-primary);\n}\n\n._CSS-action-button:hover {\n  transform:scale(1.1);\n}\n\n\n._CSS-menu {\n  max-width: 10rem;\n  background: var(--ae-ui-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  font-size: var(--ae-size-3);\n  margin:0;\n  padding:0 0.5em;\n  display:flex;\n  flex-direction: column;\n  align-items: stretch;\n}\n","controller":""},"locks":[],"created":{"at":"2021-01-21T15:43:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-06-08T15:22:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1623165754200,"ct":1611243801871,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"a7f927fa-5e53-4f7e-83f0-74b4d6a999ec","v":"6dfdc13fcf044513","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Content Translation Form Layout","applies":"","packages":[],"template":"<ae-control :document=\"params.document\"\n            field-name=\"language\"\n            :params=\"params.controlParams\"\n            style=\"margin-bottom: 1rem;\"\n></ae-control>\n<ae-control :name=\"params.controlName || 'text'\"\n            :document=\"params.document\"\n            field-name=\"question\"\n            :params=\"params.controlParams\"\n></ae-control>\n<pre>\n<!-- {{params.form.info}} -->\n</pre>","css":"","controller":""},"locks":[],"created":{"at":"2018-07-06T12:23:05+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481250,"ct":1621428481250,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"a2326c9625d471b6","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"99d33d30-e81e-4ff5-a79f-407fc564d2f0","v":"7e0d98eae6b52b1c","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Create and Edit Buttons with Dialog","applies":"","packages":[],"template":"<template v-if=\"locals.form\">\n  <div class=\"_CSS-commands\" v-if=\"locals.canEdit\">\n    <ae-layout :layout-id=\"params.createButtonLayoutId || 'd8b116f1-218a-43d4-a7d9-05632a8e6b1d'\" @click=\"controller.openNew($event)\" v-if=\"!params.noCreate && controller.children\"></ae-layout>\n    <!-- TODO: remove this. added for testing only  -->\n    <template v-if=\"Aeppic.Account && Aeppic.Account.id === '870fac1f-b0d7-4925-b191-a43166960419' && locals.form.data.tags && locals.form.data.tags.includes('show-details')\">\n      <!-- nothing here -->\n    </template>\n    <ae-layout :layout-id=\"params.editButtonLayoutId || 'a90ce2ed-a649-4f84-b3a6-f7263ec0d9ff'\" @click=\"controller.openEditDocument()\" v-else-if=\"!params.noEdit && locals.noEditForms.indexOf(params.document.f.id) === -1 && params.document.a.length > 1\"></ae-layout>\n  </div>\n\n  <ae-layout  layout-id=\"066b41f7-036f-422c-9afc-4c3015ddc4b4\"\n              :param-documents=\"controller.children\"\n              ref=\"popupNew\"\n              :param-list-id=\"params.pageApplicationId ? '71bdf479-64dd-474d-b6ce-44e65b4ce1d9' : null\"\n              @selected=\"controller.showNewDocument($event)\"\n              :param-page-application-id=\"params.pageApplicationId\"\n  ></ae-layout>\n\n  <ae-dialog ref=\"dialogNewDocument\" :title=\"locals.newDocument && locals.newDocument.f.text || ''\" :backdrop-close=\"false\" :full-screen=\"Aeppic.Device === 'Phone'\">\n    <div slot=\"header\" slot-scope=\"scope\" class=\"_CSS-dialog__header\">\n      <span>{{ locals.newDocument && locals.newDocument.f.text || '' }}</span>\n      <ae-icon class=\"_CSS-button fal fa-times\" @click.native=\"scope.close(); controller.deleteNewDocument()\"></ae-icon>\n    </div>\n    <ae-design slot=\"body\" name=\"new-document\" :document=\"locals.newDocument\" :edit=\"false\" :watch=\"false\"></ae-design>\n    <div slot=\"commands\" slot-scope=\"scope\" class=\"_CSS-dialog__commands\">\n      <button class=\"ae-button\" style=\"margin-right: 2em;\" @click=\"scope.close();controller.deleteNewDocument()\">Abbrechen</button>\n      <button class=\"ae-button\" :class=\"{ 'ae-button--primary': !locals.preferNavigateToNewDocument || !controller.isElectron }\" @click=\"scope.close(); controller.saveNewDocument()\">Speichern</button>\n      <button v-if=\"locals.preferNavigateToNewDocument && controller.isElectron\" class=\"ae-button ae-button--primary\" @click=\"controller.saveNewDocument()\">Speichern und Öffnen</button>\n\n    </div>\n  </ae-dialog>\n\n  <ae-dialog ref=\"dialogEdit\" title=\"Details\" @close=\"$emit('close')\" :backdrop-close=\"false\" :full-screen=\"Aeppic.Device === 'Phone'\">\n    <div slot=\"header\" slot-scope=\"scope\" class=\"_CSS-dialog__header\">\n      <span>Details</span>\n      <button class=\"ae-button\" @click=\"scope.close()\">\n        <ae-icon class=\"fal fa-times\" @click.native=\"scope.close()\"></ae-icon>\n      </button>\n    </div>\n    <template v-slot:body>\n        <ae-design name=\"creation-and-modification\" :document=\"params.document\"></ae-design>\n        <ae-design name=\"editable-document\" :document=\"locals.editableDocument\" :edit=\"false\" :watch=\"false\" ref=\"editDesign\" class=\"ae-stacking-context\"></ae-design>\n    </template>\n    <div slot=\"commands\" slot-scope=\"scope\" class=\"_CSS-dialog__commands\">\n      <button class=\"ae-button\" @click=\"scope.close()\">Abbrechen</button>\n      <button class=\"ae-button ae-button--primary\" @click=\"controller.saveEditedDocument()\">Speichern</button>\n    </div>\n  </ae-dialog> \n\n</template>\n\n\n","css":"._CSS-commands {\n  display: grid;\n  grid-gap: 2px;\n  grid-auto-columns: auto;\n  grid-auto-flow:column;\n}\n\n/* DIALOG */\n\n._CSS-dialog__header {\n  flex: 1;\n  display: flex;\n  justify-content: space-between;\n}\n\n._CSS-dialog__commands {\n  flex: 1;\n  display: flex;\n  justify-content: flex-end;\n}\n\n._CSS-dialog__commands * {\n  margin-left:12px;\n}\n","controller":"class Controller {\n  async init() {\n    locals.noEditForms = [\n      'c69a0c1c-6c53-40c2-87e8-5ace866bf1df',\n      'repository-folder-form',\n      'root-folder-form',\n      'fe84ab6a-27cb-496d-aaa9-2c375e7b7b16',\n      '42e3adf4-96eb-4eaa-8e80-4bdd671540a3',\n      '1ec5237d-463a-417f-8dac-5bbbbc2e35b7',\n      '81939b86-a48e-480e-afd1-cb2907568550',\n      'folder'\n    ]\n\n    locals.form = null\n    locals.form = await Aeppic.getFormForDocument(params.document)\n\n    const canEdit = await Aeppic.canEdit(params.document)\n    locals.canEdit = Aeppic.Account && Aeppic.Account.data.isGroupAccount === false && canEdit === true\n\n    if (params.pageApplicationId) {\n       locals.allowedChildrenTemplates = await Aeppic.getAll((await Aeppic.Preferences.getSetting(`apps:${params.pageApplicationId}:templates`)))\n    }\n  }\n\n\n  get children() {\n    if (params.pageApplicationId) {\n      return locals.allowedChildrenTemplates\n    }\n\n    if (locals.form.allowedChildrenForms && locals.form.allowedChildrenForms.length) {\n      return locals.form.allowedChildrenForms\n    }\n    // handle form 'repository-folder' different\n    if (params.document.data.contentsForm && params.document.data.contentsForm.id) {\n      return [params.document.data.contentsForm]\n    }\n  }\n\n  openNew(event) {\n    $emit('show')\n\n    $refs.popupNew.$emit('show', event)\n  }\n\n  async openEditDocument() {\n    $emit('show')\n\n    const editableDocument = await Aeppic.edit(params.document.id)\n    locals.editableDocument = editableDocument\n    $refs.dialogEdit.show()\n  }\n\n  saveEditedDocument() {\n    Aeppic.save(locals.editableDocument)\n    locals.editableDocument = null\n    $refs.dialogEdit.close()\n\n    $emit('close')\n\n  }\n\n  async showNewDocument(refOrAllowedChildrenTemplate) {\n    if (locals.allowedChildrenTemplates) {\n      const template = refOrAllowedChildrenTemplate.data.template.id\n\n      const cloneResult =  await Aeppic.cloneDeep(template, params.document.id, { save: true })\n\n      locals.preferNavigateToNewDocument = refOrAllowedChildrenTemplate.data.navigateToClone === true\n\n      locals.newDocument = cloneResult.root\n    } else {\n      locals.preferNavigateToNewDocument = false\n\n      locals.newDocument = await Aeppic.new(refOrAllowedChildrenTemplate.id, params.document.id)\n    }\n\n    $refs.popupNew.$emit('close')\n    $refs.dialogNewDocument.show()\n\n    Aeppic.save(locals.newDocument)\n  }\n\n  async deleteNewDocument() {\n    await Aeppic.delete(locals.newDocument)\n    locals.newDocument = null\n    locals.preferNavigateToNewDocument = false\n  }\n\n  saveNewDocument() {\n    $refs.dialogNewDocument.close()\n    Aeppic.save(locals.newDocument)\n\n    const referenceFieldName = params.formReferenceFields && params.formReferenceFields[locals.newDocument.f.id]\n\n    if (referenceFieldName) {\n      params.document.addReference(referenceFieldName, locals.newDocument)\n      Aeppic.save(params.document)\n    }\n\n    if (locals.preferNavigateToNewDocument) {\n      Aeppic.navigateTo(locals.newDocument)\n    }\n\n    locals.newDocument = null\n\n    $emit('close')\n  }\n\n  get isElectron() {\n    return typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0\n  }\n\n  destroy() {\n    $emit('close')\n    // $refs.popupNew.close()\n    $refs.dialogNewDocument.close()\n  }\n}"},"locks":[],"created":{"at":"2019-05-03T13:05:19+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481250,"ct":1621428481250,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"2b7b942ef7381177","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"d8b116f1-218a-43d4-a7d9-05632a8e6b1d","v":"f18a91e2947bcbe2","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Create Button","applies":"","packages":[],"template":"<button style=\"padding: 8px 16px;\" class=\"ae-button ae-button--primary\" @click=\"$emit('click', $event)\">Neu</button>","css":"","controller":""},"locks":[],"created":{"at":"2018-06-22T09:53:14+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481250,"ct":1621428481250,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"426f1345208ed017","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"21e13528-924d-4eaf-b3cc-99cc7c5bfbed","v":"9666bd89756a0f8b","previous":{"v":"716b844db7e7c063"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Create with Dialog (no-details)","applies":"","packages":[],"template":"<template v-if=\"locals.form\">\n  <div class=\"_CSS-commands\" v-if=\"locals.canEdit\">\n    <ae-layout :layout-id=\"params.createButtonLayoutId || 'd8b116f1-218a-43d4-a7d9-05632a8e6b1d'\" @click=\"controller.openNew($event)\" v-if=\"!params.noCreate && controller.children\"></ae-layout>\n  </div>\n\n  <ae-layout  layout-id=\"066b41f7-036f-422c-9afc-4c3015ddc4b4\"\n              :param-documents=\"controller.children\"\n              ref=\"popupNew\"\n              :param-list-id=\"params.pageApplicationId ? '71bdf479-64dd-474d-b6ce-44e65b4ce1d9' : null\"\n              @selected=\"controller.showNewDocument($event)\"\n              :param-page-application-id=\"params.pageApplicationId\"\n              :param-design-params=\"{ preferLabel: true }\"\n  ></ae-layout>\n\n  <ae-dialog v-if=\"locals.showDialog\"\n              ref=\"dialogNewDocument\"\n              :title=\"locals.newDocument && locals.newDocument.f.text || ''\"\n              :backdrop-close=\"false\"\n              @close=\"controller.close()\"\n              :dialog-size=\"{ 'height': Aeppic.Device === 'Desktop' ? '90vh' : null, width: Aeppic.Device === 'Desktop' ? '60vw' : null }\"\n  >\n    <div slot=\"header\" slot-scope=\"scope\" class=\"_CSS-dialog__header\">\n      <span class=\"_CSS-dialog__header-title\">\n        <!-- {{ locals.newDocument && locals.newDocument.f.text || '' }} -->\n        <ae-design name=\"title\" :document=\"locals.newDocument\" :param-prefer-label=\"true\"></ae-design>\n      </span>\n      <button class=\"ae-button\" @click.stop=\"scope.close(); controller.deleteNewDocument()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n    <ae-design slot=\"body\" name=\"new-document\" :document=\"locals.newDocument\" :edit=\"false\" :watch=\"false\"></ae-design>\n    <div slot=\"commands\" slot-scope=\"scope\" class=\"_CSS-dialog__commands\">\n      <button class=\"ae-button\" style=\"margin-right: 2em;\" @click=\"scope.close();controller.deleteNewDocument()\">Abbrechen</button>\n      <button class=\"ae-button\" :class=\"{ 'ae-button--primary': !locals.preferNavigateToNewDocument || !controller.isElectron }\" @click=\"scope.close(); controller.saveNewDocument()\">Speichern</button>\n      <button v-if=\"locals.preferNavigateToNewDocument && controller.isElectron\" class=\"ae-button ae-button--primary\" @click=\"controller.saveNewDocument()\">Speichern und Öffnen</button>\n\n    </div>\n  </ae-dialog>\n\n  <ae-layout layout-id=\"e5accfd9-8d33-46e5-a4d7-69a91b5f8543\"\n              :param-force-warn=\"locals.showDialog\"\n  ></ae-layout>\n\n</template>\n","css":"._CSS-commands {\n  display: grid;\n  grid-gap: 2px;\n  grid-auto-columns: auto;\n  grid-auto-flow:column;\n}\n\n/* DIALOG */\n\n._CSS-dialog__header {\n  flex: 1;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n._CSS-dialog__commands {\n  flex: 1;\n  display: flex;\n  justify-content: flex-end;\n}\n\n._CSS-dialog__commands * {\n  margin-left:12px;\n}\n\n._CSS-dialog__header-title {\n  font-size: 1.5em;\n  font-weight: bold;\n}","controller":"class Controller {\n  async init() {\n    locals.noCreateForms = [\n      '1ec5237d-463a-417f-8dac-5bbbbc2e35b7',\n    ]\n\n    locals.showDialog = false\n    locals.canEdit = false\n\n    if (locals.noCreateForms.includes(params.document.f.id)) {\n      return\n    }\n\n    locals.form = null\n    locals.form = await Aeppic.getForm(params.document.f.id)\n    // NOTE: until 2021-11-04 the exact form was retrieved for allowed children\n    // locals.form = await Aeppic.getFormForDocument(params.document)\n\n    const canEdit = await Aeppic.canEdit(params.document)\n    locals.canEdit = Aeppic.Account && Aeppic.Account.data.isGroupAccount === false && canEdit === true\n\n    if (params.pageApplicationId) {\n       locals.allowedChildrenTemplates = await Aeppic.getAll((await Aeppic.Preferences.getSetting(`apps:${params.pageApplicationId}:templates`)))\n    }\n  }\n\n\n  get children() {\n    if (params.pageApplicationId) {\n      return locals.allowedChildrenTemplates\n    }\n\n    if (locals.form.allowedChildrenForms && locals.form.allowedChildrenForms.length) {\n      return locals.form.allowedChildrenForms\n    }\n    // handle form 'repository-folder' different\n    if (params.document.data.contentsForm && params.document.data.contentsForm.id) {\n      return [params.document.data.contentsForm]\n    }\n  }\n\n  openNew(event) {\n    $emit('show')\n\n    $refs.popupNew.$emit('show', event)\n  }\n\n  async showNewDocument(refOrAllowedChildrenTemplate) {\n    if (locals.allowedChildrenTemplates) {\n      const template = refOrAllowedChildrenTemplate.data.template.id\n\n      const cloneResult =  await Aeppic.cloneDeep(template, params.document.id, { save: true })\n\n      locals.preferNavigateToNewDocument = refOrAllowedChildrenTemplate.data.navigateToClone === true\n\n      locals.newDocument = cloneResult.root\n    } else {\n      locals.preferNavigateToNewDocument = false\n\n      locals.newDocument = await Aeppic.new(refOrAllowedChildrenTemplate.id, params.document.id)\n    }\n\n    if ('hidden' in locals.newDocument) {\n      locals.newDocument.hidden = true\n    }\n\n    Aeppic.save(locals.newDocument)\n\n    $refs.popupNew.$emit('close')\n\n    locals.showDialog = true\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $refs.dialogNewDocument.show()\n  }\n\n  async deleteNewDocument() {\n    await Aeppic.delete(locals.newDocument)\n\n    locals.newDocument = null\n    locals.preferNavigateToNewDocument = false\n  }\n\n  saveNewDocument() {\n    if (locals.newDocument.hidden) {\n      locals.newDocument.hidden = false\n    }\n\n    $refs.dialogNewDocument.close()\n    Aeppic.save(locals.newDocument)\n\n    const referenceFieldName = params.formReferenceFields && params.formReferenceFields[locals.newDocument.f.id]\n\n    if (referenceFieldName) {\n      params.document.addReference(referenceFieldName, locals.newDocument)\n      Aeppic.save(params.document)\n    }\n\n    if (locals.preferNavigateToNewDocument) {\n      Aeppic.navigateTo(locals.newDocument)\n    }\n\n    locals.newDocument = null\n\n    $emit('close')\n  }\n\n  get isElectron() {\n    return typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0\n  }\n\n  close() {\n    $emit('close')\n\n    locals.showDialog = false\n  }\n\n  destroy() {\n    locals.showDialog = false\n\n    $refs.dialogNewDocument && $refs.dialogNewDocument.close()\n  }\n}"},"locks":[],"created":{"at":"2020-06-08T15:01:20+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2022-02-21T15:13:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1645456433259,"ct":1621428481251,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"3e185751-e4f9-4493-b73d-3c99055d1b86","v":"67288a543c9a3cd0","previous":{"v":"08a93045721227fe"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"date-input","applies":"","packages":[{"id":"7fd60096-e527-4f12-95db-90959b630b75","v":"33aab68aa6354ab9","text":"V-Calendar"}],"template":"<date-picker  :value=\"controller.jsDate(params.value)\" \n              @input=\"(value) => $emit('input', controller.toISOStringWithOffset(value))\"\n              :attributes=\"locals.attributes\"\n              :popover=\"{ visibility: params.readonly ? 'hidden' : 'focus', positionFixed: true }\"\n              locale=\"de\"\n              :min-date=\"controller.minDate\"\n              :max-date=\"controller.maxDate\"\n              style=\"width:100%;\"\n              :mode=\"params.mode || 'date'\"\n              is24hr\n              :minute-increment=\"5\"\n>\n  <template v-if=\"!params.inline\" v-slot:default=\"{ inputValue, inputEvents, togglePopover, hidePopover }\">\n    <div class=\"_CSS-date\" :class=\"{ '_CSS-date--required': params.required && !params.value }\">\n      <button class=\"ae-button ae-button--small\" :disabled=\"params.readonly\" @click.stop=\"togglePopover()\">\n        <ae-icon class=\"far fa-calendar-alt\"></ae-icon>\n      </button> \n      <input  @click.stop\n              class=\"_CSS-input\"\n              :value=\"inputValue\"\n              v-on=\"inputEvents\"\n              :disabled=\"params.readonly\"\n              style=\"width:100%;\"\n              :required=\"params.required\"\n              placeholder=\"Datum auswählen\"\n      > \n    </div>\n  </template>\n</date-picker> \n","css":"._CSS-picker__input {\n  width: 100%;\n}\n\n._CSS .vc-popover-content {\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  box-shadow: var(--ae-shadow);\n}\n\n._CSS-date {\n  display: flex;\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  xpadding: var(--ae-space-1);\n}\n\n._CSS-date--required {\n  border-color: red;\n}\n\n._CSS ._CSS-input {\n  border: initial;\n}\n\n/*\n._CSS .vc-pane-container .vc-weeks {\n    display: none;\n}\n\n._CSS .vc-pane-container .vc-header {\n    margin-bottom: 10px;\n}\n*/","controller":"class Controller {\n  init() {\n    locals.attributes = [\n      {\n        key: 'today',\n        highlight: {\n          fillMode: 'light',\n        },\n        dates: new Date(),\n      }\n    ]\n  }\n\n  htmlDate(value) { \n    if (!value) {\n      return ''\n    }\n\n    if (params.mode === 'dateTime') {\n      return Aeppic.DateTime.fromISO(value, { setZone: true }).toLocal().toFormat(\"yyyy-MM-dd'T'T\")\n    }\n\n    return Aeppic.DateTime.fromISO(value, { setZone: true }).toLocal().toFormat('yyyy-MM-dd')\n  }\n\n  jsDate(value) {\n    if (value) {\n      return Aeppic.DateTime.fromISO(value, { setZone: true }).toLocal().toJSDate()\n    }\n\n    return null\n  }\n\n  toISOStringWithOffset(value) {\n    console.log(value)\n    // if (!value) {\n    //   return ''\n    // }\n\n    // const date = new Date(value)\n\n    // return Aeppic.DateTime.fromJSDate(date).toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n\n    if (!value) {\n      return ''\n    }\n\n    const date = new Date(value)\n\n    // return Aeppic.DateTime.fromJSDate(date).toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n    const dateTimeObject = params.mode === 'dateTime' ? Aeppic.DateTime.fromJSDate(date) : Aeppic.DateTime.fromJSDate(date).startOf('day')\n    const day = dateTimeObject.toFormat('yyyy-LL-dd')\n\n    // bug in Intl.format with resultings times equal or bigger than 24:00:00\n    // see: https://github.com/moment/luxon/issues/726\n    // see: https://github.com/moment/luxon/issues/915\n    // see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle\n    let timeWithTimeZone = dateTimeObject.toFormat('HH:mm:ssZZ')\n\n    // FIXME: Chrome 75 (Windows 10) does output an invalid timezone (2:00:00+0200) with a length of 12 characters.\n    if (timeWithTimeZone.length === 12) {\n      const offset = (Math.abs(new Date().getTimezoneOffset() / 60)).toString().padStart(2, '0')\n      timeWithTimeZone = `${offset}${timeWithTimeZone.slice(1)}`\n    }\n\n    return `${day}T${timeWithTimeZone}`\n  }\n\n  get minDate() {\n    if (params.min) {\n      return params.min\n    }\n\n    if (params.minField) {\n      if (!params.document) {\n        console.error(`Need params.document if params.minField is used`)\n      }\n      \n      return params.document.data[params.minField]\n    }\n\n    return null\n  }\n\n  get maxDate() {\n    if (params.max) {\n      return params.max\n    }\n\n    if (params.maxField) {\n      if (!params.document) {\n        console.error(`Need params.document if params.maxField is used`)\n      }\n      \n      return params.document.data[params.maxField]\n    }\n\n    return null\n  }\n}\n \n  "},"locks":[],"created":{"at":"2019-09-13T09:19:08+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2023-07-14T11:51:24+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1689335484039,"ct":1621428481251,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"58d99572-8a0b-4c65-b2e1-2bde5da75062","v":"7fab3a97e3de6d21","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"date-input.backup","applies":"","packages":[{"id":"ef7e8b10-f09a-47a0-ba25-2aabe9661396","v":"65e30bc2db6771f6","text":"vuejs-datepicker"}],"template":"<!-- <input  :readonly=\"readonly\"\n        :disabled=\"readonly\"\n        type=\"date\"\n        :value=\"controller.htmlDate(field)\"\n        @input=\"field = controller.toISOStringWithOffset($event.target.value)\"\n        :aria-label=\"label\"\n        style=\"width:100%\"> -->\n\n<datepicker \n  :disabled=\"params.readonly\"\n  :value=\"controller.jsDate(params.value)\" \n  @input=\"(value) => $emit('input', controller.toISOStringWithOffset(value))\" \n  :input-class=\"[ 'ae-form-cell__input', '_CSS-picker__input', { 'ae-form-cell__input--invalid': params.required ? !params.value : false} ]\"\n  calendar-class=\"_CSS-picker__calendar\"\n  wrapper-class=\"_CSS-picker__calendar-wrapper\"\n  :language=\"locals.languages.de\" \n  :monday-first=\"true\" \n  :use-utc=\"false\"\n  :required=\"params.required\"\n  :typeable=\"false\"\n  :inline=\"params.inline\"\n  :highlighted=\"locals.highlighted\"\n  :clear-button=\"params.readonly ? false : true\"\n  clear-button-icon=\"fal fa-times\"\n></datepicker> \n\n<!-- FIXME: date is cleared on blur -->\n<!-- :typeable=\"true\" -->\n<!-- see: https://github.com/charliekassel/vuejs-datepicker/issues/733 -->\n<!-- its cleared on blur if using properties \"typeable\" and \"langague\" together #733 -->","css":"._CSS-picker__input {\n  width: 100%;\n}\n\n/* FIXME: without it creates an overflow within the dialog. It works, but is not really visible on one-line-forms. */\n/* With this, the datepicker laps over the dialog. Just like the normal <input type=date> */\n/* Issue here is scrolling behaviour. It does not scroll with content scroll because it is fixed ¯\\_(ツ)_/¯ */\n/* .ae-dialog ._CSS-picker__calendar {\n  position: fixed !important; \n} */\n\n._CSS ._CSS-picker__calendar {\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n} \n\n._CSS-picker__calendar-wrapper > div:first-child {\n  position: relative;\n}\n\n._CSS-picker__calendar-wrapper .vdp-datepicker__clear-button {\n  position: absolute;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  display: flex;\n  align-items: center;\n  padding: 0 var(--ae-size-2);\n}","controller":"class Controller {\n  init() {\n    locals.languages = this.generateLanguage()\n    locals.highlighted = {\n      dates: [new Date()]\n    }\n  }\n\n  generateLanguage() {\n    // taken from vuejs-datepicker@1.5.4: node_modules/vuejs-datepicker/dist/locale/translations/de.js\n    const Language=function(e,t,r,s){this.language=e,this.months=t,this.monthsAbbr=r,this.days=s,this.rtl=!1,this.ymd=!1,this.yearSuffix=\"\"},prototypeAccessors={language:{configurable:!0},months:{configurable:!0},monthsAbbr:{configurable:!0},days:{configurable:!0}};prototypeAccessors.language.get=function(){return this._language},prototypeAccessors.language.set=function(e){if(\"string\"!=typeof e)throw new TypeError(\"Language must be a string\");this._language=e},prototypeAccessors.months.get=function(){return this._months},prototypeAccessors.months.set=function(e){if(12!==e.length)throw new RangeError(\"There must be 12 months for \"+this.language+\" language\");this._months=e},prototypeAccessors.monthsAbbr.get=function(){return this._monthsAbbr},prototypeAccessors.monthsAbbr.set=function(e){if(12!==e.length)throw new RangeError(\"There must be 12 abbreviated months for \"+this.language+\" language\");this._monthsAbbr=e},prototypeAccessors.days.get=function(){return this._days},prototypeAccessors.days.set=function(e){if(7!==e.length)throw new RangeError(\"There must be 7 days for \"+this.language+\" language\");this._days=e},Object.defineProperties(Language.prototype,prototypeAccessors);\n    const de = new Language(\"German\",[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],[\"Jan\",\"Feb\",\"Mär\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"]);\n\n    return {\n      de\n    }\n  }\n\n  htmlDate(value) {\n    if (value) {\n      return Aeppic.DateTime.fromISO(value).toFormat('yyyy-MM-dd')\n    }\n    return ''\n  }\n\n  jsDate(value) {\n    if (value) {\n      return Aeppic.DateTime.fromISO(value).toJSDate()\n    }\n\n    return null\n  }\n\n  toISOStringWithOffset(value) {\n    // if (!value) {\n    //   return ''\n    // }\n\n    // const date = new Date(value)\n\n    // return Aeppic.DateTime.fromJSDate(date).toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n\n    if (!value) {\n      return ''\n    }\n\n    const date = new Date(value)\n\n    // return Aeppic.DateTime.fromJSDate(date).toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n    const dateTimeObject = Aeppic.DateTime.fromJSDate(date).startOf('day')\n    const day = dateTimeObject.toFormat('yyyy-LL-dd')\n\n    let timeWithTimeZone = dateTimeObject.toFormat('TTZZZ')\n\n    // FIXME: Chrome 75 (Windows 10) does output an invalid timezone (2:00:00+0200) with a length of 12 characters.\n    if (timeWithTimeZone.length === 12) {\n      const offset = (Math.abs(new Date().getTimezoneOffset() / 60)).toString().padStart(2, '0')\n      timeWithTimeZone = `${offset}${timeWithTimeZone.slice(1)}`\n    }\n\n    return `${day}T${timeWithTimeZone}`\n  }\n}\n \n "},"locks":[],"created":{"at":"2020-05-08T09:00:45+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481251,"ct":1621428481251,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"09a7f97b93fb66ae","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"928d78a8-b4f0-4929-a158-648bd7d9b46f","v":"initial","p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"deebeephunky Application Layout","applies":"","packages":[],"template":"  <ae-layout layout-id=\"e8f8cc49-0118-43ba-ac25-0c016d6dea1d\"></ae-layout>\n\n  <div class=\"_CSS-app\">\n    <!-- <ae-design v-if=\"params.pageDocumentId !== 'root'\" :document-id=\"params.pageDocumentId\" name=\"page--model\"></ae-design> -->\n    <ae-layout  layout-id=\"e4c9e20a-a42d-4951-9121-c9ee191f1882\"\n                :param-navigate-to-profile=\"true\"\n    ></ae-layout>\n  </div>","css":"._CSS-app {\n  width: 100%;\n  height: 100%;\n  overflow: auto;\n}\n\n._CSS-app > * {\n  width: 100%;\n  height: 100%;\n}","controller":""},"locks":[],"created":{"at":"2018-10-30T12:52:13+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2018-10-30T12:52:13+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1540903933546,"ct":1540903933545,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"p":"3798ddaf-fd02-4b12-ae97-c545cd3dba01","data":{"name":"default","applies":"","template":"<div >\r\n  <page-title-bar document=\"document\"></page-title-bar>\r\n  <blockquote ng-show=\"document.data.description\">\r\n    <markdown content=\"{{document.data.description}}\"></markdown>\r\n    <br>\r\n  </blockquote>\r\n  <div class=\"row padded-content\">\r\n    <div class=\"col-md-12\">\r\n      <iris-form form=\"document.f\" data=\"document.data\" defaults=\"false\" readonly=\"true\"></iris-form>\r\n    </div>\r\n  </div> \r\n</div>"},"id":"1c000108-230d-4e51-b9bf-fd1e99268611","v":"initial","t":1467644257074,"ct":1467644257073,"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null,null],"a":["apps","2a9f2f9c-28df-4418-8b85-b4158b35ed3d","4c4390dd-b593-4bd1-8e6f-6a791cd234af","3798ddaf-fd02-4b12-ae97-c545cd3dba01"],"a_forms":["folder","application-form","form-folder","form"],"a_depth":4,"stamps":[]},{"f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"p":"6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2","data":{"name":"default","applies":"","template":"<rs-template>\r\n    <div layout=\"column\" flex >\r\n  <md-toolbar class=\"document-header\" rs-toolbar-keep-below rs-template-toolbar ng-if=\"!documentLayoutStylingOptions.isSelected('options','hideCommandBar')\">\r\n    <div class=\"md-toolbar-tools\" ng-if=\"!document.isEditable\" rs-template-toolbar-commands>\r\n        <md-button ng-show=\"$root.isHosted()\" rs-edit-file=\"edit\" ng-click=\"edit(document, 'datei')\">\r\n            Datei bearbeiten\r\n        </md-button>\r\n        \r\n      <!-- temp: must go into a custom layout for repository-folder-form -->\r\n      <document-command ng-if=\"document.f.id==='repository-folder-form'\"\r\n        target-document=\"document\" \r\n        command-id=\"{{document.data.customAddCommand.id || 'start-add-dialog-command'}}\" \r\n        option-form-id=\"{{document.data.contentsForm.id}}\" \r\n        option-parent-id=\"{{document.id}}\">\r\n      </document-command>\r\n\r\n      <rs-commands-menu document=\"document\" ng-if=\"!documentLayoutStylingOptions.isSelected('options','hideCommands')\"></rs-commands-menu>\r\n        <span flex></span>\r\n \r\n      <md-button aria-label=\"Delete\" class=\"fit\" rs-click-opens-dialog style=\"color:rgb(155, 65, 65)\">\r\n        <rs-dialog type=\"confirm\" title=\"Would you like to delete this ?\" content=\"It will be permanently deleted. The data will be retained in the archive's history but is no longer user restorable.\" ok=\"Delete it\" cancel=\"Keep\" rs-onok=\"document.delete()\">\r\n       \r\n        </rs-dialog>\r\n        <md-tooltip md-direction=\"left\">\r\n          Dokument Löschen\r\n        </md-tooltip>\r\n        <md-icon md-font-set=\"mi\" class=\"rs-light md-24\">delete</md-icon>\r\n      </md-button>\r\n      \r\n      <lx-search-filter class=\"rs-global-filter\" closed=\"true\" model=\"$rsDocumentDomain.globalFilter\" placeholder=\"filter...\" ng-show=\"$rsDocumentDomain.hasQueryApplyingGlobalFilter\">\r\n      </lx-search-filter>\r\n\r\n     <!--  <md-button aria-label=\"Comments\" class=\"tight\" style=\"color:red\" ng-click=\"rsToggleSidebar('hotline')\" ng-class=\"{'rs-active-sidebar': isSidebarOpen('hotline')}\" ng-if=\"options.hasSidebar\">\r\n        <md-tooltip>\r\n          Hotline\r\n        </md-tooltip>\r\n        <md-icon md-font-set=\"mi\" class=\"md-24\">contact_phone</md-icon>\r\n      </md-button>\r\n\r\n      <md-button aria-label=\"Comments\" class=\"tight\" style=\"color:#049BD0\" ng-click=\"rsToggleSidebar('tasks')\" ng-class=\"{'rs-active-sidebar': isSidebarOpen('tasks')}\" ng-if=\"options.hasSidebar\">\r\n        <md-tooltip>\r\n          Todos\r\n        </md-tooltip>\r\n        <md-icon md-font-set=\"mi\" class=\"md-24\">assignment turned in</md-icon>\r\n      </md-button>\r\n      <md-button aria-label=\"Tasks\" class=\"tight\" style=\"color:orange\" ng-click=\"rsToggleSidebar('comments')\" ng-class=\"{'rs-active-sidebar': isSidebarOpen('comments')}\" ng-if=\"options.hasSidebar\">\r\n        <md-tooltip>\r\n          Comments\r\n        </md-tooltip>\r\n        <md-icon md-font-set=\"mi\" class=\"md-24\">comment</md-icon>\r\n      </md-button>\r\n      <md-button aria-label=\"More\" class=\"tight\" style=\"color:#505050\" ng-click=\"rsToggleSidebar()\" ng-class=\"{'rs-active-sidebar': isSidebarOpen()}\" ng-if=\"options.hasSidebar\">\r\n        <md-tooltip>\r\n          Details\r\n        </md-tooltip>\r\n        <md-icon md-font-set=\"mi\" class=\"md-24\">chrome_reader_mode</md-icon>\r\n      </md-button> -->\r\n\r\n    </div>\r\n    <div class=\"md-toolbar-tools md-toolbar-tools-bottom rs-edit-toolbar-tools\" ng-if=\"document.isEditable\">\r\n      <md-button class=\"md-primary fit\" style=\"color:black\" aria-label=\"Save\" ng-click=\"document.stopEditingAndSave()\">\r\n        <md-tooltip>\r\n          Save changes\r\n        </md-tooltip>\r\n        <md-icon md-font-set=\"mi\" class=\"md-24\">check</md-icon>\r\n        Save changes\r\n      </md-button>\r\n      <md-button aria-label=\"Cancel\" style=\"color:black\" class=\"fit\" ng-click=\"document.cancelEditing()\">\r\n        <md-tooltip>\r\n          Cancel editing and dont save changes\r\n        </md-tooltip>\r\n        <md-icon md-font-set=\"mi\" class=\"md-24\">close</md-icon>\r\n        Cancel\r\n      </md-button>   \r\n      <span flex></span>\r\n      <md-button ng-if=\"!documentLayoutStylingOptions.isSelected('options','hideDelete')\" aria-label=\"Delete\" class=\"fit\" rs-click-opens-dialog style=\"color:rgb(155, 65, 65)\">\r\n        <rs-dialog type=\"confirm\" title=\"Would you like to delete this ?\" content=\"It will be permanently deleted. The data will be retained in the archive's history but is no longer user restorable.\" ok=\"Delete it\" cancel=\"Keep\" rs-onok=\"document.delete()\">\r\n       \r\n        </rs-dialog>\r\n        <md-tooltip md-direction=\"left\">\r\n          Delete this\r\n        </md-tooltip>\r\n        <md-icon md-font-set=\"mi\" class=\"rs-light md-24\">delete</md-icon>\r\n      </md-button>\r\n    </div>\r\n  </md-toolbar>\r\n\r\n  <div layout=\"column\" flex rs-template-content-all>\r\n    <div layout=\"column\" flex rs-template-content-fill>\r\n      <div layout=\"column\" layout-padding flex rs-template-default>\r\n        <document-design flex layout=\"column\" document=\"document\" design=\"page\" ></document-design>\r\n      </div>\r\n    </div>     \r\n  <!--   <md-sidenav class=\"md-sidenav-right\" md-component-id=\"sidebar\" md-is-locked-open=\"rsSidebarOpen()\" layout=\"column\" rs-toolbar-keep-below=\"64\" rs-toolbar-expand-to-fill rs-template-sidebar ng-if=\"options.hasSidebar\">\r\n      <md-toolbar class=\"md-theme-light\">\r\n        <h1 class=\"md-toolbar-tools\">Sidenav {{sidebar.id}}</h1>\r\n      </md-toolbar>\r\n      <md-content layout-padding >\r\n        <form>\r\n          <md-input-container>\r\n            <label for=\"testInput\">Test input</label>\r\n            <input type=\"text\" id=\"testInput\"\r\n                   ng-model=\"data\" md-sidenav-focus>\r\n          </md-input-container>\r\n        </form>\r\n      </md-content>\r\n    </md-sidenav> -->\r\n  </div>\r\n  <rs-refresh-toolbar></rs-refresh-toolbar>\r\n</div>\r\n\r\n\r\n</rs-template>"},"id":"2dc5309f-98d7-454a-a039-b1eb19c1c85d","v":"777d3147bf0fa30a","t":1467644301862,"ct":1467644300353,"previous":{"v":"efffa28c8c1a720c"},"modified":{"at":"2017-09-15T10:29:32+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:32+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null,null],"a":["apps","3d43a3f5-fea4-488d-9fc1-9dee5e694623","7c30f282-2b84-4976-8735-ba78662ea5e6","6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2"],"a_forms":["folder","application-form","folder","form"],"a_depth":4,"stamps":[]},{"f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"p":"6e7d7228-3e6c-491b-967e-6d88b0626f6d","data":{"name":"default","applies":"","template":"<div >\r\n  <page-title-bar document=\"document\" background-color=\"rgb(106, 179, 212)\" invert=\"true\"></page-title-bar>\r\n  <!-- background-color=\"transparent\" invert=\"false\" -->\r\n  <!-- background-color=\"#0093d5\" invert=\"true\" -->\r\n  <blockquote ng-show=\"document.data.description\">\r\n    <markdown content=\"{{document.data.description}}\"></markdown>\r\n    <br>\r\n  </blockquote>\r\n  <div class=\"row padded-content\">\r\n    <div class=\"col-sm-12\">\r\n      <document-list query=\"p:{{document.id}} AND f.id: 88c49094-0126-4b9c-82e2-6617367f6807\" list-id=\"1815b874-0560-4478-a302-a8d0042a3a3f\" sort=\"data.veranstaltung\">\r\n      </document-list>\r\n    </div>\r\n  </div>  \r\n</div>"},"id":"487535af-d8ad-42ad-a2d2-76d24caa478d","v":"c6bb93171d6a885e","t":1467644264227,"ct":1467644264205,"previous":{"v":"initial"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null,null],"a":["apps","3a8b08c2-14ef-48ee-a5b8-2ede237892a9","2d5b3e1c-5a2f-4e5a-8005-47373ea61666","6e7d7228-3e6c-491b-967e-6d88b0626f6d"],"a_forms":["folder","application-form","folder","form"],"a_depth":4,"stamps":[]},{"f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"p":"69e7c51e-ba71-4a0e-9134-15a020100648","data":{"name":"default","applies":"","template":"<div >\r\n  <!--\r\n  BANNER IMAGE\r\n  <div style=\"height:56px;background: url('api/docs/c5612efe-fa8a-4453-bdce-411e6ca22352/content') no-repeat center top fixed;background-size:cover\">\r\n    <fixed-header>\r\n    </fixed-header>\r\n    <div style=\"position:relative\">\r\n        <strong>SOME TEXT</strong>\r\n    </div>\r\n  </div>\r\n  -->\r\n  <page-title-bar document=\"document\"></page-title-bar>\r\n  <blockquote ng-show=\"document.data.description\">\r\n    <markdown content=\"{{document.data.description}}\"></markdown>\r\n    <br>\r\n  </blockquote>\r\n  <div class=\"row padded-content\">\r\n    <div class=\"col-sm-9 col-md-10\">\r\n      <iris-form form=\"document.f\" data=\"document.data\" defaults=\"false\" readonly=\"true\"></iris-form>\r\n    </div>\r\n  </div>   \r\n</div>"},"id":"51a159bd-f4a5-4b13-9a76-b95908b9616c","v":"initial","t":1467644265192,"ct":1467644265192,"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null,null,null],"a":["apps","83c76376-420e-4231-9275-d0fe2ab47c32","921c912f-d932-46d2-b061-ae7539e9a5a8","4ff7b40d-67d1-4a31-bcf8-e8459db63855","69e7c51e-ba71-4a0e-9134-15a020100648"],"a_forms":["folder","application-form","application-form","folder","form"],"a_depth":5,"stamps":[]},{"f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"p":"88c49094-0126-4b9c-82e2-6617367f6807","data":{"name":"default","applies":"","template":"<div >\r\n  <!--\r\n  BANNER IMAGE\r\n  <div style=\"height:56px;background: url('api/docs/c5612efe-fa8a-4453-bdce-411e6ca22352/content') no-repeat center top fixed;background-size:cover\">\r\n    <fixed-header>\r\n    </fixed-header>\r\n    <div style=\"position:relative\">\r\n        <strong>SOME TEXT</strong>\r\n    </div>\r\n  </div>\r\n  -->\r\n  <page-title-bar document=\"document\"></page-title-bar>\r\n  <blockquote ng-show=\"document.data.description\">\r\n    <markdown content=\"{{document.data.description}}\"></markdown>\r\n    <br>\r\n  </blockquote>\r\n  <div class=\"row padded-content\">\r\n    <div class=\"col-md-12\">\r\n      <div role=\"tabpanel\">\r\n        <!-- Nav tabs -->\r\n        <ul class=\"nav nav-tabs\" role=\"tablist\">\r\n          <li role=\"presentation\" class=\"active\"><a data-target=\"#allgemein\"  aria-controls=\"allgemein\" role=\"tab\" data-toggle=\"tab\">Allgemein</a></li>\r\n          <li role=\"presentation\" ng-if=\"document.data.zertifikat.dataUrl\"><a data-target=\"#zertifikat\"  aria-controls=\"zertifikat\" role=\"tab\" data-toggle=\"tab\">Zertifikat</a></li>\r\n        </ul>\r\n      </div>\r\n      \r\n      <!-- Tab panes -->\r\n      <div class=\"tab-content\">\r\n        <div role=\"tabpanel\" class=\"tab-pane active\" id=\"allgemein\">\r\n          <iris-form form=\"document.f\" data=\"document.data\" defaults=\"false\" readonly=\"true\"></iris-form>\r\n        </div>\r\n        <div role=\"tabpanel\" class=\"tab-pane\" id=\"zertifikat\" ng-init=\"contentUrl='api/docs/' + document.id + '/content?field=zertifikat#toolbar=1'\">\r\n          <viewport viewport-height=\"h\" offset-bottom=\"15\" ng-init=\"h=0\">\r\n            <iframe seamless frameborder=1 width=\"100%\" height=\"{{h}}\" ng-src=\"{{contentUrl}}\">\r\n            </iframe>\r\n          </viewport>\r\n        </div>\r\n      </div>\r\n      \r\n    </div>\r\n  </div>   \r\n</div>"},"id":"76c4655a-e2fd-44a7-82ec-5660b01f9a69","v":"initial","t":1467644267180,"ct":1467644267180,"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null,null],"a":["apps","3a8b08c2-14ef-48ee-a5b8-2ede237892a9","2d5b3e1c-5a2f-4e5a-8005-47373ea61666","88c49094-0126-4b9c-82e2-6617367f6807"],"a_forms":["folder","application-form","folder","form"],"a_depth":4,"stamps":[]},{"id":"77780917-fd88-43a9-9367-f5c4ec76bea9","v":"442b16e7793f1f0a","p":"document-picker-form","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"default","applies":"","template":"<div >\n  \n  <page-title-bar document=\"document\"></page-title-bar>\n  <blockquote ng-show=\"document.data.description\">\n    <markdown content=\"{{document.data.description}}\"></markdown>\n    <br>\n  </blockquote>\n  <div class=\"row padded-content\">\n    <div class=\"col-md-12\">\n      <document-design document=\"document\" design=\"dynamic\"></document-design>\n    </div>\n  </div>   \n</div>","css":"","controller":"","packages":[]},"locks":[],"created":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"modified":{"at":"2020-06-30T10:53:26+00:00","by":"8e6c22aa-8c69-4ff8-919a-7032841cf636","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719473826681,"ct":1719473826681,"a_depth":3,"a":["system","system-forms","document-picker-form"],"a_forms":["system-folder-form","repository-folder-form","form"],"inheritedLocks":[null,null,null,null],"stamps":[],"previous":{"v":"42386625c09e6564","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}},"meta":{"modified":{"at":"2024-06-27T07:37:06+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"p":"c69a0c1c-6c53-40c2-87e8-5ace866bf1df","data":{"name":"default","applies":"","template":"<div  layout-padding rs-background-color=\"#f1f1f1\"> \r\n \r\n   <!-- Dokumente Liste -->\r\n   <document-list list-id=\"c19286b0-f8f3-4d16-87ab-5d4d4364d3f5\" query-id=\"9d95f069-992e-4c90-b63b-9f6663b75836\">\r\n   </document-list>\r\n   \r\n   <!-- Aufgaben Liste -->\r\n   <document-list list-id=\"d97fb2e1-bf7d-41e4-b51e-949a8a0bca44\" query-id=\"d1062764-67d3-4eda-9f81-17f53ece0099\">\r\n   </document-list>\r\n\r\n    <!-- Blogeinträge Liste -->\r\n    <document-list list-id=\"2b61160b-6cea-4495-80d0-69b83ee0c8ac\" query-id=\"06c9cf75-6c83-4fd9-ba9c-23e529ccaf4c\">\r\n    </document-list>\r\n\r\n    <!-- Mitarbeiter Liste -->\r\n    <document-list list-id=\"4ecb8d4c-7d0a-4fa4-8590-21b8fcc88de2\" query-id=\"da5bd246-be43-4fcb-990c-6c9d460dcfad\">\r\n    </document-list>\r\n\r\n</div>"},"id":"88a6076c-92ea-4515-b2c5-3cd111e94828","v":"317694f8e4e2c1bf","t":1498138397121,"ct":1467644269291,"previous":{"v":"0ea73e947ec17b42"},"modified":{"at":"2017-09-15T10:29:32+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:32+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null,null],"a":["apps","8f8c9ed7-a7ed-4150-b162-92d6f19a05b0","526d9710-b2bd-4fa7-9341-d780ead102c1","c69a0c1c-6c53-40c2-87e8-5ace866bf1df"],"a_forms":["folder","application-form","form-folder","form"],"a_depth":4,"stamps":[]},{"f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"p":"fe643de2-cfcf-4b57-98a6-7db0fa58a0ac","data":{"name":"default","applies":"","template":"<div >\r\n  <page-title-bar document=\"document\" background-color=\"rgb(106, 179, 212)\" invert=\"true\"></page-title-bar>\r\n  <!-- background-color=\"transparent\" invert=\"false\" -->\r\n  <!-- background-color=\"#0093d5\" invert=\"true\" -->\r\n  <blockquote ng-show=\"document.data.description\">\r\n    <markdown content=\"{{document.data.description}}\"></markdown>\r\n    <br>\r\n  </blockquote>\r\n  <div class=\"row padded-content\">\r\n    <div class=\"col-sm-12\">\r\n      <document-list query=\"p:{{document.id}}\" list-id=\"ad2da831-737b-4eb9-b241-d572313e6880\">\r\n      </document-list>\r\n    </div>\r\n  </div>  \r\n</div>"},"id":"894850c1-96a4-46c8-8f46-0674af907831","v":"ae2012f6ffdf8d59","t":1467644270544,"ct":1467644270451,"previous":{"v":"dbd3ea1778f0a869"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null,null],"a":["apps","ab825f4a-2d1a-433d-800c-bf48f81b4569","d6aa757f-a3ea-4241-b6d9-5418d51c0c78","fe643de2-cfcf-4b57-98a6-7db0fa58a0ac"],"a_forms":["folder","application-form","folder","form"],"a_depth":4,"stamps":[]},{"id":"915cd692-495a-4ebe-b7fa-08b9d8731c04","v":"a523c4ab196258a2","p":"folder","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"default","applies":"1.x","template":"<document-list list-id=\"simple-list\" root-document-id=\"{{document.id}}\" query-id=\"children-query\"></document-list>","css":"","controller":"","packages":[]},"locks":[],"created":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"modified":{"at":"2020-06-30T10:53:26+00:00","by":"8e6c22aa-8c69-4ff8-919a-7032841cf636","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719473826680,"ct":1719473826680,"a_depth":3,"a":["system","system-forms","folder"],"a_forms":["system-folder-form","repository-folder-form","form"],"inheritedLocks":[null,null,null,null],"stamps":[],"previous":{"v":"b4a80cd5158c6477","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}},"meta":{"modified":{"at":"2024-06-27T07:37:06+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"p":"e4af0e46-8a46-4741-935d-13e29befd300","data":{"name":"default","applies":"","template":"<div >\r\n  <!--\r\n  BANNER IMAGE\r\n  <div style=\"height:56px;background: url('api/docs/c5612efe-fa8a-4453-bdce-411e6ca22352/content') no-repeat center top fixed;background-size:cover\">\r\n    <fixed-header>\r\n    </fixed-header>\r\n    <div style=\"position:relative\">\r\n        <strong>SOME TEXT</strong>\r\n    </div>\r\n  </div>\r\n  -->\r\n  <page-title-bar document=\"document\"></page-title-bar>\r\n  <blockquote ng-show=\"document.data.description\">\r\n    <markdown content=\"{{document.data.description}}\"></markdown>\r\n    <br>\r\n  </blockquote>\r\n  <div class=\"row padded-content\">\r\n    <div class=\"col-md-12\">\r\n      <div role=\"tabpanel\">\r\n        <!-- Nav tabs -->\r\n        <ul class=\"nav nav-tabs\" role=\"tablist\">\r\n          <li role=\"presentation\" class=\"active\"><a data-target=\"#medikamentendaten\"  aria-controls=\"medikamentendaten\" role=\"tab\" data-toggle=\"tab\">Medikamentendaten</a></li>\r\n          <li role=\"presentation\" ng-if=\"document.data.packungsbeilage.dataUrl\"><a data-target=\"#packungsbeilage\"  aria-controls=\"packungsbeilage\" role=\"tab\" data-toggle=\"tab\">Packungsbeilage</a></li>\r\n        </ul>\r\n      </div>\r\n      \r\n      <!-- Tab panes -->\r\n      <div class=\"tab-content\">\r\n        <div role=\"tabpanel\" class=\"tab-pane active\" id=\"medikamentendaten\">\r\n          <iris-form form=\"document.f\" data=\"document.data\" defaults=\"false\" readonly=\"true\"></iris-form>\r\n        </div>\r\n        <div role=\"tabpanel\" class=\"tab-pane\" id=\"packungsbeilage\">\r\n          <viewport viewport-height=\"h\" offset-bottom=\"15\" ng-init=\"h=0\">\r\n            <iframe ng-if=\"document.data.packungsbeilage.dataUrl\" seamless frameborder=1 width=\"100%\" height=\"{{h}}\" iris-src=\"{{'api/docs/' + document.id + '/content?field=packungsbeilage'}}\">\r\n            </iframe>\r\n          </viewport>\r\n        </div>\r\n      </div>\r\n      \r\n    </div>\r\n  </div>   \r\n</div>"},"id":"9b390760-58bc-4dab-b4cd-bc3ea0f6d79d","v":"afd1f9146be6e119","t":1467644272365,"ct":1467644271624,"previous":{"v":"2013f54823531fdb"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null,null,null],"a":["apps","83c76376-420e-4231-9275-d0fe2ab47c32","2c872bc9-30dc-45b4-9aed-8c1c89a69baa","d206ec4a-14b4-4425-9843-143e545ec76e","e4af0e46-8a46-4741-935d-13e29befd300"],"a_forms":["folder","application-form","application-form","folder","form"],"a_depth":5,"stamps":[]},{"f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"p":"31e79501-93cb-4f9b-a7c5-7b9ec66d16ed","data":{"name":"default","applies":"","template":"<div >\r\n  <page-title-bar document=\"document\" background-color=\"rgb(106, 179, 212)\" invert=\"true\"></page-title-bar>\r\n  <!-- background-color=\"transparent\" invert=\"false\" -->\r\n  <!-- background-color=\"#0093d5\" invert=\"true\" -->\r\n  <blockquote ng-show=\"document.data.description\">\r\n    <markdown content=\"{{document.data.description}}\"></markdown>\r\n    <br>\r\n  </blockquote>\r\n  <div class=\"row padded-content\">\r\n    <div class=\"col-sm-12\">\r\n      <document-list root-document-id=\"{{document.id}}\" query-id=\"71bfc480-30cc-49d5-aeeb-7ff7587555c9\" list-id=\"52dde20f-0e72-44dd-a29c-e497bd4c5e8d\">\r\n      </document-list>\r\n    </div>\r\n  </div>  \r\n</div>"},"id":"9f0fdf74-c61e-46fa-a0ec-00af7c6aeb14","v":"33e52a6e1c0ccee6","t":1467644272539,"ct":1467644272521,"previous":{"v":"initial"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null,null],"a":["apps","2a9f2f9c-28df-4418-8b85-b4158b35ed3d","4c4390dd-b593-4bd1-8e6f-6a791cd234af","31e79501-93cb-4f9b-a7c5-7b9ec66d16ed"],"a_forms":["folder","application-form","form-folder","form"],"a_depth":4,"stamps":[],"dts":1467644266817},{"f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"p":"a1158695-0353-4319-9e03-fe4539a17c06","data":{"name":"default","applies":"","template":"<iris-file-picker>\n  <iris-file-picker-tab type=\"library\" heading=\"Library\" description=\"Choose from the library....\" file-query=\"f.id:8bf0fb31-716d-4b76-98d8-b7349f1d7529\" file-field=\"file\">\n  </iris-file-picker-tab>\n  <iris-file-picker-tab type=\"upload\" heading=\"Local\" description=\"Upload a local file...\" form-id=\"8bf0fb31-716d-4b76-98d8-b7349f1d7529\" form-version=\"1\" file-field=\"file\" parent-id=\"88731a32-480f-4ee7-916c-a9b708443aeb\">\n  </iris-file-picker-tab>\n  <div >\n    <page-title-bar document=\"document\"></page-title-bar>\n    <blockquote ng-show=\"document.data.description\">\n      <markdown content=\"{{document.data.description}}\"></markdown>\n      <br>\n    </blockquote>\n    <div class=\"row padded-content\">\n      <div class=\"col-sm-9 col-md-10\">\n        <document-autosave  document=\"document\"></document-autosave>\n        <iris-form form=\"document.f\" data=\"document.data\" defaults=\"false\" readonly=\"false\"></iris-form>\n      </div>\n    </div>   \n  </div>\n</iris-file-picker>"},"id":"a3301f3e-3fa4-4b83-8bcf-d05f7c292b37","v":"9613fb6455d92279","t":1467644272956,"ct":1467644272899,"previous":{"v":"b2aca4e928713b5a"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null,null],"a":["apps","ab825f4a-2d1a-433d-800c-bf48f81b4569","d6aa757f-a3ea-4241-b6d9-5418d51c0c78","a1158695-0353-4319-9e03-fe4539a17c06"],"a_forms":["folder","application-form","folder","form"],"a_depth":4,"stamps":[]},{"id":"d163bf16-2093-4475-bbd7-87e709c49e0b","v":"initial","cloneOf":{"id":"9b390760-58bc-4dab-b4cd-bc3ea0f6d79d","v":"afd1f9146be6e119","text":"default"},"originalCloneOf":{"id":"9b390760-58bc-4dab-b4cd-bc3ea0f6d79d","v":"afd1f9146be6e119","text":"default"},"p":"38aab2e1-ee5c-4fc2-90e9-962b4161ac22","f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"data":{"name":"default","applies":"","template":"<div >\r\n  <!--\r\n  BANNER IMAGE\r\n  <div style=\"height:56px;background: url('api/docs/c5612efe-fa8a-4453-bdce-411e6ca22352/content') no-repeat center top fixed;background-size:cover\">\r\n    <fixed-header>\r\n    </fixed-header>\r\n    <div style=\"position:relative\">\r\n        <strong>SOME TEXT</strong>\r\n    </div>\r\n  </div>\r\n  -->\r\n  <page-title-bar document=\"document\"></page-title-bar>\r\n  <blockquote ng-show=\"document.data.description\">\r\n    <markdown content=\"{{document.data.description}}\"></markdown>\r\n    <br>\r\n  </blockquote>\r\n  <div class=\"row padded-content\">\r\n    <div class=\"col-md-12\">\r\n      <div role=\"tabpanel\">\r\n        <!-- Nav tabs -->\r\n        <ul class=\"nav nav-tabs\" role=\"tablist\">\r\n          <li role=\"presentation\" class=\"active\"><a data-target=\"#medikamentendaten\"  aria-controls=\"medikamentendaten\" role=\"tab\" data-toggle=\"tab\">Medikamentendaten</a></li>\r\n          <li role=\"presentation\" ng-if=\"document.data.packungsbeilage.dataUrl\"><a data-target=\"#packungsbeilage\"  aria-controls=\"packungsbeilage\" role=\"tab\" data-toggle=\"tab\">Packungsbeilage</a></li>\r\n        </ul>\r\n      </div>\r\n      \r\n      <!-- Tab panes -->\r\n      <div class=\"tab-content\">\r\n        <div role=\"tabpanel\" class=\"tab-pane active\" id=\"medikamentendaten\">\r\n          <iris-form form=\"document.f\" data=\"document.data\" defaults=\"false\" readonly=\"true\"></iris-form>\r\n        </div>\r\n        <div role=\"tabpanel\" class=\"tab-pane\" id=\"packungsbeilage\">\r\n          <viewport viewport-height=\"h\" offset-bottom=\"15\" ng-init=\"h=0\">\r\n            <iframe ng-if=\"document.data.packungsbeilage.dataUrl\" seamless frameborder=1 width=\"100%\" height=\"{{h}}\" iris-src=\"{{'api/docs/' + document.id + '/content?field=packungsbeilage'}}\">\r\n            </iframe>\r\n          </viewport>\r\n        </div>\r\n      </div>\r\n      \r\n    </div>\r\n  </div>   \r\n</div>","packages":[]},"locks":[],"created":{"at":"2019-03-26T08:44:12+00:00","by":"2695f56c-96e6-4009-8e2f-d545ea1e02aa","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-03-26T08:44:12+00:00","by":"2695f56c-96e6-4009-8e2f-d545ea1e02aa","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1553589852882,"ct":1553589852871,"a_depth":5,"a":["apps","83c76376-420e-4231-9275-d0fe2ab47c32","2c872bc9-30dc-45b4-9aed-8c1c89a69baa","d206ec4a-14b4-4425-9843-143e545ec76e","38aab2e1-ee5c-4fc2-90e9-962b4161ac22"],"a_forms":["folder","application-form","application-form","folder","form"],"inheritedLocks":[null,null,null,null,null,null],"stamps":[]},{"id":"82658706-67dd-4113-b8ec-742a685ea919","v":"9442642b272c8743","previous":{"v":"f00fab7c618dbbb7"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Delete Button","applies":"","packages":[],"template":"  <button class=\"ae-button _CSS-button--danger\" :title=\"params.title || 'Löschen'\" @click.stop=\"$emit('selected')\">\n    <ae-icon class=\"fad fa-trash \"></ae-icon>\n  </button> ","css":"\n._CSS ._CSS-button--danger:hover {\n  color: var(--ae-accent-red-500) !important;\n}\n","controller":""},"locks":[],"created":{"at":"2018-06-20T16:27:15+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2022-06-02T20:46:00+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1654202760541,"ct":1621428481252,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"dac8948f-67d5-4b88-87ef-8dab40d869cd","v":"0ea0512a1794ef27","previous":{"v":"6448a42098322e72"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Delete Button","applies":"","packages":[],"template":"<div @click=\"$emit('click')\" class=\"dbps-button ae-noselect\">\n  <ae-icon class=\"fa fa-trash\"></ae-icon>\n</div>","css":"","controller":""},"locks":[],"created":{"at":"2018-06-20T16:31:48+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2018-06-22T08:19:07+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"from":"","client":"server"},"t":1529655547333,"ct":1529512308179,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2018-04-18T15:35:11+02:00","by":"","client":"server","from":""},"ct":1752143073205,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      CoreProject: '0b6a2b21-9425-466e-9e8d-57ec39cc95e1',\n      CoreFolder: 'a04c8913-db48-4e80-b20d-0f3cc17a778c',\n      BaugutachtenProject: 'e2f6fe5a-cdab-41ed-a1b2-ad342ee670d1',\n    }\n\n    locals.show = false\n    locals.noEditForms = [\n      'c69a0c1c-6c53-40c2-87e8-5ace866bf1df', // Unternehmen\n      'repository-folder-form',\n      'root-folder-form',\n      '81939b86-a48e-480e-afd1-cb2907568550', // Security\n      'account',\n      'd2ac3563-3c3f-4f02-b923-9b67abf98d10', // Mitarbeiter\n      '4c1ddccd-004a-4467-bd14-9cf590ef58eb', // Profilseite\n      'bf8eb298-3431-4138-a1e1-e748e05f3f37', // Search Result\n      '5d0ac040-1428-48bc-9b4f-28c69e098b3c', // Search (new)\n      '4f3c48aa-8d12-4dfa-8a66-064d8a851a5b', // Personalordner\n      'fb822f2f-880c-4676-be8b-cc557e822bc4', // Arc.Projekte.Stammdaten.Leistungen\n      // 'e10a8072-024c-44a7-80e3-4cd75c6ec1ea', // Arc.Projekte.Vertrag.Rechnung/Zahlung\n      '14931d03-c3bb-4cf7-9f62-747f94d8b01a', // Unterweisungen.Lesebestätigung\n      'f85fbba8-1232-4ec7-9ca8-da9fc5b14109', // Unterweisungen.Stammdaten,\n      '5a5c8705-67dd-4bd9-b74d-a4d48aef5e07', // Core.Anruf\n      'c5cf96a1-40bb-44d5-a3f7-ea30706caf58', // Core.Gesprächsnotizen\n      '58c8b8e4-315d-4a8a-8ac3-e69d017640a6', // ModelAgentur.Projektlink\n    ]\n\n    locals.noEditAncestorForms = {\n      '88b1f60e-71f6-46f5-94ea-3d7bbe972950': [ // Arc.Projekte.Projekt.Leistungs-Aufgabe\n        '98c77209-1245-43d6-90b5-8625183f470c' // Arc.Projekte.Projekt\n      ],\n      '98c77209-1245-43d6-90b5-8625183f470c': [ // Arc.Projekte.Projekt\n        '9f8071fd-6f25-489e-8562-4399701546b0', // Blower Door Test\n        '281c6bd6-2e24-42ba-868e-b63cbba4254f', // Bandschutz\n        '34d811a8-9de0-4b20-bc24-c55826a06748', // Bandschutzleitung\n        '11a327ee-c8e6-453a-bcdd-f585877f2fd8', // Energieausweis\n        'fa3777b5-bfff-43ac-a5c5-ea15486dd334', // ENEV\n        '4862401e-e182-451c-a855-ef2e9b9441c5', // KFW+ENEV\n        '03c16e2b-302e-4c2c-93c1-931679919e0b', // Schallschutz\n        '2c01a15d-c14d-44c6-adc5-d9b3fdc692b7', // Schallschutz Kontrollen\n        '328998fb-7e67-4fca-b40b-377d9a07776d', // Schallschutzmessung\n        '5ff471b3-1769-408b-825a-69d6416757c3', // Simulation (jeweils separat)\n        '41da8494-ec0a-4b13-bad7-162f3f1fbba4',\n        '81e1dec7-0c25-4694-9724-d1a86f8dc0db',\n        '873e5be1-18d7-47ae-9ea5-438bce403e61',\n        '5acb56fa-2bad-4e9b-8385-ab82c2562b47',\n        'c97e431f-1d18-4f45-9915-591932d2cd23',\n      ]\n    }\n\n    locals.noEditAncestor = [\n      '0bb3d600-faf0-4a5c-b49f-7994d234ae76', // ITM.AntragContainer\n      '49af721d-7068-4dd7-8df4-a5f79b3804cf', // ITM.SammelinfoContainer\n    ]\n\n    locals.documentOnlyEditIfStampedWithStampType = {\n      '0bb3d600-faf0-4a5c-b49f-7994d234ae76': [ // ITM.AntragContainer\n        '0b37a29f-97ad-4c23-8ab3-3dda160b9faf', // ITM.AntragContainer.P1\n      ], \n      '49af721d-7068-4dd7-8df4-a5f79b3804cf': [ // ITM.SammelinfoContainer\n        '4bace9e6-9c80-4682-91b9-23f97d046e2c', // ITM.SammelinfoContainer.S1\n      ],\n      '50c3c7c5-c3d4-460c-b34d-0d61a4cb09ae': [ // ITM.Bestandseintrag\n        '94bb7578-9693-4645-91f5-91263de77e65', // ITM.Bestandseintrag.Nicht Prozessiert\n      ]\n    }\n\n    locals.documentOnlyEditIfStampedWithStampTypeAndActorOfWorkflow = {\n      '49af721d-7068-4dd7-8df4-a5f79b3804cf': { // ITM.SammelinfoContainer\n        stamps: {\n          '4bace9e6-9c80-4682-91b9-23f97d046e2c': {  // ITM.SammelinfoContainer.S1\n            actors: [\n              '265cbbf4-37c3-465a-bb69-d546b9b36b99', // ITM.Workflow.Sammelinfo.BITM\n            ]\n          },\n        }\n      }\n    }\n\n    // structural (or transparent, which implies structural) forms can't be deleted via the UI, unless\n    // explicitly overridden with params.allowStructuralDelete (used by the Developer Aktionen entry point)\n    const structuralForms = await Aeppic.find(`f.id:form (data.tags:*structural* OR data.tags:*transparent*)`, { size: 9999 })\n    locals.structuralFormIds = structuralForms\n      .filter((f) => f.data.tags?.includes('structural') || f.data.tags?.includes('transparent'))\n      .map((f) => f.id)\n\n    watchParam('document', async () => {\n      locals.show = await this.showButton()\n    })\n    watchParam('documents', async () => {\n      locals.show = await this.showButton()\n    })\n\n    locals.show = await this.showButton()\n\n    if (locals.show) {\n      $emit('visible')\n    } else {\n      $emit('invisible')\n    }\n  }\n\n  get documents() {\n    const documents = []\n\n    if (this.hasMultipleDocuments) {\n      documents.push(...params.documents)\n    } else if (params.document) {\n      documents.push(params.document)\n    }\n\n    return documents.filter(doc => this.canDeleteDocumentInsecureButSync(doc))\n  }\n\n  get hasMultipleDocuments() {\n    return params.documents && Array.isArray(params.documents)\n  }\n\n  async showButton() {\n    if(this.hasMultipleDocuments) {\n      return this.documents.length >= 1\n    }\n\n    if (!params.document) {\n      return false\n    }\n\n    if (params.forceShow) {\n      return true\n    }\n\n    return this._canDeleteDocument(params.document)\n  }\n\n  async _canDeleteDocument(document) {\n    const canResolveSync = locals.documentOnlyEditIfStampedWithStampTypeAndActorOfWorkflow[document.f.id] === undefined\n    if (canResolveSync) {\n      if (!this.canDeleteDocumentInsecureButSync(document)) {\n        return false\n      }\n    }\n\n    if (!(await this.canDeleteDocumentInsecureAsync(document))) {\n      return false\n    }\n\n    let canEdit = !document.readonly && await Aeppic.canEdit(document)\n\n    if (Aeppic.Account?.data.isGroupAccount === true) {\n      // a group account can only edit if it got rights assigned. Unsecured folders are not editable.\n      const editable = await Aeppic.edit(document)\n      const isLocked = editable.hasLock() || editable.hasInheritedLock()\n\n      if (isLocked) {\n        canEdit = canEdit === true\n      } else {\n        canEdit = false\n      }\n    }\n\n    return canEdit\n  }\n\n  async canDeleteDocumentInsecureAsync(document) {\n    if (locals.documentOnlyEditIfStampedWithStampTypeAndActorOfWorkflow[document.f.id]) {\n      const info = locals.documentOnlyEditIfStampedWithStampTypeAndActorOfWorkflow[document.f.id]\n\n      const onlyForStamps = Object.keys(info.stamps)\n\n      // only allow stamps of some workflow. Their stamp type also must be defined in the info\n      const allowedStamps = document.stamps.filter(stamp => stamp.workflow.id.length > 0 && onlyForStamps.includes(stamp.type.id))\n      \n      if (allowedStamps.length === 0) {\n        return false\n      }\n\n      // check if current account is an actor which is defined in the info\n      for (const stamp of allowedStamps) {\n        const allowedActors = info.stamps[stamp.type.id]?.actors\n\n        if (!allowedActors?.length) {\n          continue\n        }\n\n        const workflowConfiguration = await Aeppic.get(stamp.workflow.id)\n\n        const workflow = new packages.DocumentWorkflow(document.id, { workflow: workflowConfiguration.data.workflowDefinition.id, Aeppic })\n        const actors = await workflow._getAvailableActors()\n\n        return actors.some(actor => allowedActors.includes(actor.id))\n      }\n\n      return false\n    }\n\n    return true\n  }\n  \n  // NOTE: this may be used as a pre-check for the UI\n  canDeleteDocumentInsecureButSync(document) {\n    if (document.a.length <= 1) {\n      return false\n    }\n\n    if (locals.noEditForms.indexOf(document.f.id) !== -1) {\n      return false\n    }\n\n    if (!params.allowStructuralDelete && locals.structuralFormIds.includes(document.f.id)) {\n      return false\n    }\n\n    if (document.a_forms.find(a_form => locals.noEditAncestor.includes(a_form))) {\n      return false\n    }\n\n    if (locals.documentOnlyEditIfStampedWithStampType[document.f.id]) {\n      const stampAllowsEdit = document.stamps?.some(stamp => locals.documentOnlyEditIfStampedWithStampType[document.f.id].includes(stamp.type.id))\n\n      if (!stampAllowsEdit) {\n        return false\n      }\n    }\n\n    if (locals.noEditAncestorForms[document.f.id] && document.a_forms.find(a_form => locals.noEditAncestorForms[document.f.id].includes(a_form))) {\n      return false\n    }\n\n    // TODO: \n    if (document.f.id === 'group' && document.data.systemManaged) {\n      return false\n    }\n\n    if (document.f.id === this.FORMS.CoreFolder) {\n      const linkedField = ['project', 'client', 'order']\n\n      const hasLinked = linkedField.some(field => document.data[field] && document.data[field].id)\n      if (hasLinked) {\n        return false\n      }\n    }\n\n    if (document.f.id === this.FORMS.CoreProject || document.f.id === this.FORMS.BaugutachtenProject) {\n      const linkedField = ['client', 'order']\n\n      const hasLinked = linkedField.some(field => document.data[field] && document.data[field].id)\n      if (hasLinked) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n  destroy() {\n    $refs.deleteDialog && $refs.deleteDialog.close()\n  }\n\n  async deleteDocuments() {\n    $refs.deleteDialog.close()\n\n    const documentsToDelete = this.documents\n    \n    const promises = []\n\n    for (const doc of documentsToDelete) {\n      const canDelete = await this._canDeleteDocument(doc)\n      if (!canDelete) {\n        continue\n      }\n\n      Aeppic.delete(doc)\n\n      if (params.removeReferenceFromParentField) {\n        promises.push(this._removeReferenceFromParentField(doc))\n      }\n    }\n\n    await Promise.all(promises)\n\n    if (this.hasMultipleDocuments) {\n      $emit('delete', documentsToDelete.map(doc => doc.id))\n      return\n    }\n\n    if (params.noNavigate) {\n      $emit('delete', params.document.id)\n    } else {\n      if (Aeppic.LocalStorage.getValue('appLayoutId')) {\n        Aeppic.navigateTo(params.document.p, { deleted: true })\n      } else {\n        Aeppic.drillInto(params.document.p)\n      }\n    }\n  }\n\n  async _removeReferenceFromParentField(doc) {\n    const parent = await Aeppic.edit(doc.p)\n    parent.removeReference(params.removeReferenceFromParentField, doc)\n    Aeppic.save(parent)\n  }\n\n  show() {\n    $refs.deleteDialog.show()\n    $emit('open')\n  } \n}","css":"._CSS-commands {\n  display: grid;\n  grid-gap: 2px;\n  grid-auto-columns: auto;\n  grid-auto-flow:column;\n}\n\n._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n._CSS-dialog__commands {\n  flex: 1;\n  display: flex;\n  justify-content: flex-end;\n}","name":"Delete Button with Dialog","packages":[{"id":"9980d952-e898-413a-af84-051795281aca","text":"Workflow","v":"57de45af509a3c86"}],"template":"<div class=\"_CSS-commands\" v-if=\"locals.show\">\n  <ae-layout :layout-id=\"params.buttonLayoutId || '82658706-67dd-4113-b8ec-742a685ea919'\"\n  @click.stop=\"controller.show()\"\n  @selected=\"controller.show()\"\n  :params=\"params.buttonParams\"\n  :param-title=\"controller.hasMultipleDocuments ? 'Dokumente löschen' : 'Dokument löschen'\"\n  ></ae-layout> \n</div>\n\n<ae-dialog ref=\"deleteDialog\" title=\"Dokument löschen\" :backdrop-close=\"false\" :full-screen=\"Aeppic.Device === 'Phone'\">\n\n  <div slot=\"header\" slot-scope=\"scope\" class=\"_CSS-dialog__header\">\n    <template v-if=\"controller.hasMultipleDocuments\">\n      {{ controller.documents.length }} Dokumente löschen\n    </template>\n    <template v-else>\n      <span><ae-design style=\"display: inline;\" name=\"title\" :document=\"params.document\"></ae-design> löschen</span>\n      <button class=\"ae-button\" @click=\"scope.close()\" style=\"font-size: 1rem;\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </template> \n  </div>\n\n  <div slot=\"body\" class=\"_CSS-dialog__body\">\n    <p>\n      <template v-if=\"!controller.documents.length\">\n        Keine löschbaren Dokumente ausgewählt.\n      </template>\n      <template v-else-if=\"controller.hasMultipleDocuments\">\n        Möchten Sie diese {{ controller.documents.length }} Dokumente löschen?\n      </template>\n      <template v-else>\n        Möchten Sie dieses Dokument löschen?\n      </template>\n    <button class=\"ae-button\" style=\"display:inline;\" @click=\"locals.showMore = !locals.showMore\">\n      <ae-icon class=\"fa fa-info-circle\"></ae-icon>\n    </button>\n    </p>\n\n    <div v-if=\"locals.showMore\" style=\"font-size: 0.9em;\">\n      <p>\n        Das Dokument wird permanent gelöscht.\n      </p>\n      <p>\n        Die Daten bleiben in der Historie erhalten, sind aber nicht durch einen Nutzer wiederherstellbar.\n      </p>\n    </div>\n \n    <ae-list  list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n              :documents=\"controller.documents\"\n              param-name=\"search-card\"\n    ></ae-list>\n  </div>\n  <div slot=\"commands\" slot-scope=\"scope\" class=\"_CSS-dialog__commands\">\n    <div class=\"ae-button\" @click=\"scope.close()\">Abbrechen</div>\n    <div class=\"ae-button ae-button--primary\" @click=\"controller.deleteDocuments()\">Löschen</div>\n  </div>\n</ae-dialog>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"0ded34c5-1221-4511-af93-d897a79f1369","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-07-29T07:08:54+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"2bd14d2044921112"},"stamps":[],"t":1785308934322,"v":"039cdfe2b6de7a20"},{"id":"eec7c7aa-892c-4506-8e37-1a101797677c","v":"initial","previous":{"v":""},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Delete Translation Button","applies":"","packages":[],"template":"<div @click=\"$emit('click')\" class=\"dbps-button ae-noselect\">\n  <ae-icon class=\"fa fa-trash\"></ae-icon>\n  <div style=\"margin-left: 1ch;\">Übersetzung löschen</div>\n</div>","css":"","controller":""},"locks":[],"created":{"at":"2018-07-06T12:15:38+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2018-07-06T12:15:38+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1530879338378,"ct":1530879338378,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"a889b8ec-0158-434b-b709-c523b685a9de","v":"8d4ce9bec6d09363","p":"design-form","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Design Inspector Layout","applies":"","template":"","css":"","controller":"","packages":[]},"locks":[],"created":{"at":"2017-10-01T15:17:07+02:00","by":"","from":"","client":"12cd9ee1-253b-442d-8c0d-c0ccbd3113f3"},"modified":{"at":"2020-06-30T10:53:26+00:00","by":"8e6c22aa-8c69-4ff8-919a-7032841cf636","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719473826689,"ct":1719473826689,"a_depth":3,"a":["system","system-forms","design-form"],"a_forms":["system-folder-form","repository-folder-form","form"],"inheritedLocks":[null,null,null,null],"stamps":[],"previous":{"v":"d1ba325b9220f617","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}},"meta":{"modified":{"at":"2024-06-27T07:37:06+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"id":"642cd02e-f584-4ff6-8450-3f109221ca92","v":"09e3f4adaa104b42","previous":{"v":"eb476a13e7894309"},"p":"0c8ef865-fd1b-40bd-b665-97ad067fd10f","f":{"id":"layout-form","v":"dad1a77c49465e08","text":"Layout"},"data":{"name":"Details","applies":"","packages":[],"template":"<ae-design class=\"_CSS-info-pane\" :document=\"params.document\" name=\"info\"></ae-design>\n<!-- <dl class=\"ae-dl\">\n\n  <dd>Drucken</dd>\n  <dt>\n    <a class=\"bp-button bp-button--transparent\" :href=\"'/' + params.documentId + '?print'\" target=\"_blank\">\n      <ae-icon class=\"fa fa-print\"></ae-icon>\n      Druckansicht\n    </a>\n  </dt>\n</dl> -->\n","css":"._CSS {\n  color: var(--ae-foreground);\n}\n\n._CSS-info-pane {\n  min-width: 0;\n}","controller":""},"locks":[],"created":{"at":"2018-04-19T18:13:55+02:00","by":"","from":"","client":"server"},"modified":{"at":"2018-12-21T14:19:46+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1545401986227,"ct":1524154435494,"a_depth":4,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","6b892ddf-3264-4056-b191-166f4410d9fa","0c8ef865-fd1b-40bd-b665-97ad067fd10f"],"a_forms":["folder","application-form","folder","folder"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"a797282b-feb6-4878-82a2-bac7a5a98a5b","v":"0d4975bfdab17989","previous":{"v":"377006ddae391429"},"p":"e4a62254-c6ab-4d0d-a9ae-81934093f6e2","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"DEV ERROR Toast Handler Layout","applies":"","template":"<button @click=\"controller.addDemo()\" style=\" pointer-events:auto;\">\n  ADD DEMO TOAST\n</button>\n \n\n<div class=\"fixed right-0 top-0 \">\n  <transition-group name=\"slide\" tag=\"div\" class=\"flex flex-col gap-2\">\n    <template v-if=\"locals.toasts.length\">\n        <div v-for=\"(toast, index) of locals.toasts\" \n          class=\"w-[300px] h-[50px] overflow-hidden p-1 rounded-md flex items-center gap-2\" \n          :class=\"['bg-' + toast.color + '-100']\"\n          :key=\"toast._renderKey\">\n          {{ toast }}\n            <!-- <ae-design  :name=\"toast.data.design + ',toast'\" \n                        :param-toast=\"toast\"\n                        :document-id=\"toast.data.target.id\"\n                        @remove=\"controller.removeToast(index)\"\n            ></ae-design> -->\n\n            <!-- <img class=\"h-[46px]\" src='/api/docs/9744abd0-017e-4616-9feb-8e6b75531dec/fields/file/_content?version=528a7f34fbc5fa5a&dataUrl=aeppic-local%3A%2F%2F63e370d3-c562-497d-8a33-2badb31b4eb2%2F1'>\n\n            Der Antrag 'ITM-18' wurde eingereicht! -->\n        </div>\n    </template>\n  </transition-group>\n</div>\n\n","css":"\n.slide-leave-active,\n.slide-enter-active {\n  transition: all 0.5s;\n}\n\n.slide-enter {\n  transform: translate(100%, 0);\n}\n.slide-leave-to {\n  transform: translate(100%, 0);\n}\n","controller":"class Controller {\n  async init() {\n    this.TOAST_DEFAULTS = {\n      close: true\n    }\n\n    locals.renderCounter = 0\n    locals.toasts = []\n    locals.show = false\n\n    // $on('show-toast', (toast) => this.addToast(toast))\n\n    // $emit('register-listener', 'show-toast')\n\n    this.onError = (...error) => {\n      console.warn(...error)\n      this.addToast({\n        id: Aeppic.uuid(),\n        text: error[0],\n        color: 'red',\n      }) \n    } \n\n    packages.window.addEventListener('unhandledrejection', this.onError)\n    packages.window.addEventListener('error', this.onError)\n    console.error = (...args) => this.onError(...args)\n  }\n\n  destroy() {\n    packages.window.removeEventListener('unhandledrejection', this.onError)\n    packages.window.removeEventListener('error', this.onError)\n  }\n\n  // addDemo() {\n  //   const demoToast = {\n  //     id: Aeppic.uuid(),\n  //     data: {\n  //       text: `Datei wurde hochgeladen`,\n  //       title: 'Upload',\n  //       target: {\n  //         id: '62a77b60-94ae-497b-8852-c3de0cb2d0dd'\n  //       },\n  //       design: 'toast-upload--finished',\n  //       timeout: 2000,\n  //       close: true,\n  //       color: 'green',\n  //       icon: 'fa fa-cloud-upload'\n  //     },\n  //     created: {\n  //       at: Aeppic.DateTime.local().toISO()\n  //     }\n  //   }\n\n  //   this.addToast(demoToast) \n  // }\n\n  addToast(toast) {\n    Aeppic.setTimeout(() => {\n      \n    if (!toast.id) {\n      console.warn('Could not add toast: toast.id is null')\n      return\n    }\n\n    const t = { \n      ...this.TOAST_DEFAULTS, \n      ...JSON.parse(JSON.stringify(toast))\n    }\n\n    t._renderKey = this._getRenderKey(t)\n\n\n    if (locals.toasts.length > 10) {\n      locals.toasts = locals.toasts.slice(1)\n    }\n\n    locals.toasts.push(t)\n    \n    }, 100)\n  }\n\n  _getRenderKey(toast) {\n    const key = `${toast.id}_${locals.renderCounter}`\n    locals.renderCounter += 1\n    return key\n  }\n\n  removeToast(index) {\n    locals.toasts.splice(index, 1)\n  }\n}","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"cc146accf5ec1930","text":"Window"}]},"locks":[],"created":{"at":"2024-07-09T14:57:25+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"modified":{"at":"2024-11-04T14:57:18+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1730732238784,"ct":1720537302372,"a_depth":2,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2"],"a_forms":["folder","application-form"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2019-03-25T15:18:04+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1621428481252,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.isLoading = false\n    locals.filter = ''\n    locals.sortByModifiedAt = false\n    locals.searchOptions = {\n      size: 50,\n      searchAllFields: false,\n      sort: [{field: 'f.id'}, { field: 'data.name'} , { field: 'created.at' }]\n    }\n    \n    locals.searchText = ''\n    locals.additionalFilters = []\n    locals.foundDocument = null\n\n\n    if (params && params.positionSearchDialog) {\n      params.positionSearchDialog()\n    }\n  }\n\n  updateSearchResults() {\n    if (this.debouncedSearch) {\n      clearTimeout(this.debouncedSearch)\n    }\n\n    this.debouncedSearch = setTimeout(() => {\n      locals.filter = this.filter\n      this.updateFoundDocument()\n    }, 500)\n  }\n\n  async updateFoundDocument() {\n    const searchText = locals.searchText.trim()\n\n    const document = await Aeppic.get(searchText)\n\n    // searchText may have moved on while we were awaiting the lookup\n    if (locals.searchText.trim() !== searchText) {\n      return\n    }\n\n    locals.foundDocument = document || null\n  }\n\n  toggleSearchAllFields() {\n    locals.searchOptions.searchAllFields = !locals.searchOptions.searchAllFields\n\n    // ae-list only re-searches when searchOptions.sort's *value* changes, not\n    // when searchAllFields changes on its own -- round-trip sort's order to\n    // force a re-search that will pick up the new searchAllFields value too.\n    const currentSort = locals.searchOptions.sort\n    locals.searchOptions.sort = [...currentSort].reverse()\n    setTimeout(() => {\n      locals.searchOptions.sort = currentSort\n    }, 0)\n  }\n\n  toggleSortByModifiedAt() {\n    locals.sortByModifiedAt = !locals.sortByModifiedAt\n    locals.searchOptions.sort = [ \n      locals.sortByModifiedAt ? { field: 'modified.at', descending: true} : {field: 'created.at'}, \n      { field: 'f.id' }, \n      { field: 'data.name'},\n    ]\n  }\n\n  get filter() {\n    const wildcardifiedSearchText = locals.searchText.split(' ').map((part, i) => {\n      if (part === '') {\n        return ''\n      }\n\n      let wildcard = ''\n      if (part.indexOf(':') === -1) {\n        wildcard = '*'\n      }\n\n      return `${wildcard}${part}${wildcard}`\n    }).filter(p => !!p).join(' AND ')\n\n    const parts = []\n\n    if (wildcardifiedSearchText) {\n      parts.push(`(${wildcardifiedSearchText})`)\n    }\n\n    if (locals.additionalFilters.length) {\n      parts.push(`(${locals.additionalFilters.join(' AND ')})`)\n    }\n    \n    const search = parts.join(' AND ')\n\n    console.log(wildcardifiedSearchText, search)\n\n    return search\n  }\n\n  toggleFilter(value) {\n    const existingIndex = locals.additionalFilters.findIndex(f => f === value)\n\n    if (existingIndex !== -1) {\n      locals.additionalFilters.splice(existingIndex, 1)\n    } else {\n      locals.additionalFilters.push(value)\n    }\n\n    this.updateSearchResults()\n  }\n\n  setIsLoading(event) {\n    locals.isLoading = event\n  }\n\n}","css":"._CSS-container {\n  background-color: white;\n  min-width: 800px;\n  min-height: 400px;\n  max-height: 100vh;\n  overflow-x: hidden;\n  border: 1px solid lightgray;\n  xpadding: 3px 10px 0px 10px;\n\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-header {\n  display: flex;\n  align-items: baseline;\n  margin-bottom: 5px;\n}\n\n._CSS-switch {\n  margin: 0 20px;\n  display: flex;\n  flex-flow: column;\n}\n._CSS-switch__label {\n  color: var(--ae-foreground-l2);\n  margin-right: 1ch;\n}\n\n._CSS-list {\n  overflow: auto;\n  flex: 1;\n}\n\n._CSS-found-document {\n  background: hsl(50, 100%, 92%);\n  border-bottom: 1px solid lightgray;\n}\n\n\n","name":"Developer Search Dialog","packages":[],"template":"<div class=\"_CSS-container ae-developer\" style=\"\">\n  <div class=\"_CSS-header\">\n    <div class=\"_CSS-switch\">\n      <div class=\"_CSS-switch__label\">\n        Search all fields\n      </div>\n      <div @click.stop=\"controller.toggleSearchAllFields()\">\n        <ae-icon v-if=\"locals.searchOptions.searchAllFields\" class=\"fa fa-toggle-on\"></ae-icon>\n        <ae-icon v-else class=\"fa fa-toggle-off\"></ae-icon>\n      </div>\n    </div>\n\n    <div class=\"_CSS-switch\">\n      <div class=\"_CSS-switch__label\">\n        Sort modified\n      </div>\n      <div @click.stop=\"controller.toggleSortByModifiedAt()\">\n        <ae-icon v-if=\"locals.sortByModifiedAt\" class=\"fa fa-toggle-on\"></ae-icon>\n        <ae-icon v-else class=\"fa fa-toggle-off\"></ae-icon>\n      </div>\n    </div>\n\n    <div>\n      <div>\n        Size\n      </div>\n      <div>\n        <input type=\"number\" v-model.number=\"locals.searchOptions.size\">\n      </div>\n    </div>\n\n    <div>\n      <div>Filters\n      </div>\n      <button @click.stop=\"controller.toggleFilter('f.id:form')\" \n            :style=\"{ color: locals.additionalFilters.includes('f.id:form') ? 'red' : 'black' }\"\n      >\n        Form\n      </button>\n      <button @click.stop=\"controller.toggleFilter('f.id:layout-form')\" \n      :style=\"{ color: locals.additionalFilters.includes('f.id:layout-form') ? 'red' : 'black' }\"\n      >\n        Layout\n      </button>\n      <button @click.stop=\"controller.toggleFilter('f.id:design-form')\" \n      :style=\"{ color: locals.additionalFilters.includes('f.id:design-form') ? 'red' : 'black' }\"\n      >\n        Design\n      </button>\n      <button @click.stop=\"controller.toggleFilter('f.id:list-form')\" \n      :style=\"{ color: locals.additionalFilters.includes('f.id:list-form') ? 'red' : 'black' }\"\n      >\n        List\n      </button>\n            <button @click.stop=\"controller.toggleFilter('f.id:control-form')\" \n      :style=\"{ color: locals.additionalFilters.includes('f.id:control-form') ? 'red' : 'black' }\"\n      >\n        Control\n      </button>\n    </div>\n  </div>\n  \n  <input type=\"text\" v-model=\"locals.searchText\" tabindex=\"1\" style=\"width: 100%;\" placeholder=\"type to search ...\" v-focus @input=\"controller.updateSearchResults()\">\n  <div\n    :style=\"{ display: 'flex', alignItems: 'center', gap: '0.5em' }\"\n  >\n    <ae-icon\n      v-if=\"locals.isLoading\"\n      class=\"far fa-spinner fa-spin\"\n    ></ae-icon>\n    <div\n      :style=\"{ minHeight: '1em' }\"\n    >\n      Filter: {{locals.filter}}\n    </div>\n  </div>\n\n  <ae-list-selector v-if=\"locals.foundDocument\"\n          list-id=\"6fdf0d5a-a372-41de-befb-7c0a13a1e9b9\"\n          class=\"_CSS-found-document\"\n          :documents=\"[locals.foundDocument]\"\n          :params=\"{}\"\n  ></ae-list-selector>\n\n  <ae-list list-id=\"6fdf0d5a-a372-41de-befb-7c0a13a1e9b9\"\n          class=\"_CSS-list\"\n          :filter=\"locals.filter\"\n          root-document-id=\"root\"\n          :search-options=\"locals.searchOptions\"\n          @ae-loading=\"controller.setIsLoading($event)\"\n  ></ae-list>\n</div>\n\n"},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"9c604893-1a34-490a-b633-62b5064784cd","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-07-31T11:38:42+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"b123f4c5fe4640f1"},"stamps":[],"t":1785497922049,"v":"a789d45642c80682"},{"id":"b956d062-ba70-482d-b404-da5cec71afc6","v":"0edbd6e38b7989e5","previous":{"v":"eaf2988b1c40f5b4"},"p":"7fd7c5cc-1eed-440b-8ce2-d6183cdb421b","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"developer-preview-bar","applies":"","packages":[],"template":"<div v-show=\"controller.showDevbar\" class=\"_CSS-client-dev-bar\">\n  <div class=\"title\">Developer (preview)</div>\n  <div style=\"flex:1\"></div>\n  <div @click=\"controller.endRemoteDeveloper()\" class=\"close\">\n    <ae-icon class=\"fas fa-times\"></ae-icon>\n  </div>\n</div>","css":"\n._CSS-client-dev-bar {\n  padding: 0 6px 1px 6px;\n  height: 40px;\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n}\n\n._CSS-client-dev-bar .title {\n  vertical-align: middle;\n  font-size: 14px;\n  font-weight: 600;\n}\n\n ._CSS-client-dev-bar .close {\n   cursor: pointer;\n }\n","controller":"class Controller {\n  async init () {\n    locals.hideDevbar = await Aeppic.Preferences.getSetting('aeppic:developer:hideDevbarInPreview')\n  }\n\n  endRemoteDeveloper() {\n    Aeppic.Developer.disableRemoteDeveloper()\n  }\n\n  get showDevbar() {\n    return (Aeppic.Developer.remoteDeveloperMode === 'Client') && !locals.hideDevbar\n  }\n}"},"locks":[],"created":{"at":"2019-02-14T12:06:30+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2019-03-20T09:12:32+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1553073152646,"ct":1550145990265,"a_depth":5,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","427e6b73-968a-4747-be77-c6bb820a3190","7fd7c5cc-1eed-440b-8ce2-d6183cdb421b"],"a_forms":["folder","application-form","folder","folder","folder"],"inheritedLocks":[null,null,null,null,null,null],"stamps":[]},{"id":"b480e243-5d21-4ced-be02-3ceb4c820032","v":"223c10cf6f6d4793","p":"177b1d7c-255c-4d16-b367-e9622b4db575","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Dialog Default Layout","applies":"","template":"<ae-dialog ref=\"executionDialog\" title=\"Details\" @close=\"$emit('close')\" :backdrop-close=\"false\" :dialog-size=\"{ height: locals.dialog ? locals.dialog.data.dialogHeight : null, width: locals.dialog ? locals.dialog.data.dialogWidth : null }\">\n  <div v-if=\"locals.dialog\" slot=\"header\" slot-scope=\"scope\" class=\"_CSS-dialog__header\">\n    {{ locals.dialog.data.title || locals.dialog.data.name }}\n    <!-- <ae-icon class=\"_CSS-button fal fa-times\" @click.native=\"controller.closeExecutionDialog()\"></ae-icon> -->\n  </div>\n  <div slot=\"body\">\n    <ae-design  v-if=\"locals.dialog && locals.dialog.data.design && locals.targetDocument\"\n                :name=\"locals.dialog.data.design\"\n                :document=\"locals.targetDocument\"\n                :edit=\"locals.dialog.data.editable\"\n                :watch=\"false\"\n                xstyle=\"height:100%;\"\n    ></ae-design>\n    <p v-if=\"locals.dialog && locals.dialog.data.message\"\n      style=\"white-space:pre-line;\"\n      v-html=\"Aeppic.Parser.markdown(locals.dialog.data.message)\"\n    >\n      <!-- {{ Aeppic.Parser.markdown(locals.dialog.data.message) }} -->\n    </p>\n\n    <div class=\"_CSS-error\" v-if=\"locals.executionError\">\n      <ae-icon class=\"far fa-exclamation-triangle\"></ae-icon>\n      {{ Aeppic.translate(locals.executionError) }}\n    </div>\n  </div>\n\n\t<div v-if=\"locals.dialog\" slot=\"commands\" slot-scope=\"scope\" class=\"_CSS-dialog__commands\">\n    <template v-for=\"(command, index) of controller.commands\">\n      <button :class=\"['ae-button', { 'ae-button--primary': index === controller.commands.length - 1 } ]\"\n              @click=\"controller.executeDialogCommand(command.id)\"\n      >\n      <ae-design name=\"title\" :document=\"command\"></ae-design>\n      </button>\n    </template>\n\t</div>\n</ae-dialog> \n","css":"._CSS-commands {\n  display: grid;\n  grid-gap: 2px;\n  grid-auto-columns: auto;\n  grid-auto-flow:column;\n}\n\n/* DIALOG */\n\n._CSS-dialog__header {\n  flex: 1;\n  display: flex;\n  justify-content: center;\n}\n\n._CSS-dialog__commands {\n  flex: 1;\n  display: flex;\n  justify-content: flex-end;\n}\n\n._CSS-error {\n  margin: var(--ae-size-2);\n  color: var(--ae-accent-red-600);\n}\n","controller":"class Controller {\n  async init() {\n    locals.dialog = null\n    locals.executionError = null\n    locals.targetDocument = null\n\n    $on('show', (options) => this._show(options))\n\n    $emit('ready')\n  }\n\n  async _show(options) {\n    locals.dialog = options.dialog\n    const command = options.command\n    const document = options.document || params.document\n\n    locals.targetDocument = await this._executeCommand(command.id, document)\n       \n    locals.executionError = null\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n    \n    $refs.executionDialog.show()\n  }\n\n  closeExecutionDialog() {\n    console.log('close')\n    $refs.executionDialog && $refs.executionDialog.close()\n\n    locals.executionError = null\n\n    $emit('close')\n  }\n\n  async executeDialogCommand(commandId) {\n    if (!await this._executeCommand(commandId, locals.targetDocument)) {\n      return\n    }\n\n    this.closeExecutionDialog()\n  }\n\n  async _executeCommand(commandId, targetDocument) {\n    const commandResult = await Aeppic.Commands.execute(commandId, targetDocument, { Account: Aeppic.Account }, { navigation: true })\n\n    if (!commandResult.ok || ('ok' in commandResult.value && !commandResult.value.ok)) {\n      const message = commandResult.value && commandResult.value.message || 'error:execution'\n\n      locals.executionError = message\n      console.error(commandResult)\n      \n      return false\n    }\n\n    if (commandResult.value != null && 'value' in commandResult.value) {\n      return commandResult.value.value\n    }\n\n    return commandResult.value\n  }\n\n  get commands() {\n    if (!locals.dialog) {\n      return []\n    }\n\n    return Array.from(locals.dialog.data.commands).reverse()\n  }\n\n  destroy() {\n    this.closeExecutionDialog()\n  }\n} ","packages":[]},"locks":[],"created":{"at":"2019-05-08T07:56:57+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2023-01-27T13:38:09+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719319448723,"ct":1719319448723,"a_depth":2,"a":["system","177b1d7c-255c-4d16-b367-e9622b4db575"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"e8bf009cf596a9a3","f":{"id":"layout-form","v":"f89fa8efbc77988b","text":"Layout"}},"meta":{"modified":{"at":"2024-06-25T14:44:08+02:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"id":"7b66279d-ab89-43de-9ee0-91763f456047","v":"d885f1f61bcbc6ce","previous":{"v":"e50be32682cbf6da"},"p":"8675fac2-1fb2-4704-bc87-de0345194e6a","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"difference-tree","applies":"","packages":[],"template":"<li ref=\"wait\"\" class=\"_CSS-tree-item\" :style=\"{display: locals.isManifestNode? 'none' : 'block'}\">\n  <div class=\"_CSS-node\" :title=\"controller.getTooltip()\">\n    <span v-if=\"locals.node.children.length\" @click=\"controller.toggle()\" class=\"ae-tree-node__expand-icon\" :class=\"{expanded:locals.open}\"></span>\n    <span v-else style=\"display:inline-block;width:16px\">&nbsp;</span>\n    <span @click=\"$emit('selected', locals.node)\">\n      <span :class=\"controller.getDifferenceClasses()\">\n        <!-- <span v-if=\"locals.node.$operation\">\n          <ae-icon class=\"fas fa-check-square\"></ae-icon>\n        </span> -->\n        <span>\n          <ae-icon v-if=\"locals.node.positionComparison && (locals.node.positionComparison === 'MISSING_IN_2')\" class=\"fas fa-file-medical\" :class=\"{'_CSS-action-taken': controller.hasOperation(locals.node, 'ADD_INCOMING')}\" key=\"1\"></ae-icon>\n          <ae-icon v-if=\"locals.node.positionComparison && (locals.node.positionComparison === 'MISSING_IN_1')\" class=\"fas fa-file-minus\" :class=\"{'_CSS-action-taken': controller.hasOperation(locals.node, 'DELETE_EXISTING')}\" key=\"2\"></ae-icon>\n          <ae-icon v-if=\"locals.node.positionComparison && (locals.node.positionComparison === 'MOVED_HERE_IN_1')\" class=\"fas fa-file-import\" :class=\"{'_CSS-action-taken': controller.hasOperation(locals.node, 'MOVE_EXISTING')}\" key=\"3\"></ae-icon>\n          <ae-icon v-if=\"locals.node.positionComparison && (locals.node.positionComparison === 'MOVED_HERE_IN_2')\"class=\"fas fa-file-export\" :class=\"{'_CSS-action-taken': controller.hasOperation(locals.node, 'MOVE_EXISTING')}\" key=\"4\"></ae-icon>\n          <ae-icon v-if=\"locals.node.formComparison && (locals.node.formComparison !== 'SAME')\"class=\"fas fa-file-invoice\" :class=\"{'_CSS-action-taken': controller.hasOperation(locals.node, 'CHANGE_EXISTING') || controller.hasOperation(locals.node, 'UPGRADE_EXISTING')}\" key=\"5\"></ae-icon>\n          <template v-if=\"locals.node.dataComparison && (locals.node.dataComparison !== 'SAME')\">\n            <!-- <ae-icon class=\"fas fa-file-edit\" :class=\"{'_CSS-action-taken': controller.hasOperation(locals.node, 'COPY_INCOMING')}\"  key=\"6\"></ae-icon> -->\n            <ae-icon v-if=\"locals.node.differenceInfo.newer === 1\" class=\"fas fa-arrow-alt-circle-left\"></ae-icon>\n            <ae-icon v-else class=\"fas fa-arrow-alt-circle-right\"></ae-icon>\n            <!-- {{ locals.node.differenceInfo }} -->\n          </template>\n          <!-- <ae-icon v-if=\"locals.node.dataComparison && (locals.node.dataComparison !== 'SAME')\" class=\"fas fa-file-edit\" :class=\"{'_CSS-action-taken': controller.hasOperation(locals.node, 'COPY_INCOMING')}\"  key=\"7\"></ae-icon> -->\n          <ae-icon v-if=\"controller.hasOperation(locals.node, 'SKIP')\" class=\"far fa-sheep\" key=\"7\"></ae-icon>\n        </span>\n        <span :class=\"{'_CSS-deleted': locals.node.$operation && locals.node.$operation.has('DELETE_EXISTING')}\">{{controller.label}}</span></span> <span v-if=\"locals.node.differentDescendantsCount\" @click=\"controller.toggleShowAll()\" class=\"_CSS-node-label--black _CSS-different-descendants-count\">({{locals.node.differentDescendantsCount}})</span>\n    </span>\n  </div>\n  <ul v-if=\"locals.open || (locals.showAll && locals.node.differentDescendantsCount)\" class=\"_CSS-tree-list\">\n    <ae-layout v-for=\"child in locals.node.children\" layout-id=\"7b66279d-ab89-43de-9ee0-91763f456047\" :param-node=\"child\" :param-open-nodes=\"params.openNodes\" :param-show-all=\"locals.showAll\" :param-selected=\"locals.selected\" @selected=\"node => $emit('selected', node)\"></ae-layout>\n  </ul>\n</li> \n","css":"._CSS-tree-list{\n  list-style: none;\n  padding-left: 15px;\n  margin: 0;\n}\n\n._CSS-tree-item{\n  margin:0;\n}\n\n.ae-tabs--content > div > ._CSS-tree-item {\n  list-style: none;\n}\n\n\n._CSS-deleted{\n  text-decoration: line-through\n} \n\n\n._CSS-node-label--black{\n  color: var(--ae-background-900);\n}\n\n._CSS-node-label--gray{\n  color: var(--ae-background-400) !important;\n}\n\n._CSS-node-label--darkgray{\n  color: var(--ae-background-700);\n}\n\n._CSS-node-label--green{\n  color: green;\n}\n\n._CSS-node-label--red{\n  color: red;\n}\n\n._CSS-node-label--blue{\n  color: blue;\n}\n\n._CSS-node-label--bold{\n  font-weight: bold;\n}\n\n._CSS-node-label--dimm{\n  opacity: 0.4;\n}\n\n._CSS-node--existing-newer {\n  color: var(--ae-accent-green-700);\n}\n\n._CSS-node--remote-newer {\n  color: var(--ae-accent-red-700);\n\n}\n\n._CSS-node--missing-in-existing {\n  color: var(--ae-accent-red-700);\n}\n\n._CSS-different-descendants-count{\n  color: var(--ae-background-400);\n}\n\n._CSS-different-descendants-count:hover{\n  color: var(--ae-background-900);\n}\n\n._CSS-action-taken {\n  color: green!important;\n}\n\n._CSS-node { \n  overflow:hidden; \n  white-space: nowrap; \n  text-overflow: ellipsis;\n  cursor: pointer;\n}\n\n._CSS-wait ._CSS-node {\n  cursor: wait; \n  //background: rgba(255,0,0,0.5);\n}\n\n/*\n._CSS-wait{  \n  cursor: wait!important;\n  background: rgba(255,0,0,0.5);\n}*/\n\n/**\n *\n * copied from tree list. remove later\n *\n**/\n.ae-tree-node__expand-icon {\n  display: inline-block;\n  transform: rotate(90deg);\n  transition: 0.15s;\n  margin-right:4px;\n}\n\n.ae-tree-node__expand-icon.expanded {\n  transform: rotate(180deg);\n}\n\n.ae-tree-node__expand-icon:after {\n  content: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHlsZT0iZmlsbDpkYXJrZ3JheSI+PHBhdGggZD0iTTI0IDIyaC0yNGwxMi0yMHoiLz48L3N2Zz4=');\n}\n/******/","controller":"class Controller{\n  \n  init(){\n    locals.node = params.node\n    locals.selected = params.selected\n    locals.showAll = params.showAll\n    locals.open = locals.showAll && locals.node.differentDescendantsCount\n    \n    if(params.openNodes){\n      const doc = (locals.node.document1 || locals.node.document2)\n      const id = doc && doc.id\n\n      if(params.openNodes.includes(id)){\n        locals.open = true\n      }\n    }\n\n    watchParam('showAll', (v)=>{\n      locals.showAll = v\n      if(locals.showAll){\n        locals.open = true\n      }\n    })\n\n    // watchParam('node', (node) => {\n    //   console.log('==>', node.$opCount)\n    // })\n\n    locals.isManifestNode = locals.node.document1 && (locals.node.document1.f.id === '1327bd9b-34e5-4c38-bc43-5e709d8c01a2')\n  }\n\n  toggle(){\n    locals.open = !locals.open\n\n    if(!locals.open){\n      locals.showAll = false\n    }\n  }\n\n  async toggleShowAll() {\n    await Aeppic.waitForNextAnimationFrame()\n    $refs.wait.classList.add('_CSS-wait')\n    \n    await Aeppic.waitForNextAnimationFrame()\n    await Aeppic.waitForNextAnimationFrame()\n    await Aeppic.waitForNextAnimationFrame()\n\n    locals.showAll = !locals.showAll\n    locals.open = locals.showAll\n\n    await Aeppic.waitForNextAnimationFrame()\n    $refs.wait.classList.remove('_CSS-wait')\n  }\n\n  get label(){\n    if(!locals.node.document1){\n      return locals.node.document2.data.name || `[${locals.node.document2.f.text}]`\n    }\n    else if(!locals.node.document2){\n      return locals.node.document1.data.name || `[${locals.node.document1.f.text}]`\n    }\n    if(locals.node.document1.data.name === locals.node.document2.data.name){\n      return locals.node.document1.data.name || `[${locals.node.document1.f.text}]`\n    }\n    else{\n      return `${locals.node.document1.data.name || '[' + locals.node.document1.f.text + ']'} | ${locals.node.document2.data.name || '[' + locals.node.document2.f.text + ']'}`\n    }\n  }\n\n  getTooltip(){\n    const whoIsNewer = locals.node.differenceInfo && locals.node.differenceInfo.newer === 1 ? 'Incoming is newer:' : 'Existing is newer:'\n    const difference = locals.selected.getDifferenceText(locals.node)\n    const operation = locals.selected.getOperationText(locals.node)\n\n    return whoIsNewer + ' ' + difference + (operation ? ` -> ${operation}` : '')\n  }\n\n  getDifferenceClasses(){\n    let result = ''\n\n    if (locals.node.$operation && !locals.node.differentDescendantsCount) {\n      result = ' _CSS-node-label--bold _CSS-node-label--gray'\n    }\n    else if (!locals.node.$operation && (((locals.node.positionComparison && (locals.node.positionComparison !== 'SAME') && (locals.node.positionComparison !== 'PARENT_MOVED') )\n     || (locals.node.formComparison && (locals.node.formComparison !== 'SAME'))\n     || (locals.node.dataComparison && (locals.node.dataComparison !== 'SAME'))))) {\n      result = ' _CSS-node-label--bold _CSS-node-label--black'\n    }\n    else if (locals.node.differentDescendantsCount) {\n      result = ' _CSS-node-label--bold _CSS-node-label--darkgray'\n    }\n    else {\n      result = ' _CSS-node-label--gray'\n    }\n\n    if (locals.node.positionComparison === 'MISSING_IN_2') {\n      result += ' _CSS-node--missing-in-existing '\n    }\n\n    if (locals.node.dataComparison !== 'SAME') {\n      result += ' _CSS-node--data-changed'\n\n      const remoteIsNewer = locals.node.differenceInfo?.newer === 1\n      if (remoteIsNewer) {\n        result += ' _CSS-node--remote-newer'\n      } else {\n        result += ' _CSS-node--existing-newer'\n      }\n    }\n\n\n    return result\n  }\n\n  hasOperation(node, operation) {\n    return node.$opCount && node.$operation && node.$operation.has(operation)\n  }\n\n\n  nodeKey(subKey){\n    return `${node.document1 && node.document1.id}--${node.document2 && node.document2.id}--${subKey}`\n  }\n}"},"locks":[],"created":{"at":"2018-05-23T11:47:17+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2022-02-11T15:16:46+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1644592606409,"ct":1527068837170,"a_depth":5,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","64807bcd-1efa-4a43-a950-e10de2e0125c","8675fac2-1fb2-4704-bc87-de0345194e6a"],"a_forms":["folder","application-form","folder","folder","folder"],"inheritedLocks":[null,null,null,null,null,null],"stamps":[]},{"id":"9ea98a1d-019e-4e16-b1bc-8119ea2030fb","v":"0a347f5ced0474b0","previous":{"v":"85405d2a1774047a"},"p":"e6ffdfd0-88dd-429d-965b-a4634b065b3b","f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"data":{"name":"difference-tree","applies":"","template":"<li class=\"_CSS-tree-item\">\n  <div style=\"cursor:pointer\" :title=\"controller.getTooltip()\">\n    <span v-if=\"locals.node.children.length\" @click=\"controller.toggle()\" class=\"ae-tree-node__expand-icon\" :class=\"{expanded:locals.open}\"></span>\n    <span v-else style=\"display:inline-block;width:16px\">&nbsp;</span>\n    <span @click=\"$emit('selected', locals.node)\"><span :class=\"controller.getDifferenceClasses()\"><span :class=\"{'_CSS-deleted': locals.node.$operation === 'DELETED_EXISTING'}\">{{controller.label}}</span></span> <span v-if=\"locals.node.differentDescendantsCount\" class=\"_CSS-node-label--black\">({{locals.node.differentDescendantsCount}})</span></span>\n  </div>\n  <ul v-if=\"locals.open || (locals.selected.showAll && locals.node.differentDescendantsCount)\" class=\"_CSS-tree-list\">\n    <ae-layout v-for=\"child in locals.node.children\" layout-id=\"9ea98a1d-019e-4e16-b1bc-8119ea2030fb\" :param-node=\"child\" :param-selected=\"locals.selected\" @selected=\"node => $emit('selected', node)\"></ae-layout>\n  </ul>\n</li> ","css":"._CSS-tree-list{\n  list-style: none;\n  padding-left: 15px;\n  margin: 0;\n}\n\n._CSS-tree-item{\n  margin:0;\n}\n\n/* ._CSS-different-descendants{\n  color: orange\n}\n\n._CSS-different{\n  color: red\n}\n\n._CSS-resolved{\n  color: green\n}\n\n._CSS-deleted{\n  text-decoration: line-through\n} */\n\n\n._CSS-node-label--black{\n  color: #333;\n}\n\n._CSS-node-label--gray{\n  color: lightgray;\n}\n\n._CSS-node-label--green{\n  color: green;\n}\n\n._CSS-node-label--red{\n  color: red;\n}\n\n._CSS-node-label--different{\n  color: #da8200;\n  /* font-weight: bold; */\n}\n\n._CSS-node-label--dimm{\n  opacity: 0.4;\n}\n\n\n\n\n/**\n *\n * copied from tree list. remove later\n *\n**/\n.ae-tree-node__expand-icon {\n  display: inline-block;\n  transform: rotate(90deg);\n  transition: 0.15s;\n  margin-right:4px;\n}\n\n.ae-tree-node__expand-icon.expanded {\n  transform: rotate(180deg);\n}\n\n.ae-tree-node__expand-icon:after {\n  content: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDI0IDI0IiBzdHlsZT0iZmlsbDpkYXJrZ3JheSI+PHBhdGggZD0iTTI0IDIyaC0yNGwxMi0yMHoiLz48L3N2Zz4=');\n}\n/******/","controller":"class Controller{\n  \n  init(){\n    locals.node = params.node\n    locals.selected = params.selected\n    locals.open = false\n    \n    // locals.differenceClass = ''\n    \n    // if((locals.node.dataComparison !== 'SAME') || (locals.node.positionComparison !== 'SAME')){\n    //   locals.differenceClass = '_CSS-different'\n    // }\n    // else if(locals.node.differentDescendantsCount){\n    //   locals.differenceClass = '_CSS-different-descendants'\n    // }\n  }\n\n  toggle(){\n    locals.open = !locals.open\n  }\n\n  get label(){\n    if(!locals.node.document1){\n      return locals.node.document2.data.name || '[no name]'\n    }\n    else if(!locals.node.document2){\n      return locals.node.document1.data.name || '[no name]'\n    }\n    if(locals.node.document1.data.name === locals.node.document2.data.name){\n      return locals.node.document1.data.name || '[no name]'\n    }\n    else{\n      return `${locals.node.document1.data.name || '[no name]'} | ${locals.node.document2.data.name || '[no name]'}`\n    }\n  }\n\n  getTooltip(){\n    const difference = locals.selected.getDifferenceText(locals.node)\n    const operation = locals.selected.getOperationText(locals.node)\n\n    return difference + (operation ? ` -> ${operation}` : '')\n  }\n\n  getDifferenceClasses(){\n    let result = ''\n\n    // only in my tree at this pos -> green\n    if ((locals.node.positionComparison === 'MISSING_IN_1') \n     || (locals.node.positionComparison === 'MOVED_HERE_IN_2') ){\n      result += ' _CSS-node-label--green'\n    }\n    // only in their tree at this pos -> red\n    else if ((locals.node.positionComparison === 'MISSING_IN_2') \n     || (locals.node.positionComparison === 'MOVED_HERE_IN_1') ){\n      result += ' _CSS-node-label--red'\n    }\n    // different descendants -> black\n    else if (locals.node.differentDescendantsCount){\n      result += ' _CSS-node-label--black'\n    }\n    // unaffected, default -> gray\n    else {\n      result += ' _CSS-node-label--gray'\n    }\n\n    // different data -> bold, red\n    if (locals.node.dataComparison === 'DIFFERENT'){\n      result += ' _CSS-node-label--different  _CSS-node-label--red'\n    }\n\n    // operation taken -> 50%\n    if (locals.node.$operation){\n      result += ' _CSS-node-label--dimm'\n    }\n\n    return result\n  }\n}","packages":[]},"locks":[],"created":{"at":"2017-12-22T11:05:09+01:00","by":"","from":"","client":"73b839bb-9062-4bf9-a995-1d00594772ce"},"modified":{"at":"2018-10-30T12:59:15+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1540904355554,"ct":1513937089361,"a_depth":4,"a":["apps","90340217-c9b1-46fe-9b56-163953318522","2acd7a85-e378-49d3-a959-75ea2cab13a4","e6ffdfd0-88dd-429d-965b-a4634b065b3b"],"a_forms":["folder","application-form","folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2018-05-24T16:34:35+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","client":"server","from":""},"ct":1621428481252,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.documentForm = null\n\n    $on('show', (event) => this.show(event))\n    $on('close', (event) => this.close(event))\n\n    this.show = (eventData) => {\n      $refs.dialog.show(eventData)\n    }\n    this.close = () => $refs.dialog.close()\n    \n    watchParam('form' , async () => this.updateDocumentForm())\n    watchParam('document' , async () => this.updateDocumentForm())\n    watchParam('documentId' , async () => this.updateDocumentForm())\n\n    this.updateDocumentForm()\n  }\n\n  async updateDocumentForm() {\n    if (params.form) {\n      locals.documentForm = params.form\n      return\n    }\n\n    if (params.document) {\n      locals.documentForm = await Aeppic.getFormForDocument(params.document)\n      return\n    }\n  \n    if (params.documentId) {\n      const document = await Aeppic.get(params.documentId)\n      locals.documentForm = await Aeppic.getFormForDocument(document)\n      return\n    }\n\n    return null\n  }\n\n  get fieldConditions() {\n    if (locals.documentForm) {\n      return locals.documentForm.evaluateConditions(params.document.data)\n    }\n  }\n}","css":"._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  overflow: hidden;\n}\n\n\n._CSS-dialog__body {\n  overflow: scroll;\n}","name":"Document Dialog","packages":[],"template":"<ae-dialog ref=\"dialog\" :dialog-size=\"{ height: params.dialogHeight, width: params.dialogWidth }\">\n  <div slot=\"header\" class=\"_CSS-dialog__header\" slot-scope=\"scope\">\n    <span v-if=\"params.title\">{{params.title}}</span>\n    <div v-else>\n      <ae-design v-if=\"locals.documentForm\" name=\"title\" :document=\"locals.documentForm\"></ae-design>\n    </div>\n    <button class=\"ae-button\" @click.stop=\"scope.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div slot=\"body\" v-if=\"params.document\" :key=\"params.document.id && params.document.v\" class=\"_CSS-dialog__body\">\n    <template v-if=\"params.document && locals.documentForm\">\n      <div class=\"ae-row\" style=\"padding: var(--bp-page-content-padding);\" v-if=\"params.showPath\">\n        <div class=\"ae-col ae-control-container ae-form-cell\">\n          <label class=\"ae-form-cell__label\">Pfad</label>\n          <div class=\"ae-form-cell__control\">\n            <ae-design class=\"ae-form-cell__input\" name=\"path\" :document=\"params.document\" :watch=\"false\"></ae-design>\n          </div>\n        </div>\n      </div>\n      <template v-if=\"params.edit\">\n        <ae-form :auto-save=\"params.autoSave\"\n                  layout-id=\"a34ed21c-7246-45ae-9f9c-9e6148ad92cf\"\n                  :document=\"params.document\"\n                  :form=\"locals.documentForm\"\n        ></ae-form>\n      </template>\n      <template v-else>\n        <ae-layout layout-id=\"a34ed21c-7246-45ae-9f9c-9e6148ad92cf\"\n                    :param-document=\"params.document\"\n                    :param-form=\"locals.documentForm\"\n                    :param-readonly=\"true\"\n                    :param-fields-to-display=\"params.fieldsToDisplay\"\n                    :param-field-conditions=\"controller.fieldConditions\"\n        ></ae-layout>\n      </template>\n\n    </template>\n  </div>\n</ae-dialog>\n \n"},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"765b4707-916f-42ef-afdd-853582fe4314","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-07-30T07:36:20+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"34b28a69941c5a3e"},"stamps":[],"t":1785396980994,"v":"cbfa3ead49cb436a"},{"id":"d40ba47d-cf17-4b8e-9df2-abe02e9cfadd","v":"58ce91fe1590d7c1","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Documents Quick View Dialog","applies":"","packages":[],"template":"<ae-dialog ref=\"dialog\" @close=\"controller.onClose()\" :adjust-dialog-min-size=\"true\" :backdrop-close=\"false\">\n  <div slot=\"header\" class=\"_CSS-dialog__header\" slot-scope=\"scope\">\n    <div class=\"_CSS-header__title\" >\n      <span v-if=\"params.title\">{{params.title}}</span>\n      <ae-design v-else-if=\"locals.currentDocument\" name=\"title\" :document=\"locals.currentDocument\"></ae-design>\n    </div>\n\n    <div class=\"_CSS-header__buttons\">\n      <button v-if=\"controller.canNavigate\" class=\"ae-button\" @click.stop=\"controller.back()\" title=\"Voriges Dokument anzeigen\" :disabled=\"locals.documentChanged\">\n        <ae-icon class=\"fa fa-angle-left\"></ae-icon>\n      </button>\n\n      <button v-if=\"controller.canNavigate\" class=\"ae-button\" @click.stop=\"controller.forward()\" title=\"Nächstes Dokument anzeigen\" :disabled=\"locals.documentChanged\">\n        <ae-icon class=\"fa fa-angle-right\"></ae-icon>\n      </button>\n      <button class=\"ae-button\" @click.stop=\"Aeppic.navigateTo(locals.currentDocument)\" title=\"In Vollbild anzeigen\">\n        <ae-icon class=\"fa fa-expand-arrows-alt\"></ae-icon>\n      </button>\n      <button class=\"ae-button\" @click.stop=\"scope.close()\" title=\"Schließen\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </div>\n  <div slot=\"body\" ref=\"dialogBody\" class=\"_CSS-dialog__body\">\n    <template v-if=\"locals.currentDocument\">\n      <div class=\"ae-row\" style=\"padding: var(--bp-page-content-padding);\" v-if=\"params.showPath\">\n        <div class=\"ae-col ae-control-container ae-form-cell\">\n          <label class=\"ae-form-cell__label\">Pfad</label>\n          <div class=\"ae-form-cell__control\">\n            <ae-design class=\"ae-form-cell__input\" name=\"path\" :document=\"params.document\" :watch=\"false\"></ae-design>\n          </div>\n        </div>\n      </div>\n\n      <ae-design  name=\"page-toolbar\"\n                  class=\"bp-page__toolbar\"\n                  :document=\"locals.currentDocument\"\n                  @toolbar=\"(event) => { event === 'reset' ? locals.documentChanged = false : ''; controller.dispatchEventChildren('page', 'toolbar', event) }\"\n                  @document-revision=\"() => { locals.documentChanged = true; }\"\n                  @document-save=\"() => { locals.documentChanged = false;  }\"\n      ></ae-design>\n      <ae-design  name=\"page\" \n                  :document=\"locals.currentDocument\"\n                  :param-readonly=\"!locals.canEdit\"\n                  ref=\"page\"\n      ></ae-design>\n\n      <!-- <template v-if=\"params.edit\">\n        <ae-form :auto-save=\"params.autoSave\"\n                  layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\"\n                  :document=\"params.document\"\n                  :form=\"locals.documentForm\"\n        ></ae-form>\n      </template>\n      <template v-else>\n        <ae-layout layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\"\n                    :param-document=\"params.document\"\n                    :param-form=\"locals.documentForm\"\n                    :param-readonly=\"true\"\n                    :param-fields-to-display=\"params.fieldsToDisplay\"\n                    :param-field-conditions=\"controller.fieldConditions\"\n        ></ae-layout>\n      </template> -->\n\n    </template>\n  </div>\n</ae-dialog>\n","css":"._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  overflow: hidden;\n}\n\n._CSS-dialog__body {\n  display: flex;\n  flex-flow: column;\n\n  outline: none;\n  position: relative;\n  margin: 0 !important;\n\n  height: 100%;\n}\n\n._CSS-header__title {\n  min-width: 0;\n}\n\n._CSS-header__buttons {\n  display: flex;\n}","controller":"class Controller {\n  async init() {\n    locals.documentChanged = false\n    locals.documentIndex = null\n    locals.currentDocument = null\n    locals.canEdit = false\n\n    $on('show', index => this.showDialog(index))\n  }\n\n  async showDialog(withIndex) {\n    locals.documentIndex = withIndex || 0 \n\n    await this._updateCurrentDocument()\n\n    $refs.dialog.show()\n\n    await Aeppic.nextRenderPass()\n    \n    $refs.dialogBody && $refs.dialogBody.focus()\n  }\n\n  get canNavigate() {\n    return params.documents.length > 1\n  }\n\n  async _updateCurrentDocument() {\n    if (locals.documentIndex == null) {\n      locals.currentDocument = null\n      locals.canEdit = false\n      return\n    }\n\n    locals.canEdit = await Aeppic.canEdit(params.documents[locals.documentIndex])\n    locals.currentDocument = params.documents[locals.documentIndex]\n  }\n\n  async back(event) {\n    if (locals.documentIndex === 0) {\n      locals.documentIndex = params.documents.length - 1\n    } else {\n      locals.documentIndex -= 1\n    }\n\n    await this._updateCurrentDocument()\n  }\n\n  async forward(event) {\n    if (locals.documentIndex === params.documents.length - 1) {\n      locals.documentIndex = 0\n    } else {\n      locals.documentIndex += 1\n    }\n\n    await this._updateCurrentDocument()\n  }\n\n  onClose() {\n    locals.currentDocument = null\n    locals.documentIndex = null\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) { \n    if (!$refs[refName] || !$refs[refName].$el || !$refs[refName].$el.children) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n}\n\n"},"locks":[],"created":{"at":"2020-05-08T09:00:45+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481252,"ct":1621428481252,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"acb2c944ec48364c","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","427e6b73-968a-4747-be77-c6bb820a3190","7fd7c5cc-1eed-440b-8ce2-d6183cdb421b"],"a_depth":5,"a_forms":["folder","application-form","folder","folder","folder"],"created":{"at":"2018-04-18T15:37:55+02:00","by":"","client":"server","from":""},"ct":1524058675732,"data":{"applies":"","controller":"class Constructor {\r\n  init() {\r\n    locals.elements = []\r\n    locals.elementsReverse = []\r\n    locals.showDOM = false\r\n    locals.invertDOM = true\r\n\r\n    this.cb = (domElements, options) => {\r\n      locals.elements.length = 0\r\n      locals.elements.push(...Aeppic.Developer.inspectorPath)\r\n      \r\n      locals.elementsReverse = locals.elements.slice().reverse()\r\n      \r\n      locals.elementsReverse.splice(0,3)\r\n      locals.elements.splice(locals.elements.length-3,3)\r\n    }\r\n\r\n    Aeppic.Developer.on('inspector-path-updated', this.cb)\r\n  }\r\n\r\n  destroy() {\r\n    Aeppic.Developer.off('inspector-path-updated', this.cb)\r\n  }\r\n\r\n  get elementsToShow(){\r\n    return locals.showDOM && locals.invertDOM ? locals.elementsReverse : locals.elements\r\n  }\r\n\r\n  highlightElement(el){\r\n\r\n    if (Aeppic.Developer.remoteDeveloperMode === 'Server') {\r\n      Aeppic.Developer.remoteEmit('highlight-element', el.id)\r\n    }\r\n    else {\r\n      Aeppic.Developer.emit('highlight-element', el.id)\r\n    }\r\n\r\n    // const info = Aeppic.Developer.getInspectedElementInfo(el.id)\r\n    \r\n    // if(!info){\r\n    //   return;\r\n    // }\r\n\r\n    // $refs.elementHighlight.style.top = info.top + 'px'\r\n    // $refs.elementHighlight.style.left = info.left + 'px'\r\n    // $refs.elementHighlight.style.width = info.width + 'px'\r\n    // $refs.elementHighlight.style.height = info.height + 'px'\r\n    // $refs.elementHighlight.style.display = 'block'\r\n  }\r\n\r\n  highlightOff(){\r\n    if (Aeppic.Developer.remoteDeveloperMode === 'Server') {\r\n      Aeppic.Developer.remoteEmit('highlight-element-off')\r\n    }\r\n    else{\r\n      Aeppic.Developer.emit('highlight-element-off')\r\n      //$refs.elementHighlight.style.display = 'none'\r\n    }\r\n  }\r\n\r\n  select(documentId, el) {\r\n\r\n    if(!documentId)\r\n      return\r\n\r\n    let context = []\r\n\r\n    // if(el && el.classList){\r\n    //   if(el.classList.contains('ae-design')){\r\n    //     let d = this.getDynamicComponentDocument(el);\r\n    //     d && context.push(d.id)\r\n\r\n    //     d = this.getDesignDocument(el)\r\n    //     d && context.push(d.id)\r\n\r\n    //     let f = this.getDesignForm(el)\r\n    //     f && context.push(f.document.id)\r\n    //   }\r\n    //   else if(el.classList.contains('ae-control') && this.getDynamicComponentDocument(el)){\r\n    //     let d = this.getDynamicComponentDocument(el)\r\n    //     d && context.push(d.id)\r\n\r\n    //     d = this.getControlDocument(el)\r\n    //     d && context.push(d.id)\r\n    //     d && context.push(d.f.id)\r\n    //   }\r\n    // }\r\n    \r\n    if(context.length===0){\r\n      context.push(documentId)\r\n    }\r\n    \r\n    $emit('selected', documentId, context)\r\n  }\r\n}","css":"._CSS {\r\n  font-size:14px;\r\n}\r\n\r\n._CSS_row {\r\n  display: flex;\r\n  flex-direction: row;\r\n  margin-bottom: 2px;\r\n}\r\n\r\n._CSS-item-row:hover {\r\n  background: var(--ae-background-300);\r\n}\r\n\r\n._CSS_item {\r\n  display: flex;\r\n  flex-direction: row;\r\n}\r\n\r\n._CSS_item > ._CSS_label {\r\n  margin-right: 5px;\r\n}\r\n\r\n._CSS_item > .ae-design {\r\n  margin-right: 5px;\r\n  cursor: pointer;\r\n}\r\n\r\n._CSS_label {\r\n  font-size: 0.8em;\r\n  color: black;\r\n  padding: 2px 4px;\r\n  border-radius: 4px;\r\n  background: lightgray;\r\n  cursor: pointer;\r\n}\r\n\r\n._CSS_item:first-child ._CSS_label{\r\n  color: black;\r\n  background: red;\r\n}\r\n\r\n._CSS_item ._CSS_label._CSS_label--component {\r\n  color: black;\r\n  background: lightgreen;\r\n  cursor: inherit;\r\n}\r\n\r\n._CSS_label--document {\r\n  color: black;\r\n  background: lightblue;\r\n}\r\n\r\n._CSS_label--form {\r\n  color: black;\r\n  background: lightgray;\r\n}\r\n\r\n._CSS_attr {\r\n  color: blue;\r\n}\r\n \r\n._CSS_attr__value {\r\n  color: green;\r\n}\r\n\r\n._CSS_element {\r\n  font-family: Consolas;\r\n}\r\n\r\n._CSS-elementHighlight{\r\n  position: fixed;\r\n  border: solid 1px rgba(65,105,225,0.6);\r\n  background: rgba(65,105,225,0.1);\r\n  display: none;\r\n  pointer-events: none;\r\n  z-index:10000;\r\n}\r\n","name":"dom-viewer","packages":[],"template":"<div ref=\"elementHighlight\" class=\"_CSS-elementHighlight\"></div>\r\n<div style=\"margin-bottom:15px\">\r\n  <div>\r\n    <label><input type=\"checkbox\" v-model=\"Aeppic.flags.watchUIRevisions.enabled\"> Watch UI Revisions</label>\r\n  </div>\r\n  <div>\r\n    <label v-if=\"locals.elements.length > 0\" :for=\"id('hd')\"><input :id=\"id('hd')\" v-model=\"locals.showDOM\" type=\"checkbox\"> HTML View</label>\r\n  </div>\r\n</div>\r\n<div v-if=\"locals.elements.length === 0\">\r\n  Hover over an Element with Ctrl-Shift (Cmnd-Shift on Mac) to inspect the Component Layering.\r\n</div> \r\n<div v-else>\r\n  <div v-for=\"(el,index) in controller.elementsToShow\" @mouseover=\"controller.highlightElement(el)\" @mouseout=\"controller.highlightOff()\" style=\"white-space:nowrap\" :style=\"{ paddingLeft: locals.showDOM ? (index*4)+'px' : '0'}\" class=\"_CSS-item-row\"> \r\n    <div v-if=\"el.type === 'Design'\" class=\"_CSS_row\">\r\n      <div @click=\"controller.select(el.designId, el)\" class=\"_CSS_item\"><div class=\"_CSS_label\" >Design</div><ae-design :document-id=\"el.designId\" name=\"inspector-title,title\"></ae-design></div>\r\n      <div @click=\"controller.select(el.documentId, el)\" class=\"_CSS_item\"><div class=\"_CSS_label _CSS_label--document\" >Document</div><ae-design :document-id=\"el.documentId\" name=\"inspector-title,title\"></ae-design></div>      \r\n      <div @click=\"controller.select(el.formId)\" class=\"_CSS_item\"><div class=\"_CSS_label _CSS_label--form\" >Form</div><ae-design :document-id=\"el.formId\" name=\"inspector-title,title\"></ae-design></div>      \r\n    </div>\r\n    <div v-else-if=\"el.type === 'List'\" class=\"_CSS_row\">\r\n      <div @click=\"controller.select(el.listId, el)\" class=\"_CSS_item flex-1\"><div class=\"_CSS_label\" >List</div><ae-design :document-id=\"el.listId\" name=\"inspector-title,title\"></ae-design></div>\r\n    </div> \r\n    <div v-else-if=\"el.type === 'Form'\"  class=\"_CSS_row\">\r\n      <div @click=\"controller.select(el.formId, el)\" class=\"_CSS_item\"><div class=\"_CSS_label\"> Form</div><ae-design :document-id=\"el.formId\" name=\"inspector-title,title\"></ae-design></div>\r\n      <div @click=\"controller.select(el.layoutId, el)\" class=\"_CSS_item\"><div class=\"_CSS_label _CSS_label--small\" >Layout</div><ae-design :document-id=\"el.layoutId\" name=\"inspector-title,title\"></ae-design></div>\r\n    </div>\r\n    <div v-else-if=\"el.type === 'Layout'\"  class=\"_CSS_row\"> \r\n      <div @click=\"controller.select(el.layoutId, el)\" class=\"_CSS_item flex-1\"><div class=\"_CSS_label\" >Layout</div><ae-design  :document-id=\"el.layoutId\" name=\"inspector-title,title\"></ae-design></div>      \r\n    </div>\r\n    <div v-else-if=\"el.type === 'Form Section'\" class=\"_CSS_row\">\r\n      <div class=\"_CSS_item\"><div class=\"_CSS_label flex-1\">Form Section</div></div>\r\n    </div>\r\n    <div v-else-if=\"el.type === 'Control'\" class=\"_CSS_row\">\r\n      <div @click=\"controller.select(el.controlId, el)\" class=\"_CSS_item flex-1\"><div class=\"_CSS_label\">Control</div><ae-design :document-id=\"el.controlId\" name=\"inspector-title, title\"></ae-design></div>\r\n    </div>\r\n    <div v-else-if=\"el.type === 'Splitter'\" class=\"_CSS_row\">\r\n      <div class=\"_CSS_item\"><div class=\"_CSS_label _CSS_label--component\">Splitter</div></div>\r\n    </div>\r\n    <div v-else-if=\"el.type === 'Tabs'\" class=\"_CSS_row\">\r\n      <div class=\"_CSS_item flex-1\"><div class=\"_CSS_label _CSS_label--component\">Tabs</div></div>\r\n    </div>\r\n    <div v-else-if=\"el.type === 'Query'\" class=\"_CSS_row\">\r\n      <div class=\"_CSS_item flex-1\"><div class=\"_CSS_label _CSS_label--component\">Query</div></div>\r\n    </div>\r\n    <div v-else v-show=\"locals.showDOM\" class=\"_CSS_element\">\r\n      <span class=\"_CSS_bracket\">&lt;</span><span class=\"_CSS_tag__name\">{{el.tagName}} </span><span v-for=\"a of el.attributes\"><span class=\"_CSS_attr\"> {{a.name}}=</span>&quot;<span class=\"_CSS_attr__value\">{{a.value}}</span>&quot;</span> <span class=\"_CSS_bracket\">&gt;</span> \r\n    </div> \r\n  </div> \r\n</div>   "},"f":{"id":"layout-form","text":"Layout","v":"dad1a77c49465e08"},"id":"ab15392a-6e80-422f-baf9-878e630b8444","inheritedLocks":[null,null,null,null,null,null],"locks":[],"modified":{"at":"2025-08-15T10:24:26+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"7fd7c5cc-1eed-440b-8ce2-d6183cdb421b","previous":{"v":"a0993f62b1ae22a1"},"stamps":[],"t":1755253466894,"v":"d4738a0bc2bc7f8a"},{"id":"f771a13d-8381-4bda-9750-ef8d215dda21","v":"69e53186b4055798","previous":{"v":"initial"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Drill Into Manager.OLD","applies":"","packages":[],"template":"<div class=\"_CSS-container\" v-if=\"locals.drills.length\">\n  <div class=\"_CSS-drill-manager\">\n    <div class=\"_CSS-header\">\n      <div class=\"_CSS-nav\">\n        <div class=\"_CSS-nav__title\">\n          <ae-design v-if=\"controller.currentDrill.targetDocument.a.length > 1\" :document=\"controller.currentDrill.targetDocument\" name=\"icon\" class=\"_CSS-title-form-title\"></ae-design> \n          <ae-design :document=\"controller.currentDrill.targetDocument\" name=\"title\"></ae-design> \n        </div>\n\n        <div class=\"_CSS-nav__path\">\n          <div class=\"_CSS-nav__entry\" v-for=\"(drill, index) of locals.drills\" @click.stop=\"controller.setCurrentDrill(index)\">\n            <ae-icon v-if=\"index > 0\" class=\"fal fa-greater-than\" style=\"margin: 0 var(--ae-size-1)\"></ae-icon>\n            <ae-design style=\"display:inline-block;\" :document=\"drill.targetDocument\" name=\"title\"></ae-design>\n          </div>\n        </div>\n      </div>\n\n      <button class=\"ae-button\" @click.stop=\"controller.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n\n    <div class=\"_CSS-body\">\n      <ae-design\n        class=\"_CSS-page-toolbar bp-page__toolbar\"\n        :document=\"controller.currentDrill.targetDocument\"\n        name=\"page-toolbar\"\n        @toolbar=\"controller.dispatchEventChildren('body', 'toolbar', $event)\"\n        ></ae-design>\n      <ae-design  name=\"page\" \n                  class=\"bp-page__body _CSS-body__page\"\n                  ref=\"body\"\n                  :document=\"controller.currentDrill.targetDocument\"\n        ></ae-design>\n    </div>\n  </div>\n\n  <ae-dialog ref=\"confirmLeave\">\n    <template v-slot:header=\"scope\">\n      Drill Into schließen?\n    </template>\n    <template v-slot:body=\"scope\">\n      <div>\n        <p>\n          Soll der Drill Into Dialog geschlossen werden?\n        </p>\n        <p>\n          Nicht gespeicherte Änderungen werden verworfen.\n        </p>\n      </div>\n    </template>\n    <template v-slot:commands=\"scope\">\n      <div class=\"_CSS-confirm__commands\">\n        <button class=\"ae-button\" @click.stop=\"scope.close()\">\n          Abbrechen\n        </button>\n        <button class=\"ae-button ae-button--primary\" @click.stop=\"controller.executeNavigation()\">\n          Dialog schließen\n        </button>\n      </div>\n    </template>\n  </ae-dialog>\n</div>\n\n\n","css":"._CSS {\n /* ATTENTION: this layout is always rendered and one may break everything */\n}\n\n._CSS-container {\n  background: rgba(0,0,0,0.3);\n  height: 100%;\n  width: 100%;\n\n  display: flex;\n}\n\n._CSS-drill-manager {\n  height: 98%;\n  width: var(--ae-page-max-width);\n  max-width: 98%;\n  margin: auto;\n\n\n  background: var(--ae-ui-background);\n\n  display: flex;\n  flex-flow: column;\n\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-header {\n  border-radius: 0 var(--ae-border-radius) 0 var(--ae-border-radius);\n  padding: var(--bp-page-content-padding);\n  display: flex;\n  justify-content: space-between;\n}\n\n._CSS-body {\n  border-radius: 0 0 var(--ae-border-radius) var(--ae-border-radius) ;\n\n  flex: 1;\n  display: flex;\n  flex-flow: column;\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: hidden;\n}\n\n._CSS-body__page {\n  flex: 1;\n  min-height: 0;\n  min-width: 0;\n\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n\n  height: 100%;\n  width: 100%;\n}\n\n._CSS-nav {\n  display: flex;\n  flex-flow: column;\n\n  padding-left: var(--bp-page-content-padding);\n}\n\n._CSS-nav__title {\n  font-size: 1.5em;\n  color: var(--ae-foreground-l1);\n  font-weight: bold;\n\n  display: flex;\n}\n\n._CSS-title-form-title {\n  display: initial;\n  margin-right: 0.5em;\n  color: var(--ae-background-600);\n}\n\n\n._CSS-nav__path {\n  display: flex;\n}\n\n._CSS-nav__entry {\n  display: flex;\n  align-items: center;\n}\n","controller":"class Controller {\n  async init() {\n    this.onNavigationDocumentId = null\n\n    locals.drills = []\n\n    $on('drill', (event) => this.onDrill(event))\n\n    $on('will-navigate', (event) => this.onNavigation(event))\n  }\n\n  onNavigation(event)  {\n    this.onNavigationDocumentId = event.detail.documentId\n\n    $refs.confirmLeave.show()\n  }\n\n  executeNavigation() {\n    const documentId = this.onNavigationDocumentId\n\n    this.close()\n\n    Aeppic.navigateTo(documentId)\n  }\n\n  async onDrill(event) {\n    $emit('activate')\n\n    const drillEvent = event.detail\n    const { targetDocument, sourceContext, sourceElement } = drillEvent\n\n    const ensureTargetDocument = await Aeppic.get(targetDocument)\n\n    const drill = {\n      sourceContext,\n      sourceElement,\n      targetDocument: ensureTargetDocument,\n    }\n\n    console.log(drill)\n\n    locals.drills.push(drill)\n  }\n\n  get currentDrill() {\n    return locals.drills.slice(-1)[0]\n  }\n\n  async setCurrentDrill(index) {\n    const isAlreadyCurrent = index === locals.drills.length - 1\n    \n    if (isAlreadyCurrent) {\n      return\n    }\n\n\n    locals.drills = locals.drills.slice(0, index || 1)\n  }\n\n  close() {\n    this.onNavigationEvent = null\n    \n    locals.drills = []\n    $emit('deactive')\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) { \n    if (!$refs[refName] || !$refs[refName].$el || !$refs[refName].$el.children) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n  destroy() {\n    this.close()\n  }\n} "},"locks":[],"created":{"at":"2020-05-08T08:50:38+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2020-06-23T11:41:40+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1592912500356,"ct":1588927838546,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","594e6b26-7310-4d00-aad9-2a577ccab542"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"7bbea473-8b07-47de-950a-e93c996adaa2","text":"Anlagen DrillDownWizard","v":"initial"},"created":{"at":"2026-04-09T08:58:13+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"ct":1775725093717,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.ready = false\n    locals.isLoading = false\n    locals.cachedOption = null\n    locals.filter = ''\n\n    watchParam('layers', async (layers) => {\n      await this.setup()\n    })\n\n    await this.setup()\n\n    locals.ready = true\n  }\n\n  get currentLayer() {\n    return params.layers[locals.currentLayerIndex]\n  }\n\n  get lowestSelectedItem() {\n    const index = locals.currentLayerIndex - 1\n    if (index < 0) return null\n    return locals.selectedItems[index]\n  }\n\n  async loadCurrentLayerOptions() {\n    locals.isLoading = true\n    \n    locals.options = this.currentLayer ? await this.getLayerDocuments(this.currentLayer) : []\n    \n    if (locals.options.length > 0) {\n      locals.cachedOption = locals.options[0]\n    }\n    \n    locals.isLoading = false\n  }\n\n  async getLayerDocuments(layerConfig) {\n    if (layerConfig.resolve) {\n      return await Aeppic.resolveAll(this.lowestSelectedItem, layerConfig.resolve)\n    } else if (layerConfig.command) {\n      const res = await Aeppic.Commands.execute(layerConfig.command, this.lowestSelectedItem)\n      if (res.ok) {\n        if (Array.isArray(res.value)) {\n          return res.value\n        } else {\n          console.error(`Command with id ${layerConfig.command} and target ${this.lowestSelectedItem} did not return an array of documents.`)\n        }\n      } else {\n        console.error(`Command with id ${layerConfig.command} and target ${this.lowestSelectedItem} failed.`)\n      }\n    } else if (layerConfig.documents) {\n      return layerConfig.documents\n    } else {\n      return []\n    }\n  }\n\n  async select(item) {\n    locals.selectedItems.push(item)\n    locals.currentLayerIndex++\n    locals.options = []\n\n    if (locals.currentLayerIndex < params.layers.length) {\n      await this.loadCurrentLayerOptions()\n    } else {\n      const lastItemIndex = locals.currentLayerIndex - 1\n      const lastItem = locals.selectedItems[lastItemIndex]\n      $emit('selected', lastItem, locals.selectedItems)\n    }\n  }\n\n  async jumpTo(indexOrDocument) {\n    let index = -1\n\n    if (typeof indexOrDocument === 'number') {\n      index = indexOrDocument\n    } else if (indexOrDocument && indexOrDocument.id) {\n      index = locals.selectedItems.findIndex(item => item.id === indexOrDocument.id)\n    }\n\n    if (index === -1) {\n      console.warn(\"jumpTo: Dokument nicht im aktuellen Pfad gefunden oder ungültiger Index.\")\n      locals.ready = true\n      return\n    }\n    \n    locals.selectedItems = locals.selectedItems.slice(0, index)\n    locals.currentLayerIndex = index\n    locals.options = []\n    \n    await this.loadCurrentLayerOptions()\n  }\n\n  async setup() {\n    locals.selectedItems = []\n    locals.currentLayerIndex = 0\n    locals.options = []\n    locals.cachedOption = null\n\n    if (!params.layers || !Array.isArray(params.layers)) {\n      console.warn(\"Drilldown Wizard benötigt ein 'layers' Array im params-Objekt.\")\n      return\n    }\n\n    await this.loadCurrentLayerOptions()\n  }\n\n  get firstOption() {\n    if (locals.options && locals.options.length > 0) {\n      return locals.options[0]\n    }\n    \n    if (locals.isLoading) {\n      return locals.cachedOption\n    }\n    \n    return null\n  }\n\n  get selectionCompleted() {\n    return locals.currentLayerIndex < params.layers.length\n  }\n}","css":"","name":"DrillDownWizard","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<div class=\"flex flex-col gap-4 bg-transparent w-full h-full\" v-if=\"locals.ready\">\n\n  <ae-list\n    v-if=\"locals.selectedItems.length > 0\"\n    list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n    class=\"\"\n    :param-design=\"params.selectedDesign\"\n    :param-design-params=\"{\n      readonly: true,\n    }\"\n    param-gap=\"medium\"\n    :documents=\"locals.selectedItems\"\n    @selected=\"controller.jumpTo($event)\"\n  ></ae-list>\n\n    <!-- v-if=\"controller.firstOption && controller.selectionCompleted\" -->\n  <ae-design\n    v-if=\"controller.selectionCompleted\"\n    name=\"rd:toolbar\"\n    :document=\"controller.firstOption || locals.cachedOption\"\n    :param-list-form-id=\"controller.firstOption?.f?.id || locals.cachedOption?.f?.id\"\n    :param-disable-new=\"true\"\n    @filter=\"locals.filter = $event\"\n  ></ae-design>\n\n  <div v-if=\"controller.selectionCompleted\" class=\"flex flex-col gap-3 flex-1 min-h-0\">\n    <div class=\"font-semibold text-neutral-700\">\n      {{ params.layers[locals.currentLayerIndex].title }}\n    </div>\n\n    <ae-list\n      list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n      class=\"flex-1 overflow-auto\"\n      :documents=\"locals.options\"\n      :param-design=\"params.optionsDesign\"\n      :param-empty-text=\"locals.isLoading ? 'Lädt...' : 'Keine Einträge für ' + params.layers[locals.currentLayerIndex].title + ' gefunden.'\"\n      @selected=\"controller.select($event)\"\n      :filter=\"locals.filter\"\n    ></ae-list>\n  </div>\n\n  <div v-else class=\"text-center text-neutral-500 py-8\">\n    Auswahl abgeschlossen.\n  </div>\n\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"5ac9cc46-c68b-475e-a8fb-6bb5039fe118","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-04-16T11:47:50+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"7bbea473-8b07-47de-950a-e93c996adaa2","text":"Anlagen DrillDownWizard","v":"initial"},"p":"594e6b26-7310-4d00-aad9-2a577ccab542","previous":{"v":"cda433a46a8c4bf8"},"stamps":[],"t":1776340070497,"v":"5316bfb22d14166b"},{"id":"066b41f7-036f-422c-9afc-4c3015ddc4b4","v":"556f5d6e3a69c10a","previous":{"v":"48fd66cfef7f9c26"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Dropdown Layout","applies":"","packages":[],"template":"<ae-popup ref=\"popup\" placement=\"bottom-start\">\n\t<template slot=\"popup\" slot-scope=\"popup\">\n\t\t<div class=\"_CSS-popup\" :style=\"{ 'min-width': popup.baseWidth * 2 +'px' }\" @click.stop>\n      <ae-list  :list-id=\"params.listId || 'a23e7aa9-8f4f-4454-b8ce-5fd5d2c0380b'\"\n                :documents=\"params.documents\"\n                @selected=\"controller.emitSelected($event)\"\n                :param-design-params=\"params.designParams\"\n      ></ae-list>\n\t\t</div>\n\t</template>\n</ae-popup> \n\n\n\n\n","css":"._CSS-popup {\n  padding: var(--ae-size-2) 0;\n  background-color: var(--ae-ui-background);\n  box-shadow: var(--ae-shadow-2);\n  transition: opacity .15s, visibility 1s;\n  border-radius: var(--ae-border-radius);\n}\n","controller":"class Controller {\n  init() {\n    $on('show', (event) => this.show(event))\n    $on('close', (event) => this.close(event))\n  }\n\n  show(event) {\n    console.log(event)\n    if (params.documents.length === 1 && params.skipSingleEntry) {\n      this.emitSelected(params.documents[0])\n    } else {\n      $refs.popup && $refs.popup.show(event)\n    }\n  }\n\n  emitSelected(value) {\n    $emit('selected', value)\n\n    this.close()\n  }\n\n  close() {\n    $refs.popup && $refs.popup.close()\n  }\n\n  destroy() {\n    this.close()\n  }\n}\n"},"locks":[],"created":{"at":"2018-06-12T11:34:59+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-11-04T15:43:06+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1636040586144,"ct":1621428481253,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"9bfaf6b1-b201-4a52-b929-679ef8e09bd6","v":"95dc6191376a9e36","previous":{"v":"e796d683c4af8155"},"p":"ecbdc4aa-685d-41cf-84a4-1f61e1a8be07","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"},"data":{"name":"E-Mail Vorlagen Erklärungs-Text","applies":"","packages":[],"template":"<!-- NOTE: extrahiert und gekürzt aus dem Wissen's Management von Exapris -->\n\n<h1>Allgemeine Funktionsweise</h1>\n<p></p>\n<p>Die Teilfunktionen (Gesprächsnotiz) eines Projektes\n\tkönnen via Klick auf einen Button eine neue E-Mail im lokalen E-Mail Client öffnen.</p>\n<ul>\n\t<li>\n\t\t<p>Je nach Funktion stehen unterschiedliche Token bereit. </p>\n\t</li>\n\t<li>\n\t\t<p>Die Vorlagen sind als reiner Text in den Projekt-Stammdaten zu verändern. </p>\n\t</li>\n</ul>\n<ul>\n\t<li>\n\t\t<p>Sind die Token falsch geschrieben oder es gibt keine bereitgestellte Daten eines Tokens, dann wird dieser <strong><u>NICHT</u></strong>\t\t\tersetzt/entfernt.</p>\n\t</li>\n</ul>\n<h2>Beispiel</h2>\n<pre><code>Sehr geehrte/r Frau/Herr $kontakt_ansprechpartner$,\n\nbetreffend Ihres Projektes $projekt_name$ sende ich zu Ihrer Kenntnisnahme das Gesprächs-Protokoll \"$gespraechsnotiz_name$\".\n\nBitte nehmen Sie dieses unter folgenden Link zur Kenntnis: $share_url$\n\nMit freundlichen Grüßen</code></pre>\n<h1>Einbindung </h1>\n\n<section v-if=\"params.layoutKey === 'gespraechsnotiz'\">\n  <h2>Gesprächsnotiz</h2>\n  <p>Die Kontakt-Token entsprechen dem ersten Empfänger aus \"Empfänger\".</p>\n  <pre><code>\nToken | Beispiel-Wert \n----- | -------------\n\n$share_url$ | https://energieberater.bizpin.de/mail/b7cc00f7-ad08-4f38-ac16-ec680510bdbb \n$gespraechsnotiz_name$ | Anpassung der Planung\n​$gespraechsnotiz_notiz$ | Die Planung wird auf Wunsch von Herrn Schmitt angepasst. Die notwendigen Maßnahmen ...\n$projekt_name$ | 2019_05_01-AmOberenBorn-Mainz-Hechthsheim \n$projekt_baustellenAdresse_street$ | Am Oberen Born\n$projekt_baustellenAdresse_streetNumber$ | 2\n$projekt_baustellenAdresse_postalCode$ | 55120\n$projekt_baustellenAdresse_city$ | Mainz\n$gespraechsnotiz_name$ | Der Betreff\n$gespraechsnotiz_notiz$ | Wie gerade besprochen werden wir am Haus ...\n$kontakt_name$ | Exapris GmbH\n$kontakt_ansprechpartner$ | Gerald Boller\n$kontakt_email$ | info@exapris.de\n$kontakt_festnetz$ | 0123festnetz\n$kontakt_mobil$ | 0123mobil\n$kontakt_adresse_street$ | Am Becherweg\n$kontakt_adresse_streetNumber$ | 10\n$kontakt_adresse_postalCode$ | 55270\n$kontakt_adresse_city$ | Ober-Olm\n</code></pre>\n</section>\n\n<section v-if=\"params.layoutKey === 'formulareSenden'\">\n\n  <h2>Fomulare versenden</h2>\n  <p>Die Kontakt-Token entsprechen dem Kontakt aus \"Empfänger\".</p>\n  <pre><code>\nToken | Beispiel-Wert \n----- | -------------\n\n$share_url$ | https://energieberater.bizpin.de/mail/b7cc00f7-ad08-4f38-ac16-ec680510bdbb \n$zu-versendende-formulare_name$ | wichtige Formulare zur Unterschrift\n$projekt_name$ | 2019_05_01-AmOberenBorn-Mainz-Hechthsheim \n$projekt_beschreibung$ | Dies ist eine Beschreibung &lt;br&gt; und dies Zeile 2 &lt;br&gt; und Zeile 3. \n$projekt_baustellenAdresse_street$ | Am Oberen Born\n$projekt_baustellenAdresse_streetNumber$ | 2\n$projekt_baustellenAdresse_postalCode$ | 55129\n$projekt_baustellenAdresse_city$ | Mainz\n$kontakt_name$ | Exapris GmbH\n$kontakt_ansprechpartner$ | Gerald Boller\n$kontakt_email$ | info@exapris.de\n$kontakt_festnetz$ | 0123festnetz\n$kontakt_mobil$ | 0123mobil\n$kontakt_adresse_street$ | Am Becherweg\n$kontakt_adresse_streetNumber$ | 10\n$kontakt_adresse_postalCode$ | 55270\n$kontakt_adresse_city$ | Ober-Olm\n  </code></pre>\n</section>\n\n<section v-if=\"params.layoutKey === 'dokumentenShare'\">\n\n  <h2>Dokumenten Share (Kunde und Baustelle)</h2>\n  <p>Die Kontakt-Token entsprechen dem ersten Empfänger aus \"zu benachrichtigende Kontakte\".</p>\n  <pre><code>\n  Token | Beispiel-Wert \n----- | -------------\n\n$share_url$ | https://energieberater.bizpin.de/mail/b7cc00f7-ad08-4f38-ac16-ec680510bdbb \n$dokumenten-share_name$ | Projektraum\n$dokumenten-share_passwortbaustelle$ | passwortDerBaustelle\n$dokumenten-share_passwortkunde$ | passwortDesKunden\n$projekt_name$ | 2019_05_01-AmOberenBorn-Mainz-Hechthsheim \n$projekt_beschreibung$ | Dies ist eine Beschreibung &lt;br&gt; und dies Zeile 2 &lt;br&gt; und Zeile 3. \n$projekt_baustellenAdresse_street$ | Am Oberen Born\n$projekt_baustellenAdresse_streetNumber$ | 2\n$projekt_baustellenAdresse_postalCode$ | 55129\n$projekt_baustellenAdresse_city$ | Mainz\n$kontakt_name$ | Exapris GmbH\n$kontakt_ansprechpartner$ | Gerald Boller\n$kontakt_email$ | info@exapris.de\n$kontakt_festnetz$ | 0123festnetz\n$kontakt_mobil$ | 0123mobil\n$kontakt_adresse_street$ | Am Becherweg\n$kontakt_adresse_streetNumber$ | 10\n$kontakt_adresse_postalCode$ | 55270\n$kontakt_adresse_city$ | Ober-Olm\n  </code></pre>\n  <p></p>\n</section>","css":"","controller":""},"locks":[],"created":{"at":"2021-03-08T11:18:22+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-03-08T11:52:27+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1615204347101,"ct":1615202302086,"a_depth":3,"a":["apps","d91078cc-874b-4410-b837-b81f47687fe9","ecbdc4aa-685d-41cf-84a4-1f61e1a8be07"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"e081a9c0-85e8-4b01-902b-f81fc76be938","v":"initial","p":"3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"},"data":{"name":"E-Mail Vorlagen Erklärungs-Text","applies":"","packages":[],"template":"<!-- NOTE: extrahiert und gekürzt aus dem Wissen's Management von Exapris -->\n\n<h1>Allgemeine Funktionsweise</h1>\n<p></p>\n<p>Die Teilfunktionen (Gesprächsnotiz, Formulare senden, Dokumenten Share [Kunde], Dokumenten Share [Baustelle]) eines Projektes\n\tkönnen via Klick auf einen Button eine neue E-Mail im lokalen E-Mail Client öffnen.</p>\n<ul>\n\t<li>\n\t\t<p>Je nach Funktion stehen unterschiedliche Token bereit. </p>\n\t</li>\n\t<li>\n\t\t<p>Die Vorlagen sind als reiner Text in den Projekt-Stammdaten zu verändern. </p>\n\t</li>\n</ul>\n<ul>\n\t<li>\n\t\t<p>Sind die Token falsch geschrieben oder es gibt keine bereitgestellte Daten eines Tokens, dann wird dieser <strong><u>NICHT</u></strong>\t\t\tersetzt/entfernt.</p>\n\t</li>\n</ul>\n<h2>Beispiel</h2>\n<pre><code>Sehr geehrte/r Frau/Herr $kontakt_ansprechpartner$,\n\nbetreffend Ihres Projektes $projekt_name$ sende ich zu Ihrer Kenntnisnahme das Gesprächs-Protokoll \"$gespraechsnotiz_name$\".\n\nBitte nehmen Sie dieses unter folgenden Link zur Kenntnis: $share_url$\n\nMit freundlichen Grüßen</code></pre>\n<h1>Einbindung bei den Energieberatern </h1>\n\n<section v-if=\"params.layoutKey === 'gespraechsnotiz'\">\n  <h2>Gesprächsnotiz</h2>\n  <p>Die Kontakt-Token entsprechen dem ersten Empfänger aus \"Empfänger\".</p>\n  <pre><code>\nToken | Beispiel-Wert \n----- | -------------\n\n$share_url$ | https://energieberater.bizpin.de/mail/b7cc00f7-ad08-4f38-ac16-ec680510bdbb \n$gespraechsnotiz_name$ | Anpassung der Planung\n​$gespraechsnotiz_notiz$ | Die Planung wird auf Wunsch von Herrn Schmitt angepasst. Die notwendigen Maßnahmen ...\n$projekt_name$ | 2019_05_01-AmOberenBorn-Mainz-Hechthsheim \n$projekt_beschreibung$ | Dies ist eine Beschreibung &lt;br&gt; und dies Zeile 2 &lt;br&gt; und Zeile 3. \n$projekt_baustellenAdresse_street$ | Am Oberen Born\n$projekt_baustellenAdresse_streetNumber$ | 2\n$projekt_baustellenAdresse_postalCode$ | 55120\n$projekt_baustellenAdresse_city$ | Mainz\n$gespraechsnotiz_name$ | Der Betreff\n$gespraechsnotiz_notiz$ | Wie gerade besprochen werden wir am Haus ...\n$kontakt_name$ | Exapris GmbH\n$kontakt_ansprechpartner$ | Gerald Boller\n$kontakt_email$ | info@exapris.de\n$kontakt_festnetz$ | 0123festnetz\n$kontakt_mobil$ | 0123mobil\n$kontakt_adresse_street$ | Am Becherweg\n$kontakt_adresse_streetNumber$ | 10\n$kontakt_adresse_postalCode$ | 55270\n$kontakt_adresse_city$ | Ober-Olm\n</code></pre>\n</section>\n\n<section v-if=\"params.layoutKey === 'formulareSenden'\">\n\n  <h2>Fomulare versenden</h2>\n  <p>Die Kontakt-Token entsprechen dem Kontakt aus \"Empfänger\".</p>\n  <pre><code>\nToken | Beispiel-Wert \n----- | -------------\n\n$share_url$ | https://energieberater.bizpin.de/mail/b7cc00f7-ad08-4f38-ac16-ec680510bdbb \n$zu-versendende-formulare_name$ | wichtige Formulare zur Unterschrift\n$projekt_name$ | 2019_05_01-AmOberenBorn-Mainz-Hechthsheim \n$projekt_beschreibung$ | Dies ist eine Beschreibung &lt;br&gt; und dies Zeile 2 &lt;br&gt; und Zeile 3. \n$projekt_baustellenAdresse_street$ | Am Oberen Born\n$projekt_baustellenAdresse_streetNumber$ | 2\n$projekt_baustellenAdresse_postalCode$ | 55129\n$projekt_baustellenAdresse_city$ | Mainz\n$kontakt_name$ | Exapris GmbH\n$kontakt_ansprechpartner$ | Gerald Boller\n$kontakt_email$ | info@exapris.de\n$kontakt_festnetz$ | 0123festnetz\n$kontakt_mobil$ | 0123mobil\n$kontakt_adresse_street$ | Am Becherweg\n$kontakt_adresse_streetNumber$ | 10\n$kontakt_adresse_postalCode$ | 55270\n$kontakt_adresse_city$ | Ober-Olm\n  </code></pre>\n</section>\n\n<section v-if=\"params.layoutKey === 'dokumentenShare'\">\n\n  <h2>Dokumenten Share (Kunde und Baustelle)</h2>\n  <p>Die Kontakt-Token entsprechen dem ersten Empfänger aus \"zu benachrichtigende Kontakte\".</p>\n  <pre><code>\n  Token | Beispiel-Wert \n----- | -------------\n\n$share_url$ | https://energieberater.bizpin.de/mail/b7cc00f7-ad08-4f38-ac16-ec680510bdbb \n$dokumenten-share_name$ | Projektraum\n$dokumenten-share_passwortbaustelle$ | passwortDerBaustelle\n$dokumenten-share_passwortkunde$ | passwortDesKunden\n$projekt_name$ | 2019_05_01-AmOberenBorn-Mainz-Hechthsheim \n$projekt_beschreibung$ | Dies ist eine Beschreibung &lt;br&gt; und dies Zeile 2 &lt;br&gt; und Zeile 3. \n$projekt_baustellenAdresse_street$ | Am Oberen Born\n$projekt_baustellenAdresse_streetNumber$ | 2\n$projekt_baustellenAdresse_postalCode$ | 55129\n$projekt_baustellenAdresse_city$ | Mainz\n$kontakt_name$ | Exapris GmbH\n$kontakt_ansprechpartner$ | Gerald Boller\n$kontakt_email$ | info@exapris.de\n$kontakt_festnetz$ | 0123festnetz\n$kontakt_mobil$ | 0123mobil\n$kontakt_adresse_street$ | Am Becherweg\n$kontakt_adresse_streetNumber$ | 10\n$kontakt_adresse_postalCode$ | 55270\n$kontakt_adresse_city$ | Ober-Olm\n  </code></pre>\n  <p></p>\n</section>","css":"","controller":""},"locks":[],"created":{"at":"2020-09-17T11:55:23+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-09-17T11:55:23+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1600343723802,"ct":1600343723802,"a_depth":3,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"67a27f06-6776-4f90-93dc-7321528f96c2","v":"888bcb87105b9e9c","previous":{"v":"48e9fd586459b4ae"},"p":"61ccaf6b-af84-4908-aa73-785dffd83c5f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"eCasting (Vorauswahl) Form Layout","applies":"","packages":[],"template":"<div class=\"dbps-body-with-actions\">\n  <div class=\"dbps-body-with-actions__actions-placeholder\"></div>\n  <div class=\"dbps-body-with-actions__actions\">\n    <ae-layout layout-id=\"6273d6a2-0cf0-47da-9e45-18460c50d101\" @edit=\"locals.edit = true\" @reset=\"locals.edit = false\"></ae-layout>\n    <!-- <ae-layout style=\"font-size: 1.5rem;\" layout-id=\"5e83dff9-c5cc-4e02-aa8f-4d8760d5189c\"></ae-layout> -->\n  </div>\n\n  <div>\n    <ae-design v-if=\"!locals.edit\" class=\"_CSS-title\" :document=\"params.document\" name=\"title\"></ae-design>\n    <ae-control v-else class=\"_CSS-title\" :document=\"params.document\" field-name=\"name\"></ae-control>\n\n    <!-- <h2>Kopieren</h2> -->\n    <ae-form class=\"_CSS-field-form\" :document-id=\"params.document.data.fieldsToCopy.id\" :auto-save=\"true\" :readonly=\"!locals.edit\"></ae-form>\n    \n    <!-- <h2>{{ controller.documentForm.getPlaceholder('highlightStartingDate').label }} </h2>\n    <ae-control :name=\"controller.documentForm.getPlaceholder('highlightStartingDate').control.name\"  :readonly=\"!locals.edit\" :document=\"params.document\" field-name=\"highlightStartingDate\"></ae-control> -->\n<!-- \n    <h1>Laufliste</h1>\n     <a style=\"font-size: 1.5rem;color:black;\" class=\"dbps-button\" :href=\"'/api/docs/' + params.document.id + '/_print?landscape=true&additionalQueryParams=' + encodeURIComponent('printLayoutId=0a89ad56-7921-4796-9860-c2365819b69b')\" target=\"_blank\">\n        <ae-icon class=\"fa fa-file-pdf\"></ae-icon>\n        <span style=\"margin-left: 1rem;\">Laufliste PDF herunterladen</span>\n      </a>\n\n    <ae-form class=\"_CSS-field-form\" :document-id=\"params.document.data.fieldsToShowOnECastingList.id\" :auto-save=\"true\" :readonly=\"!locals.edit\"></ae-form>\n  -->\n    <!-- <h1>\n      Models\n    </h1>\n\n    <ae-list\n      list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n      :documents=\"params.document.data.models\"\n      @selected=\"Aeppic.navigateTo($event)\"\n    ></ae-list>\n\n    <div v-if=\"!params.document.data.models.length\">Keine Models hinzugefügt.</div> -->\n  </div>\n</div>\n","css":"._CSS-title {\n  font-weight: bold;\n  font-size: 2rem;\n}\n\n._CSS-share--editable {\n  background: rgba(255,255,255,0.9);\n  padding: 0.3rem 1rem;\n}\n\n._CSS-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n}","controller":""},"locks":[],"created":{"at":"2018-06-20T14:11:17+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583892109,"ct":1529503877967,"a_depth":4,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","e89b29a9-6ab9-47dc-a6fe-91ebda92871d","61ccaf6b-af84-4908-aa73-785dffd83c5f"],"a_forms":["folder","application-form","folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"0a89ad56-7921-4796-9860-c2365819b69b","v":"911299f945adf633","previous":{"v":"0c5a26e00693aa4d"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"eCasting as eCastinglist (Laufliste) Export","applies":"","packages":[],"template":"<ae-list  list-id=\"e68b907e-eac2-4b21-8676-0553df848d8d\"\n          :documents=\"locals.models\"\n          :watch-documents=\"true\"\n          :param-columns=\"locals.columns\"\n          :param-designs=\"locals.designs\"\n          :param-headers=\"locals.headers\"\n></ae-list>","css":"","controller":"class Controller {\n  async init() {\n    locals.models = []\n    locals.columns = ''\n    locals.designs = ''\n\n    const document = await Aeppic.get(params.pageDocumentId)\n    \n    const allModels = await Aeppic.getAll(document.data.models)\n    locals.models = allModels.filter(model => !model.data.removed)\n\n    const fieldsToShow = await Aeppic.get(document.data.fieldsToShowOnECastingList)\n    const existingFields = fieldsToShow.data.fields.filter(field => !!(field && field.trim()))\n\n    if (existingFields.length) {\n      locals.columns = `data.${existingFields.join(',data.')}`\n\n      locals.designs = this.designs(existingFields)\n    }\n \n    if (fieldsToShow.data.showProjectRelatedModelData) {\n      const modelDataConfig = await this.getModelDataConfig()\n\n      if (modelDataConfig) {\n        locals.columns = `${locals.columns},${modelDataConfig.columns.join(',')}`\n        locals.headers = existingFields.map(_ => '').concat(modelDataConfig.headers).join(',')\n        locals.designs = `${locals.designs},${modelDataConfig.designs.join(',')}`\n      }\n    }\n  }\n\n  async getModelDataConfig() {\n    const document = await Aeppic.get(params.pageDocumentId)\n\n    const modelData = await Aeppic.findOne(`a:${document.p} f.id:13866932-346a-448d-9560-8a7e7e26be37`)\n\n    if (!modelData) {\n      return null\n    }\n\n    const result = {\n      headers: [],\n      columns: [],\n      designs: []\n    }\n\n    const modelDataForm = await Aeppic.getFormForDocument(modelData)\n\n    const UTF8_SINGLE_LOW_9_QUOTATION_MARK = '‚'\n\n\n    for (const fieldName of ['specialFee','blockedDates','promotionsOnAir','competitivePromition']) {\n      result.columns.push(fieldName)\n      result.designs.push('table-cell-answer')\n      result.headers.push(modelDataForm.getPlaceholder(fieldName).label.replace(',', UTF8_SINGLE_LOW_9_QUOTATION_MARK))\n    }\n\n    return result\n  }\n\n  designs(fieldsToShow) {\n    return fieldsToShow.map((fieldName) => {\n      if (fieldName === 'files') {\n        return 'table:index-picture-thumbnail'\n      }\n\n      return ''\n    }).join(',')\n  }\n}  \n\n"},"locks":[],"created":{"at":"2018-07-06T12:15:21+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583893719,"ct":1530879321269,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"027e5efd-2e93-42ef-b041-74644410600f","v":"779d1f0b795ac7d3","previous":{"v":"initial"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"eCastinglist Dialog (Laufliste)","applies":"","packages":[],"template":"<ae-dialog ref=\"dialog\" :backdrop-close=\"false\">\n  <div slot=\"header\" class=\"_CSS-dialog__header\" slot-scope=\"scope\">\n    <span v-if=\"params.title\">{{params.title}}</span>\n    <div>Laufliste</div>\n    <button class=\"dbps-button\" @click.stop=\"scope.close()\">\n      <ae-icon class=\"fa fa-window-close\"></ae-icon>\n    </button>\n  </div>\n  <div slot=\"body\">\n    <div class=\"dbps-body-with-actions\">\n      <div>\n        <ae-layout layout-id=\"6273d6a2-0cf0-47da-9e45-18460c50d101\" @edit=\"controller.setEditing(true)\" @reset=\"controller.setEditing(false)\"></ae-layout>\n      </div>\n  \n      <div>\n      <ae-form :document-id=\"params.document.data.fieldsToShowOnECastingList.id\" :auto-save=\"true\" :readonly=\"!locals.edit\"></ae-form>\n\n      <a class=\"dbps-button\" :href=\"'/api/docs/' + params.document.id + '/_print?landscape=true&additionalQueryParams=' + encodeURIComponent('printLayoutId=0a89ad56-7921-4796-9860-c2365819b69b')\" target=\"_blank\">\n        <ae-icon class=\"fa fa-file-pdf\"></ae-icon>\n        <span style=\"margin-left: 1ch;\">Laufliste PDF herunterladen</span>\n      </a>\n      <a class=\"dbps-button\" :href=\"'/' + params.document.id + '?print&printLayoutId=0a89ad56-7921-4796-9860-c2365819b69b'\" target=\"_blank\">\n        <ae-icon class=\"fa fa-print-search\"></ae-icon>\n        <span style=\"margin-left: 1ch;\">Laufliste Druckansicht</span>\n      </a>\n      </div>\n      <div></div>\n    </div>\n  </div>\n</ae-dialog>\n","css":"._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  overflow: hidden;\n}\n","controller":"class Controller {\n  async init() {\n    locals.edit = false\n\n    this.show = (eventData) => {\n      $refs.dialog.show(eventData)\n    }\n    this.close = () => $refs.dialog.close()\n\n    $on('show', (event) => this.show(event))\n    $on('close', (event) => this.close(event))\n  }\n\n\n  setEditing(value) {\n    $refs.form && $refs.form.save()\n\n    locals.edit = value\n  }\n}"},"locks":[],"created":{"at":"2019-04-12T14:13:54+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583893727,"ct":1555078434963,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"p":"a1158695-0353-4319-9e03-fe4539a17c06","data":{"name":"edit","applies":"","template":"<iris-file-picker>\n  <iris-file-picker-tab type=\"library\" heading=\"Library\" description=\"Choose from the library....\" file-query=\"f.id:8bf0fb31-716d-4b76-98d8-b7349f1d7529\" file-field=\"file\">\n  </iris-file-picker-tab>\n  <iris-file-picker-tab type=\"upload\" heading=\"Local\" description=\"Upload a local file...\" form-id=\"8bf0fb31-716d-4b76-98d8-b7349f1d7529\" form-version=\"1\" file-field=\"file\" parent-id=\"88731a32-480f-4ee7-916c-a9b708443aeb\">\n  </iris-file-picker-tab>\n  <div class=\"document-body\">\n    <iris-form form=\"document.f\" data=\"document.data\" defaults=\"false\"></iris-form> \n    <div ng-if=\"$root.isDevelopmentMode\">\n    <div class=\"checkbox\">\n      <label>\n          <input type=\"checkbox\" ng-model=\"showData\">\n          Show Raw Document\n      </label>\n    </div>\n    <span ng-show=showData>{{document}}</span>\n  </div>\n  </div>\n  <div class=\"dialog-footer\">\n    <button click-closes-dialog type=\"button\" class=\"btn btn-cancel\">Close</button>\n    <!-- <button click-saves-document type=\"button\" class=\"btn btn-primary\">Save changes</button> -->\n    <document-actions document=\"document\"></document-actions>\n  </div>\n</iris-file-picker>"},"id":"454208f9-c33d-467a-9e47-b55dff7cc093","v":"6aba5e46916efa9a","t":1467644260714,"ct":1467644260681,"previous":{"v":"5e7a97c78048c86e"},"modified":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"created":{"at":"2017-09-15T10:29:31+02:00","by":"","from":"","client":"import"},"locks":[],"lockRefs":[],"inheritedLocks":[null,null,null,null,null],"a":["apps","ab825f4a-2d1a-433d-800c-bf48f81b4569","d6aa757f-a3ea-4241-b6d9-5418d51c0c78","a1158695-0353-4319-9e03-fe4539a17c06"],"a_forms":["folder","application-form","folder","form"],"a_depth":4,"stamps":[]},{"id":"de7dd9a2-d397-4f69-90fb-b8844773d444","v":"bda0363eb799c83b","p":"form","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"edit","applies":"","template":"<rs-template-content>\n  <div ng-if=\"$root.account.id=='emergency-account' && document.v == 0\" layout=\"row\">\n    <md-input-container flex>\n      <label>Document-Id (change with care!)</label>\n      <input type=\"text\" ng-init=\"customDocumentId = document.id\" ng-model=\"customDocumentId\" aria-label=\"Document id\" ng-change=\"$rsDialog.changeDocumentId(document,customDocumentId)\" ng-model-options=\"{ updateOn: 'default blur', debounce: { default: 500, blur:0 } }\">\n    </md-input-container>\n  </div>\n  <div layout=\"row\">\n    <div flex>\n      <h1><small>Definition</small></h1>\n      <md-content>\n        <rs-tabbed-form flex document=\"document\"></rs-tabbed-form>\n      </md-content>\n    </div>\n    <div flex>\n      <h1><small>Preview</small></h1> \n      <md-content>\n        <!--rs-form form-definition=\"{{document.data.definition}}\" defaults=\"true\"></rs-form-->\n        <rs-tabbed-form flex form-definition=\"{{document.data.definition}}\" defaults=\"true\" readonly=\"false\"></rs-tabbed-form>\n      </md-content>\n    </div>\n  </div>\n</rs-template-content>\n\n<rs-template-actions>\n  <span flex></span>\n  <document-command command-id=\"save-command\" target-document=\"document\" on-result=\"$rsDialog.close($rsCommand.result)\" >\n    <md-button class=\"md-primary md-raised\" ng-click=\"execute($event)\" aria-label=\"Save\">\n      Save\n    </md-button>\n  </document-command>\n</rs-template-actions>","css":"","controller":"","packages":[]},"locks":[],"created":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"modified":{"at":"2020-06-30T10:53:26+00:00","by":"8e6c22aa-8c69-4ff8-919a-7032841cf636","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719473826689,"ct":1719473826689,"a_depth":3,"a":["system","system-forms","form"],"a_forms":["system-folder-form","repository-folder-form","form"],"inheritedLocks":[null,null,null,null],"stamps":[],"previous":{"v":"5c307bdab6f10213","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}},"meta":{"modified":{"at":"2024-06-27T07:37:06+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"id":"6273d6a2-0cf0-47da-9e45-18460c50d101","v":"5b310b77460ba996","previous":{"v":"2f82f5c9aca987ef"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Edit Button","applies":"","packages":[],"template":"<div @click.stop=\"controller.toggleEdit()\" class=\"dbps-button ae-noselect\" :title=\"locals.edit ? 'Speichern' : 'Bearbeiten'\">\n  <ae-icon title=\"Speichern\" v-show=\"!locals.edit\" class=\"fa fa-edit fa-3x\"></ae-icon>\n  <ae-icon title=\"Bearbeiten\" v-show=\"locals.edit\" class=\"fa fa-save fa-3x\"></ae-icon>\n</div>","css":"","controller":"class Controller {\n  init () {\n    locals.edit = false\n  }\n\n  toggleEdit() {\n    locals.edit = !locals.edit\n\n\n    if (locals.edit) {\n      $emit('edit')\n    } else {\n      $emit('reset')\n    }\n  }\n}"},"locks":[],"created":{"at":"2018-06-20T10:45:51+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583893735,"ct":1529491551582,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"a90ce2ed-a649-4f84-b3a6-f7263ec0d9ff","v":"00e609e9d969400c","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Edit Button","applies":"","packages":[],"template":"<button class=\"ae-button\" @click=\"$emit('click')\">Details</button>\n","css":"","controller":""},"locks":[],"created":{"at":"2018-06-22T09:57:23+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481253,"ct":1621428481253,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"6676f1e4ae2ed5cb","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"83873868-ece6-4894-82d6-827f3e111bf3","v":"d2b3db766a621a54","previous":{"v":"f0a739ec2abf3b3b"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Editor - TipTap2","applies":"","packages":[{"id":"31da2761-bf6b-40e8-af3c-7bbbbb473058","v":"53877d1bf224ac07","text":"Editor - TipTap2 "}],"template":"<editor-content style=\"flex:1;display:flex\" :editor=\"locals.editor\"></editor-content>","css":"._CSS {\r\n  padding: 8px;\r\n  display:flex;\r\n  flex-direction:column;\r\n}\r\n\r\n._CSS_editor {\r\n  flex:1;\r\n  overflow:auto;\r\n}\r\n\r\n._CSS_list {\r\n}\r\n\r\n._CSS_list > div {\r\n  position: relative;\r\n  min-width: 100px;\r\n  min-height: 50;\r\n  background: white;\r\n  border: 1px solid #ddd;\r\n}\r\n\r\n._CSS header {\r\n  display:flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n}\r\n\r\n\r\n.embed__ae-design {\r\n  display: inline-block;\r\n}","controller":"init() {\r\n  const { Editor, AllExtensions } = packages.Editor\r\n\r\n  // locals.content = 'a<design name=\"title\" document-id=\"root\"></design>b'\r\n  // locals.content = 'a<ae-design src=\"https://www.youtube.com/embed/XIMLoLxmTDw\" data-document-id=\"root\" data-name=\"search-card\"></ae-design>b'\r\n  locals.text = 'A small text'\r\n  locals.editor = new Editor({\r\n    content: locals.text,\r\n    extensions: [\r\n      AllExtensions,\r\n    ],\r\n    editorProps: {\r\n      attributes: {\r\n        class: '_CSS_editor'\r\n      }\r\n    }\r\n  })\r\n\r\n  locals.editor.on('update', () => {\r\n    const e = locals.editor\r\n    console.log('updated')\r\n    // locals.content = JSON.stringify(getJSON())\r\n  })\r\n  \r\n  // console.log(packages.Editor)\r\n} \r\n\r\ndestroy() {\r\n  locals.editor.destroy()\r\n}"},"locks":[],"created":{"at":"2021-06-09T15:32:39+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","from":"","client":"server"},"modified":{"at":"2021-06-09T15:36:34+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1623252994886,"ct":1623252759616,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"8e98c038-26ba-4225-b972-e8203d647442","v":"6b402ac1c25cbc50","previous":{"v":"98a93184ec58612e"},"p":"647b2571-aea1-4247-8adb-b43bb4c94afc","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"Employees with overflow bubble","applies":"","packages":[],"template":"<div ref=\"list\" class=\"_CSS-list\" :class=\"{ '_CSS-list ae-navigatable': controller.showOverflowBubble, '_CSS-list--vertical': params.verticalLayout }\"  @click=\"controller.showEmployees($event)\">\n  <div class=\"_CSS-list__entry\" v-for=\"(employee, index) of locals.employees\" v-if=\"index < controller.maxDisplay\">\n    <ae-design  name=\"avatar--tiny\"\n                :document=\"employee\"\n    ></ae-design>\n  </div>\n  <ae-design  v-if=\"controller.showOverflowBubble\"\n              class=\"_CSS-list__entry\" \n              name=\"avatar--tiny\"\n              :document=\"locals.employees[0]\"\n              :param-overwrite-display-with=\"locals.employees.length - controller.maxDisplay\"\n  ></ae-design>\n</div> \n\n<ae-layout layout-id=\"ed2cc4c2-d2a0-4969-8da7-49fb3d539cc9\"\n  ref=\"popup\"\n  :params=\"locals.dialogParams\"\n  @remove=\"$emit('remove', $event)\"\n></ae-layout>\n\n<ae-layout layout-id=\"32dbb3b6-f883-4647-8d21-6f1e0fb83b90\"\n  ref=\"dialog\"\n  :params=\"locals.dialogParams\"\n  @remove=\"$emit('remove', $event)\"\n></ae-layout>\n","css":"._CSS-list {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n._CSS-list._CSS-list--vertical {\n  flex-flow: column;\n  justify-content: center;\n}\n\n._CSS-list__entry {\n  margin: var(--ae-space-1);\n}","controller":"class Controller {\n  async init() {\n    locals.employees = [] \n    locals.dialogParams = { get items() { return locals.employees }, hidePath: true, nofilter: true, label: 'translate:Users|Benutzer', keepOpenAfterSelection: true }\n\n    if ($listeners.remove) {\n      locals.dialogParams.design = 'tag'\n      locals.dialogParams.designParams = { showRemove: true }\n    }\n\n \n    watchParam('employees', async (paramEmployees) => locals.employees = await Aeppic.getAll(paramEmployees))\n    \n    if (params.employees) {\n      locals.employees = await Aeppic.getAll(params.employees)\n    }\n  }\n\n  showEmployees(clickEvent) {\n    if (!this.showOverflowBubble) {\n      return\n    }\n\n    clickEvent.stopPropagation()\n\n    if (Aeppic.Device === 'Phone') {\n      $refs.dialog.$emit('show', { target: $refs.list })\n      return\n    }\n\n    $refs.popup.$emit('show', { target: $refs.list })\n  }\n\n  get maxDisplay() {\n    return params.max || 3\n  }\n\n  get showOverflowBubble() {\n    return locals.employees.length > this.maxDisplay\n  }\n}\n"},"locks":[],"created":{"at":"2022-01-26T08:54:50+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-01-26T12:14:39+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1643199279305,"ct":1643187290680,"a_depth":3,"a":["apps","144e85c0-d7f9-4b20-8928-be30f0c78bda","647b2571-aea1-4247-8adb-b43bb4c94afc"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"dd1bd411-717b-4f51-8e3c-07221c68667e","v":"d8addb4f1b1b5f1f","previous":{"v":"5971e62589701460"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Error Reporter","applies":"","packages":[],"template":"<div style=\"display:none;\" ref=\"hiddenElement\"></div>","css":"","controller":"class Controller {\n  async init() {\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    // FIXME(2023-01-31): log service is currenctly not active\n    // this.attachErrorHandlers()\n  }\n\n  attachErrorHandlers() {\n    const domRoot = $refs.hiddenElement.getRootNode()\n\n    domRoot.onunhandledrejection = (...args) => this.sendError(...args)\n    domRoot.onerror = (...args) => this.sendError(...args)\n\n    // if (typeof Proxy !== 'undefined') {\n    //   const handler = {\n    //     apply: (target, thisArg, argumentsList) => {\n    //       this.sendError(...argumentsList)\n\n    //       return target.apply(this, argumentsList)\n    //     }\n    //   }\n    //   new Proxy(console.error, handler)\n    // }\n    console.error = (...args) => this.sendError(...args)\n  }\n\n  async sendError(...error) {\n    if (Aeppic.Account && (Aeppic.Account.data.allowDevMode || Aeppic.Account.data.isAdmin)) {\n      console.warn('# -- An error was logged')\n      console.warn(error)\n      console.warn('-- #')\n    } else {\n      const stackTraceError = new Error()\n      let stack = ''\n\n      if ('stack' in stackTraceError) {\n        const maxLength = stackTraceError.stack.length > 2000 ? 2000 : stackTraceError.stack.length\n        stack = stackTraceError.stack.slice(0, maxLength)\n      }\n\n      let errorAsString = ''\n\n      if (Array.isArray(error)) {\n        const asString = error.join('\\n\\n')\n        const maxLength = asString.length > 2000 ? 2000 : asString.length\n        errorAsString = asString.slice(0, maxLength)\n      }\n\n      const body = { sets: [] }\n      const errorDetails = {\n        time: new Date().valueOf(),\n        accountId: Aeppic.Account ? Aeppic.Account.id : '',\n        backedBy: Aeppic.Auth && Aeppic.Auth.backedBy ?Aeppic.Auth.backedBy : '',\n        loggedIn: Aeppic.Auth && Aeppic.Auth.loggedIn ?Aeppic.Auth.loggedIn : '',\n        documentId: location && location.pathname ? location.pathname.slice(1) : '',\n        browser: navigator ? navigator.userAgent: '',\n        browserName: navigator ? navigator.appName: '',\n        os: navigator ? navigator.platform: '',\n        language: navigator ? navigator.language: '',\n        url: location ? location.href : '',\n        error: errorAsString,\n        stack: stack,\n      }\n      body.sets.push(errorDetails)\n\n\n      const logServerUrl = 'api/services/77d31ade-97da-4eca-8eee-8e6ab263e477/log'\n      const queryParamsString = `?id=${errorDetails.documentId ? errorDetails.documentId : '' }&accountId=${errorDetails.accountId || ''}`\n      const url = `${logServerUrl}${queryParamsString}`\n\n      try {\n        await Aeppic.fetch(\n          url,\n          {\n            method: 'POST',\n            headers: {\n              'Accept': 'application/json',\n              'Content-Type': 'application/json'\n            },\n            body: JSON.stringify(body)\n          }\n        )\n      } catch(sendToServerError) {\n        console.warn('[error reporter]: could not send to log server:', error)\n      }\n    }\n\n  }\n}\n\n\n"},"locks":[],"created":{"at":"2020-05-20T07:26:19+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2023-01-31T10:28:14+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1675160894540,"ct":1621428481253,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"aea9f60c-e5c4-4d96-8f81-8f0dda80e442","v":"dc0d974577489979","previous":{"v":"6c5c73bc8bfb21ef"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Export Buttons","applies":"","packages":[],"template":"<template v-if=\"locals.printEnabled || locals.allowZip\">\n  <button class=\"ae-button\" ref=\"button\" @click.capture.stop=\"$refs.popup && $refs.popup.show({ target: $refs.button })\" title=\"Exportieren\">\n    <ae-icon class=\"fad fa-file-export\"></ae-icon>\n  </button>\n\n  <ae-popup ref=\"popup\" placement=\"bottom-start\">\n    <template slot=\"popup\" slot-scope=\"popup\">\n      <div class=\"_CSS-popup\" :style=\"{ 'min-width': popup.baseWidth * 2 +'px' }\" @click.stop=\"popup.close()\">\n        <a v-if=\"locals.printEnabled\" class=\"ae-button\" title=\"Druckansicht\" target=\"_blank\" :href=\"'/' + params.documentId + '?print'\" >\n          <ae-icon class=\"fad fa-print\"></ae-icon> Druckansicht öffnen\n        </a>\n\n        <!-- FIXME: PDF works sometimes, sometimes stuff is missing (if loading takes to long) -->\n        <!-- <a v-if=\"locals.printEnabled\" class=\"ae-button\" title=\"Als PDF speichern\" target=\"_blank\" :href=\"controller.printDownloadUrl\">\n          <ae-icon class=\"fad fa-file-pdf\"></ae-icon> Druckansicht als PDF herunterladen\n        </a> -->\n\n        <a v-if=\"locals.allowZip\" class=\"ae-button\" title=\"Als ZIP speichern\" target=\"_blank\" :href=\"controller.zipDownloadUrl\">\n          <ae-icon class=\"fad fa-file-download\"></ae-icon> Dateien als ZIP herunterladen\n        </a>\n        \n      </div>\n    </template>\n  </ae-popup> \n</template>\n","css":"._CSS {\n  display: flex;\n}\n\n._CSS-popup {\n  padding: var(--ae-size-2) 0;\n  background-color: white;\n  box-shadow: var(--ae-shadow-2);\n  transition: opacity .15s, visibility 1s;\n  border-radius: var(--ae-border-radius);\n  display: flex;\n  flex-flow: column;\n}\n","controller":"async init() {\n  locals.printEnabled = false\n  locals.printEnabled = await Aeppic.Preferences.getSetting('bizpin:generic:enablePrintButtons')\n  locals.allowZip = false\n\n  locals.document = await Aeppic.get(params.documentId)\n\n  watchParam('documentId', async (id) => {\n    locals.document = await Aeppic.get(id)\n    locals.allowZip = allowedForms.find(form => form.id === locals.document.f.id)\n  })\n\n  const allowedForms = await Aeppic.Preferences.getSetting('bizpin:zip:forms')\n  if (allowedForms) {\n    locals.allowZip = allowedForms.find(form => form.id === locals.document.f.id)\n  }\n}\n\nget zipDownloadUrl() {\n  return `/api/services/41e10b87-b2e2-4534-a224-ebe1b728ff29/v1/zip?folderId=${params.documentId}`\n}\n \n\nget printDownloadUrl() {\n  const base = '/api/docs/' + params.documentId + '/_print'\n\n  const parts = []\n\n  if (locals.document) {\n    parts.push(`name=${locals.document.data.name}`)\n  }\n\n  const queryString = '?' + parts.map(p => encodeURIComponent(p)).join('&')\n\n  return base + queryString\n}\n\n"},"locks":[],"created":{"at":"2018-06-27T14:42:44+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2022-03-23T09:36:45+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1648028205463,"ct":1621428481255,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["apps","3339944f-c35f-44b1-b427-a6db1d012825","c4651b79-e62d-44e7-a5a7-8b49d602ea90"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2021-05-19T09:37:12+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1623143161864,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.url = ''\n    locals.name = ''\n\n    $on('export', (event) => this.exportEvent(event))\n  }\n\n  async exportCsv(optionsParam) {\n    const options = {\n      ...{\n        includeFields: params.includeFields,\n        includeParentName: params.includeParentName,\n        documents: params.documents,\n      },\n      ...optionsParam,\n    }\n\n    locals.name = options.name || params.document?.data.name || 'Export'\n\n\n\n    const documents = options.documents || await Aeppic.find(`p:${params.document.id} f.id:${params.formId}`, { size: 9999 })\n    const form = params.formId ? await Aeppic.getForm(params.formId) : await Aeppic.getFormForDocument(documents[0])\n\n    const getRefsName = async (refs) => {\n      const asDocuments = await Aeppic.getAll(refs)\n      return await Promise.all(\n        asDocuments.map(async (doc) => {\n          if (!doc) {\n            return ''\n          }\n\n          const name = doc.data.name\n          if (name) {\n            return name\n          }\n\n          return (await Aeppic.get(doc.f.id)).data.name || ''\n        })\n      )\n    }\n\n    const headers = []\n    if (options.includeParentName) {\n      headers.push('Name des Vater-Objektes')\n    }\n\n    const includeFieldsOfData = options.includeFields?.map(f => f.replace('data.', ''))\n\n    for (const field of form.fields) {\n      if (includeFieldsOfData && !includeFieldsOfData.includes(field.name)) {\n        continue\n      }\n      \n      const placeholder = form.getPlaceholder(field.name)\n      if (placeholder) {\n        headers.push(placeholder.label) \n      } else {\n        headers.push(field.name)\n      }\n    }\n\n    if (options.additionalHeaders) {\n      headers.push(...options.additionalHeaders)\n    }\n\n    const currencyFormatter = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' })\n    const promises = documents.map(async (document, documentIndex) => {\n      const row = []\n\n      if (options.includeParentName) {\n        const parent = await Aeppic.get(document.p)\n\n        row.push(`${parent.data.name}`)\n      }\n\n      for (const field of form.fields) {\n        if (includeFieldsOfData && !includeFieldsOfData.includes(field.name)) {\n          continue\n        }\n\n        const controlName = form.getPlaceholder(field.name)?.control?.name\n\n        let values = field.cardinality ? document.data[field.name] : [document.data[field.name]]\n\n        if (field.subType === 'ref') {\n          values = await getRefsName(values)\n        }\n\n        if (field.subType === 'date') {\n          const format = controlName === 'datetime' ? 'yyyy-MM-dd HH:mm' : 'yyyy-MM-dd'\n\n          values = values.map(value => {\n            if (!value) {\n              return ''\n            }\n\n            return Aeppic.DateTime.fromISO(value).toFormat(format)\n          })\n        }\n\n        if (field.subType === 'duration') {\n          values = values.map(value => {\n            if (!value) {\n              return ''\n            }\n\n            return Aeppic.DateTimeDuration.fromObject(value).toFormat('hh:mm:ss')\n          })\n        }\n\n        if (field.subType === 'address') {\n          const all = ['street', 'streetNumber', 'postalCode', 'city', 'country', 'supplement', 'country', 'state']\n\n          values = values.map(value => {\n            if (all.every(subKeyName => value[subKeyName])) {\n              return ''\n            }\n\n            return all.map(subKeyName => value[subKeyName]).join(' ')\n          })\n        }\n \n        row.push(values.join('\\n'))\n      }\n\n      if (options.additionalColumns) {\n        // TODO: verify there is sth?!\n        row.push(...options.additionalColumns[documentIndex])\n      }\n\n      return row\n    })\n\n    const rows = await Promise.all(promises)\n\n    await this.download(headers, rows)\n  }\n\n  async exportEvent(event) {\n    if (event.additionalColumns) {\n      const { additionalColumns, additionalHeaders, includeFields, documents, name } = event\n\n      await this.exportCsv({ additionalColumns, additionalHeaders, includeFields, documents, name })\n      return\n    }\n\n    const { rows, headers, name } = event\n\n    locals.name = name || 'Export'\n\n    await this.download(headers, rows)\n  }\n\n  async download(headers, rows) {\n    const unparse = packages.unparse\n\n    if (!unparse) {\n      throw new Error('Package PapaParser not loaded')\n    }\n\n    const data = unparse({\n      fields: headers,\n      data: rows\n    }, {\n      delimiter: ';'\n    })\n\n    const blob = new Blob([ '\\uFEFF', data ], { type: 'text/csv' } )\n    const objectUrl = URL.createObjectURL(blob)\n\n    locals.url = objectUrl\n\n    await Aeppic.nextRenderPass()\n\n    $refs.a.click()\n  }\n}\n","css":"","name":"Export documents as CSV","packages":[{"id":"0b308b82-a87f-4c2c-9cee-e09b90d37156","text":"CSV Parser","v":"677a965740861db9"}],"template":"<button class=\"ae-button ae-button--primary\" @click.stop=\"controller.exportCsv()\" :disabled=\"params.documents && !params.documents.length\">\n  <ae-icon class=\"fa fa-file-csv\"></ae-icon>\n  {{params.text ?? \"csv-Datei\"}}\n</button>\n<a v-if=\"locals.url\" ref=\"a\"  :href=\"locals.url\" :download=\"locals.name + '-' + Aeppic.DateTime.local().toFormat('yyyy-LL-dd_HH-mm-ss') + '.csv'\" target=\"_blank\"></a>"},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"a7c668bb-022c-4ffd-94bb-b3430fa73dbb","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-06-01T12:33:01+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"c4651b79-e62d-44e7-a5a7-8b49d602ea90","previous":{"v":"33a0873bff83ec16"},"stamps":[],"t":1780317181074,"v":"82930303ac042da1"},{"id":"aac11114-46bb-4f29-a280-51d889a8aaca","v":"24e668d8fb35e875","previous":{"v":"a0d4c4895421193c"},"p":"5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Export Wartung as PDF","applies":"","template":"<div class=\"flex gap-2\">\n  <ae-layout layout-id=\"a2cd7699-9b46-494f-8f89-cb1f62151d82\"\n              @selected=\"controller.generatePdf()\"\n              param-icon=\"fa fa-file-pdf\"\n              param-text=\"Als PDF herunterladen\"\n  ></ae-layout>\n\n  <a target=\"_blank\" v-show=\"false\" ref=\"downloadLink\" v-if=\"locals.url\" :href=\"locals.url\" type=\"application/pdf\" :download=\"controller.title + '.pdf'\"></a>\n\n  <ae-layout v-if=\"locals.showWip\"\n              layout-id=\"a2cd7699-9b46-494f-8f89-cb1f62151d82\"\n              @selected=\"controller.generatePdfWip()\"\n              param-icon=\"fa fa-file-pdf\"\n              param-text=\"Als PDF (Wartungsgesellschaft) herunterladen\"\n  ></ae-layout>\n\n  <a target=\"_blank\" v-show=\"false\" ref=\"downloadLinkWip\" v-if=\"locals.urlWip\" :href=\"locals.urlWip\" type=\"application/pdf\" :download=\"controller.title + '.pdf'\"></a>\n</div>\n\n\n<!-- <ae-dialog ref=\"dialog\" :dialog-size=\"{ width: 'var(--ae-dialog__width--medium)', height: 'var(--ae-dialog__height--big)' }\">\n  <template #header=\"scope\">\n    <div class=\"flex justify-between items-center\">\n      <div>{{controller.title}}</div>\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n  <template #body>\n    <div class=\"\">\n      <iframe ref=\"pdfFrame\" class=\"w-full h-full\" v-if=\"locals.url\" :src=\"locals.url\" type=\"application/pdf\"></iframe>\n    </div>\n  </template>\n</ae-dialog> -->","css":"","controller":"class Controller {\n\n  async init() {\n    this.fonts = {\n      Roboto: {\n        normal: 'https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-Regular.ttf',\n        bold: 'https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-Medium.ttf',\n        italics: 'https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-Italic.ttf',\n        bolditalics: 'https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-MediumItalic.ttf'\n      },\n    }\n    this.baseUrl = packages.window.location.origin\n    this.pdfMake = packages.pdfMake\n    this.title = 'Wartung.pdf'\n\n    locals.url = ''\n    locals.blob = null\n\n    locals.urlWip = ''\n    locals.blobWip = ''\n\n    locals.showWip = packages.window.location.origin?.includes('bizpin-dev.bizpin.de')\n  }\n\n\n\n  async generatePdf() {\n    const widths = ['*', 'auto', 'auto']\n    const headers = [\n      [\n        {\n          text: 'Titel',\n          bold: true,\n          color: '#666',\n        },\n        {\n          text: 'Zustand',\n          bold: true,\n          color: '#666',\n        },\n        {\n          text: 'Bemerkung',\n          bold: true,\n          color: '#666',\n        }\n      ]\n    ]\n    const body = []\n\n    const wartung = params.document\n    if (!(wartung?.f.id === 'c211ffaa-14f8-4439-9126-f42f65ac4424')) {\n      throw new Error('Provide params.document with formId c211ffaa-14f8-4439-9126-f42f65ac4424 (Wartung)')\n    }\n\n    const wartungsplan = await Aeppic.findOne(`p:${wartung.id} f.id:522ca40d-810b-4021-835f-beeace3af7fa`)\n    \n    const anlagen = (await Aeppic.getAll(wartungsplan.data.anlagen)).filter(d => !!d)\n    const anlagenteile = (await Promise.all(anlagen.map(anlage => Aeppic.getAll(anlage.data.anlagenteile)))).filter(d => !!d).flat()\n    const arbeiten = (await Promise.all(anlagenteile.map(teil => Aeppic.getAll(teil.data.arbeiten)))).filter(d => !!d).flat()\n    const labelsOfIo = (await Aeppic.getForm(arbeiten[0].f.id)).getField('io').settings.options\n\n    const [ firma, objekt ] = await Aeppic.getAll([wartung.data.firma, wartung.data.objekt])\n\n    this.title = `${objekt.data.name} - ${wartungsplan.data.name} - ${firma.data.name} - ${Aeppic.DateTime.fromISO(wartung.created.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}`\n\n// ${Aeppic.DateTime.fromISO(wartung.created.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}\n// ${Aeppic.DateTime.fromISO(wartung.modified.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}\n\n    for (const arbeit of arbeiten) {\n      const eintrag = await Aeppic.get(arbeit.data.eintrag)\n      const readableIo = labelsOfIo.find(label => label.value === arbeit.data.io)?.display || arbeit.data.io\n      const ioColor = arbeit.data.io === 0 ? 'black' : arbeit.data.io === 1 ? 'red' : 'green'\n\n      body.push([\n        eintrag?.data.name,\n        {\n          text: readableIo,\n          color: ioColor\n        },\n        arbeit.data.bemerkungen\n      ])\n    }\n\n    const tableDefinition = {\n      widths,\n      body: [...headers, ...body]\n    }\n\n    const docDefinition = this._createDocDefinition(tableDefinition)\n\n    const { url, blob } = await this._renderPdf(docDefinition, { title: this.title })\n\n    console.log(url, blob)\n\n    locals.url = url\n    locals.blob = blob\n\n    await Aeppic.nextRenderPass()\n\n    $refs.downloadLink.click()\n    // $refs.dialog.show()\n  }\n\n  _createDocDefinition(tableDefinition) {\n    const docDefinition = {\n      info: {\n        title: this.title\n      },\n      pageSize: 'A4',\n      pageOrientation: 'portrait',\n      pageMargins: [40, 70, 40, 60], \n      header: [\n        // {\n        //   margin: [10, 20],\n        //   image: 'companyLogo',\n        //   fit: [200, 40],\n        //   alignment: 'right',\n        // },\n        {\n          fontSize: 10,\n          text: this.title,\n          margin: [40, 30],\n          alignment: 'left',\n          bold: true\n        },\n      ],\n      footer: {\n        margin: [0, 10],\n        style: 'footer',\n        alignment: 'center',\n        columns: ['', '', 'Erstellt: ' + DateTime.local().setLocale('de-de').toLocaleString(DateTime.DATETIME_MED)]\n      },\n      content: [\n        {\n          margin: [0, 0, 0, 0],\n          style: 'header',\n          text: this.title,\n        },\n        // {\n        //   ul: events.map(e => `${e.data.start} ${e.data.name}`)\n        // },\n        {\n          margin: [10, 10],\n          alignment: 'left',\n          layout: 'lightHorizontalLines',\n          table: tableDefinition\n        },\n      ],\n      defaultStyle: {\n        font: 'Roboto',\n        fontSize: 10,\n      },\n      styles: {\n        header: {\n          fontSize: 13,\n          bold: true,\n        },\n        tableHeader: {\n          bold: true,\n          fillColor: '#ededed'\n        },\n        footer: {\n          fontSize: 8,\n        },\n      },\n      // images: {\n      //   companyLogo: this.settings.unternehmensLogoUrl\n      // }\n    }\n\n    return docDefinition\n  }\n\n  async generatePdfWip() {\n    const widths = ['*', 'auto', 'auto']\n    const headers = [\n      [\n        {\n          text: 'Titel',\n          bold: true,\n          color: '#666',\n        },\n        {\n          text: 'Zustand',\n          bold: true,\n          color: '#666',\n        },\n        {\n          text: 'Bemerkung',\n          bold: true,\n          color: '#666',\n        }\n      ]\n    ]\n    const body = []\n\n    const wartung = params.document\n    if (!(wartung?.f.id === 'c211ffaa-14f8-4439-9126-f42f65ac4424')) {\n      throw new Error('Provide params.document with formId c211ffaa-14f8-4439-9126-f42f65ac4424 (Wartung)')\n    }\n\n    const wartungsplan = await Aeppic.findOne(`p:${wartung.id} f.id:522ca40d-810b-4021-835f-beeace3af7fa`)\n    \n    \n    const [ firma, objekt ] = await Aeppic.getAll([wartung.data.firma, wartung.data.objekt])\n    \n    this.title = `${objekt.data.name} - ${wartungsplan.data.name} - ${firma.data.name} - ${Aeppic.DateTime.fromISO(wartung.created.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}`\n    \n    // ${Aeppic.DateTime.fromISO(wartung.created.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}\n    // ${Aeppic.DateTime.fromISO(wartung.modified.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}\n    \n    const anlagen = (await Aeppic.getAll(wartungsplan.data.anlagen)).filter(d => !!d)\n\n    for (const anlage of anlagen) {\n      const anlagenteile = (await Aeppic.getAll(anlage.data.anlagenteile)).filter(d => !!d)\n      const allArbeiten = (await Promise.all(anlagenteile.map(teil => Aeppic.getAll(teil.data.arbeiten)))).filter(d => !!d).flat()\n\n      const todo = allArbeiten.filter(arbeit => arbeit.data.io === 0)\n      const error = allArbeiten.filter(arbeit => arbeit.data.io === 1)\n      const rest = allArbeiten.filter(arbeit => arbeit.data.io === 2)\n\n      body.push(['', '', ''])\n      body.push([\n        {\n          text: [anlage.data.nummer, anlage.data.name].join(' '),\n          bold: true,\n        },\n        {\n          text: `Todo: ${todo.length} / Fehler: ${error.length} / In Ordnung: ${rest.length}`,\n          colSpan: 2,\n        }\n      ])\n\n\n      for (const anlagenteil of anlagenteile) {\n        const anlagenteilEintrag = await Aeppic.get(anlagenteil.data.eintrag)\n\n        const arbeiten = (await Aeppic.getAll(anlagenteil.data.arbeiten)).filter(d => !!d)\n        const labelsOfIo = (await Aeppic.getForm(arbeiten[0].f.id)).getField('io').settings.options\n\n        const todo = arbeiten.filter(arbeit => arbeit.data.io === 0)\n        const error = arbeiten.filter(arbeit => arbeit.data.io === 1)\n        const rest = arbeiten.filter(arbeit => arbeit.data.io === 2)\n\n        body.push([\n          {\n            text: anlagenteilEintrag?.data.name,\n            bold: true,\n            margin: [10, 0, 0, 0]\n          },\n          '',\n          // `Todo: ${todo.length} / Fehler: ${error.length} / In Ordnung: ${rest.length}`,\n          '',\n          // {\n            //   text: readableIo,\n            //   color: ioColor\n            // },\n          ])\n\n\n        for (const arbeit of arbeiten) {\n          const eintrag = await Aeppic.get(arbeit.data.eintrag)\n          const readableIo = labelsOfIo.find(label => label.value === arbeit.data.io)?.display || arbeit.data.io\n          const ioColor = arbeit.data.io === 0 ? 'black' : arbeit.data.io === 1 ? 'red' : 'green'\n    \n          // console.log(eintrag, arbeit)\n          body.push([\n            {\n              text: eintrag?.data.name,\n              margin: [20, 0, 0, 0]\n            },\n            {\n              text: readableIo,\n              color: ioColor\n            },\n            arbeit.data.bemerkungen\n          ])\n\n          const erfassungen = await Aeppic.getAll(arbeit.data.erfassungen)\n\n          const erfassungenAsText = (await Promise.all(erfassungen.map(async (erfassung) => {\n            const erfassungsForm = await Aeppic.getFormForDocument(erfassung)\n\n            const values = []\n\n            for (const field in erfassung.data) {\n              const value = erfassung.data[field]\n\n              if (!value) {\n                continue\n              }\n\n              const fieldName = erfassungsForm.getPlaceholder(field)?.label || field\n\n              values.push(`${fieldName}: ${value}`)\n            }\n\n            return values.join('\\n')\n          }))).join('\\n')\n\n          console.log(erfassungen, erfassungenAsText)\n\n          if (erfassungen.length) {\n            body.push([\n              {\n                text: 'Erfassungen',\n                margin: [30, 0, 0, 0]\n              },\n              {\n                text: erfassungenAsText,\n                colSpan: 2,\n              },\n            ])\n          }\n        }\n      }\n    }\n\n    const tableDefinition = {\n      widths,\n      body: [...headers, ...body]\n    }\n\n    const docDefinition = this._createDocDefinition(tableDefinition)\n\n    const { url, blob } = await this._renderPdf(docDefinition, { title: this.title })\n\n    console.log(url, blob)\n\n    locals.urlWip = url\n    locals.blobWip = blob\n\n    await Aeppic.nextRenderPass()\n\n    $refs.downloadLinkWip.click()\n    // $refs.dialog.show()\n  }\n\n  _createDocDefinition(tableDefinition) {\n    const docDefinition = {\n      info: {\n        title: this.title\n      },\n      pageSize: 'A4',\n      pageOrientation: 'portrait',\n      pageMargins: [40, 70, 40, 60], \n      header: [\n        // {\n        //   margin: [10, 20],\n        //   image: 'companyLogo',\n        //   fit: [200, 40],\n        //   alignment: 'right',\n        // },\n        {\n          fontSize: 10,\n          text: this.title,\n          margin: [40, 30],\n          alignment: 'left',\n          bold: true\n        },\n      ],\n      footer: {\n        margin: [0, 10],\n        style: 'footer',\n        alignment: 'center',\n        columns: ['', '', 'Erstellt: ' + DateTime.local().setLocale('de-de').toLocaleString(DateTime.DATETIME_MED)]\n      },\n      content: [\n        {\n          margin: [0, 0, 0, 0],\n          style: 'header',\n          text: this.title,\n        },\n        // {\n        //   ul: events.map(e => `${e.data.start} ${e.data.name}`)\n        // },\n        {\n          margin: [10, 10],\n          alignment: 'left',\n          layout: 'lightHorizontalLines',\n          table: tableDefinition\n        },\n      ],\n      defaultStyle: {\n        font: 'Roboto',\n        fontSize: 10,\n      },\n      styles: {\n        header: {\n          fontSize: 13,\n          bold: true,\n        },\n        tableHeader: {\n          bold: true,\n          fillColor: '#ededed'\n        },\n        footer: {\n          fontSize: 8,\n        },\n      },\n      // images: {\n      //   companyLogo: this.settings.unternehmensLogoUrl\n      // }\n    }\n\n    return docDefinition\n  }\n\n  async _renderPdf(docDefinition, options) {\n    const pdf = await this.pdfMake.createPdf(docDefinition, null, this.fonts)\n    return this._convertPdf(pdf)\n  }\n\n  _convertPdf(pdfData) {\n    return new Promise((resolve) => {\n      pdfData.getBlob((blob) => {\n        const objectUrl = URL.createObjectURL(blob)\n        resolve({ url: objectUrl, blob })\n        // $emit('file-blob', { blob, title: options.title })\n      })\n    })\n  }\n}","packages":[{"id":"6d4d5df8-bc1e-42ae-aa48-f0cfdc009ff7","v":"b0c5aef3a774d0f1","text":"pdfmake"},{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"d4ce6dec568c3dc1","text":"Window"}]},"locks":[],"created":{"at":"2022-09-05T08:06:27+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2024-05-23T14:57:42+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1716476262206,"ct":1716468807590,"a_depth":3,"a":["apps","d4581623-f542-4ade-86be-8b3ecec56f0e","5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","594e6b26-7310-4d00-aad9-2a577ccab542"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"aac11114-46bb-4f29-a280-51d889a8aaca","text":"Export Wartung as PDF","v":"24e668d8fb35e875"},"created":{"at":"2025-08-06T15:38:21+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1754494701298,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Wartungsdurchfuehrung: '1b166603-d0f3-4f16-98c4-0534afbd6f5a',\n      Wartungsteil: 'f5850e39-8581-4b62-8cfe-f4fa95009a1a',\n    }\n\n    // TODO: include Fonts from /webroot/assets\n    const vfs = {\n      'Roboto-Italic.ttf':\n        'AAEAAAARAQAABAAQR0RFRqcXo6wAAdlAAAACWEdQT1Oieg6RAAHbmAAAeKRHU1VCzzL7wgACVDwAABX6T1MvMpeDsUwAAAGYAAAAYGNtYXBnX+zQAAAWoAAABopjdnQgO/gmfQAAL4QAAAD+ZnBnbagFhDIAAB0sAAAPhmdhc3AACAAZAAHZNAAAAAxnbHlm6FQv1gAAOtwAAZp6aGVhZAuUdJ8AAAEcAAAANmhoZWEMnBKlAAABVAAAACRobXR4Wk/dxQAAAfgAABSobG9jYbf2UKkAADCEAAAKVm1heHAI2hDGAAABeAAAACBuYW1lVq+GTAAB1VgAAAO8cG9zdP9hAGQAAdkUAAAAIHByZXB5WM7TAAAstAAAAs4AAQAAAAMC0WBmjG9fDzz1ABsIAAAAAADE8BEuAAAAAOP3FVr6N/3VCUMIcwACAAkAAgAAAAAAAAABAAAHbP4MAAAJA/o3/mwJQwgAAbMAAAAAAAAAAAAAAAAFKgABAAAFKgCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAAQAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA5YAZAAAAAAAAAAAAfcAAAH3AAACAABEAnwAyQTHAFIEXABJBa8AugTUADkBWwCsAqgAbQK0/5ADWABrBGcATAGH/48CJQAaAgwANAM0/5AEXABqBFwA+gRcABgEXAA1BFwABQRcAHIEXABtBFwAnQRcAEAEXACUAesAKQGu/5sD8gBCBEIAcAQPADsDqwClBvgAQQUQ/68E1gA7BQ0AcAUYADsEaQA7BEoAOwVJAHQFiQA7AhwASQRIAAcE3gA7BC4AOwbGADsFiQA7BVcAcwTlADsFVwBrBMgAOwScACkEoQCpBQgAYwTxAKUG4gDDBN3/1ASpAKgEpv/sAg8AAAMwAMACD/97Az4ATwOA/4ECZgDQBDkAMQRcAB8EEABGBGAARwQdAEUCswB1BFwAAwRGACAB4wAvAdv/EwPvACAB4wAvBs4AHgRJACAEbQBGBFz/1wRpAEYCoQAgBAEALgKKAEMERwBbA8IAbgXVAIAD2v/FA6z/qgPa/+4CoAA3AeUAIgKg/40FRwBpAeX/8QQ/AFAEg//zBYkAEgQUAEMB3f/4BML/2gM/ANoGGQBeA3kAwwOuAFYETACBBhoAXQOPAPgC5gDoBCYAJgLiAF0C4gBvAm8A1QRm/+YDzAB4AgcApQHt/8gC4gDgA4gAvwOtABEFuQC6Bg8AtQYTAJ4Drf/RB0H/gwQkACgFVwAgBJYAOQSdAB8GjgATBI0AXARvAEQEZgA6BHn/4ASjAEYFcAA2AewALwRSAC4ELgAjAhkAJAVgADUEZgAlB2YAVQcMAEcB7QA0BV0AUgKl/0cFVQBmBHAAQwVlAGMEzQBbAfX/CQQYAD8DpwEYA3MBKAOZAPgDUQEHAeMBDgKZAQECGv+uA6kA3gLlAMMCSP/pAAD9agAA/eoAAP0LAAD99AAA/NsAAPy6Af4BIwPtAPQCEQClBFEARAV5/7IFSABnBRf/xARvAAwFiQBEBG//2wWPAFYFXgCFBSkACgRjAEgEmf/xA+QAhQRmAEUEMAApBAUAigRmACUEawB1AoQAhARN/7gDzgBABKAAYARm/90ELQBKBGUASAQMAIcEPABoBXgAQAVvAE4GZABnBH4AUgQiAGcGGABoBdIAogU8AHMIUP/NCGMARAZRALQFiABCBO4ANgXW/4wHC/+rBJwAJQWJAEQFf//LBOEAlAX+AFsFrQBBBVAAywdNAEIHhABCBeMAigbAAEQE3gA2BTwAdgb6AEkE8f/pBEsARwRwADEDQgAuBK//jQXy/6cD8QAgBHsAMAQyADAEfP/IBcEAMQR6ADAEewAwA7sAYAWhAEkEmgAwBDkAeQZHADAGbAAlBNEAVgYQADEENwAxBC0AMgZWADEEQv+/BEYAIAQtAE4Glf/DBq8AMARwACAEewAwBtMAbgX9AE8ENgAvBvUASgXLAC0Erv+6BCb/ogbWAFsF3gBPBp4AJgW1ACoIwABJB5UALwQE/80Dvf/JBUgAZwRpAEME5ACtA+UAhQVIAGcEZgBDBssAdAX1AFIG0wBuBf0ATwUKAGkEJwBMBNgAQAAA/OcAAP0KAAD+FgAA/jsAAPo3AAD6TgXlAEQE0QAwBDYALwT0ADsEZ//XBEIANQN2ACUEwABEA+cAJQdx/6sGOv+nBXkARASeADAE4wA2BFwALgZaALwFWgB2BdsAOwS+ADAHkwA7BYgAJQf8AEIGvwAlBcEAawSvAFwE+//UBBT/xQb2AKwFNABXBZoAywR9AHkFRgDKBEkAlAVGABwGAACIBJoABATjADYEOQAuBdr/ywTT/8gFhwBEBGYAJQXtADsE0AAwByEAOwYYADEFXQBSBIQAPASE//0Env/5A5n/6QUQ/9QEKf/FBNEALgZiADEGsABIBiYArQUEAGgEKQCwA+kAoAeG/+AGRP/aB74APAZvACME0QBlA/4ATQWCAJsE+gB9BTwAaAXe/8sE1//IBQMAIgMJAPMD/wAAB/QAAAP/AAAH9AAAAq4AAAIEAAABXAAABGYAAAIpAAABnwAAAQIAAADVAAAAAAAAAi0AGgItABoFIgCmBhkAmAOK/14BjgCwAY4AiQGM/5cBjgDSAsgAuALQAJUCrf+UBEgAdwRt//YCngChA7EAOAU7ADgBdABSB28AlgJVAF0CVQAEA4f/8ALiAI8C4gBkAuIAigLiAJAC4gCiAuIAewLiAKoDHwCIAuEAiQLhAHMB4gCPAeIAPgNHAH4C4v/cAuIALQLi/6sC4v+8AuL/sgLi/9gC4v/eAuL/8ALi/8kC4v/4Ayn/3ALr/90C6//HAeL/6AHi/50Eg//zBiUACgZfADkIPwA7Bb4ACQX8AB8EXABRBa0AQwQDAEoEUgALBR//8gUm/+UFuwDMA7EASwf7ADUE2wDrBPEAfwYBALYGrACSBqUAkAZDAL4EbQBNBWQAJASL/60EcACrBKAAQQf7AEsB/f8VBF8AMwRCAHAD/P/TBBkAGAPpAEICRAB3AnwAcQH1/+QE1wB1BE0AWQRoAHUGoAB1BqAAdQTIAHUGaAAoAAAAAAf1/6sINQBcAtj/6gLYAGwC2AAcA/EAaQPxACcD8QBwA/AASwPxAEoD8f/3A/EAFwPx//0D8QC9A/EARgQD/90ECwB1BDP/twXmAJQERgB5BFsAQgQHAG4EAAASBCkAHQSYAEYEOwAeBJgATAS9AB4F1AAeA5kAHgQ0AB4Dsv/2AdoAKwS+AB4EiABMA68AHgQAABIEFAAGA4UAGQOTAB4ERv+wBJgATARG/7ADbv/TBKoAHgPS/9YFPgBSBPAAfQTNAA4FSQBtBFoASAcK/8MHGAAeBUoAbgSpAB4EOQAgBP3/iQXd/68EHwASBMYAIAQtAB8EnP/EBAAAWgUBAB4ESABWBiAAHgZ5AB4E9gBRBc0AIAQuACAEWgAgBkUAHgRk/+AD8//6Bhj/rwRXAB8E4wAfBQ8AagWXAFAERwB1BIT/twYxAG0ESABVBEgAHgWYAC4EpgBABB8AEgScAEYEFAAAA8YAHwfkAB4Eh//eAtj/+wLY//EC2AAXAtgAHQLYAC8C2AAIAtgANwN7AJMCoAELA8gAHgQa/5kEnwBIBSMARAT9AEQD9QAmBRUARAPwACYEXQAeBFoASAQwAB4EY/+mAe8A/AOJARIAAP0qA9IA0wPWACID8ADOA9cAzQOTAB4DhAESA4MBEwLiAI8C4gBkAuIAigLiAJAC4gCiAuIAewLiAKoFWACABYMAgQVoAEQFswCDBbYAgwO4ALwEXwA5BDf/gQSq/9MESf/VBA4AKwOJARQBhv++BnEATASWAD4B7f8PBGb/rARm/+MEZv+4BGYALARmAFYEZgAkBGYAZgRmABsEZgBABGYBDQIA/wkB//8JAfYALwH2/3gB9gAvBDAAHgTaAGQEAQBiBFwAHwQTAEQEcABDBGkAIwR8AEIEa//XBHkAQgQdAEYEXAA1BE7/vwNoAKkEsQAsA5n/6QYK/5oD2gAeBJj/9AS9AB4EvQAeAfcAAAIlABoFNgAvBTYALwRkAD4EoQCpAor/9AUQ/68FEP+vBRD/rwUQ/68FEP+vBRD/rwUQ/68FDQBwBGkAOwRpADsEaQA7BGkAOwIcAEkCHABJAhwASQIcAEkFiQA7BVcAcwVXAHMFVwBzBVcAcwVXAHMFCABjBQgAYwUIAGMFCABjBKkAqAQ5ADEEOQAxBDkAMQQ5ADEEOQAxBDkAMQQ5ADEEEABGBB0ARQQdAEUEHQBFBB0ARQHsAC8B7AAvAewALwHsAC8ESQAgBG0ARgRtAEYEbQBGBG0ARgRtAEYERwBbBEcAWwRHAFsERwBbA6z/qgOs/6oFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFDQBwBBAARgUNAHAEEABGBQ0AcAQQAEYFDQBwBBAARgUYADsE9gBHBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQVJAHQEXAADBUkAdARcAAMFSQB0BFwAAwVJAHQEXAADBYkAOwRGACACHABJAewAEQIcAEkB7AAuAhwASQHsAC8CHP+LAeP/bQIcAEkGZABJA74ALwRIAAcB9f8JBN4AOwPvACAELgA7AeMALwQuADsB4/+iBC4AOwJ5AC8ELgA7Ar8ALwWJADsESQAgBYkAOwRJACAFiQA7BEkAIARJACAFVwBzBG0ARgVXAHMEbQBGBVcAcwRtAEYEyAA7AqEAIATIADsCof+fBMgAOwKhACAEnAApBAEALgScACkEAQAuBJwAKQQBAC4EnAApBAEALgScACkEAQAuBKEAqQKKAEMEoQCpAooAQwShAKkCsgBDBQgAYwRHAFsFCABjBEcAWwUIAGMERwBbBQgAYwRHAFsFCABjBEcAWwUIAGMERwBbBuIAwwXVAIAEqQCoA6z/qgSpAKgEpv/sA9r/7gSm/+wD2v/uBKb/7APa/+4HQf+DBo4AEwVXACAEZgA6BF3/rwRd/68EBwBuBGP/pgRj/6YEY/+mBGP/pgRj/6YEY/+mBGP/pgRaAEgDyAAeA8gAHgPIAB4DyAAeAdoAKwHaACsB2gArAdoAKwS9AB4EmABMBJgATASYAEwEmABMBJgATARbAEIEWwBCBFsAQgRbAEIECwB1BGP/pgRj/6YEY/+mBFoASARaAEgEWgBIBFoASARdAB4DyAAeA8gAHgPIAB4DyAAeA8gAHgSIAEwEiABMBIgATASIAEwEvgAeAdoADgHaACsB2gArAeT/ggHaACsDsv/2BDQAHgOZAB4DmQAeA5kAHgOZAB4EvQAeBL0AHgS9AB4EmABMBJgATASYAEwEKQAdBCkAHQQpAB0EAAASBAAAEgQAABIEAAASBAcAbgQHAG4EBwBuBFsAQgRbAEIEWwBCBFsAQgRbAEIEWwBCBeYAlAQLAHUECwB1BAP/3QQD/90EA//dBRD/rwTNAAMF7QARAoAAFwVrAGsFDf/tBT0AHgKEACAFEP+vBNYAOwRpADsEpv/sBYkAOwIcAEkE3gA7BsYAOwWJADsFVwBzBOUAOwShAKkEqQCoBN3/1AIcAEkEqQCoBGMASAQwACkEZgAlAoQAhAQ8AGgEUgAuBG0ARgRm/+YDwgBuBE7/vwKEAGUEPABoBG0ARgQ8AGgGZABnBGkAOwRRAEQEnAApAhwASQIcAEkESAAHBP0ARATeADsE4QCUBRD/rwTWADsEUQBEBGkAOwWJAEQGxgA7BYkAOwVXAHMFiQBEBOUAOwUNAHAEoQCpBN3/1AQ5ADEEHQBFBHsAMARtAEYEXP/XBBAARgOs/6oD2v/FBB0ARQNCAC4EAQAuAeMALwHsAC8B2/8TBDIAMAOs/6oG4gDDBdUAgAbiAMMF1QCABuIAwwXVAIAEqQCoA6z/qgFbAKwCfADJBAAARAH1/wkBjgCJBsYAOwbOAB4FEP+vBDkAMQRpADsFiQBEBB0ARQR7ADAFXgCFBW8ATgTkAK0D5QCFCBkARgkDAHMEnAAlA/EAIAUNAHAEEABGBKkAqAPkAIUCHABJBwv/qwXy/6cCHABJBRD/rwQ5ADEFEP+vBDkAMQdB/4MGjgATBGkAOwQdAEUFXQBSBBgAPwQYAD8HC/+rBfL/pwScACUD8QAgBYkARAR7ADAFiQBEBHsAMAVXAHMEbQBGBUgAZwRpAEMFSABnBGkAQwU8AHYELQAyBOEAlAOs/6oE4QCUA6z/qgThAJQDrP+qBVAAywQ5AHkGwABEBhAAMQRgAEcFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEFEP+vBDkAMQUQ/68EOQAxBRD/rwQ5ADEEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFBGkAOwQdAEUEaQA7BB0ARQRpADsEHQBFAhwASQHsAC8CHAANAeP/8AVXAHMEbQBGBVcAcwRtAEYFVwBzBG0ARgVXAHMEbQBGBVcAcwRtAEYFVwBzBG0ARgVXAHMEbQBGBVUAZgRwAEMFVQBmBHAAQwVVAGYEcABDBVUAZgRwAEMFVQBmBHAAQwUIAGMERwBbBQgAYwRHAFsFZQBjBM0AWwVlAGMEzQBbBWUAYwTNAFsFZQBjBM0AWwVlAGMEzQBbBKkAqAOs/6oEqQCoA6z/qgSpAKgDrP+qBH4AAAShAKkDuwBgBVAAywQ5AHkEUQBEA0IALgYAAIgEmgAEBEYAIATeACwE3gAsBFEAEQNC/+cFEQBYBAkAOgSpAKgD5ABeBN3/1APa/8UEMAApBEr/1wYZAJgEXAAYBFwANQRcAAUEXAByBHAAgQSEAFQEcACUBIQAfgVJAHQEXAADBYkAOwRJACAFEP+vBDkAMQRpADsEHQBFAhz/4AHs/40FVwBzBG0ARgTIADsCoQAgBQgAYwRHAFsEhv+xBNYAOwRcAB8FGAA7BGAARwUYADsEYABH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ADIANQBSAG8AYgBvAHQAbwAtAEkAdABhAGwAaQBjAFIAbwBiAG8AdABvACAAaQBzACAAYQAgAHQAcgBhAGQAZQBtAGEAcgBrACAAbwBmACAARwBvAG8AZwBsAGUALgBHAG8AbwBnAGwAZQBDAGgAcgBpAHMAdABpAGEAbgAgAFIAbwBiAGUAcgB0AHMAbwBuAEcAbwBvAGcAbABlAC4AYwBvAG0AVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgAgAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAaQBzACAAYQB2AGEAaQBsAGEAYgBsAGUAIAB3AGkAdABoACAAYQAgAEYAQQBRACAAYQB0ADoAIABoAHQAdABwAHMAOgAvAC8AbwBwAGUAbgBmAG8AbgB0AGwAaQBjAGUAbgBzAGUALgBvAHIAZwBoAHQAdABwAHMAOgAvAC8AbwBwAGUAbgBmAG8AbgB0AGwAaQBjAGUAbgBzAGUALgBvAHIAZwADAAD/9AAA/2oAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAIAAj//wAPAAEAAgAOAAAAAAAAAigAAgBZACUAPgABAEQAXgABAGoAagABAHAAcAABAHUAdQABAIEAgQABAIMAgwABAIYAhgABAIkAiQABAIsAlgABAJgAnwABAKEAowABAKUApgABAKgArQADALEAsQABALoAuwABAL8AvwABAMEAwQABAMMAxAABAMcAxwABAMsAywABAM0AzgABANAA0QABANMA0wABANoA3gABAOEA4QABAOUA5QABAOcA6QABAOsA+wABAP0A/QABAP8BAQABAQMBAwABAQgBCQABARYBGgABARwBHAABASABIgABASQBJwADASoBKwABATMBNAABATYBNgABATsBPAABAUEBRAABAUcBSAABAUsBTQABAVEBUQABAVQBWAABAV0BXgABAWIBYgABAWQBZAABAWgBaAABAWoBbAABAW4BbgABAXABcAABAdYB3AACAe0CAQABAgUCBQABAg4CDgABAhACEAABAhcCGQABAhsCHAABAh4CHgABAiICIgABAiQCJgABAiwCLAABAjECMwABAjUCNQABAkMCQwABAkYCRgABAkgCSAABAksCTgABAnoCfgABAo4CkwABApYC/gABAwEDwAABA8IDwgABA8QDzgABA9AD2QABA9sD9gABA/oD+gABA/wEAwABBAUEBwABBAoEDgABBBAEmwABBJ4EnwABBKEEogABBKQEpwABBLEFDQABBQ8FGQABBRwFKQABAAEAAwAAABAAAAAWAAAAIAABAAEArQACAAEAqACsAAAAAgACAKgArAAAASQBJwAFAAEAAAAcADYACgAIAFgAaAByAHwAhgBgAJAAmgAEREZMVACSY3lybACWZ3JlawCabGF0bgCeAAdjcHNwAIhrZXJuAJprZXJuAI5rZXJuAKJrZXJuAKptYXJrAJRta21rALIAAQAAAAEAjgAEAAAAAQCQAAIACAACAYgIXgACAAgAAgEiBIQAAgAIAAICiBBSAAIACAACAI4A1gAGABAAAQBsAAAABgAQAAEAbgACAIAAAACKAAAAlAAAAJ4AAAAAAAEAAAAAAAEABAAAAAEABQAAAAIABAADAAAAAgAEAAEAAAACAAQAAgAAAAIABgAHAAEuVAAFACQASAABGWwq4AACGbxO8gABGTIZMgABGTgZLgABGW4ZMgABGX4ZSAABGVgABAAAAAMZMBnCGTYAAP//AAQAAAACAAUABgAA//8ABAAAAAMABQAGAAD//wAEAAAABAAFAAYAAP//AAQAAAABAAUABgACGaQABAAAGeocDgAEAAUAAP+VAAAAAP+IAAD/VgAAAAAAAAAAAAAAAAAAAAAAAP+IAAAAAAAAAAEcjAAEAAAAKRoSGiAZ4BtuGm4aPBqaGkoahBrsGxIZlBpcGZodOBmsHZocOhtAGaAZph4AGeoasBqaGjwc4hqaGfQZ/ho8Gi4boBziGsoc4hmsGggaXBoIGjwAATE2AAQAAACFHtgenh4iHigeZh+cIJg5RDNWN3QpEh8UNGwvRCBmJaYfFB8UIbIfFB8UHxQsDCSqHxQgPCUoI7oe8ihoIvoeUifKHi4gEiQwMkQewiF0JigiTh/CHsIipB/oIfwgzh/CITofWB6CHkggEh7CJrIeUiBmHi4hBCEEIQQfFCBmHi4fFB8U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AA4CTgAOArX/3QMq/9UDLP/VAy7/1QM8/+wDPv/dA0D/3QNOAA4DTwAOA1AADgNRAA4DUgAOA1MADgNUAA4DaQAOA2oADgNrAA4D7//sA/H/7APz/+wD9f/dBIz/3QSO/90EkP/dBNv/1QTe/+QE4P/kBOL/7ABbAAb/ygAL/8oA0v/SANb/0gDa//QA3v/tAOH/4QDm/9QA7P/RAO7/7wDw/9EA8f/RAPP/0QD0/9EA9f/RAPb/yQD4/9EA+v/RAPv/0QD+/9EBAP/RAQX/0QEJ/+UBGf/UARr/5gEg/+MBK//RATP/9AE0/+8BNv/RATn/0gE6/8QBPP/RAT7/0QFD//QBRP/vAUX/0gFH/+EBSf/hAVP/0QFV/9EBV//RAVz/0QFd//QBXv/vAWL/1AFj//UBZP/nAWz/0gFt/8kBhf/KAYb/ygGI/8oBif/KAYr/ygPR/+0D3f/SA97/9APh/9ED4//RA+X/5gPm/+8D6P/RA+3/0QPu/+YD9//KA/j/ygP7/8oEA//RBAb/1AQH/+YEDv/TBA//5gQR//QEEv/vBB//9AQg/+8EJP/RBCb/0QQv/+0EMP/mBDH/7QQy/+YEM//tBDT/5gQ1/+EEOP/RBJP/0gSV/+EEmP/RBKL/0wApAEf/7ABI/+wASf/sAEv/7ABV/+wAlP/sAJn/7AK9/+wCvv/sAr//7ALA/+wCwf/sAtn/7ALb/+wC3f/sAt//7ALh/+wC4//sAuX/7ALn/+wC6f/sAuv/7ALt/+wC7//sAvH/7ALz/+wEU//sBFX/7ARX/+wEWf/sBFv/7ARd/+wEX//sBGH/7AR1/+wEd//sBHn/7AR9/+wEuP/sBMX/7ATH/+wANgAGABAACwAQAA0AFABBABIAR//oAEj/6ABJ/+gAS//oAFX/6ABhABMAlP/oAJn/6AGFABABhgAQAYgAEAGJABABigAQAr3/6AK+/+gCv//oAsD/6ALB/+gC2f/oAtv/6ALd/+gC3//oAuH/6ALj/+gC5f/oAuf/6ALp/+gC6//oAu3/6ALv/+gC8f/oAvP/6AP3ABAD+AAQA/sAEART/+gEVf/oBFf/6ARZ/+gEW//oBF3/6ARf/+gEYf/oBHX/6AR3/+gEef/oBH3/6AS4/+gExf/oBMf/6ABKAEf/xQBI/8UASf/FAEv/xQBMACAATwAgAFAAIABT/4AAVf/FAFf/kABbAAsAlP/FAJn/xQHc/5ACvf/FAr7/xQK//8UCwP/FAsH/xQLH/4ACyP+AAsn/gALK/4ACy/+AAtn/xQLb/8UC3f/FAt//xQLh/8UC4//FAuX/xQLn/8UC6f/FAuv/xQLt/8UC7//FAvH/xQLz/8UDFf+AAxf/gAMZ/4ADIf+QAyP/kAMl/5ADJ/+QAyn/kART/8UEVf/FBFf/xQRZ/8UEW//FBF3/xQRf/8UEYf/FBGf/gARp/4AEa/+ABG3/gARv/4AEcf+ABHP/gAR1/8UEd//FBHn/xQR7/4AEff/FBLj/xQS8/4AExf/FBMf/xQTJACAEywAgBM0AIATa/5AAAQD0AAQABgALAAwAJQAnACgAKQAqAC8AMAAzADQANQA2ADgAOgA7ADwAPQA+AD8ASQBKAEwATwBRAFIAUwBWAFgAWgBbAF0AXwCWAJ0AsgGFAYYBiAGJAYoB8wH1AfYB+AH7AgYCSwJOAmACYgJjApYClwKZApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqwCrQKuAq8CsAK1Ar4CvwLAAsECxgLHAsgCyQLKAssC0ALRAtIC1ALWAtgC2gLcAt4C4ALiAuMC5ALlAuYC5wLoAukC6gLrAvUDAwMFAwcDCQMLAw4DEAMSAxMDFAMVAxYDFwMYAxkDGwMdAx8DKgMsAy4DPAM+Az8DQANBA0MDRQNLA0wDTQNOA08DUANRA1IDUwNUA18DYANhA2IDYwNpA2oDawNwA4IDgwOEA4UDiQOKA4sDlAPvA/ED8wP1A/YD9wP4A/sD/QP+BDoEPAQ+BEAEQgREBEYESARKBEwETgRQBFIEUwRUBFUEVgRXBFgEWQRaBFsEXARdBF4EXwRgBGEEZgRnBGgEaQRqBGsEbARtBG4EbwRwBHEEcgRzBHsEjASNBI4EjwSQBJEEtAS1BLcEuwS8BL4ExATGBMkEygTMBM4E0QTTBNQE1QTYBNsE3gTfBOAE4QTiBOQAAQA1AAYACwCWALEAsgCzALQAvQDBAMcBhQGGAYgBiQGKAgYCBwIIA6IDowOkA6UDpgOnA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A7kDvAPAA8IDxgP3A/gD+wTmBOcE6wTuBPQE+QCnABD/FgAS/xYAJf9WAC7++AA4ABQARf/eAEf/6wBI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ANQA1AANANYA1gAKANoA2gAGAN0A3QANAN4A3gAOAOEA4QARAOwA7AABAO4A7gAHAPAA8QABAPIA8gASAPMA9QABAPcA9wACAPgA+AABAPkA+QAUAPoA+wABAP4A/gABAQABAAABAQMBAwACAQQBBAASAQUBBQABAQgBCAADAQ0BDQAQARcBFwADARgBGAATARkBGQAXARoBGgAFARsBGwADAR0BHQADAR4BHgACAR8BHwADASEBIQADASIBIgACASsBKwABATMBMwAGATQBNAAHATYBNgABATkBOQAKATwBPAABAT4BPgABAUEBQQADAUIBQgACAUMBQwAGAUQBRAAHAUUBRQAKAUcBRwARAUgBSAAUAVABUAANAVEBUQASAVMBUwABAVUBVQABAVcBVwABAVwBXAABAV0BXQAGAV4BXgAHAWABYQACAWYBZgANAWoBagADAWsBawACAW8BbwANAXABcAASAYIBgwALAYUBhgAEAYcBhwAIAYgBigAEAYsBiwAIAY8BkAAIAgYCBgAZAg8CDwAMAhACEAAJAhMCEwAMAhcCFwAPAigCKAAPAisCKwAMAiwCLAAJAi0CLQAWAi4CLgAPAi8CLwAMAjUCNQAJApUClQALA84DzgAcA9ED0QAOA9ID0gAQA9kD2QADA9wD3AADA90D3QAKA94D3gAGA98D3wAVA+AD4AACA+ED4QABA+ID4gATA+MD4wABA+QD5AACA+UD5QAFA+YD5gAHA+cD5wACA+gD6AABA+kD6QAdA+0D7QABA+4D7gAFA/cD+AAEA/sD+wAEBAIEAgACBAMEAwABBAYEBgAXBAcEBwAFBAgECAACBAkECQADBAwEDAADBA0EDQACBA4EDgAYBA8EDwAFBBEEEQAGBBIEEgAHBBQEFAAQBBUEFQAVBBYEFgAQBBcEFwAVBBsEGwACBB0EHgACBB8EHwAGBCAEIAAHBCQEJAABBCYEJgABBCcEJwADBCgEKAATBCkEKQADBCoEKgACBCsEKwADBCwELAATBC8ELwAOBDAEMAAFBDEEMQAOBDIEMgAFBDMEMwAOBDQENAAFBDUENQARBDYENgAUBDgEOAABBDkEOQACBJMEkwAKBJUElQARBJYElgAUBJgEmAABBKIEogAYBKgEqAALBQYFBgAaBQ0FDQAJBRAFEAAJBREFEQAMBRIFEgAPBRUFFQAJBRYFFgAWA1IoZCUWJZohICHyIfglsiEgKHwlLih8JNodACTmJcohLCNmJUYhDiEUJfol6CYSHX4mJCGqJjwk/icgJyYlmiZaGfQZcCZsJXAmhCECJpwkeia0Jrom2CbGJvAheiS8JMIksCS2JwghIChwJSIloBl2If4iBCW+JHQoiCU6GXwZgh0MJPIl1iSeI3IlUiFWIZ4mBiX0Jh4lUiYwIbYmSCUKI4QlZCE4JmYZiBmOJnglfCaQIUomqB4+I+oljibkJtIm/CGGJMgkziRKJG4nFB68IiIAABmUAAAiKAAAGZoAACYGJHQZoBmmKKwlUiDMINIZrCUuGbIZuCY8JP4mSCUKGb4ZxBnKGdAZ1hncGeIZ6CPSI8AocCPMJCwkICQ4JY4bvAAAIkYiUiSkAAAAACCiIK4gtCTUAAAguiDAIMYAAAAAAAAZ7gAAIOQAACHUAAAg6iDwJZQAABpyAAAZ9AAAGfoAACHmImoaAAAAAAAaBhoMAAAkhgAAGhIAABoYAAAaHgAAGiQAABoqAAAkqgAAGjAAABo2AAAh7CJ2GjwAABpCAAAaSBpOGlQAABpaAAAaYAAAJIAAABpmAAAabAAAJIwAABp+AAAacgAAGngAABsUAAAafgAAGoQAABqKAAAakAAAGpYAABqcAAAioAAAIqYAABqiAAAaqAAAGq4AABq0AAAauhrAGsYazBrSAAAa2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa3huYILoa5AAAAAAAAAAAAAAAAAAAAAAa6gAAAAAkkgAAJJgAAAAAAAAAAAAAAAAAAAAAAAAAABrwIkAAAAAAAAAAACWaGvYa/BsCJcoAABsIGw4bFBsaGyAhIBsmGywAAAAAKAooXigKKF4n2ifgGzIoUhs4Gz4nwiCEJ84n1Cg6J1YgJCA2G0QbSifCJ8gnvCg0JzgnPiewJ7Yf7h/0JzIngCduJ3QnXCdoJ/In+B+mH6AbUBtWJ54AAAAAJywbXAAAG2IAACfmJ+wbaAAAAAAbbht0AAAoCgAAG3oAABuAAAAbhgAAG4wAABuSG5gbngAAAAAoEBukG6obsAAAKKAnpBu2HX4mBiX0HtonyCf+KAQnkieYKJQnjBu8IZ4bvBvCKKwlUiisG8gorCVSH+4f9BvOKCgb1BvaJ7woNCfyJ/gnOCc+JbIhICWyISAl1iSeJpwkeiaoHj4b4CUWG+AlFiMGJRYb5iUWIhYlFhvsJRYoZCUWIfIb8iG8JS4hvCUuI0IlLiD2JS4b+CVGG/4lRhwEJUYhCCVGHAok/hwQJyYcECcmI4onJhwWJyYilCcmHBwmuhwcJrocIia6HCgmuiGMJLYjqCUiI6glIiMMJSIjxiUiIhwlIhwuJSIocCUiIf4cNCHIJTocOiU6I04lOiE+JTocQCVSHEYlUhxMJVIhUCVSHFIlChxYJWQcWCVkI5YlZBxeJWQimiVkHGQljhxkJY4caiWOHHAljiGSJG4i1iRuHHYlFhx8JSIjEiUWIx4lIihkJRYocCUiHIIh+ByIIgQcjiH4HJQiBByaIfgcoCIEHKYh+BysIgQcsiEgJb4kdBy4JS4cviU6Ii4lLiI0JTocxCUuHMolOih8JS4oiCU6HNAlLhzWJToc3CTmHOIk8hzoJOYc7iTyHPQk5hz6JPIdAB0GHQwk8h0SISwdGCSeHR4lRh0kJVIdKiVGHTAlUh02JUYdPCVSI2YdQiNyJVIdSCVGHU4hFB1UAAAl+h1aJgYdYB1mHX4dbCVSJhIdciYeHXgmEh1+Jh4lUiYSHX4mHiVSJPgk/iUEJQomPB2EJkgdih2QJP4dliUKJkglCh2cJyYdoiVkHagnJh2uJWQdtCcmHbolZB3AJXAdxiV8JmwdzCZ4HdId2CVwHd4lfB3kIQId6iFKHfAhAh32IUomhB38JpAeAiaEHggmkB4OHhQhAh4aIUomnB4gJqgeJiacHiwmqB4yHjgkeiaoHj4eRCa6Hkoljh5QJroeViWOHlwmuh5iJY4eaCa6Hm4ljh50JroeeiWOJrQmuiPqJY4egCF6HoYhhh6MJLYekiRuIKgkth6YISAenh68HqQhIB6qHrwesCEgHrYevB7CAAAeyAAAHs4AAB7UAAAe2ifIHtonyCfOJ9Qe4CeMHuAnjB7mJ4we7CeMHvInjB74J4wolCeMJ/4e/h8EJ6QfBCekHwonpCdKJ6QfECdoHxYnaB8cJ2gnYidoHyInPiguKDQoLig0HygoNB8uKDQfNCg0HzoghB86IIQfQCCEH0YghChYKF4fTCeMH1InjCiUJ4wfWCgEH14oBB9kKAQfaigEH3AnyB92J6QffCekH4InpCigJ6QfiCekH44foB+UH6Afmh+gH6YfrB+yJ/gfuCdoH74naB/EJ2gnXB/KH9AnaB/WJ3QnMh/cH+If9B/uH+gf7h/0H+4f9B/6Jz4nOCAAIAYnPiAMKDQgEig0IBgoNCAeIDYgJCAqIDAgNiA8J1YgQidWKDogSCBOJ1YnziBUIFon1CfOIGAgZiCEIGwghCByIIQgeCCEIH4ghCfCIIQgiihSIJAoXidEKF4oWCheIJYoXiCcKF4oZCUWKHwlLiXKISwjZiVGJyAnJiSwJLYAACCiIMYAAChkJRYlmiEgKHwlLicIISAlyiEsI2YlRiX6JegmJCGqJjwk/icgJyYlmiZaJpwkeiSwJLYkvCTCIQglRiCoJLYgriC0JNQAACC6IMAgxgAAIOQAACDMINIjhCVkJuQm0iDYAAAg3gAAI4QlZCDkAAAg6iDwIPYlLiD8AAAmhCECI2YlRiEIJUYhDiEUJeIl6CEaAAAoZCUWJZohICSkAAAofCUuISYAACYkIaolyiEsJyAnJiWaJloh8iH4JpwkeiS8JMIocCUiKIglOiEyAAAjhCVkITgmZiH+IgQkSiRuJMgkziE+JTohRAAAJpAhSiNyJVIhUCVSIVYhniFcAAAhYiRuIWgheiFuIYYhaCF6IW4hhiF0IXohgCGGIYwktiGSJG4hmCGeIaQhqiGwIbYoZCUWKHAlIiG8JS4hwgAAIcglOiHOAAAh1AAAIdoAACHgAAAh5iJqIewidiHyIfgh/iIEJLAktiNmJUYiCgAAIhAAACNmJUYjEiUWIx4lIiIWJRYiHCUiIiIAACIoAAAiLiUuIjQlOiI6IkAiRiJSIkwiUiJYAAAiXgAAImQiaiJwInYifAAAIoIAACKIAAAijgAAIpQnJiKaJWQioAAAIqYAACKsAAAisgAAIrgAACK+AAAixAAAIsokbiLQAAAi1iRuItwAACLiJG4i6AAAIu4AACL0AAAi+gAAJb4kdChkIxgocCMkIwAlFiO0JSIoZCUWKHAlIihkJRYocCUiKGQlFihwJSIoZCUWKHAlIiMGIxgjDCMkKGQlFihwJSIoZCUWKHAlIihkJRYocCUiKGQlFihwJSIjEiMYIx4jJCh8I0goiCNUIyolLiMwJTojNiUuIzwlOih8JS4oiCU6KHwlLiiIJToofCUuKIglOih8JS4oiCU6I0IjSCNOI1QjWiVGI2AlUiNmI2wjciiyJyAjkCOE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',\n      'Roboto-Medium.ttf':\n        'AAEAAAARAQAABAAQR0RFRqcXo6wAAcNkAAACWEdQT1PNVc50AAHFvAAAeRBHU1VCzzL7wgACPswAABX6T1MvMpfnsYsAAAGYAAAAYGNtYXBnX+zQAAAWoAAABopjdnQgO/gmfQAAL4QAAAD+ZnBnbagFhDIAAB0sAAAPhmdhc3AACAAZAAHDWAAAAAxnbHlmGnjWewAAOtwAAYR2aGVhZAuddKAAAAEcAAAANmhoZWEK9grjAAABVAAAACRobXR4RitZaAAAAfgAABSobG9jYQPoojQAADCEAAAKVm1heHAI2hDGAAABeAAAACBuYW1lYZ+OkgABv1QAAAPicG9zdP9tAGQAAcM4AAAAIHByZXB5WM7TAAAstAAAAs4AAQAAAAMC0SNEu9FfDzz1ABkIAAAAAADE8BEuAAAAAOP3FVv6Jv3VCWEIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJbvom/j4JYQABAAAAAAAAAAAAAAAAAAAFKgABAAAFKgCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA4wAZAAAAAAAAAAAAf0AAAH9AAACHgCMAo4AYATTAFYEjABkBeQAZAUhAFUBVwBSAsUAgQLMACcDjAAcBHEAQgHKACICuABQAjkAhgMfAAEEjABoBIwAqgSMAFIEjABOBIwANwSMAH8EjABzBIwARASMAGcEjABdAhwAfwHrADMEEgA+BIAAjwQoAH4D5AA7By0AWwVOABEFDQCUBTkAZgU5AJQEhQCUBGgAlAVzAGsFrQCUAkQApQRyAC8FDgCUBFIAlAb/AJQFrQCUBYMAZQUbAJQFgwBgBQkAlATYAEsE4AAtBTwAgAUqABEHCwAvBQ0AJgTjAAgE0wBQAiwAhQNVABICLAALA24ANgOVAAICkAA4BFAAVgR/AH0ELQBOBIIAUARJAFEC0wArBIkAUgRyAHoCCgB8AgL/qwQsAH0CCgCMBvgAfAR0AHoEigBOBH8AfQSHAFAC1AB9BB4ASQKqAAoEcwB3A/gAFgXwACMEBgAfA+sADAQGAFECqwA4Af0ArwKrABwFTQB1Ah8AhQSCAGcEtQBfBZ4AXARAAA0B+ACJBPkAXAOSAGMGSQBaA5AAjgPjAFcEawB/BkoAWQPaAJ0DDwCBBEoAXAL1AD0C9QA3ApQAbwTBAJMD6gBJAkQAkAITAGwC9QCCA6cAeQPjAF4FygBfBiIAUwZcAGYD5QBGB37//ARCAEwFgQBpBM8AlQTrAIoGwgBIBKQAaASRAEMEhgBOBJEAgQTsAFAFsAAfAhcAkASaAI0EZAAgAlIAIAWXAJAEhgB9B7AAZQc+AFkCBwCJBY0AVQLQ/94FkQBbBJ0ATQWjAIAE5gB3AiX/rgQ5AFcD3gCQA6oAbgPaAJ0DfgB1AgoAgQKqAHgCTAApA84AdwMoAEsCcwCJAAD8kwAA/WIAAPx0AAD9OgAA/AgAAP0eAmsAzQQ7AG4CRACQBHQAmQXCABoFegBcBTUAIASMAGoFrgCZBIwARwX5AEwFsQBGBVkAbASEAFYEyACXBA0AHgSGAFEEZQBiBA8AWQSGAH0EpwB2AqUAowRoABUEGgBnBPwAMASGAIAEMwBQBI4AUAQqADwEXQB/BdEARgXMAFIGlABlBLQAeASH/+EGeQArBf0AJAVTAGcIgQAtCIwAmQZRAC0FpQCPBQcAkAX9ACYHqQAVBNsASQWmAJIFqAAsBQsAMgZfAE4F+ACOBYUAkQeaAJUH+gCVBiEAFQbwAJkFAgCQBUgAYwdiAKEE6AAXBIAAWgSLAI8DWwCDBPIAJwaHACAEFwBOBJIAhARsAI8ElAAgBgIAjwSRAIQEkgCEA/oAIwXUAFMEzwCEBGUAYAaNAIQG8QB9BSEAIAZvAI8EaQCPBDkAUAaCAJIEcAAuBHL/1wQ5AFIG1gAdBuQAhASG/+gEkgCEB1gAiAZqAHIEaP/hBygAmAYCAIYFFgAaBGMACwdLAKwGPQCaBuUAfgXdAIEJKgClB+4AkAQgACgD9QAyBXoAYASIAE0FGAAQBA0AHgV6AGAEhgBOB1QAiAZWAHUHWACIBmoAcgUQAGcERwBdBPsAcAAA/HAAAPx1AAD9gQAA/aYAAPomAAD6UQYgAJIFEwCEBGj/4QUQAJQEhgB9BGsAjwOjAH0E6gCZBCQAfQgjABUG4AAgBckAmQT7AI8FLgCRBKwAjQaUADQFoAA8BiAAlAUHAIQH3QCUBa0AfQhJAJcG7wB9BjcAZwUEAGAFOQAmBEEAHwcoACkFbwAnBfIAkQTcAGAFcACBBHQAdQWFAIkGGwAKBMT/ywUgAJEEeACNBh8ALAUUACAFrQCZBIYAfQYqAJQFEQCEB3UAlAZ0AI8FjQBVBKMAWwSkAF0EwwAsA6oAJAVpACYEcQAfBPkATwbzAGgG2wBfBlEAPQUoAC8EgwBKBEgAcwe8AEIGpAA/B/UAlAaeAHQFBgBcBC8AVQWoACEFHQBEBU4AfQZGACwFOwAgBVAAdAMbAGQEFAAACCkAAAQUAAAIKQAAArkAAAIKAAABXAAABH8AAAIwAAABogAAAQAAAADRAAAAAAAAArcAUAK3AFAFIwCcBioAewOaAAgBvwBlAboANwHOADUBowBLAwsAbQMTAEMDAAA1BFsAPwSaAF0CzACKA/0AjQWqAI0BzwBeB64AUAJ0AGwCaQBVA5kAKwL1AEwC9QA2AvUAUAL1AE4C9QA3AvUASwL1AEcDOQBQAvMAUALzAFACAwBTAgMAUANcAGcC9QBMAvUAggL1AD0C9QA3AvUANgL1AFAC9QBOAvUANwL1AEsC9QBHAzkAUALzAFAC8wBQAgMAUwIDAFAEtQBiBm4AIwa/AJkIlQCUBjsAIwabAH0EjABcBeoAIwQtACoEmwAkBWIATwV+ACsF5ABuA+MARQgpAJAFCABvBRQAlgY3AFwG3gBWBtAAXgasAFwEkwBhBYoApgTeAD8EgACcBJ0AOwhSAGECMv+nBJEAZQSAAI8EEgA9BCgAfQQOACUCUQCcAo4AZAHpAEcFGQArBK0AGgS9ACsHKAArBygAKwUPACsGtwBJAAAAAAgwAFkINQBcAvUAPQL1AIIC9QBMBB0ATwQdAFcEHQA4BB0AXwQdAGYEHQAzBB0APQQdAEMEHQCYBB0AWAQrAEEEPgAGBFwAEwYJACcEeQAIBIgAaQQ/ACUENwA/BGQAdQS9AE0EawB2BL0ATgTcAHYGBQB2A7cAdgReAHYD1gAmAf4AhgTdAHYEpwBWA8gAdgQ3AD8EaAA6A6UACgO8AHYEeQAIBL0ATgR5AAgDnQBGBNkAdgQeAEQFpgBPBVgATwTgAF4FkgAjBIAATwdWACQHWAB2BZkAJQTYAHYEcgB2BV4AJwZFABsERgBDBOIAdgRdAHYEywAkBEwAHwViAHYEjQBDBoQAdgcOAHYFYQAJBhYAdgRnAHYEgAA9Bo8AdgSEAEIEKAALBqMAGwSgAHYFDQB2BXQAIQX4AE4EVgAGBMQAEwaXACMEjQBDBI0AdgYAAA4EzgBNBEcAQwS9AE4EaAA6A/QARQgtAHYE9AAoAvUANwL1ADYC9QBQAvUATgL1ADcC9QBLAvUARwO2AI0CrgCYA+AAdgQ6AAwEtgBWBUEAmQUoAJkEMACBBTUAmQQoAIEEegB2BIAATwRgAHYEmgAIAf4AkAOhAHUAAPyeA/cAegP6/1EECwB5A/oAeQO8AHYDnQB1A50AdQL1AEwC9QA2AvUAUAL1AE4C9QA3AvUASwL1AEcFcwBpBZ4AaQV/AJkF2QBpBdoAaQQoAJYEggBrBFgADwS7ADQEawBnBC4AQgOhAHYBugBiBpgATgSvAG4CDP+nBIwAOASMAGgEjAAsBIwAYgSMAF8EjAA0BIwAbASMAFkEjABnBIwA5gIm/64CJf+uAhcAkAIX//oCFwCQBGAAdgTmAGAEMAA5BIgAfQQ+AE8ElQBOBJEATgSdAEkEkgB9BJoATgRJAFEEiQBQBFkANAOtAGEFDABfA8QABQZG/+wEBwB2BL0ATgUOADQE3AB2Af0AAAK4AFAFVwAXBVcAFwSQ//UE4AAtAqr/6wVOABEFTgARBU4AEQVOABEFTgARBU4AEQVOABEFOQBmBIUAlASFAJQEhQCUBIUAlAJE/8sCRAClAkT/ygJE/74FrQCUBYMAZQWDAGUFgwBlBYMAZQWDAGUFPACABTwAgAU8AIAFPACABOMACARQAFYEUABWBFAAVgRQAFYEUABWBFAAVgRQAFYELQBOBEkAUQRJAFEESQBRBEkAUQIX/7UCFwCQAhf/swIX/6gEdAB6BIoATgSKAE4EigBOBIoATgSKAE4EcwB3BHMAdwRzAHcEcwB3A+sADAPrAAwFTgARBFAAVgVOABEEUABWBU4AEQRQAFYFOQBmBC0ATgU5AGYELQBOBTkAZgQtAE4FOQBmBC0ATgU5AJQFGABQBIUAlARJAFEEhQCUBEkAUQSFAJQESQBRBIUAlARJAFEEhQCUBEkAUQVzAGsEiQBSBXMAawSJAFIFcwBrBIkAUgVzAGsEiQBSBa0AlARyAHoCRP+0Ahf/nQJE/9ECF/+7AkT/3QIX/8YCRAAYAgr//wJEAJ8GtQClBAsAfARyAC8CJf+uBQ4AlAQsAH0EUgCUAgoAjARSAJQCCgBZBFIAlAKgAIwEUgCUAuYAjAWtAJQEdAB6Ba0AlAR0AHoFrQCUBHQAegR0/6MFgwBlBIoATgWDAGUEigBOBYMAZQSKAE4FCQCUAtQAfQUJAJQC1ABSBQkAlALUADcE2ABLBB4ASQTYAEsEHgBJBNgASwQeAEkE2ABLBB4ASQTYAEsEHgBJBOAALQKqAAoE4AAtAqoACgTgAC0C0gAKBTwAgARzAHcFPACABHMAdwU8AIAEcwB3BTwAgARzAHcFPACABHMAdwU8AIAEcwB3BwsALwXwACME4wAIA+sADATjAAgE0wBQBAYAUQTTAFAEBgBRBNMAUAQGAFEHfv/8BsIASAWBAGkEhgBOBHr/pQR6/6UEPwAlBJoACASaAAgEmgAIBJoACASaAAgEmgAIBJoACASAAE8D4AB2A+AAdgPgAHYD4AB2Af7/qQH+AIYB/v+nAf7/nATcAHYEvQBOBL0ATgS9AE4EvQBOBL0ATgSIAGkEiABpBIgAaQSIAGkEPgAGBJoACASaAAgEmgAIBIAATwSAAE8EgABPBIAATwR6AGED4AB2A+AAdgPgAHYD4AB2A+AAdgSnAFYEpwBWBKcAVgSnAFYE3QB2Af7/kQH+/68B/v+6Af4AFwH+AH0D1gAmBF4AdgO3AHYDtwB2A7cAdgO3AHYE3AB2BNwAdgTcAHYEvQBOBL0ATgS9AE4EZAB1BGQAdQRkAHUENwA/BDcAPwQ3AD8ENwA/BD8AJQQ/ACUEPwAlBIgAaQSIAGkEiABpBIgAaQSIAGkEiABpBgkAJwQ+AAYEPgAGBCsAQQQrAEEEKwBBBU4AEQTp/0IGEf9KAqj/TgWX/7QFR/9BBW3/wgKl/4UFTgARBQ0AlASFAJQE0wBQBa0AlAJEAKUFDgCUBv8AlAWtAJQFgwBlBRsAlATgAC0E4wAIBQ0AJgJE/74E4wAIBIQAVgRlAGIEhgB9AqUAowRdAH8EmgCNBIoATgTBAJMD+AAWBFkANAKl/8MEXQB/BIoATgRdAH8GlABlBIUAlAR0AJkE2ABLAkQApQJE/74EcgAvBSgAmQUOAJQFCwAyBU4AEQUNAJQEdACZBIUAlAWmAJIG/wCUBa0AlAWDAGUFrgCZBRsAlAU5AGYE4AAtBQ0AJgRQAFYESQBRBJIAhASKAE4EfwB9BC0ATgPrAAwEBgAf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APD/+QDx//kA8//5APT/+QD1//kA9v/tAPj/+QD5/+0A+v/5APv/+QD8/9sA/v/5AQD/+QEF//kBK//5ATb/+QE6/+0BPP/5AT7/+QFI/+0BSv/tAVP/+QFV//kBV//5AVz/+QFt/+0D4f/5A+P/+QPo//kD7f/5BAP/+QQk//kEJv/5BDb/7QQ4//kElv/tBJj/+QAqAOz/7wDt/+4A7v/wAPD/7wDx/+8A8//vAPT/7wD1/+8A9v/uAPj/7wD6/+8A+//vAP7/7wEA/+8BBf/vAQn/9AEg//EBK//vATT/8AE2/+8BOv/vATz/7wE+/+8BRP/wAVP/7wFV/+8BV//vAVz/7wFe//ABbf/vA+H/7wPj/+8D5v/wA+j/7wPt/+8EA//vBBL/8AQg//AEJP/vBCb/7wQ4/+8EmP/vADMA0v++ANb/vgDm/8kA7P/1APD/9QDx//UA8//1APT/9QD1//UA9v/fAPj/9QD6//UA+//1AP7/9QEA//UBBf/1AQn/7QEa/+8BIP/rASv/9QE2//UBOf++ATr/3wE8//UBPv/1AUX/vgFM/+kBU//1AVX/9QFX//UBXP/1AWP/9QFt/+AD3f++A+H/9QPj//UD5f/vA+j/9QPt//UD7v/vBAP/9QQH/+8ED//vBCT/9QQm//UEMP/vBDL/7wQ0/+8EOP/1BJP/vgSY//UAAgBRACUAPgAAAEUAXgAaAIEAgQA0AIMAgwA1AIYAhgA2AIkAiQA3AIsAlgA4AJgAnQBEALEAsQBKALoAuwBLAL8AvwBNAMEAwQBOAMMAxABPAMcAxwBRAMsAywBSAM0AzgBTANAA0QBVANMA0wBXANoA3gBYAOEA4QBdAOUA5QBeAOcA6QBfAOsA+wBiAP0A/QBzAP8BAQB0AQMBAwB3AQgBCQB4ARYBGgB6ARwBHAB/ASABIgCAASoBKwCDATMBNACFATYBNgCHATsBPACIAUEBRACKAUcBSACOAUsBTQCQAVEBUQCTAVQBWACUAV0BXgCZAWIBYgCbAWQBZACcAWgBaACdAWoBbACeAW4BbgChAXABcACiAe0CAQCjAgUCBQC4Ag4CDgC5AhACEAC6AhcCGQC7AhsCHAC+Ah4CHgDAAiICIgDBAiQCJgDCAiwCLADFAjECMwDGAjUCNQDJAkMCQwDKAkYCRgDLAkgCSADMAksCTgDN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ANr/9ADe/+0A4f/hAOb/1ADs/+IA7v/vAPD/4gDx/+IA8//iAPT/4gD1/+IA9v/JAPj/4gD6/+IA+//iAP7/0QEA/+IBBf/iAQn/5QEZ/9QBGv/mASD/4wEr/+IBM//0ATT/7wE2/+IBOf/SATr/xAE8/+IBPv/iAUP/9AFE/+8BRf/SAUf/4QFJ/+EBU//iAVX/4gFX/+IBXP/iAV3/9AFe/+8BYv/UAWP/9QFk/+cBbP+qAW3/yQGF/8oBhv/KAYj/ygGJ/8oBiv/KA9H/7QPd/9ID3v/0A+H/4gPj/+ID5f/mA+b/7wPo/+ID7f/iA+7/5gP3/8oD+P/KA/v/ygQD/+IEBv/UBAf/5gQO/9MED//mBBH/9AQS/+8EH//0BCD/7wQk/+IEJv/iBC//7QQw/+YEMf/tBDL/5gQz/+0ENP/mBDX/4QQ4/+IEk//SBJX/4QSY/+IEov/TACkAR//sAEj/7ABJ/+wAS//sAFX/7ACU/+wAmf/sAr3/7AK+/+wCv//sAsD/7ALB/+wC2f/sAtv/7ALd/+wC3//sAuH/7ALj/+wC5f/sAuf/7ALp/+wC6//sAu3/7ALv/+wC8f/sAvP/7ART/+wEVf/sBFf/7ARZ/+wEW//sBF3/7ARf/+wEYf/sBHX/7AR3/+wEef/sBH3/7AS4/+wExf/sBMf/7AA2AAYAEAALABAADQAUAEEAEgBH/+gASP/oAEn/6ABL/+gAVf/oAGEAEwCU/+gAmf/oAYUAEAGGABABiAAQAYkAEAGKABACvf/oAr7/6AK//+gCwP/oAsH/6ALZ/+gC2//oAt3/6ALf/+gC4f/oAuP/6ALl/+gC5//oAun/6ALr/+gC7f/oAu//6ALx/+gC8//oA/cAEAP4ABAD+wAQBFP/6ARV/+gEV//oBFn/6ARb/+gEXf/oBF//6ARh/+gEdf/oBHf/6AR5/+gEff/oBLj/6ATF/+gEx//oAEoAR/+0AEj/tABJ/7QAS/+0AEwAFABPABQAUAAUAFP/egBV/7QAV/9kAFsACwCU/7QAmf+0Adz/ZAK9/7QCvv+0Ar//tALA/7QCwf+0Asf/egLI/3oCyf96Asr/egLL/3oC2f+0Atv/tALd/7QC3/+0AuH/tALj/7QC5f+0Auf/tALp/7QC6/+0Au3/tALv/7QC8f+0AvP/tAMV/3oDF/96Axn/egMh/2QDI/9kAyX/ZAMn/2QDKf9kBFP/tARV/7QEV/+0BFn/tARb/7QEXf+0BF//tARh/7QEZ/96BGn/egRr/3oEbf96BG//egRx/3oEc/96BHX/tAR3/7QEef+0BHv/egR9/7QEuP+0BLz/egTF/7QEx/+0BMkAFATLABQEzQAUBNr/ZAABAPQABAAGAAsADAAlACcAKAApACoALwAwADMANAA1ADYAOAA6ADsAPAA9AD4APwBJAEoATABPAFEAUgBTAFYAWABaAFsAXQBfAJYAnQCyAYUBhgGIAYkBigHzAfUB9gH4AfsCBgJLAk4CYAJiAmMClgKXApkCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCrAKtAq4CrwKwArUCvgK/AsACwQLGAscCyALJAsoCywLQAtEC0gLUAtYC2ALaAtwC3gLgAuIC4wLkAuUC5gLnAugC6QLqAusC9QMDAwUDBwMJAwsDDgMQAxIDEwMUAxUDFgMXAxgDGQMbAx0DHwMqAywDLgM8Az4DPwNAA0EDQwNFA0sDTANNA04DTwNQA1EDUgNTA1QDXwNgA2EDYgNjA2kDagNrA3ADggODA4QDhQOJA4oDiwOUA+8D8QPzA/UD9gP3A/gD+wP9A/4EOgQ8BD4EQARCBEQERgRIBEoETAROBFAEUgRTBFQEVQRWBFcEWARZBFoEWwRcBF0EXgRfBGAEYQRmBGcEaARpBGoEawRsBG0EbgRvBHAEcQRyBHMEewSMBI0EjgSPBJAEkQS0BLUEtwS7BLwEvgTEBMYEyQTKBMwEzgTRBNME1ATVBNgE2wTeBN8E4AThBOIE5AABADUABgALAJYAsQCyALMAtAC9AMEAxwGFAYYBiAGJAYoCBgIHAggDogOjA6QDpQOmA6cDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO8A8ADwgPGA/cD+AP7BOYE5wTrBO4E9AT5AKcAEP8HABL/BwAl/04ALv8NADgAFABF/94AR//rAEj/6wBJ/+sAS//rAFP/6wBV/+sAVv/mAFn/6gBa/+gAXf/oAJT/6wCZ/+sAm//qALL/TgGH/wcBi/8HAY//BwGQ/wcCBv/AAk7/wAKb/04CnP9OAp3/TgKe/04Cn/9OAqD/TgKh/04Ctv/eArf/3gK4/94Cuf/eArr/3gK7/94CvP/eAr3/6wK+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JWQZfBmCHTwlHCYMJMIjliV8IXohwiY8JiomVCV8JmYh2iZ+JTQmfiWOIVwmnBmIGY4mriWmJsYhbibeHm4kDiW4JxonCCcyIaok7CTyJG4kkidKHuwiRgAAGZQAACJMAAAZmgAAGaAkmBmmGawo3CV8IPAg9hmyGbgZvhnEJnIlKCZ+JTQZyhnQGdYZ3BniGegZ7hn0I/Aj3iP8I+okUCREJFwluBvaAAAiaiJ2JMgAAAAAIMAg0iDYJPgAACDeIOQg6gAAAAAAABn6AAAhCAAAIfgAACEOIRQlvgAAGgAAABoGAAAaDAAAIgoijhoSAAAAABoYGh4AACSqAAAaJAAAGioAABowAAAaNgAAGjwAACTOAAAaQgAAGkgAACIQIpoaTgAAGlQAABpaGmAaZgAAGmwAABpyAAAkpAAAGngAABp+AAAksAAAGpAAABqEAAAaigAAIiIAABqQAAAalgAAGpwAABqiAAAaqAAAGq4AACLEAAAiygAAGrQAABq6AAAawAAAGsYAABrMGtIa2BreGuQAABrqAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrwG7Aa9hr8AAAAAAAAAAAAAAAAAAAAABsCAAAAACS2AAAkvAAAAAAAAAAAAAAAAAAAAAAAAAAAGwgiZAAAAAAAAAAAGw4bFBsaGyAbJgAAGz4bRBssGzIbOB2uGz4bRAAAAAAoBCdoKDoojigQKBYbSiiCG1AlNCCWIJwoBCgKKGonkiduIE4bVhtcJ/gn/ifyKGQndCd6J+Yn7CASIBgnbie8J6onsCeYJ6QoKCguH8ofxBtiG2gn1AAAAAAnYhtuAAAbdAAAKBwoIht6AAAAABuAG4YAABuMAAAbkgAAG5gAABueAAAbpAAAG6obsBu2AAAAAChAG7wbwhvIAAAo0CfaG84b1CY8JiofCh+UKMQoNCfUJ84oxCfIG9ohwhvaG+Ao3CV8KNwb5ijcJXwb7BvyG/goWBv+HAQn8ihkHAocECd0J3ol6BziJegc4iYMJMIm0iSeJt4ebhwWJUAcFiVAIzAlQBwcJUAiOiVAHCIlQCiUJUAiFhwoIeAlWCHgJVgjbCVYIRolWBwuJXAcLiVwHDQlcCEsJXAcOiUoHEAnXBxAJ1wjqCdcHEYnXCK4J1wcTCbwHEwm8BxSJvAcWCbwIbAk2hxeJUwcXiVMIzYlTBxkJUwiQCVMHGolTCigJUwiIhxwIewlZCHsJWQjeCVkIWIlZBx2JXwcdiV8HHwlfCF0JXwcgiU0JS4ljiUuJY4jtCWOHIgljiK+JY4cjiW4HI4luByUJbgcmiW4IbYkkiL6JJIcoCVAHKYlTCM8JUAjSCVMKJQlQCigJUwcrCIcHLIiKBy4IhwcviIoHMQiHBzKIigc0CIcHNYiKBzcHOIl9CSYHOglWBzuJWQiUiVYIlglZBz0JVgc+iVkKKwlWCi4JWQdACVYHQYlZB0MJRAdEiUcHRglEB0eJRwdJCUQHSolHB0wHTYdPCUcHUIhUB1IJMIdTiVwHVQlfB1aJXAdYCV8HWYlcB1sJXwjih1yI5YlfB14JXAdfiE4HYQAACYwHYomPB2QHZYdrh2cJXwmSB2iJlQdqCZIHa4mVCV8JkgdriZUJXwlIiUoJS4lNCZyHbQmfh26HcAlKB3GJTQmfiU0HcwnXB3SJY4d2CdcHd4ljh3kJ1wd6iWOHfAlmh32JaYmoh38Jq4eAh4IJZoeDiWmHhQhJh4aIW4eICEmHiYhbia6Hiwmxh4yJroeOCbGHj4eRCEmHkohbibSHlAm3h5WJtIeXCbeHmIeaCSeJt4ebh50JvAeeiW4HoAm8B6GJbgejCbwHpIluB6YJvAeniW4HqQm8B6qJbgm6ibwJA4luB6wIZ4etiGqHrwk2h7CJJIgzCTaHsggxh7OHuwe1CDGHtoe7B7gIMYe5h7sHvIAAB74AAAe/gAAHwQAAB8KH5QfCh+UKAQoCh92J8gfdifIH3wnyB8QJ8gfFifIHxwnyCjEJ8goxB8iHygn2h8oJ9ofLifaJ4Yn2h80J6QfNCekHzonpCeeJ6QfQCd6KF4oZCheKGQfRihkH0woZB9SKGQfWCCcH1ggnB9eIJwfZCCcKIgojh9qJ8gfcCfIKMQnyB92KDQffCg0H4IoNB+IKDQfjh+UH5on2h+gJ9ofpifaKNAn2h+sJ9ofsh/EH7gfxB++H8Qfyh/QH9YoLh/cJ6Qf4iekH+gnpCeYH+4f9CekH/onsCduIAAgBiAYIBIgDCASIBggEiAYIB4neid0ICQgKid6IDAoZCA2KGQgPChkJ7YgTiduIEIgSCBOIFQnkiBaJ5IoaiBgIGYnkigEIGwguigKKAQgciB4IJwgfiCcIIQgnCCKIJwgkCCcIJYgnCCiKIIgqCiOJ4AojiCuJ2ggtCdoILonaCiUJUAorCVYJgAhUCOKJXAnVidcJNQk2gAAIMAg6gAAKJQlQCXEIUQorCVYJz4gxiYAIVAjiiVwJjAmHiZaIc4mciUoJ1YnXCXEJpAm0iSeJNQk2iTgJOYhLCVwIMwk2iDSINgk+AAAIN4g5CDqAAAhCAAAIPAg9iZ+JY4nGicIIPwAACECAAAmfiWOIQgAACEOIRQhGiVYISAAACa6ISYjiiVwISwlcCEyITgmGCYeIT4AACiUJUAlxCFEJMgAACisJVghSgAAJlohziYAIVAnVidcJcQmkCIWIhwm0iSeJOAk5iigJUwouCVkIVYAACZ+JY4hXCacIiIiKCRuJJIk7CTyIWIlZCFoAAAmxiFuI5YlfCF0JXwheiHCIYAAACGGJJIhjCGeIZIhqiGMIZ4hkiGqIZghniGkIaohsCTaIbYkkiG8IcIhyCHOIdQh2iiUJUAooCVMIeAlWCHmAAAh7CVkIfIAACH4AAAh/gAAIgQAACIKIo4iECKaIhYiHCIiIigk1CTaI4olcCIuAAAiNAAAI4olcCM8JUAjSCVMIjolQCJAJUwiRgAAIkwAACJSJVgiWCVkIl4iZCJqInYicCJ2InwAACKCAAAiiCKOIpQimiKgAAAipgAAIqwAACKyAAAiuCdcIr4ljiLEAAAiygAAItAAACLWAAAi3AAAIuIAACLoAAAi7iSSIvQAACL6JJIjAAAAIwYkkiMMAAAjEgAAIxgAACMeAAAl9CSYKJQjQiigI04jJCVAIyolTCiUJUAooCVMKJQlQCigJUwolCVAKKAlTCiUJUAooCVMIzAjQiM2I04olCVAKKAlTCiUJUAooCVMKJQlQCigJUwolCVAKKAlTCM8I0IjSCNOKKwjcii4JGIjVCVYI1olZCNgJVgjZiVkKKwlWCi4JWQorCVYKLglZCisJVgouCVkKKwlWCi4JWQjbCNyI3gkYiN+JXAjhCV8I4ojkCOWKOInViOuJn4juiOcJ1wjoiWOJ1YnXCZ+JY4nVidcJn4ljidWJ1wmfiWOJ1YnXCZ+JY4jqCOuI7QjuiPAI94jxiPqI8Aj3iPGI+ojzCPeI9Ij6iPYI94j5CPqI/Aj9iP8JAIm6iQIJA4kFCQaJvAkICW4JCYkRCQsJbgkJiREJCwluCQyJEQkOCW4JD4kRCRKJbgkUCRWJFwkYiTUJGgkbiR0JHok2iSAJJIkhiTaJIwkkiX0JJgm0iSeJKQAACSqAAAksAAAJMgAACTOAAAAACS2AAAkvCYMJMIkyAAAJM4AACY8Jiok1CTaJOAk5iTsJPIk+AAAJP4lBCUKJRAlFiUcJSIlKCUuJTQlOiVAJUYlTCVSJVglXiVkJWolcCV2JXwlgidcJYgljiWUJZoloCWmJawm8CWyJbglvgAAJcQlyiXQJdYl6CXcJfQl4iXoJe4l9CX6JgAmBiYMJhImGCYeJiQmKiYwJjYmPCZCJkgmTiZUKOImWiZgJmYmbCZyJngmfiaEJ1YnXCaKJpAmliacJqImqCauJrQmuibAJsYmzCbSJtgm3ibkJuom8Cb2JvwnAicIJw4nFCcaJyAnJicsJzInOCc+J0QnSidQJ1YnXCjEJ8go0CfaKCgoLieYJ6Qn8ihkKDoojgAAJ2IoxCfIJ9QnzijQJ9ooBCdoKCgoLieYJ6Qnbie8J+Yn7Cd0J3on8ihkJ/gn/igEKAooOiiOKBAoFieeJ6QngCiOJ4Yn2ieMAAAoaieSJ5gnpCeeJ6QnqiewJ7YnvCfCAAAoxCfIJ9QnzifUAAAo0CfaJ+AAACfmJ+woKCguJ/IoZCf4J/4oxCg0KAQoCigQKBYoHCgiKCgoLijEKDQoOiiOAAAoQChGAAAoTAAAKFIoWCheKGQoaihwKHYogih2KIIofCiCKIgojiiUKJoooCimKKwosii4KL4oxCjKKNAo1ijcKOIAAgDsAAYABgAMAAsACwAMACUAJQACACYAJgAbACcAJwAOACkAKQAEACwALQABAC4ALgAHAC8ALwAYADAAMAAPADEAMgABADQANAAcADgAOAAQADkAOQAHADoAOgAZADsAOwARADwAPAAeAD0APQANAD4APgAUAEUARQADAEYARgAVAEcARwASAEkASQAFAEwATAAIAFEAUgAIAFMAUwAGAFQAVAAVAFYAVgATAFoAWgALAFwAXAAiAF0AXQALAF4AXgAXAIoAigAVAJYAlgAgALIAsgAhAYUBhgAMAYgBigAMAfMB8wAaAfgB+AAJAfsB+wAWAfwB/AAdAgYCBgAfAksCSwAJAk4CTgAKAmACYAAOApkCmQAQApsCoQACAqICogAOAqMCpgAEAqcCqwABArECtAAHArUCtQANArYCvAADAr0CvQASAr4CwQAFAsYCxgAIAscCywAGAtAC0QALAtIC0gACAtMC0wADAtQC1AACAtUC1QADAtYC1gACAtcC1wADAtgC2AAOAtkC2QASAtoC2gAOAtsC2wASAtwC3AAOAt0C3QASAt4C3gAOAt8C3wASAuIC4gAEAuMC4wAFAuQC5AAEAuUC5QAFAuYC5gAEAucC5wAFAugC6AAEAukC6QAFAuoC6gAEAusC6wAFAvQC9AABAvUC9QAIAvYC9gABAvgC+AABAvoC+gABAvwC/AABAv4C/gABAwEDAQAHAwMDAwAYAwUDBQAPAwcDBwAPAwkDCQAPAwsDCwAPAw0DDQABAw4DDgAIAw8DDwABAxADEAAIAxEDEQABAxIDEwAIAxUDFQAGAxcDFwAGAxkDGQAGAxsDGwATAx0DHQATAx8DHwATAyoDKgAQAywDLAAQAy4DLgAQAzADMAAHAzIDMgAHAzQDNAAHAzYDNgAHAzgDOAAHAzoDOgAHAzwDPAARAz4DPgANAz8DPwALA0ADQAANA0EDQQAUA0IDQgAXA0MDQwAUA0QDRAAXA0UDRQAUA0YDRgAXA0sDTAAJA00DTQAaA04DVAAKA18DYwAJA2kDawAKA3ADcAAJA4EDgQAdA4IDhQAWA4kDiwAJA5QDlAAaA+8D7wARA/ED8QARA/MD8wARA/UD9QANA/YD9gALA/cD+AAMA/sD+wAMA/wD/AABA/0D/QAIA/4D/gACA/8D/wADBDoEOgACBDsEOwADBDwEPAACBD0EPQADBD4EPgACBD8EPwADBEAEQAACBEEEQQADBEIEQgACBEMEQwADBEQERAACBEUERQADBEYERgACBEcERwADBEgESAACBEkESQADBEoESgACBEsESwADBEwETAACBE0ETQADBE4ETgACBE8ETwADBFAEUAACBFEEUQADBFIEUgAEBFMEUwAFBFQEVAAEBFUEVQAFBFYEVgAEBFcEVwAFBFgEWAAEBFkEWQAFBFoEWgAEBFsEWwAFBFwEXAAEBF0EXQAFBF4EXgAEBF8EXwAFBGAEYAAEBGEEYQAFBGIEYgABBGQEZAABBGcEZwAGBGkEaQAGBGsEawAGBG0EbQAGBG8EbwAGBHEEcQAGBHMEcwAGBHsEewAGBH4EfgAHBIAEgAAHBIwEjAANBI0EjQALBI4EjgANBI8EjwALBJAEkAANBJEEkQALBLMEswABBLQEtAAIBLUEtQACBLYEtgADBLcEtwAEBLkEuQABBLwEvAAGBL4EvgATBMIEwgAbBMMEwwAVBMgEyAABBMkEyQAIBMoEygAYBMwEzAAYBM4EzgAPBNAE0AABBNEE0QAIBNIE0gABBNME0wAIBNUE1QAcBNYE1gAVBNgE2AATBNsE2wAQBN0E3QAHBN4E3gAZBN8E3wALBOAE4AAZBOEE4QALBOIE4gARBOQE5AAUBOUE5QAXAAIBCQAGAAYADQALAAsADQAQABAAEgARABEAFQASABIAEgAlACUAAwAnACcAAQArACsAAQAuAC4AGgAzADMAAQA1ADUAAQA3ADcAEAA4ADgAEwA5ADkACAA6ADoAGQA7ADsAEQA8ADwAHQA9AD0ADgA+AD4AFABFAEUABABHAEkAAgBLAEsAAgBRAFIACQBTAFMABwBUAFQACQBVAFUAAgBXAFcADwBZAFkABgBaAFoADABcAFwAIQBdAF0ADABeAF4AFwCDAIMAAQCTAJMAAQCUAJQAAgCYAJgAAQCZAJkAAgCbAJsABgCyALIAIAGCAYMAFQGFAYYADQGHAYcAEgGIAYoADQGLAYsAEgGPAZAAEgHcAdwADwHuAe4AGAHvAe8AHgHwAfAAGwHyAfIACgHzAfMAHAH0AfQAFgH2AfYABQH4AfgABQIAAgAABQIGAgYAHwJMAkwABQJOAk4ACwJgAmEAAQJjAmQAAQKVApUAFQKbAqEAAwKiAqIAAQKsArAAAQKxArQACAK1ArUADgK2ArwABAK9AsEAAgLGAsYACQLHAssABwLMAs8ABgLQAtEADALSAtIAAwLTAtMABALUAtQAAwLVAtUABALWAtYAAwLXAtcABALYAtgAAQLZAtkAAgLaAtoAAQLbAtsAAgLcAtwAAQLdAt0AAgLeAt4AAQLfAt8AAgLhAuEAAgLjAuMAAgLlAuUAAgLnAucAAgLpAukAAgLrAusAAgLsAuwAAQLtAu0AAgLuAu4AAQLvAu8AAgLwAvAAAQLxAvEAAgLyAvIAAQLzAvMAAgMBAwEAGgMOAw4ACQMQAxAACQMSAxMACQMUAxQAAQMVAxUABwMWAxYAAQMXAxcABwMYAxgAAQMZAxkABwMgAyAAEAMhAyEADwMiAyIAEAMjAyMADwMkAyQAEAMlAyUADwMmAyYAEAMnAycADwMoAygAEAMpAykADwMqAyoAEwMsAywAEwMuAy4AEwMwAzAACAMxAzEABgMyAzIACAMzAzMABgM0AzQACAM1AzUABgM2AzYACAM3AzcABgM4AzgACAM5AzkABgM6AzoACAM7AzsABgM8AzwAEQM+Az4ADgM/Az8ADANAA0AADgNBA0EAFANCA0IAFwNDA0MAFANEA0QAFwNFA0UAFANGA0YAFwNJA0kAAQNOA1QACwNVA1UABQNfA2MABQNkA2cACgNoA2gAGANpA2sACwNsA28ABQN2A3kABQOJA4sABQOPA5IAFgOUA5QAHAOWA5sACgOcA5wAGwOdA54AGAPvA+8AEQPxA/EAEQPzA/MAEQP1A/UADgP2A/YADAP3A/gADQP7A/sADQP9A/0ACQP+A/4AAwP/A/8ABAQ6BDoAAwQ7BDsABAQ8BDwAAwQ9BD0ABAQ+BD4AAwQ/BD8ABARABEAAAwRBBEEABARCBEIAAwRDBEMABAREBEQAAwRFBEUABARGBEYAAwRHBEcABARIBEgAAwRJBEkABARKBEoAAwRLBEsABARMBEwAAwRNBE0ABAROBE4AAwRPBE8ABARQBFAAAwRRBFEABARTBFMAAgRVBFUAAgRXBFcAAgRZBFkAAgRbBFsAAgRdBF0AAgRfBF8AAgRhBGEAAgRmBGYAAQRnBGcABwRoBGgAAQRpBGkABwRqBGoAAQRrBGsABwRsBGwAAQRtBG0ABwRuBG4AAQRvBG8ABwRwBHAAAQRxBHEABwRyBHIAAQRzBHMABwR0BHQAAQR1BHUAAgR2BHYAAQR3BHcAAgR4BHgAAQR5BHkAAgR6BHoAAQR7BHsABwR8BHwAAQR9BH0AAgR+BH4ACAR/BH8ABgSABIAACASBBIEABgSDBIMABgSFBIUABgSHBIcABgSJBIkABgSLBIsABgSMBIwADgSNBI0ADASOBI4ADgSPBI8ADASQBJAADgSRBJEADASoBKgAFQS0BLQACQS1BLUAAwS2BLYABAS4BLgAAgS7BLsAAQS8BLwABwTABMAABgTFBMUAAgTHBMcAAgTRBNEACQTTBNMACQTUBNQAAQTZBNkAEATaBNoADwTbBNsAEwTdBN0ACATeBN4AGQTfBN8ADATgBOAAGQThBOEADATiBOIAEQTkBOQAFATlBOUAFwAB/ar+lAAB/aoAAAAB/ecGdAAB/doGdAAB/dUGWwAB/acGwwAB/i8GTwAB/ecFCgAB/doFCgAB/dUE6AAB/acFAwAB/i8FDQAB/eYEpgAB/k0EpgAB/fkFAQAB/h4FAQABArr/9gABAnj/9gABAd4GuAABAUoACgABAhkFCgABA4z+aQABAssGigABAhoFBwABAggGRwABAt4GSAABAt4ACgABAR8GPQABAmAACgABASoGmgABASoACgABA8wGQgABA8wAAAABA6gFCgABA6j//AABAZMGuAABAQQACgABAqgGQgABArwAAAABAlcFAQABAz8E/QABArwGQAABA9gGSAABAtMGSAABAsgACgABApMGSAABA4AGSAABAp8GVgABA5QGQAABAooGTAABAiEE9QABAr0E9QABA0gE/QABAksE/QABAjME/AABAoEE9QABAicACgABAvcE9QABAksE9QABAk8E9QABAugGzAABAmEE9QABAywE9QABAzoE/QABAzsE9QABAg0E9QABAkMFCQABA6cGQwABAzEE/QABAdMGzAABAn0GHQABAhkE7wABAkUFUAABAzcGQAABApkGYQABApn/9gABAkgFDAABAkj/9gABAtMHawABAksGIQABAtwGVwABAk4FCgABAk7/9gABAmYGTAABAogGGQABAlsGTAABAlsACgABARAGTAABARAACgABAsQGTAABAiAFCgABAiD/9gABAmIGTAABAqMGYQABAqP/9gABAwEFKAABAjkFKAABAlwFKAABAlz/9gABAhUFKAABAckACgABAk4FKAABAyQFKAABAm8FKAABAloACgABAjcFKAABAjUFKAABAwgFKAABAi4FKAABAwUFKAABAooFKAABAtwFKAABAtz/9gABAmYFKAABAkEFKAABAlAAAAABAl8FKAABAnIGTAABAnIACgABAQ0E6AABAQ3+NQABAQX+NQABAQEFKAABAhEACAABA2gFCgABAg4FKAABAcYACgABAn4FKAABAn4ACgABAqoHqgABAqkHkgABAqoH3AABAqv+NgABASIHsQABASIHpAABAtUHkgABAsIHrAABAsEHkwABAp4HqgABAp4HnQABAp4HbAABAjUGdAABAjQGWwABAjUGpQABAiH+NgABAQsGawABAQsGXQABAj4GWwABAj8GWwABAjoGdAABAjoGZgABAjoGNQABAqoHbwABAjUGOAABAqwHvwABAhYGdAABAqwHsQABAhYGZgABAqwHkgABAhYGRwABAqwHrgABAhYGYwABAjIHoQABAjUACgABAnQHdgABAioGOAABAnQHhQABAikGSAABAnQHoQABAioGZAABAq4HsQABAisGZgABAq4HmwABAisGUAABAq0HkgABAisGRwABAq4GVQABAtn99gABAisFCgABAs4HpAABAgIHxQABASEHmQABAQoGUgABASIHdgABAQsGLwABASIHjgABAQsGRwABASL+WgABASEHhQABA1cHmwABAQ0GRAABAo/+SAABAiT+NAABARQHpwABAQUIAwABAmL+BgABAQX+BgABAmIACgABAtP+AgABAjn+BgABAtYHmgABAj8GYwABAsIHcAABAj8GOAABAsIHiAABAj8GUAABAsIHjwABAj8GWAABAlsHqgABAZoGdAABAmT+BgABAP3+BwABAlsHmgABAZoGYwABAn0HrAABAh4GdAABAn0HngABAh4GZgABAoD+PAABAh7+MgABAoD9+wABAh798gABAn0HmwABAh4GYwABAm7+AAABAbn9/AABAm7+QAABAbn+PAABAm0HmQABAbkAAAABAp0HkgABAjoGWwABAp4HbwABAjoGOAABAp4HhwABAjoGUAABAp4H3AABAjoGpQABAp4HjgABAjoGWAABA5EHnQABAvQGZgABAnQHnAABAgMGZgABAm8HqgABAgcGdAABAm8HfgABAgYGRwABAm8HmgABAgcGYwABAg4ACgABA6kHtgABA10GdQABAssH9AABAhoGcQABAcQFKAABAk4GeQABAk8GUwABAk8GwwABAk3+PAABAiIGkgABAiIGhAABAP8GkgABAP8GhAABAm8GeQABAl0GhAABAlwGeQABAl0GUwABAkIGkgABAkIGhAABAkIGUwABAk8GVgABAk8GbgABAk8GkgABAk8GhAABAk8GZQABAk8GgQABAcQGgQABAcQACgABAiIGVgABAiIGbgABAiIGZQABAiIGgQABAlcGhAABAlcGbgABAlYGZQABAmX//wABAlcFKAABAmX9+wABAmUGhAABAP4GeQABAP8GVgABAP8GbgABAQD+VAABAP4GZQABAuIGhAABAgb+AwABAPUGkgABAgX+BAABAPUFKAABAgUACAABAnAGkgABAm79/QABAnAGgQABAl0GVgABAl0GbgABAl0GdgABAg7+BAABAgIGgQABAg4ACAABAi8GkgABAi8GhAABAjL+PAABAi8GgQABAhz+AwABAhz+QwABAkIGeQABAkIGVgABAkIGbgABAkIGwwABAkIGdgABAkIFKAABAkEAAAABAwEGhAABAhkGhAABAhwGkgABAhwGZQABAhwGgQABAqkACgABAm4ACgABAnQHawABAm4FCgABAg3/9gABAkIFCgABAPYACgABASYE9QABAlIFCgABAlIACgABASYGIAABAisGKAABAisE/QABA0wE+wABA0v/9gABAnQHcwABAmsHsQABAoD//wABASIHcwABA1cGPwABAgD/9gABApMHjgABAl0ACgABAtMHjgABAtAACgABAksGQwABAogFAAABAioGNQABAawGZgABAh7/9gABAQsGLAABAN8GQAABAjMGZgABAgMGUAABA5EHqgABAvQGdAABA5EHbAABA40ACgABAvQGNQABAvcACgABAnQHqgABAgMGdAABAQ0GQgABAL7+NQABA3sHqgABA34ACgABA4wGdAABA4QACgABAnQHsQABAtMHsQABAioGdAABAksGZgABAt8E9QABAn0HXgABAhkGMQABAmYGVQABAg4FCQABAqwGVQABAqv/+gABAhYFCgABAiH/+gABA9gHjgABA0gGQwABAqoHbAABAjUGNQABA6kGTAABA10FCwABAnQHjgABAioGUQABAogHRAABAqgAAAABAigFCwABAigGNgABAj4AAAABA9gHcwABA0gGKAABAmYHgAABAmr/9gABAg4GNAABAg7/9wABAtMHdgABAksGKwABAtMHcwABAksGKAABAsIHbQABAj8GNQABAtIGRAABAjMFCwABAtIHcAABAjMGNgABAp8HgQABAhYGNQABApMHdgABAgMGOAABApMHcwABAgMGNQABApMHlQABAgMGWAABAtQHcwABAikGKAABA4AHcwABAzoGKAABAqoIAQABAjUGygABAqoHnQABAjUGZgABAqoHhwABArT+mAABAjUGUAABAef+nQABAnQICAABAioGygABAnQHmQABAikGXAABAnQHpAABAnX+ngABAioGZgABASIICAABAQsGwQABASIGSAABASL+mgABAQYGQAABAsIIAgABAj8GygABAsIHngABAsT+lAABAj8GZgABAkT+kAABAsEHqQABAkMGdAABAsEIAAABAkMGygABAsEHkQABAq8AAAABAkMGWwABAkP/9gABAsEGPwABAq/+lAABAkMFCgABAkP+igABAp3+lAABAjoFCgABAej+lAABAp4IAQABAjoGygABAsIHtgABAkIGXwABAsIIDAABAkIGtQABAsEHnQABAsD/9wABAkEGRgABAsIGTAABAsD+iwABAkIE9QABAjj+lAABAnD+pgABAgMFCgABAvf+DwABAnQIAAABAgMGygABAnMHkQABAgMGWwABAvj/egABAlkAAAABAm4ABAABAf0E9QABAtQGSAABAikE/QABA7j//AABAskAAwABAkkACgABAmsGSAABAawE/QABAnQGQAABAnEAEgABAocGTAABAokADQABAgUFAAABAgYACgABAjoFCQABAnQGTAABAhMACgABAq4HvwABAtn/+gABAisGdAABAir+QQABAtYHqgABAtMABgABAj8GdAABAjkACgABAqoHggABArQAAwABAjUGTAABAegACAABAnQHiQABAnYACgABAioGTAABAjkAAAABASIHiQABASIABgABAQsGQwABAQUACgABAsIHgwABAj8GTAABAkX//AABAlsHggABAmQACgABAZoGTAABAP0ACwABAp4HggABAjoGTAABAjgAAAABAj4GTAABAloGTAABAl3+ngABAosGRwABAnj+igABAjT+ngABAln+lAABAjIGSAABAjX+BgABAggGSAABAln9/AABAs4GSAABAtD+ngABAgIGaQABAkn+ngABAlkHpgABAo8ATAABAl8HsQABAiQAOAABAlkGPQABAo7+4QABAl8GRwABAiT+zQABARQGPQABAmH+ngABAQUGmgABA3sGQQABA37+ngABA4wFCgABA4T+ngABAtYGQQABAtL+mwABAj8FCgABAjn+ngABAloHtgABAhIACgABAogGagABAPP+aQABAlsGQQABAmP+ngABAZoFCgABAP3+nwABAn0GQgABAoD+lAABAh4FCgABAh7+igABAm0GQAABAm7+mAABAUQFxwABAbn+lAABAp4GQQABAp0AAAABApYHnQABApYACgABAgEGUQABAgAACgABApYGTAABApb+ngABAgIFAAABAgD+ngABA5EGQQABA43+ngABAvQFCgABAvb+ngABAm8GQQABAm3+ngABAgcFCgABAg7+ngABAsIGQgABAsUAAAABAnMACgABAhwACgABAgIFKAABAnAFKAABAm4AAQABAhkGUwABAiIGUwABAgsGkgABAjIAAAABAP8FKAABAP8GUwABAQAAAQABAuIFKAABAdD/9gABAgIGkgABAgYABwABAjcGbgABAlYAAAABAg8ACgABAgsFKAABAiQACAABAm8GbgABAv8FKAABAv8ACgABAl0FKAABAisFKAABAeMACgABAhwFKAABAhwABwABAiUFKAABAiUACAABAg0FKAABAgn/9gABAmUFKAABAmUACgABAk3//wABAhkFKAABA8D/9gABAm8GVgABAjcGVgABA2gGdAABA2gAAAABAl0GkgABAmoAAAABAi8FKAABAjL9/AABAwEGkgABAwEGUwABAwEACgABAhkGkgABAh8AFgABAqoGQQABArT+WAABAjUFCgABAej+XAABAnQGSAABAnb+XgABAioFCgABAjn+VAABAk8FKAABAlb+VAABAiIFKAABAiT+XAABAQsFAQABAQT+ngABAAAACgBkACQABERGTFQA/mN5cmwA/mdyZWsA/mxhdG4BAgAfARYBHgEmAS4BNgE+AT4BRgFOAVYBXgFmAW4BdgF+AYYBjgGWAZ4BpgGuAbYBvgHGAc4B1gHeAdYB3gHmAe4AG2Myc2MBtmNjbXACQGRsaWcBvGRub20BwmZyYWMCUGxpZ2EByGxpZ2ECWmxpZ2ECSGxudW0BzmxvY2wB1GxvY2wB2mxvY2wB4GxvY2wB5m51bXIB7G9udW0B8nBudW0B+HNtY3AB/nNzMDECBHNzMDICCnNzMDMCEHNzMDQCFnNzMDUCHHNzMDYCInNzMDcCKHN1YnMCLnN1cHMCNHRudW0COgHCAAADxgAHQVpFIAP2Q1JUIAP2RlJBIAQmTU9MIARYTkFWIASKUk9NIAS8VFJLIAP2AAEAAAABBw4AAQAAAAEFKgAGAAAAAQJKAAEAAAABAgwABAAAAAEEoAABAAAAAQGWAAEAAAABAgYAAQAAAAEBjAAEAAAAAQGoAAQAAAABAagABAAAAAEBvAABAAAAAQFyAAEAAAABAXAAAQAAAAEBbgABAAAAAQGIAAEAAAABAYoAAQAAAAECQgAB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BmgGbgZ0AAMGcgZ4Bn4AAwZ8BoIGiAADBoYGjAaSAAQGkAaWBpwGogAEBp4GpAaqBrAABQasBrIGuAa+BsQABQa+BsQGygbQBtYABQbQBtYG3AbiBugABQbiBugG7gb0BvoABQb0BvoHAAcGBwwABQcGBwwHEgcYBx4ABQcYBx4HJAcqBzAABQcqBzAHNgc8B0IABQc8B0IHSAdOB1QABgdOB1QHWgdgB2YHbAAGB2QHagdwB3YHfAeCAAYHegeAB4YHjAeSB5gABgeQB5YHnAeiB6gHrgAGB6YHrAeyB7gHvgfEAAYHvAfCB8gHzgfUB9oABgfSB9gH3gfkB+oH8AAHCDAH6AfuB/QH+ggACAYABwgoB/wIAggICA4IFAgaAAEA6wAKAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCFAIYAhwCJAIoAiwCNAJAAkgCUALsAvAC9AL4AvwDAAMEAwgDDAMQAxQDGAMcAyADJAMoAywDMAM0AzgDqAOsA7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD/AQABAQECAQMBBAEFAQYBBwEwATQBNgE4AToBPAFCAUQBRgFKAU0BWgKYApoCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAscCyALJAsoCywLMAs0CzgLPAtAC0QLTAtUC1wLZAtsC3QLfAuEC4wLlAucC6QLrAu0C7wLxAvMC9QL3AvkC+wL9AwADAgMEAwYDCAMKAwwDDgMQAxIDFQMXAxkDGwMdAx8DIQMjAyUDJwMpAysDLQMvAzEDMwM1AzcDOQM7Az0DPwNCA0QDRgNIA0oDugO7A7wDvQO/A8ADwQPCA8MDxAPFA8YDxwPIA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D8APyA/QD9gQLBA0EDwQdBCQEKgQwBJoEmwSfBKMFJAUmAAEA+wAIAAoAFAAVABYAFwAYABkAGgAbABwAHQAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4AZQBnAIEAgwCEAIwAjwCRAJMAsQCyALMAtAC1ALYAtwC4ALkAugDSANMA1ADVANYA1wDYANkA2gDb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',\n      'Roboto-MediumItalic.ttf':\n        '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BlwACQRh/9EECP/2BnD/qgR8AAoE5gAKBUoAYAXKAD4EPwBsBJ//ogZlAGIEagBbBGoACQXSADsEqQAyBCYADgScADQERgAHA9YAHgfvAAkEzv/aAt7/9QLe//MC3gALAt4AFgLeACUC3gAFAt4ANAOZAJECmgEIA8IACQQa/4cEkgA7BRkAKwUAACsEEAAUBQ0AKwQJABQEVwAJBF4AOQQ/AAkEdv+aAe8A6AOFAQQAAP0nA9kA3APbABYD7ADcA9wA2wOfAAkDgQEEA4EBBQLoAIkC6ABmAugAfgLoAIkC6ACYAugAeALoAKcFSgBsBXMAawVVACsFrABuBa4AbQQJAKsEXwAcBDf/gQSX/9EESf/YBA4AMQOFAQUBrf+4BmYAOwSLAEUB/P8ABHP/qQRz/9kEc//JBHMAEwRzAEwEcwAiBHMAVwRzADEEcwA3BHMA+AIf/wQCH/8EAhEAIwIR/3wCEQAjBD8ACQTBAEwEEABWBGYAEAQeADYEcgA3BG4ALQR6ADIEb//IBHcANgQoADoEZgAuBDj/nwObAKsE5gAkA6f/7wYV/34D6AAJBJn/2wTnACIEtgAJAfgAAAKjAEAFLwAgBS8AIARuACsEugCdApb/5QUl/6MFJf+jBSX/owUl/6MFJf+jBSX/owUl/6MFEQBfBGMAJgRjACYEYwAmBGMAJgIyADcCMgA3AjIANwIyADcFgQAmBVkAYgVZAGIFWQBiBVkAYgVZAGIFFABYBRQAWAUUAFgFFABYBL0AoQQvABwELwAcBC8AHAQvABwELwAcBC8AHAQvABwEDQA3BCgAOgQoADoEKAA6BCgAOgIHACMCBwAjAgcAIwIHACMEUgANBGcAOARnADgEZwA4BGcAOARnADgEUQBKBFEASgRRAEoEUQBKA83/vAPN/7wFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFEQBfBA0ANwURAF8EDQA3BREAXwQNADcFEQBfBA0ANwURACYE9QA4BGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoEYwAmBCgAOgVJAGYEZv/5BUkAZgRm//kFSQBmBGb/+QVJAGYEZv/5BYEAJgRQAA0CMgA3AgcAEwIyADcCBwAjAjIANwIHACMCMv+OAfr/dQIyADcGggA3A+wAIARPAAQCFf8EBOcAJgQMABEEMQAmAfoAIAQxACYB+v+mBDEAJgKQACAEMQAmAtYAIAWBACYEUgANBYEAJgRSAA0FgQAmBFIADQRSAA0FWQBiBGcAOAVZAGIEZwA4BVkAYgRnADgE4gAmAr4AEQTiACYCvv+fBOIAJgK+ABEEtAAmA/8AGwS0ACYD/wAbBLQAJgP/ABsEtAAmA/8AGwS0ACYD/wAbBLoAnQKWAD8EugCdApYAPwS6AJ0CvgA/BRQAWARRAEoFFABYBFEASgUUAFgEUQBKBRQAWARRAEoFFABYBFEASgUUAFgEUQBKBtUAtQXCAHkEvQChA83/vAS9AKEErv/lA+j/5gSu/+UD6P/mBK7/5QPo/+YHRf+NBo4ADgVXABYEYwAqBFf/lgRX/5YEHgBjBHb/mgR2/5oEdv+aBHb/mgR2/5oEdv+aBHb/mgReADkDwgAJA8IACQPCAAkDwgAJAe8AGgHvABoB7wAaAe8AGgS2AAkEmQA7BJkAOwSZADsEmQA7BJkAOwRmADgEZgA4BGYAOARmADgEHgBsBHb/mgR2/5oEdv+aBF4AOQReADkEXgA5BF4AOQRXAAkDwgAJA8IACQPCAAkDwgAJA8IACQSDAD8EgwA/BIMAPwSDAD8EtwAJAe8ADgHvABoB7wAaAfn/lwHvABoDuf/zBDwACQObAAkDmwAJA5sACQObAAkEtgAJBLYACQS2AAkEmQA7BJkAOwSZADsEQwAJBEMACQRDAAkEFgAPBBYADwQWAA8EFgAPBB4AYwQeAGMEHgBjBGYAOARmADgEZgA4BGYAOARmADgEZgA4BdoAiwQeAGwEHgBsBAv/1gQL/9YEC//WBSX/owTH/7oF5f/CApb/xgVtACYFIf+4BUQAHgKQAAkFJf+jBOYAJgRjACYErv/lBYEAJgIyADcE5wAmBskAJgWBACYFWQBiBPQAJgS6AJ0EvQChBOb/wAIyADcEvQChBGEAOwRDACgEYwARApAAZgQ8AFcEdwAhBGcAOASd/94D2gBkBDj/nwKQAEQEPABXBGcAOAQ8AFcGYQBSBGMAJgRSACsEtAAmAjIANwIyADcETwAEBQAAKwTnACYE5ACZBSX/owTmACYEUgArBGMAJgV6ACUGyQAmBYEAJgVZAGIFggArBPQAJgURAF8EugCdBOb/wAQvABwEKAA6BG8AFwRnADgEXf/IBA0ANwPN/7wD6P+6BCgAOgNBABYD/wAbAfoAIAIHACMB8v8CBEoAIgPN/7wG1QC1BcIAeQbVALUFwgB5BtUAtQXCAHkEvQChA83/vAFMAJECegCdBBsAMwIV/wQBrQCNBskAJgbDAA8FJf+jBC8AHARjACYFegAlBCgAOgRvABcFhQB2BZ8APwTxAKgD7gB1CDQAOAkmAGIEtgAfA/gAFwURAF8EDQA3BL0AoQPtAHUCMgA3B27/pAZV/7ACMgA3BSX/owQvABwFJf+jBC8AHAdF/40GjgAOBGMAJgQoADoFYgBLBBkANAQZADQHbv+kBlX/sAS2AB8D+AAXBXoAJQRvABcFegAlBG8AFwVZAGIEZwA4BVAAYQRlADQFUABhBGUANAUgAEgEGQAgBOQAmQPN/7wE5ACZA83/vATkAJkDzf+8BVoAxARDAG0GxQAsBkgAIwRfADgFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwFJf+jBC8AHAUl/6MELwAcBSX/owQvABwEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoEYwAmBCgAOgRjACYEKAA6BGMAJgQoADoEYwAmBCgAOgRjACYEKAA6AjIANwIHACMCMv//Afr/4wVZAGIEZwA4BVkAYgRnADgFWQBiBGcAOAVZAGIEZwA4BVkAYgRnADgFWQBiBGcAOAVZAGIEZwA4BWYAXAR6ADQFZgBcBHoANAVmAFwEegA0BWYAXAR6ADQFZgBcBHoANAUUAFgEUQBKBRQAWARRAEoFdwBYBMAASgV3AFgEwABKBXcAWATAAEoFdwBYBMAASgV3AFgEwABKBL0AoQPN/7wEvQChA83/vAS9AKEDzf+8BH3/9AS6AJ0D2wBUBVoAxARDAG0EUgArA0EAFgXsAFUEoP/yBFAADQTbACQE2wAkBFIAAANB/8cFFAA/BCQAKAS9AKED7QBSBOb/wAPo/7oEQwAoBEb/wgYEAHwEaQANBGkAJgRpAA0EaQBYBH0AcQSRAEsEfQCMBJEAcwVJAGYEZv/5BYEAJgRSAA0FJf+jBC8AHARjACYEKAA6AjL/zwIH/4AFWQBiBGcAOATiACYCvgAMBRQAWARRAEoEyP+FBOYAJgRdABAFEQAmBF8AOAURACYEXwA4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Ae8AAP///34AAAYPBgAGJgKPAAABBwB1AnkAAAALtgYZDwEBTVYAKzQA////2//HBLsGHgYmApEAAAEHAHUBegAeAAu2AzARAQFbVgArNAD//wAP/fwD/gSeBiYB9AAAAAcB1QD3/pj//wCLAAAGHgYeBiYB8AAAAQcARAF4AB4AC7YEGAoBAWtWACs0AP//AIsAAAYeBh4GJgHwAAABBwB1AhoAHgALtgQWCgEBa1YAKzQA//8AiwAABh4F7QYmAfAAAAEHAGoBQwAeAA23BQQfCgEBhFYAKzQ0AP//AGwAAASCBh4GJgHuAAAABwBEAJcAHv///6P+WASrBbAGJgAlAAABBwCkAWsAAwALtgMOBQEBOVYAKzQA//8AHP5dA9EEUAYmAEUAAAEHAKQApgAIAAu2AjsxAABNVgArNAD//wAm/l8EvAWwBiYAKQAAAQcApAEwAAoAC7YEEAIAAENWACs0AP//ADr+VQPwBFEGJgBJAAABBwCkAP0AAAALtgEsAAAATVYAKzQA////mv5VBAEEjQYmAk4AAAAHAKQBDwAA//8ACf5dA/sEjQYmAkMAAAAHAKQA4AAI////4/6fAcoEOgYmAI0AAAEHAK0DQgAKAA60AQcCAQG4/3+wVgArNAAAABEA0gADAAEECQAAALIAAAADAAEECQABABoAsgADAAEECQACAAwAzAADAAEECQADACgA2AADAAEECQAEACgA2AADAAEECQAFACYBAAADAAEECQAGACYBJgADAAEECQAHAEABTAADAAEECQAIAAwBjAADAAEECQAJACYBmAADAAEECQALABQBvgADAAEECQAMABQBvgADAAEECQANASIB0gADAAEECQAOADYC9AADAAEECQAQAAwDKgADAAEECQARABoDNgADAAEECQAZAAwDKgBDAG8AcAB5AHIAaQBnAGgAdAAgADIAMAAxADEAIABUAGgAZQAgAFIAbwBiAG8AdABvACAAUAByAG8AagBlAGMAdAAgAEEAdQB0AGgAbwByAHMAIAAoAGgAdAB0AHAAcwA6AC8ALwBnAGkAdABoAHUAYgAuAGMAbwBtAC8AZwBvAG8AZwBsAGUAZgBvAG4AdABzAC8AcgBvAGIAbwB0AG8ALQBjAGwAYQBzAHMAaQBjACkAUgBvAGIAbwB0AG8AIABNAGUAZABpAHUAbQBJAHQAYQBsAGkAYwBSAG8AYgBvAHQAbwAgAE0AZQBkAGkAdQBtACAASQB0AGEAbABpAGMAVgBlAHIAcwBpAG8AbgAgADMALgAwADEAMQA7ACAAMgAwADIANQBSAG8AYgBvAHQAbwAtAE0AZQBkAGkAdQBtAEkAdABhAGwAaQBjAFIAbwBiAG8AdABvACAAaQBzACAAYQAgAHQAcgBhAGQAZQBtAGEAcgBrACAAbwBmACAARwBvAG8AZwBsAGUALgBHAG8AbwBnAGwAZQBDAGgAcgBpAHMAdABpAGEAbgAgAFIAbwBiAGUAcgB0AHMAbwBuAEcAbwBvAGcAbABlAC4AYwBvAG0AVABoAGkAcwAgAEYAbwBuAHQAIABTAG8AZgB0AHcAYQByAGUAIABpAHMAIABsAGkAYwBlAG4AcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAFMASQBMACAATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMQAuADEALgAgAFQAaABpAHMAIABsAGkAYwBlAG4AcwBlACAAaQBzACAAYQB2AGEAaQBsAGEAYgBsAGUAIAB3AGkAdABoACAAYQAgAEYAQQBRACAAYQB0ADoAIABoAHQAdABwAHMAOgAvAC8AbwBwAGUAbgBmAG8AbgB0AGwAaQBjAGUAbgBzAGUALgBvAHIAZwBoAHQAdABwAHMAOgAvAC8AbwBwAGUAbgBmAG8AbgB0AGwAaQBjAGUAbgBzAGUALgBvAHIAZwBSAG8AYgBvAHQAbwBNAGUAZABpAHUAbQAgAEkAdABhAGwAaQBjAAAAAwAA//QAAP9qAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAIACAAI//8ADwABAAIADgAAAAAAAAIoAAIAWQAlAD4AAQBEAF4AAQBqAGoAAQBwAHAAAQB1AHUAAQCBAIEAAQCDAIMAAQCGAIYAAQCJAIkAAQCLAJYAAQCYAJ8AAQChAKMAAQClAKYAAQCoAK0AAwCxALEAAQC6ALsAAQC/AL8AAQDBAMEAAQDDAMQAAQDHAMcAAQDLAMsAAQDNAM4AAQDQANEAAQDTANMAAQDaAN4AAQDhAOEAAQDlAOUAAQDnAOkAAQDrAPsAAQD9AP0AAQD/AQEAAQEDAQMAAQEI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ADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAgQCDAIQAjACPAJEAkwCxALIAswC0ALUAtgC3ALgAuQC6ANIA0wDUANUA1gDXANgA2QDaANsA3ADdAN4A3wDgAOEA4gDjAOQA5QDmAOcA6ADpAS8BMwE1ATcBOQE7AUEBQwFFAUkBSwFMAVgBWQFxAbIBuAG9AcAClgKXApkCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUC0gLUAtYC2ALaAtwC3gLgAuIC5ALmAugC6gLsAu4C8ALyAvQC9gL4AvoC/AL+Av8DAQMDAwUDBwMJAwsDDQMPAxEDFAMWAxgDGgMcAx4DIAMiAyQDJgMoAyoDLAMuAzADMgM0AzYDOAM6AzwDPgNAA0EDQwNFA0cDSQOiA6MDpAOlA6YDpwOoA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A7kDyQPKA8sDzAPNA84DzwPQA9ED0gPTA9QD1QPWA9cD2APZA9oD2wPcA90D3gPvA/ED8wP1BAoEDAQOBCMEKQQvBJkEngSiBSMFJQA7ALIAEADS/+AA0//oANQAEADW/+AA2QAUAN0AEADh/+EA5v/gAO0AEwDyABAA+f/gAQQAEAEI/+gBDQAQARf/6AEZ/+ABG//oAR3/6AEf/+gBIf/oATn/4AFB/+gBRf/gAUf/4QFI/+ABSf/hAUr/4AFN/+EBUAAQAVEAEAFY/+kBYv/fAWT/3gFmABABav/oAWz/3wFu//IBbwAQAXAAEAPSABAD2f/oA9z/6APd/+AEBv/gBAn/6AQM/+gEDv/fBBQAEAQWABAEJ//oBCn/6AQr/+gENf/hBDb/4AST/+AElf/hBJb/4ASi/98ABABY/+8AW//fAJr/7gHx/80ABAANABQAQQARAFb/4gBhABMABQA4/9EDKv/RAyz/0QMu/9EE2//RAAUAI/+8AFj/7wBb/98Amv/uAfH/zQAFAFv/swHx/3kB9v/xAgD/8QJM//MABQANAA8AQQAMAFb/6wBhAA4CTP/pAAYAEP+EABL/hAGH/4QBi/+EAY//hAGQ/4QACAAE/9EAVv+5AFv/ywBt/voAfP9CAIH/SQCG/5kAif+hAAkB7v/uAfD/9QHx//EB8//yA2j/7gOU//IDnP/1A53/7gOe/+4ACQHu/+UB8P/xAfH/6wHz/+kDaP/lA5T/6QOc//EDnf/lA57/5QABAIUABAAMAD8AXwCWAJ0AsgDSANQA1QDWANcA2ADZANoA2wDcAN0A3gDgAOEA4gDjAOQA5QDmAOcA6ADpAOoA6wDsAO0A7gDvAPEA9gD3APgA+wD8AP4A/wEAAQMBBAEFAQoBDQEYARkBGgEiAS4BLwEwATMBNAE1ATcBOQE7AUMBRAFUAVYBWAFcAV0BXgGGA8oDzAPNA88D0APRA9ID0wPUA9cD2APZA9sD3APdA94D3wPgA+ID4wPlA+YD5wPoA+4EAgQGBAcEDAQOBA8EEAQRBBIEEwQUBBUEFgQXBBsEHQQeBB8EIAQnBCgELAQuBC8EMAQxBDIEMwQ0BJMElwSYBJsEnQSeBKAEogBEAAYADQALAA0A7f+1APL/vgD3/7YBA/+2AQT/vgEY/9oBGgALARz/5gEe/7YBIAAMASL/tgFC/7YBUf++AWD/tgFh/7YBYwALAWUACwFr/7YBcP++AYUADQGGAA0BiAANAYkADQGKAA0CBv+/Ag8ADgIQ/+0CEwAOAisADgIs/+0CLQANAi8ADgI1/+0D3//wA+D/tgPi/9oD5P+2A+UACwPn/7YD7gALA/cADQP4AA0D+wANBAL/tgQHAAsECP+2BA3/tgQPAAsEFf/wBBf/8AQb/7YEHf+2BB7/tgQo/9oEKv+2BCz/2gQwAAsEMgALBDQACwQ5/7YFBv+/BQ3/7QUQ/+0FEQAOBRX/7QUWAA0ARQDS/zMA1P/1ANb/MwDa//AA3f/1AN7/6wDh/+YA5v/CAOz/7wDw/+8A8f/vAPP/7wD0/+8A9f/vAPb/zgD4/+8A+v/vAPv/7wD+/+8BAP/vAQX/7wEZ/8gBK//vATP/8AE2/+8BOf8zATr/zQE8/+8BPv/vAUP/8AFF/zMBR//mAUn/5gFM/98BUP/1AVP/7wFV/+8BV//vAVz/7wFd//ABYv/QAWT/6wFm//UBbP+fAW3/0AFv//UD0f/rA93/MwPe//AD4f/vA+P/7wPo/+8D7f/vBAP/7wQG/8gEDv+sBBH/8AQf//AEJP/vBCb/7wQv/+sEMf/rBDP/6wQ1/+YEOP/vBJP/MwSV/+YEmP/vBKL/rABGANL/5gDW/+YA2v/yAN7/7gDh/+gA5v/mAOz/8QDu//EA8P/xAPH/8QDz//EA9P/xAPX/8QD2/9AA+P/xAPr/8QD7//EA/v/xAQD/8QEF//EBGf/nASv/8QEz//IBNP/xATb/8QE5/+YBOv/OATz/8QE+//EBQ//yAUT/8QFF/+YBR//oAUn/6AFT//EBVf/xAVf/8QFc//EBXf/yAV7/8QFi/+cBZP/tAWz/5gFt/9AD0f/uA93/5gPe//ID4f/xA+P/8QPm//ED6P/xA+3/8QQD//EEBv/nBA7/5wQR//IEEv/xBB//8gQg//EEJP/xBCb/8QQv/+4EMf/uBDP/7gQ1/+gEOP/xBJP/5gSV/+gEmP/xBKL/5wAPAAr/4gANABQADv/PAEEAEgBK/+oAVv/YAFj/6gBhABMAbf+uAHz/zQCB/6AAhv/BAIn/wAGO/9MCTP/NABAAOP+7ADr/7QA9/9ACtf/QAyr/uwMs/7sDLv+7Az7/0ANA/9AD9f/QBIz/0ASO/9AEkP/QBNv/uwTe/+0E4P/tABAALv/uADn/7gKx/+4Csv/uArP/7gK0/+4DAf/uAzD/7gMy/+4DNP/uAzb/7gM4/+4DOv/uBH7/7gSA/+4E3f/uABAALv/sADn/7AKx/+wCsv/sArP/7AK0/+wDAf/sAzD/7AMy/+wDNP/sAzb/7AM4/+wDOv/sBH7/7ASA/+wE3f/sABEAOgAUADsAGQA9ABYCtQAWAzwAGQM+ABYDQAAWA+8AGQPxABkD8wAZA/UAFgSMABYEjgAWBJAAFgTeABQE4AAUBOIAGQATAFP/6AGGAAkCx//oAsj/6ALJ/+gCyv/oAsv/6AMV/+gDF//oAxn/6ARn/+gEaf/oBGv/6ARt/+gEb//oBHH/6ARz/+gEe//oBLz/6AAVAAb/8gAL//IAWv/zAF3/8wGF//IBhv/yAYj/8gGJ//IBiv/yAtD/8wLR//MDP//zA/b/8wP3//ID+P/yA/v/8gSN//MEj//zBJH/8wTf//ME4f/zAFEABv+6AAv/ugDS/zMA1v8zANr/8QDe/+sA4f/lAOb/wwDs/+4A7v/XAPD/7gDx/+4A8//uAPT/7gD1/+4A9v/MAPj/7gD6/+4A+//uAP7/7gEA/+4BBf/uARn/xwEr/+4BM//xATT/1wE2/+4BOf8zATr/yQE8/+4BPv/uAUP/8QFE/9cBRf8zAUf/5QFJ/+UBTP/fAVP/7gFV/+4BV//uAVz/7gFd//EBXv/XAWL/0AFk/+sBbP+gAW3/zQGF/7oBhv+6AYj/ugGJ/7oBiv+6A9H/6wPd/zMD3v/xA+H/7gPj/+4D5v/XA+j/7gPt/+4D9/+6A/j/ugP7/7oEA//uBAb/xwQO/6sEEf/xBBL/1wQf//EEIP/XBCT/7gQm/+4EL//rBDH/6wQz/+sENf/lBDj/7gST/zMElf/lBJj/7gSi/6sAIgA4/9kAOv/kADv/7AA9/90CBgAOAk4ADgK1/90DKv/ZAyz/2QMu/9kDPP/sAz7/3QNA/90DTgAOA08ADgNQAA4DUQAOA1IADgNTAA4DVAAOA2kADgNqAA4DawAOA+//7APx/+wD8//sA/X/3QSM/90Ejv/dBJD/3QTb/9kE3v/kBOD/5ATi/+wAWwAG/8oAC//KANL/0gDW/9IA2v/0AN7/7QDh/+EA5v/UAOz/4gDu/+8A8P/iAPH/4gDz/+IA9P/iAPX/4gD2/8kA+P/iAPr/4gD7/+IA/v/RAQD/4gEF/+IBCf/lARn/1AEa/+YBIP/jASv/4gEz//QBNP/vATb/4gE5/9IBOv/EATz/4gE+/+IBQ//0AUT/7wFF/9IBR//hAUn/4QFT/+IBVf/iAVf/4gFc/+IBXf/0AV7/7wFi/9QBY//1AWT/5wFs/6oBbf/JAYX/ygGG/8oBiP/KAYn/ygGK/8oD0f/tA93/0gPe//QD4f/iA+P/4gPl/+YD5v/vA+j/4gPt/+ID7v/mA/f/ygP4/8oD+//KBAP/4gQG/9QEB//mBA7/0wQP/+YEEf/0BBL/7wQf//QEIP/vBCT/4gQm/+IEL//tBDD/5gQx/+0EMv/mBDP/7QQ0/+YENf/hBDj/4gST/9IElf/hBJj/4gSi/9MAKQBH/+wASP/sAEn/7ABL/+wAVf/sAJT/7ACZ/+wCvf/sAr7/7AK//+wCwP/sAsH/7ALZ/+wC2//sAt3/7ALf/+wC4f/sAuP/7ALl/+wC5//sAun/7ALr/+wC7f/sAu//7ALx/+wC8//sBFP/7ARV/+wEV//sBFn/7ARb/+wEXf/sBF//7ARh/+wEdf/sBHf/7AR5/+wEff/sBLj/7ATF/+wEx//sADYABgAQAAsAEAANABQAQQASAEf/6ABI/+gASf/oAEv/6ABV/+gAYQATAJT/6ACZ/+gBhQAQAYYAEAGIABABiQAQAYoAEAK9/+gCvv/oAr//6ALA/+gCwf/oAtn/6ALb/+gC3f/oAt//6ALh/+gC4//oAuX/6ALn/+gC6f/oAuv/6ALt/+gC7//oAvH/6ALz/+gD9wAQA/gAEAP7ABAEU//oBFX/6ARX/+gEWf/oBFv/6ARd/+gEX//oBGH/6AR1/+gEd//oBHn/6AR9/+gEuP/oBMX/6ATH/+gASgBH/7QASP+0AEn/tABL/7QATAAUAE8AFABQABQAU/96AFX/tABX/2QAWwALAJT/tACZ/7QB3P9kAr3/tAK+/7QCv/+0AsD/tALB/7QCx/96Asj/egLJ/3oCyv96Asv/egLZ/7QC2/+0At3/tALf/7QC4f+0AuP/tALl/7QC5/+0Aun/tALr/7QC7f+0Au//tALx/7QC8/+0AxX/egMX/3oDGf96AyH/ZAMj/2QDJf9kAyf/ZAMp/2QEU/+0BFX/tARX/7QEWf+0BFv/tARd/7QEX/+0BGH/tARn/3oEaf96BGv/egRt/3oEb/96BHH/egRz/3oEdf+0BHf/tAR5/7QEe/96BH3/tAS4/7QEvP96BMX/tATH/7QEyQAUBMsAFATNABQE2v9kAAEA9AAEAAYACwAMACUAJwAoACkAKgAvADAAMwA0ADUANgA4ADoAOwA8AD0APgA/AEkASgBMAE8AUQBSAFMAVgBYAFoAWwBdAF8AlgCdALIBhQGGAYgBiQGKAfMB9QH2AfgB+wIGAksCTgJgAmICYwKWApcCmQKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKsAq0CrgKvArACtQK+Ar8CwALBAsYCxwLIAskCygLLAtAC0QLSAtQC1gLYAtoC3ALeAuAC4gLjAuQC5QLmAucC6ALpAuoC6wL1AwMDBQMHAwkDCwMOAxADEgMTAxQDFQMWAxcDGAMZAxsDHQMfAyoDLAMuAzwDPgM/A0ADQQNDA0UDSwNMA00DTgNPA1ADUQNSA1MDVANfA2ADYQNiA2MDaQNqA2sDcAOCA4MDhAOFA4kDigOLA5QD7wPxA/MD9QP2A/cD+AP7A/0D/gQ6BDwEPgRABEIERARGBEgESgRMBE4EUARSBFMEVARVBFYEVwRYBFkEWgRbBFwEXQReBF8EYARhBGYEZwRoBGkEagRrBGwEbQRuBG8EcARxBHIEcwR7BIwEjQSOBI8EkASRBLQEtQS3BLsEvAS+BMQExgTJBMoEzATOBNEE0wTUBNUE2ATbBN4E3wTgBOEE4gTkAAEANQAGAAsAlgCxALIAswC0AL0AwQDHAYUBhgGIAYkBigIGAgcCCAOiA6MDpAOlA6YDpwOqA6sDrAOtA64DrwOwA7EDsgOzA7QDtQO2A7cDuAO5A7wDwAPCA8YD9wP4A/sE5gTnBOsE7gT0BPkApwAQ/wcAEv8HACX/TgAu/w0AOAAUAEX/3gBH/+sASP/rAEn/6wBL/+sAU//rAFX/6wBW/+YAWf/qAFr/6ABd/+gAlP/rAJn/6wCb/+oAsv9OAYf/BwGL/wcBj/8HAZD/BwIG/8ACTv/AApv/TgKc/04Cnf9OAp7/TgKf/04CoP9OAqH/TgK2/94Ct//eArj/3gK5/94Cuv/eArv/3gK8/94Cvf/rAr7/6wK//+sCwP/rAsH/6wLH/+sCyP/rAsn/6wLK/+sCy//rAsz/6gLN/+oCzv/qAs//6gLQ/+gC0f/oAtL/TgLT/94C1P9OAtX/3gLW/04C1//eAtn/6wLb/+sC3f/rAt//6wLh/+sC4//rAuX/6wLn/+sC6f/rAuv/6wLt/+sC7//rAvH/6wLz/+sDAf8NAxX/6wMX/+sDGf/rAyoAFAMsABQDLgAUAzH/6gMz/+oDNf/qAzf/6gM5/+oDO//qAz//6ANO/8ADT//AA1D/wANR/8ADUv/AA1P/wANU/8ADaf/AA2r/wANr/8AD9v/oA/7/TgP//94EOv9OBDv/3gQ8/04EPf/eBD7/TgQ//94EQP9OBEH/3gRC/04EQ//eBET/TgRF/94ERv9OBEf/3gRI/04ESf/eBEr/TgRL/94ETP9OBE3/3gRO/04ET//eBFD/TgRR/94EU//rBFX/6wRX/+sEWf/rBFv/6wRd/+sEX//rBGH/6wRn/+sEaf/rBGv/6wRt/+sEb//rBHH/6wRz/+sEdf/rBHf/6wR5/+sEe//rBH3/6wR//+oEgf/qBIP/6gSF/+oEh//qBIn/6gSL/+oEjf/oBI//6ASR/+gEtf9OBLb/3gS4/+sEvP/rBMD/6gTF/+sEx//rBNsAFATf/+gE4f/oAAIAKACWAJYAFgCxALEADQCyALIAFwCzALMAAgC0ALQAAwC9AL0ACADBAMEABwDHAMcAFQIGAgYAEgIHAgcACQII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G2IoLig0KCgooCeqJ7AoHCgiICogMCekJ/In4CfmJ84n2iheKGQf4h/cG2gbbigQAAAAACeYKQYAABt0AAAoUihYG3oAAAAAG4AbhgAAG4wAABuSAAAopgAAG5gAABueAAAbpBuqG7AAAAAAKHwbthu8G8IAACkSKEwbyBvOJnImYB8QH6woaihwKAQoCikGJ/4b1CHsG9Qb2ikeJbIpHhvgKR4lshvmG+wb8iiUG/gb/igoKKAcBBwKJ6onsCYeHO4mHhzuJkIk+CcIJNQnFB50HBAldhwQJXYjWiV2HBYldiJkJXYcHCV2KNYldiJAHCIiCiWOIgoljiOWJY4hPiWOHCglphwuJaYcNCWmIVAlphw6JV4cQCeSHEAnkiPeJ5IcRieSIuInkhxMJyYcTCcmHFInJhxYJyYh2iUQHF4lghxeJYIjYCWCHGQlgiJqJYIcaiWCKOIlgiJMHHAiFiWaIhYlmiOiJZohhiWaHHYlshx8JbIcgiWyIZglshyIJWocjiXEHI4lxCPqJcQclCXEIuglxByaJe4cmiXuHKAl7hymJe4h4CTIIyQkyBysJXYcsiWCI2YldiNyJYIo1iV2KOIlghy4IkYcviJSHMQiRhzKIlIc0CJGHNYiUhzcIkYc4iJSHOgc7iYqJM4c9CWOHPolmiJ8JY4igiWaHQAljh0GJZoo7iWOKPolmh0MJY4dEiWaHRglRh0eJVIdJCVGHSolUh0wJUYdNiVSHTwdQh1IJVIdTiF0HVQk+B1aJaYdYCWyHWYlph1sJbIdciWmHXglsiO6HX4jxiWyHYQlph2KIVwdkAAAJmYdliZyHZwdoh26HaglsiZ+Ha4mih20Jn4duiaKJbImfh26JoolsiVYJV4lZCVqJqgdwCa0HcYdzCVeHdIlaia0JWod2CeSHd4lxB3kJ5Id6iXEHfAnkh32JcQd/CXQHgIl3CbYHggm5B4OHhQl0B4aJdweICFKHiYhkh4sIUoeMiGSJvAeOCb8Hj4m8B5EJvweSh5QIUoeViGSJwgeXCcUHmInCB5oJxQebiOKJNQnFB50HnonJh6AJe4ehicmHowl7h6SJyYemCXuHp4nJh6kJe4eqicmHrAl7icgJyYkRCXuHrYhyB68IdQewiUQHsgkyCDwJRAeziDqHtQe8h7aIOoe4B7yHuYg6h7sHvIe+AAAHv4AAB8EAAAfCgAAHxAfrB8QH6woOihAHxYn/h8WJ/4flCf+Hxwn/h8iJ/4fKCf+KQYn/ihqHy4fNChMHzQoTB86KEwnvChMH0An2h9GJ9ofTCfaJ9Qn2h9SJ7AomiigKJoooB9YKKAfXiigH2QooB9qIMAfaiDAH3AgwB92IMAffCjQH4In/h+IJ/4pBif+H44ocB+UKHAfmihwH6AocB+mH6wfsihMH7goTB++KEwpEihMH8QoTB/KH9wf0B/cH9Yf3B/iH+gf7ihkH/Qn2h/6J9ogACfaJ84gBiAMJ9ogEifmJ6QgGCAeIDAgKiAkICogMCAqIDAgNiewJ6ogPCBCJ7AgSCigIE4ooCBUKKAgWiBsJ6QgYCBmIGwgcifIIHgnyCimIH4ghCfIKDogiiCQKEAoOiCWIJwgwCCiIMAgqCDAIK4gwCC0IMAguiDAIMYoxCDMKNAntijQINInniDYJ54g3ieeKNYldijuJY4mNiF0I7olpieMJ5IlCiUQAAAg5CEOAAAo1iV2JfohaCjuJY4ndCDqJjYhdCO6JaYmZiZUJpAh+CaoJV4njCeSJfomxicIJNQlCiUQJRYlHCFQJaYg8CUQIPYg/CUuAAAhAiEIIQ4AACEsAAAhFCEaI9glxCdQJz4hIAAAISYAACPYJcQhLAAAITIhOCE+JY4hRAAAJvAhSiO6JaYhUCWmIVYhXCZOJlQhYgAAKNYldiX6IWgk/gAAKO4ljiFuAAAmkCH4JjYhdCeMJ5Il+ibGIkAiRicIJNQlFiUcKOIlgij6JZohegAAI9glxCGAJtIiTCJSJKQkyCUiJSghhiWaIYwAACb8IZIjxiWyIZglsiGeIewhpAAAIaokyCGwIcghvCHUIbYhyCG8IdQhwiHIIc4h1CHaJRAh4CTIIeYh7CHyIfgh/iIEKNYldijiJYIiCiWOIhAAACIWJZoiHAAAIiIAACIoAAAiLgAAIjQiuCI6IsQiQCJGIkwiUiUKJRAjuiWmIlgAACJeAAAjuiWmI2YldiNyJYIiZCV2ImolgiJwAAAidgAAInwljiKCJZoiiCKOIpQioCKaIqAipgAAIqwAACKyIrgiviLEIsoAACLQAAAi1gAAItwAACLiJ5Ii6CXEIu4AACL0AAAi+gAAIwAAACMGAAAjDAAAIxIAACMYJMgjHgAAIyQkyCMqAAAjMCTIIzYAACM8AAAjQgAAI0gAACYqJM4o1iNsKOIjeCNOJXYjVCWCKNYldijiJYIo1iV2KOIlgijWJXYo4iWCKNYldijiJYIjWiNsI2AjeCjWJXYo4iWCKNYldijiJYIo1iV2KOIlgijWJXYo4iWCI2YjbCNyI3go7iOcKPojqCN+JY4jhCWaI4oljiOQJZoo7iWOKPolmijuJY4o+iWaKO4ljij6JZoo7iWOKPolmiOWI5wjoiOoI64lpiO0JbIjuiPAI8YpJCeMI+Qj2CPwI8wnkiPSJcQnjCeSI9glxCeMJ5Ij2CXEJ4wnkiPYJcQnjCeSI9glxCPeI+Qj6iPwI/YkFCP8JCAj9iQUI/wkICQCJBQkCCQgJA4kFCQaJCAkJiQsJDIkOCcgJD4kRCRKJFAnJiRWJe4kXCR6JGIl7iRcJHokYiXuJGgkeiRuJe4kdCR6JIAl7iSGJIwkkiSYJQokniSkJKoksCUQJLYkyCS8JRAkwiTIJiokzicIJNQk2gAAJOAAACTmAAAk/gAAJQQAAAAAJOwAACTyJkIk+CT+AAAlBAAAJnImYCUKJRAlFiUcJSIlKCUuAAAlNCU6JUAlRiVMJVIlWCVeJWQlaiVwJXYlfCWCJYgljiWUJZoloCWmJawlsiW4J5IlviXEJcol0CXWJdwl4icmJegl7iX0AAAl+iYAJgYmDCYeJhImKiYYJh4mJCYqJjAmNiY8JkImSCZOJlQmWiZgJmYmbCZyJngmfiaEJoopJCaQJpYmnCaiJqgmria0JronjCeSJsAmxibMJtIm2CbeJuQm6ibwJvYm/CcCJwgnDicUJxonICcmJywnMic4Jz4nRCdKJ1AnVidcJ2InaCduJ3QneieAJ4YnjCeSKQYn/ikSKEwoXihkJ84n2igoKKAodijQAAAnmCkGJ/4oBCgKKRIoTCg6J54oXihkJ84n2iekJ/IoHCgiJ6onsCgoKKAoLig0KDooQCh2KNAoRihMJ9Qn2ie2KNAnvChMJ8IAACimJ8gnzifaJ9Qn2ifgJ+Yn7CfyJ/gAACkGJ/4oBCgKKBAAACkSKEwoFgAAKBwoIiheKGQoKCigKC4oNChqKHAoOihAKEYoTChSKFgoXihkKGoocCh2KNAAACh8KIIAACiIAAAojiiUKJoooCimKKwosijEKLgoxCi+KMQoyijQKNYo3CjiKOgo7ij0KPopACkG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A04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA54DaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgUbA4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORBR4DkgOTA5UDlAOWA5cDmAOZA5oDmwOcA50DnwOgA6EFHAUdBOcE6ATpBOoE9AT3BPUE9gT7BPwE/QTrBOwE7QUGBQkFCgUNBQ8FEAIcBRIE/gT/BQAFAQUCBQMFBAUFBR8FIAUhBSIFEwUVBRYCMwUYAjUFGQUXAjECJwItBScFKAACBwIA+wICAo0B7AHrAeoB6QHoAecB5gHlAeQB4wJOAk0CTAJLAkMCAQIAAf8B/gH9AfwB+wH6AfkB+AH3AfYB9QH0AfMB8gHxAfAB7wHuAe0CAwIEAo8CkQKQApICjgKTAm0CBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGwIcBRoCHQIeAh8CIAIhAiICIwIkAiUCJgJWAigCKQIqAisFFAIsAi4CLwIwAjECMgIzAjQCfwI2AjcCOQI4A0sDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwN0A3UDdgN3A3gDeQN6A3sDfAN9A34DfwUbA4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORBR4DkgOTA5UDlAOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQUcBR0E5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUE9gT3BPgE+QT6BPsE/AT9BP4E/wUABQEFAgUDAhoFBAUFBQYFBwUIBQkFCgULBQwFDQUOBQ8FEAURBRIFHwUgBSEFIgUTBRUFFgUYAjUFGQUXAicCLQUnBSgAAQABAXwAAQABAEsAAQABALsAAQABADYAAQABABMAAQACAyQDJQACBuYG2gACBugG2gABBvAAAQbyAAEG9AACAAEAFAAdAAAAAQACAC8ATwABAAMASQBLAoUAAgAAAAEG4AABAAYC1gLXAugC6QNrA3QAAQAGAE0ATgL9A+oD7ARlAAIAAwGVAZUAAAHgAeIAAQI6AkAABAACAAIAqACsAAEBJAEnAAEAAQAMACcAKAArADMANQBGAEcASABLAFMAVABVAAIAAgAUAB0AAAJwAnkACgACAAYATQBNAAYATgBOAAQC/QL9AAUD6gPqAAMD7APsAAIEZQRlAAEAAgAEABQAHQAAAoECgQAKAowCjAALBKkEsAAMAAIABgAaABoAAAAcABwAAQJlAmoAAgJuAm4ACAJwAnkACQKAAoAAEwABABQAGgAcAmUCZgJnAmgCaQJqAm4CgAKBAowEqQSqBKsErAStBK4ErwSwAAEF4AABBeIAAQXkAAEF5gABBegAAQXqAAEF7AABBe4AAQXwAAEF8gABBfQAAQX2AAEF+AABBfoAAQX8AAIF/gYEAAIGBAYKAAIGCgYQAAIGEAYWAAIGFgYcAAIGHAYiAAIGIgYoAAIGKAYuAAIGLgY0AAIGNAY6AAIGOgZAAAMGQAZGBkwAAwZKBlAGVgADBlQGWgZgAAMGXgZkBmoAAwZoBm4GdAADBnIGeAZ+AAMGfAaCBogAAwaGBowGkgAEBpAGlgacBqIABAaeBqQGqgawAAUGrAayBrgGvgbEAAUGvgbEBsoG0AbWAAUG0AbWBtwG4gboAAUG4gboBu4G9Ab6AAUG9Ab6BwAHBgcMAAUHBgcMBxIHGAceAAUHGAceByQHKgcwAAUHKgcwBzYHPAdCAAUHPAdCB0gHTgdUAAYHTgdUB1oHYAdmB2wABgdkB2oHcAd2B3wHggAGB3oHgAeGB4wHkgeYAAYHkAeWB5wHogeoB64ABgemB6wHsge4B74HxAAGB7wHwgfIB84H1AfaAAYH0gfYB94H5AfqB/AABwgwB+gH7gf0B/oIAAgGAAcIKAf8CAIICAgOCBQIGgABAOsACgBFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AhQCGAIcAiQCKAIsAjQCQAJIAlAC7ALwAvQC+AL8AwADBAMIAwwDEAMUAxgDHAMgAyQDKAMsAzADNAM4A6gDrAOwA7QDuAO8A8ADxAPIA8wD0APUA9gD3APgA+QD6APsA/AD9AP4A/wEAAQEBAgEDAQQBBQEGAQcBMAE0ATYBOAE6ATwBQgFEAUYBSgFNAVoCmAKaArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0wLVAtcC2QLbAt0C3wLhAuMC5QLnAukC6wLtAu8C8QLzAvUC9wL5AvsC/QMAAwIDBAMGAwgDCgMMAw4DEAMSAxUDFwMZAxsDHQMfAyEDIwMlAycDKQMrAy0DLwMxAzMDNQM3AzkDOwM9Az8DQgNEA0YDSANKA7oDuwO8A70DvwPAA8EDwgPDA8QDxQPGA8cDyAPfA+AD4QPiA+MD5APlA+YD5wPoA+kD6gPrA+wD7QPuA/AD8gP0A/YECwQNBA8EHQQkBCoEMASaBJsEnwSjBSQFJgABAPsACAAKABQAFQAWABcAGAAZABoAGwAcAB0AJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AGUAZwCBAIMAhACMAI8AkQCTALEAsgCzALQAtQC2ALcAuAC5ALoA0gDTANQA1QDWANcA2ADZANoA2wDcAN0A3gDfAOAA4QDiAOMA5ADlAOYA5wDoAOkBLwEzATUBNwE5ATsBQQFDAUUBSQFLAUwBWAFZAXEBsgG4Ab0BwAKWApcCmQKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQLSAtQC1gLYAtoC3ALeAuAC4gLkAuYC6ALqAuwC7gLwAvIC9AL2AvgC+gL8Av4C/wMBAwMDBQMHAwkDCwMNAw8DEQMUAxYDGAMaAxwDHgMgAyIDJAMmAygDKgMsAy4DMAMyAzQDNgM4AzoDPAM+A0ADQQNDA0UDRwNJA6IDowOkA6UDpgOnA6gDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA+8D8QPzA/UECgQMBA4EIwQpBC8EmQSeBKIFIwUlAdcAAgBNAdgAAgBQAdkAAwBKAE0B2gADAEoAUAABAAEASgHWAAIASgHcAAIAWAHbAAIAWAABAAMASgBXAJUAAAABAAEAAQABAAAAAwTCAAIArQLYAAIAqQTIAAIArQTVAAIAqQTDAAIArQLZAAIAqQSyAAIAqQTJAAIArQRlAAIArQTWAAIAqQNHAAIAqQNJAAIAqQNIAAIAqQNKAAIAqQTBAAIAqQTGAAIB1QTEAAIArQSxAAIAqQLyAAIB1QP8AAIAqQTQAAIArQMqAAIB1QTbAAIArQTgAAIArQTeAAIAqgNBAAIAqQTkAAIArQTHAAIB1QTFAAIArQP9AAIAqQTRAAIArQMrAAIB1QTcAAIArQThAAIArQTfAAIAqgNCAAIAqQTlAAIArQTKAAIAqQMDAAIB1QTMAAIArQMFAAIAqQMHAAIB1QTOAAIArQMgAAIAqQMmAAIB1QTZAAIArQPxAAIAqQTiAAIArQPvAAIAqATLAAIAqQMEAAIB1QTNAAIArQMGAAIAqQMIAAIB1QTPAAIArQMhAAIAqQMnAAIB1QTaAAIArQPyAAIAqQTjAAIArQPwAAIAqAMaAAIAqQMcAAIB1QTXAAIArQS9AAIArAMbAAIAqQMdAAIB1QTYAAIArQS+AAIArAMNAAIAqQMPAAIB1QTSAAIArQSzAAIAqAKrAAIAqgK1AAIAqQSMAAIArQP1AAIAqASOAAIAqwSQAAIAqgMOAAIAqQMQAAIB1QTTAAIArQS0AAIAqALGAAIAqgLQAAIAqQSNAAIArQP2AAIAqASPAAIAqwSRAAIAqgLDAAIAqQLCAAIAqARjAAIAqwL3AAIAqgS6AAIArAR0AAIAqQR8AAIArQR2AAIAqAR4AAIAqwR6AAIAqgR1AAIAqQR9AAIArQR3AAIAqAR5AAIAqwR7AAIAqgSCAAIAqQSKAAIArQSEAAIAqASGAAIAqwSIAAIAqgSDAAIAqQSLAAIArQSFAAIAqASHAAIAqwSJAAIAqgKcAAIAqQQ6AAIArQKbAAIAqAQ8AAIAqwKeAAIAqgS1AAIArAKkAAIAqQRSAAIArQKjAAIAqARUAAIAqwRWAAIAqgS3AAIArAKoAAIAqQRkAAIArQKnAAIAqARiAAIAqwL2AAIAqgS5AAIArAK3AAIAqQQ7AAIArQK2AAIAqAQ9AAIAqwK5AAIAqgS2AAIArAK/AAIAqQRTAAIArQK+AAIAqARVAAIAqwRXAAIAqgS4AAIArALIAAIAqQRnAAIArQLHAAIAqARpAAIAqwLKAAIAqgS8AAIArALNAAIAqQR/AAIArQLMAAIAqASBAAIAqwMxAAIAqgTAAAIArAKtAAIAqQRmAAIArQKsAAIAqARoAAIAqwKvAAIAqgS7AAIArAKyAAIAqQR+AAIArQKxAAIAqASAAAIAqwMwAAIAqgS/AAIArATUAAMAqgCpBN0AAwCqAKkAAgARACUAKQAAACsALQAFAC8ANAAIADYAOwAOAD0APgAUAEUASQAWAEsATQAbAE8AVAAeAFYAWwAkAF0AXgAqAIEAgQAsAIMAgwAtAIYAhgAuAIkAiQAvAI0AjQAwAJgAmwAxANAA0AA1AAA=',\n      'Roboto-Regular.ttf':\n        'AAEAAAARAQAABAAQR0RFRqcXo6wAAcMkAAACWEdQT1MB9nz6AAHFfAAAeJJHU1VCzzL7wgACPhAAABX6T1MvMpeDsYsAAAGYAAAAYGNtYXBnX+zQAAAWoAAABopjdnQgO/gmfQAAL4QAAAD+ZnBnbagFhDIAAB0sAAAPhmdhc3AACAAZAAHDGAAAAAxnbHlmpUQY8gAAOtwAAYRyaGVhZAtjdKEAAAEcAAAANmhoZWEKugrLAAABVAAAACRobXR4BSSe4QAAAfgAABSobG9jYebohTMAADCEAAAKVm1heHAI2hDGAAABeAAAACBuYW1lVOeDDwABv1AAAAOmcG9zdP9tAGQAAcL4AAAAIHByZXB5WM7TAAAstAAAAs4AAQAAAAMC0XueoplfDzz1ABsIAAAAAADE8BEuAAAAAOP3FVz6Gv3VCTEIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJSvoa/koJMQABAAAAAAAAAAAAAAAAAAAFKgABAAAFKgCpABUAdgAHAAIAEAAvAJoAAALmD3UAAwABAAQEiQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwAAAAIAADA4wAZAAAAAAAAAAAAfwAAAH8AAACEAChApAAiQTtAHcEfwBuBdwAaQT6AGYBZgBoAr0AhgLJACcDcgAcBIoATgGTAB0CNgAmAhwAkANNABMEfwBzBH8AqwR/AF4EfwBfBH8ANQR/AJoEfwCFBH8ATgR/AHEEfwBkAfAAhQGxACkEEQBIBGQAmAQvAIcDyABLBy8AbQU4AB0E/ACpBTUAeAVAAKkEjACpBGwAqQVzAHoFtQCpAi0AtwRqADUFBQCpBE8AqQb8AKkFtQCpBYEAdwUMAKkFgQBuBO4AqQTAAFEExgAyBTAAjAUYAB0HGQA9BQQAOgTOAA8EywBXAh8AkwNJACkCHwAKA1gAQAOcAAQCeQA5BFoAbQR+AIwEMABdBIMAXwQ+AF0CyAA9BH4AYQRoAI0B8gCOAer/vgQOAI0B8gCcBwQAiwRrAI0EkABcBH4AjASMAF8CtgCNBCEAXwKeAAkEaQCJA+AAIQYDACsD+AAqA8kAFgP4AFkCtQBAAfQAsAK1ABQFcQCDAfQAiwRhAGkEpwBbBbUAaQQ0AA8B7ACUBOgAWwNZAGUGSQBcA5QAkwPBAGUEbgB/BkoAWwOrAI8C/QCDBEcAYQLvAEIC7wA/AoIAewSJAJsD6gBEAhcAlAH8AHQC7wB7A6QAewPAAGcF3ABVBjUAUAY5AHADygBEB3r/8QRFAFkFgQB3BLoApwTCAIwGwgBPBLEAfgSSAEcEiQBcBJwAlQTIAF8FmwAeAfsAnAR0AJsETwAjAioAIwWLAKIEiQCSB6EAaQdEAGEB/AChBYcAXgK6/+MFfwBmBJMAXAWQAIwE8wCJAgT/tAQ4AGMDxACqA44AjgOrAI8DawCCAfIAjgKuAHkCKwAyA8YAewL8AF8CWgB/AAD8pwAA/W4AAPyKAAD9XQAA/CcAAP04Ag4AuAQMAHICFwCUBHMAsgWkACAFcgBnBT8AMgSSAHgFtQCyBJIARgW7AE4FiQBaBVIAcgSGAGQEvQChBAMALwSJAGEEUQBkBCUAbQSJAJIEjwB7ApgAwwRvACYD7ABmBMUAKQSJAJIETgBlBIgAYQQsAFEEXgCQBaMAWAWaAGAGlwB6BKIAegRD/9oGSABLBgAAKwVlAHsIkgAyCKUAsgaDAD4FtACwBQsAowYEADMHQwAbBMAAUAW1ALIFqgAwBQgATQYtAFQF2gCvBXoAlweHALAHwACwBhIAEQbrALIFBQCjBWUAlAcnALcFGABaBG0AYgSTAJ4DXACbBNQALgYhABYEEABYBJ4AnQRTAJ0EoAAsBe8AngSdAJ0EngCdA9kAKAXOAGQEvgCdBFoAaAZ5AJ0GnwCSBPcAHgY2AJ4EWACeBE4AZAaIAJ4EZAAvBGj/5wROAGcGyQAnBuQAnQSJ//0EngCdBwkAnAYsAIEEV//bBywAuAX5AJoE0wAoBEcADwcMAMoGDAC9BtIAkwXiAJcJBQC3B9EAnAQkAFAD2wBMBXIAZwSMAFwFCwAWBAQALwVyAGcEiQBcBwEAnAYkAH4HCQCcBiwAgQUyAHYESABkBP4AdAAA/GYAAPxwAAD9ZQAA/aQAAPoaAAD6KwYJALIE7QCdBFf/2wUbAKkEigCMBGQAogORAJIE2wCyBAYAkgeiABsGYQAWBZoAsgS4AJ0FCgCkBH4AmwaMAEUFhAA/Bf8AqQTZAJ0HzwCpBbQAkggxALAG9ACSBe8AcQTUAG4FGAA6BCoAKgctADQFXQAfBbwAlwSWAGgFcACXBGsAhAVwAIkGMAA/BL7/3QUKAKQEWgCbBf4AMATvACwFswCyBIkAkgYSAKkE7ACdB08AqQY+AJ4FhwBeBKgAaASoAGoEuAA5A6sAOgUuADoEQAAqBPcAVwaVAFoG5QBkBlcANgUsADEESgBTBAgAeQfCAEUGdgA/B/sAqgaiAJAE9wB2BB4AZgWuACQFIQBGBWUAlwYCADAE8wAsBSsAjwMhAHAEFAAACCkAAAQUAAAIKQAAArkAAAIKAAABXAAABH8AAAIwAAABogAAAQAAAADRAAAAAAAAAjQAJgI0ACYFQACiBj8AkAOmAA0BmgBhAZoAMAGYACQBmgBPAtQAaQLcADwCwgAkBGoARgSQAFcCswCLA8QAlAVaAJQBfwBSB6oARAJnAGwCZwBaA6MAPALvAFEC7wA2Au8AXALvAFYC7wA7Au8ATwLvAEoDOABQAvgAUAL4AFAB8QBUAfEAUANhAHoC7wBRAu8AewLvAEIC7wA/Au8ANgLvAFwC7wBWAu8AOwLvAE8C7wBKAzgAUAL4AFAC+ABQAfEAVAHxAFAEpwBbBlYAHwaRAKcIdgCpBesAHwYrAIwEfwBfBdoAHwQjACsEdAAhBUgAXQVPAB8F6AB7A84AaAg6AKIFAQBoBRgAmAYmAFQG1wBlBs8AZAZqAFoEkABqBY8AqQSvAEYEkwCoBMUAPwg6AGMCDf+vBIIAZQRkAJgEEQA9BC8AhAQIACwCTAC1ApAAbwIEAF0E8wA9BG8AIASLAD0G1AA9BtQAPQTuAD0GmwBfAAAAAAg0AFsINQBcAu8AQgLvAHsC7wBRBBAAVgQQAGEEEABCBA8AcgQQAIEEEAAxBBAATwQQAE8EEACZBBAAYwQjAEgEKwAOBFQAJwYVADEEaAAUBH0AdQQnACkEIABEBEoAigS8AFoEXQCLBLwAYATjAIsGAgCLA7UAiwRVAIsDzwAsAekAmATkAIsErABkA8wAiwQgAEQENAAxA6EADgOvAIsEaAAUBLwAYARoABQDiQA+BM8AiwPwAEAFZwBhBRcAYQTzAHYFcwAnBHwAYQdCACgHUACLBXQAKQTOAIsEWgCLBSUALgYLAB8EQABIBOwAiwROAIwEwQAoBCAAIwUpAIsEagA9BlEAiwasAIsFHQAJBfEAiwRPAIsEfABLBncAiwSHAFAEEgALBkgAHwR5AIwFCgCMBTcAJAXDAGAEXwAOBKgAJwZiACcEagA9BGoAiwXEAAIEywBeBEAASAS8AGAENAAxA+QAQwgiAIsEqwAoAu8APwLvADYC7wBcAu8AVgLvADsC7wBPAu8ASgOXAI8CtQCfA+YAiwQ6AB8ExABkBUwAsgUkALIEFACTBT0AsgQPAJMEgACLBHwAYQRRAIsEhgAUAf4AnwOlAIIAAPyjA/AAbwP0/10EDwBpA/UAaQOvAIsDoACCA58AggLvAFEC7wA2Au8AXALvAFYC7wA7Au8ATwLvAEoFggB+Ba8AfgWTALIF4AB+BeMAfgPVAKAEggCDBFgADwTPAD4EawBlBC4ASgOlAIQBkgBoBqQAYAS6AIIB/P+2BH8AOwR/AHMEfwAiBH8AdgR/AHYEfwA2BH8AfgR/AF4EfwBxBH8A9AIG/7QCBP+0AfsAnAH7//kB+wCcBFEAiwUAAHgEIQA7BH4AjAQzAF0EkwBbBIwAWwSfAFoEjgCMBJwAWwQ+AF0EfgBhBHAAWgN5AFcE1gBoA7UAAQY6AAkD+QCLBLwAYATjADAE4wCLAfwAAAI2ACYFXgAlBV4AJQSGAAEExgAyAp7/9AU4AB0FOAAdBTgAHQU4AB0FOAAdBTgAHQU4AB0FNQB4BIwAqQSMAKkEjACpBIwAqQIt/98CLQCxAi3/6gIt/9UFtQCpBYEAdwWBAHcFgQB3BYEAdwWBAHcFMACMBTAAjAUwAIwFMACMBM4ADwRaAG0EWgBtBFoAbQRaAG0EWgBtBFoAbQRaAG0EMABdBD4AXQQ+AF0EPgBdBD4AXQH7/8QB+wCWAfv/zwH7/7oEawCNBJAAXASQAFwEkABcBJAAXASQAFwEaQCJBGkAiQRpAIkEaQCJA8kAFgPJABYFOAAdBFoAbQU4AB0EWgBtBTgAHQRaAG0FNQB4BDAAXQU1AHgEMABdBTUAeAQwAF0FNQB4BDAAXQVAAKkFGQBfBIwAqQQ+AF0EjACpBD4AXQSMAKkEPgBdBIwAqQQ+AF0EjACpBD4AXQVzAHoEfgBhBXMAegR+AGEFcwB6BH4AYQVzAHoEfgBhBbUAqQRoAI0CLf+2Afv/mwIt/80B+/+yAi3/7AH7/9ECLQAXAfL/+gItAKoGlwC3A9wAjgRqADUCBP+0BQUAqQQOAI0ETwCiAfIAkwRPAKkB8gBWBE8AqQKIAJwETwCpAs4AnAW1AKkEawCNBbUAqQRrAI0FtQCpBGsAjQRr/7sFgQB3BJAAXAWBAHcEkABcBYEAdwSQAFwE7gCpArYAjQTuAKkCtgBTBO4AqQK2AGQEwABRBCEAXwTAAFEEIQBfBMAAUQQhAF8EwABRBCEAXwTAAFEEIQBfBMYAMgKeAAkExgAyAp4ACQTGADICxgAJBTAAjARpAIkFMACMBGkAiQUwAIwEaQCJBTAAjARpAIkFMACMBGkAiQUwAIwEaQCJBxkAPQYDACsEzgAPA8kAFgTOAA8EywBXA/gAWQTLAFcD+ABZBMsAVwP4AFkHev/xBsIATwWBAHcEiQBcBID/vQSA/70EJwApBIYAFASGABQEhgAUBIYAFASGABQEhgAUBIYAFAR8AGED5gCLA+YAiwPmAIsD5gCLAen/vAHpAI4B6f/HAen/sgTjAIsEvABgBLwAYAS8AGAEvABgBLwAYAR9AHUEfQB1BH0AdQR9AHUEKwAOBIYAFASGABQEhgAUBHwAYQR8AGEEfABhBHwAYQSAAIsD5gCLA+YAiwPmAIsD5gCLA+YAiwSsAGQErABkBKwAZASsAGQE5ACLAen/kwHp/6oB6f/JAekABQHpAIcDzwAsBFUAiwO1AIMDtQCLA7UAiwO1AIsE4wCLBOMAiwTjAIsEvABgBLwAYAS8AGAESgCKBEoAigRKAIoEIABEBCAARAQgAEQEIABEBCcAKQQnACkEJwApBH0AdQR9AHUEfQB1BH0AdQR9AHUEfQB1BhUAMQQrAA4EKwAOBCMASAQjAEgEIwBIBTgAHQTw/4wGGf+aApH/oAWV//oFMv92BWb//AKY/5sFOAAdBPwAqQSMAKkEywBXBbUAqQItALcFBQCpBvwAqQW1AKkFgQB3BQwAqQTGADIEzgAPBQQAOgIt/9UEzgAPBIYAZARRAGQEiQCSApgAwwReAJAEdACbBJAAXASJAJsD4AAhBHAAWgKY/+QEXgCQBJAAXAReAJAGlwB6BIwAqQRzALIEwABRAi0AtwIt/9UEagA1BSQAsgUFAKkFCABNBTgAHQT8AKkEcwCyBIwAqQW1ALIG/ACpBbUAqQWBAHcFtQCyBQwAqQU1AHgExgAyBQQAOgRaAG0EPgBdBJ4AnQSQAFwEfgCMBDAAXQPJABYD+AAqBD4AXQNcAJsEIQBfAfIAjgH7/7oB6v++BFMAnQPJABYHGQA9BgMAKwcZAD0GAwArBxkAPQYDACsEzgAPA8kAFgFmAGgCkACJBCAAoQIE/7QBmgAwBvwAqQcEAIsFOAAdBFoAbQSMAKkFtQCyBD4AXQSeAJ0FiQBaBZoAYAULABYEBP/7CFkAXAlKAHcEwABQBBAAWAU1AHgEMABdBM4ADwQDAC8CLQC3B0MAGwYhABYCLQC3BTgAHQRaAG0FOAAdBFoAbQd6//EGwgBPBIwAqQQ+AF0FhwBeBDgAYwQ4AGMHQwAbBiEAFgTAAFAEEABYBbUAsgSeAJ0FtQCyBJ4AnQWBAHcEkABcBXIAZwSMAFwFcgBnBIwAXAVlAJQETgBkBQgATQPJABYFCABNA8kAFgUIAE0DyQAWBXoAlwRaAGgG6wCyBjYAngSDAF8FOAAdBFoAbQU4AB0EWgBtBTgAHQRaAG0FOAAdBFr/yQU4AB0EWgBtBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTgAHQRaAG0FOAAdBFoAbQU4AB0EWgBtBTgAHQRaAG0EjACpBD4AXQSMAKkEPgBdBIwAqQQ+AF0EjACpBD4AXQSM/+4EPv+4BIwAqQQ+AF0EjACpBD4AXQSMAKkEPgBdAi0AtwH7AJwCLQCkAfIAhgWBAHcEkABcBYEAdwSQAFwFgQB3BJAAXAWBAEYEkP/CBYEAdwSQAFwFgQB3BJAAXAWBAHcEkABcBX8AZgSTAFwFfwBmBJMAXAV/AGYEkwBcBX8AZgSTAFwFfwBmBJMAXAUwAIwEaQCJBTAAjARpAIkFkACMBPMAiQWQAIwE8wCJBZAAjATzAIkFkACMBPMAiQWQAIwE8wCJBM4ADwPJABYEzgAPA8kAFgTOAA8DyQAWBKEAXwTGADID2QAoBXoAlwRaAGgEcwCyA1wAmwYwAD8Evv/dBGgAjQUF/9QFBf/UBHMAAwNc//0FOAALBCj/0wTOAA8EAwAvBQQAOgP4ACoEUQBkBGwAEgY/AJAEfwBeBH8AXwR/ADUEfwCaBJMAmQSnAIUEkwBkBKcAhwVzAHoEfgBhBbUAqQRrAI0FOAAdBFoAOgSMAF8EPgApAi3/CwH7/vAFgQB3BJAAMwTuAFYCtv+MBTAAjARpACsEp/84BPwAqQR+AIwFQACpBIMAXwVAAKkEgwBf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AUT/7wFF/9IBR//hAUn/4QFT/9EBVf/RAVf/0QFc/9EBXf/0AV7/7wFi/9QBY//1AWT/5wFs/9IBbf/JAYX/ygGG/8oBiP/KAYn/ygGK/8oD0f/tA93/0gPe//QD4f/RA+P/0QPl/+YD5v/vA+j/0QPt/9ED7v/mA/f/ygP4/8oD+//KBAP/0QQG/9QEB//mBA7/0wQP/+YEEf/0BBL/7wQf//QEIP/vBCT/0QQm/9EEL//tBDD/5gQx/+0EMv/mBDP/7QQ0/+YENf/hBDj/0QST/9IElf/hBJj/0QSi/9MAKQBH/+wASP/sAEn/7ABL/+wAVf/sAJT/7ACZ/+wCvf/sAr7/7AK//+wCwP/sAsH/7ALZ/+wC2//sAt3/7ALf/+wC4f/sAuP/7ALl/+wC5//sAun/7ALr/+wC7f/sAu//7ALx/+wC8//sBFP/7ARV/+wEV//sBFn/7ARb/+wEXf/sBF//7ARh/+wEdf/sBHf/7AR5/+wEff/sBLj/7ATF/+wEx//sADYABgAQAAsAEAANABQAQQASAEf/6ABI/+gASf/oAEv/6ABV/+gAYQATAJT/6ACZ/+gBhQAQAYYAEAGIABABiQAQAYoAEAK9/+gCvv/oAr//6ALA/+gCwf/oAtn/6ALb/+gC3f/oAt//6ALh/+gC4//oAuX/6ALn/+gC6f/oAuv/6ALt/+gC7//oAvH/6ALz/+gD9wAQA/gAEAP7ABAEU//oBFX/6ARX/+gEWf/oBFv/6ARd/+gEX//oBGH/6AR1/+gEd//oBHn/6AR9/+gEuP/oBMX/6ATH/+gASgBH/8UASP/FAEn/xQBL/8UATAAgAE8AIABQACAAU/+AAFX/xQBX/5AAWwALAJT/xQCZ/8UB3P+QAr3/xQK+/8UCv//FAsD/xQLB/8UCx/+AAsj/gALJ/4ACyv+AAsv/gALZ/8UC2//FAt3/xQLf/8UC4f/FAuP/xQLl/8UC5//FAun/xQLr/8UC7f/FAu//xQLx/8UC8//FAxX/gAMX/4ADGf+AAyH/kAMj/5ADJf+QAyf/kAMp/5AEU//FBFX/xQRX/8UEWf/FBFv/xQRd/8UEX//FBGH/xQRn/4AEaf+ABGv/gARt/4AEb/+ABHH/gARz/4AEdf/FBHf/xQR5/8UEe/+ABH3/xQS4/8UEvP+ABMX/xQTH/8UEyQAgBMsAIATNACAE2v+QAAEA9AAEAAYACwAMACUAJwAoACkAKgAvADAAMwA0ADUANgA4ADoAOwA8AD0APgA/AEkASgBMAE8AUQBSAFMAVgBYAFoAWwBdAF8AlgCdALIBhQGGAYgBiQGKAfMB9QH2AfgB+wIGAksCTgJgAmICYwKWApcCmQKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKsAq0CrgKvArACtQK+Ar8CwALBAsYCxwLIAskCygLLAtAC0QLSAtQC1gLYAtoC3ALeAuAC4gLjAuQC5QLmAucC6ALpAuoC6wL1AwMDBQMHAwkDCwMOAxADEgMTAxQDFQMWAxcDGAMZAxsDHQMfAyoDLAMuAzwDPgM/A0ADQQNDA0UDSwNMA00DTgNPA1ADUQNSA1MDVANfA2ADYQNiA2MDaQNqA2sDcAOCA4MDhAOFA4kDigOLA5QD7wPxA/MD9QP2A/cD+AP7A/0D/gQ6BDwEPgRABEIERARGBEgESgRMBE4EUARSBFMEVARVBFYEVwRYBFkEWgRbBFwEXQReBF8EYARhBGYEZwRoBGkEagRrBGwEbQRuBG8EcARxBHIEcwR7BIwEjQSOBI8EkASRBLQEtQS3BLsEvAS+BMQExgTJBMoEzATOBNEE0wTUBNUE2ATbBN4E3wTgBOEE4gTkAAEANQAGAAsAlgCxALIAswC0AL0AwQDHAYUBhgGIAYkBigIGAgcCCAOiA6MDpAOlA6YDpwOqA6sDrAOtA64DrwOwA7EDsgOzA7QDtQO2A7cDuAO5A7wDwAPCA8YD9wP4A/sE5gTnBOsE7gT0BPkApwAQ/xYAEv8WACX/VgAu/vgAOAAUAEX/3gBH/+sASP/rAEn/6wBL/+sAU//rAFX/6wBW/+YAWf/qAFr/6ABd/+gAlP/rAJn/6wCb/+oAsv9WAYf/FgGL/xYBj/8WAZD/FgIG/8ACTv/AApv/VgKc/1YCnf9WAp7/VgKf/1YCoP9WAqH/VgK2/94Ct//eArj/3gK5/94Cuv/eArv/3gK8/94Cvf/rAr7/6wK//+sCwP/rAsH/6wLH/+sCyP/rAsn/6wLK/+sCy//rAsz/6gLN/+oCzv/qAs//6gLQ/+gC0f/oAtL/VgLT/94C1P9WAtX/3gLW/1YC1//eAtn/6wLb/+sC3f/rAt//6wLh/+sC4//rAuX/6wLn/+sC6f/rAuv/6wLt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Gb4mKiTsJjYk+BnEGcoZ0BnWGdwZ4hnoGe4jwCOuKF4juiQaJA4kJiV8G8gAACI0IkAkkgAAAAAgkCCcIKIkwgAAIKggriC0AAAAAAAAGfQAACDSAAAhwgAAINgg3iWCAAAaeAAAGfoAABoAAAAh1CJYGgYAAAAAGgwaEgAAJHQAABoYAAAaHgAAGiQAABoqAAAaMAAAJJgAABo2AAAaPAAAIdoiZBpCAAAaSAAAGk4aVBpaAAAaYAAAGmYAACRuAAAabAAAGnIAACR6AAAahAAAGngAABp+AAAbIAAAGoQAABqKAAAakAAAGpYAABqcAAAaogAAIo4AACKUAAAaqAAAGq4AABq0AAAaugAAGsAaxhrMGtIa2AAAGt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGuQbpCCoGuoAAAAAAAAAAAAAAAAAAAAAGvAAAAAAJIAAACSGAAAAAAAAAAAAAAAAAAAAAAAAAAAa9iIuAAAAAAAAAAAliBr8GwIbCBsOAAAbFBsaGyAbJhssIQ4bMhs4AAAAACf4KEwn+ChMJ8gnzhs+KEAbRBtKJ7Agcie8J8IoKCdEIBIgJBtQG1YnsCe2J6ooIicmJywnniekH9wf4icgJ24nXCdiJ0onVifgJ+YflB+OG1wbYieMAAAAACcaG2gAABtuAAAn1CfaG3QAAAAAG3obgAAAJ/gAABuGAAAbjAAAG5IAABuYAAAbnhukG6oAAAAAJ/4bsBu2G7wAACiOJ5Ibwh1yJfQl4h7OJ7Yn7CfyJ4AnhiiCJ3obyCGMG8gbziiaJUAomhvUKJolQB/cH+Ib2igWG+Ab5ieqKCIn4CfmJyYnLCWgIQ4loCEOJcQkjCaKJGgmlh4yG+wlBBvsJQQi9CUEG/IlBCIEJQQb+CUEKFIlBCHgG/4hqiUcIaolHCMwJRwg5CUcHAQlNBwEJTQcCiU0IPYlNBwQJOwcFicUHBYnFCN4JxQcHCcUIoInFBwiJqgcIiaoHCgmqBwuJqgheiSkI5YlECOWJRAi+iUQI7QlECIKJRAcNCUQKF4lECHsHDohtiUoIbYlKCM8JSghLCUoHEAlQBxAJUAcRiVAIT4lQBxMJPgcUiVSHFIlUiOEJVIcWCVSIoglUhxeJXwcXiV8HGQlfBxqJXwhgCRcIsQkXBxwJQQcdiUQIwAlBCMMJRAoUiUEKF4lEBx8IeYcgiHyHIgh5hyOIfIclCHmHJoh8hygIeYcpiHyHKwhDiWsJGIcsiUcHLglKCIcJRwiIiUoHL4lHBzEJSgoaiUcKHYlKBzKJRwc0CUoHNYk1BzcJOAc4iTUHOgk4BzuJNQc9CTgHPodAB0GJOAdDCEaHRIkjB0YJTQjYCVAHR4lNB0kJUAdKiU0HTAlQCNUHTYjYCVAHTwlNB1CIQIdSAAAJegdTiX0HVQdWh1yHWAlQCYAHWYmDB1sJgAdciYMJUAmAB1yJgwlQCTmJOwk8iT4JiodeCY2HX4dhCTsHYok+CY2JPgdkCcUHZYlUh2cJxQdoiVSHagnFB2uJVIdtCVeHbolaiZaHcAmZh3GHcwlXh3SJWod2CDwHd4hOB3kIPAd6iE4JnId8CZ+HfYmch38Jn4eAh4IIPAeDiE4JooeFCaWHhomih4gJpYeJh4sJGgmlh4yHjgmqB4+JXweRCaoHkolfB5QJqgeViV8HlwmqB5iJXweaCaoHm4lfCaiJqgj2CV8HnQhaB56IXQegCSkHoYkXCCWJKQejCEOHpIesB6YIQ4enh6wHqQhDh6qHrAetgAAHrwAAB7CAAAeyAAAHs4nth7OJ7YnvCfCHtQneh7UJ3oe2id6HuAneh7mJ3oe7Cd6KIIneifsHvIe+CeSHvgnkh7+J5InOCeSHwQnVh8EJ1YfCidWJ1AnVh8QJywoHCgiKBwoIh8WKCIfHCgiHyIoIh8oIHIfKCByHy4gch80IHIoRihMHzoneh9AJ3oogid6H0Yn8h9MJ/IfUifyH1gn8h9eJ7YfZCeSH2onkh9wJ5IojieSH3Ynkh98H44fgh+OH4gfjh+UH5ofoCfmH6YnVh+sJ1YfsidWJ0ofuB++J1YfxCdiJyAfyh/QH+If3B/WH9wf4h/cH+If6CcsJyYf7h/0Jywf+igiIAAoIiAGKCIgDCAkIBIgGCAeICQgKidEIDAnRCgoIDYgPCdEJ7wgQiBIJ8InvCBOIFQgciBaIHIgYCByIGYgciBsIHInsCByIHgoQCB+KEwnMihMKEYoTCCEKEwgiihMKFIlBChqJRwluCEaI1QlNCcOJxQkniSkAAAgkCC0AAAoUiUEJYghDihqJRwm9iEOJbghGiNUJTQl6CXWJhIhmCYqJOwnDicUJYgmSCaKJGgkniSkJKoksCD2JTQgliSkIJwgoiTCAAAgqCCuILQAACDSAAAguiDAI3IlUibSJsAgxgAAIMwAACNyJVIg0gAAINgg3iDkJRwg6gAAJnIg8CNUJTQg9iU0IPwhAiXQJdYhCAAAKFIlBCWIIQ4kkgAAKGolHCEUAAAmEiGYJbghGicOJxQliCZIIeAh5iaKJGgkqiSwKF4lECh2JSghIAAAI3IlUiEmJlQh7CHyJDgkXCS2JLwhLCUoITIAACZ+ITgjYCVAIT4lQCFEIYwhSgAAIVAkXCFWIWghXCF0IVYhaCFcIXQhYiFoIW4hdCF6JKQhgCRcIYYhjCGSIZghniGkKFIlBCheJRAhqiUcIbAAACG2JSghvAAAIcIAACHIAAAhzgAAIdQiWCHaImQh4CHmIewh8iSeJKQjVCU0IfgAACH+AAAjVCU0IwAlBCMMJRAiBCUEIgolECIQAAAiFgAAIhwlHCIiJSgiKCIuIjQiQCI6IkAiRgAAIkwAACJSIlgiXiJkImoAACJwAAAidgAAInwAACKCJxQiiCVSIo4AACKUAAAimgAAIqAAACKmAAAirAAAIrIAACK4JFwivgAAIsQkXCLKAAAi0CRcItYAACLcAAAi4gAAIugAACWsJGIoUiMGKF4jEiLuJQQjoiUQKFIlBCheJRAoUiUEKF4lEChSJQQoXiUQKFIlBCheJRAi9CMGIvojEihSJQQoXiUQKFIlBCheJRAoUiUEKF4lEChSJQQoXiUQIwAjBiMMIxIoaiM2KHYjQiMYJRwjHiUoIyQlHCMqJSgoaiUcKHYlKChqJRwodiUoKGolHCh2JSgoaiUcKHYlKCMwIzYjPCNCI0glNCNOJUAjVCNaI2AooCcOI34jciOKI2YnFCNsJVInDicUI3IlUicOJxQjciVSJw4nFCNyJVInDicUI3IlUiN4I34jhCOKI5AjriOWI7ojkCOuI5YjuiOcI64joiO6I6gjriO0I7ojwCPGKF4jzCaiI9Ij2CPeI+QmqCPqJXwj8CQOI/YlfCPwJA4j9iV8I/wkDiQCJXwkCCQOJBQlfCQaJCAkJiQsJJ4kMiQ4JD4kRCSkJEokXCRQJKQkViRcJawkYiaKJGgkbgAAJHQAACR6AAAkkgAAJJgAAAAAJIAAACSGJcQkjCSSAAAkmAAAJfQl4iSeJKQkqiSwJLYkvCTCAAAoaiTIJM4k1CTaJOAk5iTsJPIk+CT+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AAgE1QTVABwE1gTWABUE2ATYABME2wTbABAE3QTdAAcE3gTeABkE3wTfAAsE4ATgABkE4QThAAsE4gTiABEE5ATkABQE5QTlABcAAgEJAAYABgANAAsACwANABAAEAASABEAEQAVABIAEgASACUAJQADACcAJwABACsAKwABAC4ALgAaADMAMwABADUANQABADcANwAQADgAOAATADkAOQAIADoAOgAZADsAOwARADwAPAAdAD0APQAOAD4APgAUAEUARQAEAEcASQACAEsASwACAFEAUgAJAFMAUwAHAFQAVAAJAFUAVQACAFcAVwAPAFkAWQAGAFoAWgAMAFwAXAAhAF0AXQAMAF4AXgAXAIMAgwABAJMAkwABAJQAlAACAJgAmAABAJkAmQACAJsAmwAGALIAsgAgAYIBgwAVAYUBhgANAYcBhwASAYgBigANAYsBiwASAY8BkAASAdwB3AAPAe4B7gAYAe8B7wAeAfAB8AAbAfIB8gAKAfMB8wAcAfQB9AAWAfYB9gAFAfgB+AAFAgACAAAFAgYCBgAfAkwCTAAFAk4CTgALAmACYQABAmMCZAABApUClQAVApsCoQADAqICogABAqwCsAABArECtAAIArUCtQAOArYCvAAEAr0CwQACAsYCxgAJAscCywAHAswCzwAGAtAC0QAMAtIC0gADAtMC0wAEAtQC1AADAtUC1QAEAtYC1gADAtcC1wAEAtgC2AABAtkC2QACAtoC2gABAtsC2wACAtwC3AABAt0C3QACAt4C3gABAt8C3wACAuEC4QACAuMC4wACAuUC5QACAucC5wACAukC6QACAusC6wACAuwC7AABAu0C7QACAu4C7gABAu8C7wACAvAC8AABAvEC8QACAvIC8gABAvMC8wACAwEDAQAaAw4DDgAJAxADEAAJAxIDEwAJAxQDFAABAxUDFQAHAxYDFgABAxcDFwAHAxgDGAABAxkDGQAHAyADIAAQAyEDIQAPAyIDIgAQAyMDIwAPAyQDJAAQAyUDJQAPAyYDJgAQAycDJwAPAygDKAAQAykDKQAPAyoDKgATAywDLAATAy4DLgATAzADMAAIAzEDMQAGAzIDMgAIAzMDMwAGAzQDNAAIAzUDNQAGAzYDNgAIAzcDNwAGAzgDOAAIAzkDOQAGAzoDOgAIAzsDOwAGAzwDPAARAz4DPgAOAz8DPwAMA0ADQAAOA0EDQQAUA0IDQgAXA0MDQwAUA0QDRAAXA0UDRQAUA0YDRgAXA0kDSQABA04DVAALA1UDVQAFA18DYwAFA2QDZwAKA2gDaAAYA2kDawALA2wDbwAFA3YDeQAFA4kDiwAFA48DkgAWA5QDlAAcA5YDmwAKA5wDnAAbA50DngAYA+8D7wARA/ED8QARA/MD8wARA/UD9QAOA/YD9gAMA/cD+AANA/sD+wANA/0D/QAJA/4D/gADA/8D/wAEBDoEOgADBDsEOwAEBDwEPAADBD0EPQAEBD4EPgADBD8EPwAEBEAEQAADBEEEQQAEBEIEQgADBEMEQwAEBEQERAADBEUERQAEBEYERgADBEcERwAEBEgESAADBEkESQAEBEoESgADBEsESwAEBEwETAADBE0ETQAEBE4ETgADBE8ETwAEBFAEUAADBFEEUQAEBFMEUwACBFUEVQACBFcEVwACBFkEWQACBFsEWwACBF0EXQACBF8EXwACBGEEYQACBGYEZgABBGcEZwAHBGgEaAABBGkEaQAHBGoEagABBGsEawAHBGwEbAABBG0EbQAHBG4EbgABBG8EbwAHBHAEcAABBHEEcQAHBHIEcgABBHMEcwAHBHQEdAABBHUEdQACBHYEdgABBHcEdwACBHgEeAABBHkEeQACBHoEegABBHsEewAHBHwEfAABBH0EfQACBH4EfgAIBH8EfwAGBIAEgAAIBIEEgQAGBIMEgwAGBIUEhQAGBIcEhwAGBIkEiQAGBIsEiwAGBIwEjAAOBI0EjQAMBI4EjgAOBI8EjwAMBJAEkAAOBJEEkQAMBKgEqAAVBLQEtAAJBLUEtQADBLYEtgAEBLgEuAACBLsEuwABBLwEvAAHBMAEwAAGBMUExQACBMcExwACBNEE0QAJBNME0wAJBNQE1AABBNkE2QAQBNoE2gAPBNsE2wATBN0E3QAIBN4E3gAZBN8E3wAMBOAE4AAZBOEE4QAMBOIE4gARBOQE5AAUBOUE5QAXAAH9q/6eAAH9qwAAAAH97gZpAAH9ygZpAAH95wY+AAH9sga5AAH+MwZAAAH97gUKAAH9ygUKAAH95wToAAH9sgT6AAH+MwUPAAH90gSmAAH+RASmAAH93AUBAAH+GgUBAAECuv/2AAECVv/2AAEB9gbaAAEBSgAKAAECGQUKAAEDlP5pAAECywaKAAECGQUJAAEC1AZMAAEC1AAKAAEBBgY8AAECagAKAAEBGAahAAEBGAAKAAEDuQZDAAEDuQAAAAEDsQUKAAEDsf//AAEBrAbaAAEA+AAKAAEClQZDAAECuAAAAAECUQUBAAECvAZAAAEDpQZMAAEC3QZMAAEC3gAKAAEChgZMAAEDegZMAAECtAZiAAEDlAZAAAECigZMAAECJQT1AAECtAT1AAEDDAT1AAECTgT1AAECHQT0AAEChAT1AAECLQAKAAEC8AT1AAECUgT1AAECWAT1AAEC5AbMAAECcwT1AAEDLAT1AAEDFAT1AAEDOwT1AAECDQT1AAECUgUIAAEDggYaAAEDBAT1AAEB0gbMAAECbQYIAAECBwTgAAECSgVQAAEDCQZAAAECnAZhAAECnP/2AAECPgUMAAECPv/2AAEC3QdjAAECTgYMAAECuwZRAAECQv/2AAECggZMAAECewYeAAECXgAKAAEBEwZMAAEBEwAKAAECxwZMAAECpgZhAAECpv/2AAECIwUKAAECI//2AAECZQZMAAECqwZhAAECq//2AAEDEgUoAAECMQUoAAECMQAKAAECVwUoAAECV//2AAECHQUoAAEB6QAKAAECVAUoAAEDBQUoAAECdgUoAAECWgAKAAECFAUoAAEC9AUoAAECIgUoAAEC5wUoAAECigUoAAECuwUoAAECu//2AAECdAUoAAECSQUoAAECUwAAAAECXwUoAAECbAZMAAEBCgThAAEBCv41AAEA+f41AAEDgAUKAAECDgUoAAEBwgAKAAECoAegAAECnwd5AAECoAffAAECqP4+AAEBFwerAAEBFwenAAEC1Qd5AAECwweiAAECwgd7AAECmwegAAECmwecAAECmwdgAAECRgaoAAECFf4+AAEA/AZnAAEA/AZjAAECPAZCAAECPwZpAAECPgZCAAECNwZpAAECNwZlAAECNwYpAAECoAdoAAECRgYxAAECqAfAAAECFQZpAAECqAe8AAECFQZlAAECpwd7AAECFAYkAAECqAeyAAECFQZbAAECYQedAAECawdzAAECNQYxAAECagdmAAECNAYkAAECawedAAECNQZbAAECoAe8AAECLAZlAAECoAedAAECLAZGAAECnwd7AAECKwYkAAECoAZhAAEC2v3zAAECLAUKAAECyAenAAEB9QemAAEBFgeEAAEBFwdzAAEA/AYvAAEBFweIAAEA/AZEAAEBF/5XAAEBFgdmAAEDVAeaAAEBCgY8AAEClP5WAAECEf5DAAEBCAebAAEA+QgAAAECbP4GAAEA+f4GAAECbAAKAAEC0P4GAAECM/4GAAEC1geSAAECPQZbAAECwwdqAAECPwYxAAECwwd/AAECPwZGAAECwweHAAECPwZOAAECYgegAAEBmAZpAAECY/4GAAEA9v4HAAECYgeSAAEBmAZbAAECbgeiAAECMgZpAAECbgeeAAECMgZlAAECdP5HAAECMv4+AAECdP37AAECMv3yAAECbgeUAAECMgZbAAECZv38AAEBxf38AAECZv5IAAEBxf5IAAECZAeRAAEBxQAAAAECmgd5AAECNgZCAAECmwdoAAECNwYxAAECmwd9AAECNwZGAAECmwffAAECNwaoAAECmweFAAECNwZOAAEDnAecAAEC+wZlAAECagebAAEB/AZlAAECaAegAAECAwZpAAECZwdbAAECAgYkAAECaAeSAAECAwZbAAECDgAKAAEDqwerAAEDWwZqAAECywfpAAECGQZoAAEB9AUoAAECRQaHAAECRQaDAAECRAZgAAECRQZHAAECRQbGAAECSv5EAAECGQaHAAECGQaDAAEA9AaHAAEA9AaDAAECbwZgAAECXgaDAAECXQZgAAECXgZHAAECQAaHAAECQAaDAAECQAZHAAECRQZPAAECRQZkAAECSwaHAAECSwaDAAECSgZCAAECSwZ5AAEB9AZ5AAECGQZPAAECGQZkAAECGAZCAAECGQZ5AAECSAaDAAECSAZkAAECRwZCAAECT//8AAECSAUoAAECT/34AAECZwaDAAEA8wZgAAEA9AZPAAEA9AZkAAEA9P5OAAEA8wZCAAEC3gaDAAECFP4CAAEA6QaHAAECD/4EAAEA6QUoAAECDwAIAAECcAaHAAECa/4AAAECcAZ5AAECXgZPAAECXgZkAAECXgZsAAECCAaHAAECCAUoAAECDf4EAAECCAZ5AAECDQAIAAECHwaHAAECHwaDAAECKP5IAAECHwZ5AAECE/3/AAECEgZ5AAECE/5LAAECPwZgAAECQAZPAAECQAZkAAECQAbGAAECQAZsAAECPgAAAAEDEgaDAAECFQaDAAECFAZCAAECFQZ5AAECpwAKAAECagdfAAECcQUKAAECJf/2AAECQgUKAAEA7wAKAAEBJgT1AAECTgUKAAECTgAKAAEBJgYUAAECHwYUAAECHwT1AAEDUATyAAEDS//2AAECawdrAAECcQerAAECdP//AAEBFwdrAAEDVAY/AAECAP/2AAEChgeIAAECZQAKAAEC3QeIAAECygAKAAECTgYxAAECdQUAAAECNQYpAAEBrwZUAAECMv/2AAEA/AYnAAEA3wZAAAECHQZTAAEB/AZGAAEDnAegAAEC+wZpAAEDnAdgAAEDmgAKAAEC+wYpAAEC/gAKAAECagefAAEB/AZpAAEBCgYyAAEAvv41AAEDegegAAEDfQAKAAEDjwZpAAEDgQAKAAECawerAAEC3QerAAECNQZpAAECTgZUAAECxwT1AAECbQc5AAECBwYRAAECXgZhAAECBgUJAAECqAZhAAECqP/2AAECFQUKAAECFf/2AAEDpQeIAAEDDAYxAAECoAdgAAECRgYpAAEDqwZMAAEDWwULAAECaweIAAECNQZGAAECewc9AAECowAAAAECLwULAAECLwYqAAECPQAAAAEDpQdrAAEDDAYUAAECXgeAAAECXv/2AAECBgYoAAECBv/3AAEC3QdzAAECTgYcAAEC3QdrAAECTgYUAAECwwdiAAECPwYpAAECzwZHAAECLwUMAAECzwdmAAECLwYrAAECtAeBAAECIwYpAAEChgdzAAEB/AYxAAEChgdrAAEB/AYpAAEChgeQAAEB/AZOAAECsAdrAAECDAYUAAEDegdrAAEDFAYUAAECoAgAAAECoAecAAECRgZlAAECoAd9AAECrv6eAAECRgZGAAEB9v6eAAECawgLAAECNQbJAAECageEAAECNAZCAAECawenAAECa/6oAAECNQZlAAECOP6eAAEBFwgLAAEA/AbHAAEBFwZMAAEBF/6nAAEA+wZAAAECwwgCAAECPwbJAAECPwUKAAECwweeAAECw/6eAAECPwZlAAECSP6dAAECvweaAAECRgZpAAECvwf6AAECRgbJAAECvgdzAAECtAAAAAECRQZCAAECRv/2AAECvwY7AAECtP6eAAECRv6UAAECmv6eAAECNwUKAAEB/f6eAAECmwgAAAECNwbJAAECtgerAAECRAZUAAECtggLAAECRAa0AAECtQeEAAECtP/3AAECQwYtAAECtgZMAAECtP6VAAECRAT1AAECM/6eAAECZ/6fAAEB/AUKAAECyP4AAAECagf/AAEB/AbJAAECaQd4AAEB+wZCAAECyP9iAAECaQAAAAECZgAAAAEB5wT1AAECsAZMAAECDAT1AAEDyf/6AAECw//9AAECTAAKAAECcQZMAAEBrwT1AAECagZAAAECZwABAAECjQZMAAEChQAKAAEB/AUAAAEB/wAKAAECJwUJAAECEwAKAAECoAfAAAEC2v/3AAECLAZpAAECKv5BAAEC1gegAAEC0AAKAAECPQZpAAECMwAKAAECoAdyAAECrgAAAAECRgY7AAEB9gAAAAECawd9AAECawAKAAECNQY7AAECOAAAAAEBFwd9AAEBFwAJAAEA/AY5AAEA+QAKAAECwwd0AAECPwY7AAECSP//AAECYgdyAAECYwAKAAEBmAY7AAEA9gALAAECmwdyAAECNwY7AAECMwAAAAECHAZMAAECXgZMAAECegZLAAECVv6UAAECaf6eAAECYQZMAAECZf4GAAECJQZMAAECaf38AAECyAZMAAECyv6oAAEB9QZLAAECTP6oAAECXQeaAAEClABaAAECJQeqAAECEQBHAAECXQY7AAEClP74AAECJQZLAAECEf7lAAEBCAY8AAECbP6oAAEA+QahAAEDegZBAAEDff6oAAEDjwUKAAEDgf6oAAEC1gZBAAEC0P6oAAECPQUKAAECM/6oAAECXgerAAECEgAKAAECdQZfAAEA5/5pAAECYgZBAAECY/6oAAEBmAUKAAEA9v6pAAECbgZDAAECdP6dAAECMgUKAAECMv6UAAECZAZAAAECZv6eAAEBOAXJAAEBxf6eAAECmwZBAAECmgAAAAECjgeEAAECjwAKAAEB+AY4AAEB+AAKAAECjwZMAAECj/6oAAEB+QUAAAEB+P6oAAEDnAZBAAEDmv6oAAEC+wUKAAEC/v6oAAECaAZBAAECZf6oAAECAwUKAAECDv6oAAECwwZDAAECwwAAAAECfQAKAAECBgUoAAECcAUoAAECawAEAAECFQZHAAECGQZHAAECFgaHAAECKAAAAAEA9AUoAAEA9AZHAAEA9AAEAAEC3gUoAAEByf/2AAECBgaHAAECFAAGAAECFAZkAAECUAAAAAECEQUoAAECGAAKAAECFgUoAAECGQAIAAECdgZkAAEC/QUo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BboF8gcCBfgFvgcQBjQGPAX+BogHVgXCBnQGRAYEB2YGCgZMBpQGEAceBcYFygYWBywFzgXSBdYGVAZcBhwGoAc6BdoGfgZkBiIHSAYoBmwGrAYuBd4F4gXmBeoGuAbEBtAG3AboBe4AAgcEAOsCjQJOAk0CTAJLAkMCAQIAAf8B/gH9AfwB+wH6AfkB+AH3AfYB9QH0AfMB8gHxAfAB7wHuAe0CfwKPA0wCkQKQA0sB/gKOApMCbQTuBO8CBQIGBPAE8QTyAgcE8wIIAgkCCgT4AgsCCwT5BPoCDAINAg4CFQUHBQgCFgIXAhgCGQIaAhsFCwUMBQ4FEQUaAh0CHgIfAiACIQIiAiMCJAIlAiYCDwIQAhECEgITAhQCVgIoAikCKgIrBRQCLAIuAi8CMAIyAjQCkgNNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA54DaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgUbA4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORBR4DkgOTA5UDlAOWA5cDmAOZA5oDmwOcA50DnwOgA6EFHAUdBOcE6ATpBOoE9AT3BPUE9gT7BPwE/QTrBOwE7QUGBQkFCgUNBQ8FEAIcBRIE/gT/BQAFAQUCBQMFBAUFBR8FIAUhBSIFEwUVBRYCMwUYAjUFGQUXAjECJwItBScFKAACBwIA+wICAo0B7AHrAeoB6QHoAecB5gHlAeQB4wJOAk0CTAJLAkMCAQIAAf8B/gH9AfwB+wH6AfkB+AH3AfYB9QH0AfMB8gHxAfAB7wHuAe0CAwIEAo8CkQKQApICjgKTAm0CBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGwIcBRoCHQIeAh8CIAIhAiICIwIkAiUCJgJWAigCKQIqAisFFAIsAi4CLwIwAjECMgIzAjQCfwI2AjcCOQI4A0sDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwN0A3UDdgN3A3gDeQN6A3sDfAN9A34DfwUbA4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORBR4DkgOTA5UDlAOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQUcBR0E5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUE9gT3BPgE+QT6BPsE/AT9BP4E/wUABQEFAgUDAhoFBAUFBQYFBwUIBQkFCgULBQwFDQUOBQ8FEAURBRIFHwUgBSEFIgUTBRUFFgUYAjUFGQUXAicCLQUnBSgAAQABAXwAAQABAEsAAQABALsAAQABADYAAQABABMAAQACAyQDJQACBuYG2gACBugG2gABBvAAAQbyAAEG9AACAAEAFAAdAAAAAQACAC8ATwABAAMASQBLAoUAAgAAAAEG4AABAAYC1gLXAugC6QNrA3QAAQAGAE0ATgL9A+oD7ARlAAIAAwGVAZUAAAHgAeIAAQI6AkAABAACAAIAqACsAAEBJAEnAAEAAQAMACcAKAArADMANQBGAEcASABLAFMAVABVAAIAAgAUAB0AAAJwAnkACgACAAYATQBNAAYATgBOAAQC/QL9AAUD6gPqAAMD7APsAAIEZQRlAAEAAgAEABQAHQAAAoECgQAKAowCjAALBKkEsAAMAAIABgAaABoAAAAcABwAAQJlAmoAAgJuAm4ACAJwAnkACQKAAoAAEwABABQAGgAcAmUCZgJnAmgCaQJqAm4CgAKBAowEqQSqBKsErAStBK4ErwSwAAEF4AABBeIAAQXkAAEF5gABBegAAQXqAAEF7AABBe4AAQXwAAEF8gABBfQAAQX2AAEF+AABBfoAAQX8AAIF/gYEAAIGBAYKAAIGCgYQAAIGEAYWAAIGFgYcAAIGHAYiAAIGIgYoAAIGKAYuAAIGLgY0AAIGNAY6AAIGOgZAAAMGQAZGBkwAAwZKBlAGVgADBlQGWgZgAAMGXgZkBmoAAwZoBm4GdAADBnIGeAZ+AAMGfAaCBogAAwaGBowGkgAEBpAGlgacBqIABAaeBqQGqgawAAUGrAayBrgGvgbEAAUGvgbEBsoG0AbWAAUG0AbWBtwG4gboAAUG4gboBu4G9Ab6AAUG9Ab6BwAHBgcMAAUHBgcMBxIHGAceAAUHGAceByQHKgcwAAUHKgcwBzYHPAdCAAUHPAdCB0gHTgdUAAYHTgdUB1oHYAdmB2wABgdkB2oHcAd2B3wHggAGB3oHgAeGB4wHkgeYAAYHkAeWB5wHogeoB64ABgemB6wHsge4B74HxAAGB7wHwgfIB84H1AfaAAYH0gfYB94H5AfqB/AABwgwB+gH7gf0B/oIAAgGAAcIKAf8CAIICAgOCBQIGgABAOsACgBFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AhQCGAIcAiQCKAIsAjQCQAJIAlAC7ALwAvQC+AL8AwADBAMIAwwDEAMUAxgDHAMgAyQDKAMsAzADNAM4A6gDrAOwA7QDuAO8A8ADxAPIA8wD0APUA9gD3APgA+QD6APsA/AD9AP4A/wEAAQEBAgEDAQQBBQEGAQcBMAE0ATYBOAE6ATwBQgFEAUYBSgFNAVoCmAKaArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0wLVAtcC2QLbAt0C3wLhAuMC5QLnAukC6wLtAu8C8QLzAvUC9wL5AvsC/QMAAwIDBAMGAwgDCgMMAw4DEAMSAxUDFwMZAxsDHQMfAyEDIwMlAycDKQMrAy0DLwMxAzMDNQM3AzkDOwM9Az8DQgNEA0YDSANKA7oDuwO8A70DvwPAA8EDwgPDA8QDxQPGA8cDyAPfA+AD4QPiA+MD5APlA+YD5wPoA+kD6gPrA+wD7QPuA/AD8gP0A/YECwQNBA8EHQQkBCoEMASaBJsEnwSjBSQFJgABAPsACAAKABQAFQAWABcAGAAZABoAGwAcAB0AJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AGUAZwCBAIMAhACMAI8AkQCTALEAsgCzALQAtQC2ALcAuAC5ALoA0gDTANQA1QDWANcA2ADZANoA2wDcAN0A3gDfAOAA4QDiAOMA5ADlAOYA5wDoAOkBLwEzATUBNwE5ATsBQQFDAUUBSQFLAUwBWAFZAXEBsgG4Ab0BwAKWApcCmQKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQLSAtQC1gLYAtoC3ALeAuAC4gLkAuYC6ALqAuwC7gLwAvIC9AL2AvgC+gL8Av4C/wMBAwMDBQMHAwkDCwMNAw8DEQMUAxYDGAMaAxwDHgMgAyIDJAMmAygDKgMsAy4DMAMyAzQDNgM4AzoDPAM+A0ADQQNDA0UDRwNJA6IDowOkA6UDpgOnA6gDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA+8D8QPzA/UECgQMBA4EIwQpBC8EmQSeBKIFIwUlAdcAAgBNAdgAAgBQAdkAAwBKAE0B2gADAEoAUAABAAEASgHWAAIASgHcAAIAWAHbAAIAWAABAAMASgBXAJUAAAABAAEAAQABAAAAAwTCAAIArQLYAAIAqQTIAAIArQTVAAIAqQTDAAIArQLZAAIAqQSyAAIAqQTJAAIArQRlAAIArQTWAAIAqQNHAAIAqQNJAAIAqQNIAAIAqQNKAAIAqQTBAAIAqQTGAAIB1QTEAAIArQSxAAIAqQLyAAIB1QP8AAIAqQTQAAIArQMqAAIB1QTbAAIArQTgAAIArQTeAAIAqgNBAAIAqQTkAAIArQTHAAIB1QTFAAIArQP9AAIAqQTRAAIArQMrAAIB1QTcAAIArQThAAIArQTfAAIAqgNCAAIAqQTlAAIArQTKAAIAqQMDAAIB1QTMAAIArQMFAAIAqQMHAAIB1QTOAAIArQMgAAIAqQMmAAIB1QTZAAIArQPxAAIAqQTiAAIArQPvAAIAqATLAAIAqQMEAAIB1QTNAAIArQMGAAIAqQMIAAIB1QTPAAIArQMhAAIAqQMnAAIB1QTaAAIArQPyAAIAqQTjAAIArQPwAAIAqAMaAAIAqQMcAAIB1QTXAAIArQS9AAIArAMbAAIAqQMdAAIB1QTYAAIArQS+AAIArAMNAAIAqQMPAAIB1QTSAAIArQSzAAIAqAKrAAIAqgK1AAIAqQSMAAIArQP1AAIAqASOAAIAqwSQAAIAqgMOAAIAqQMQAAIB1QTTAAIArQS0AAIAqALGAAIAqgLQAAIAqQSNAAIArQP2AAIAqASPAAIAqwSRAAIAqgLDAAIAqQLCAAIAqARjAAIAqwL3AAIAqgS6AAIArAR0AAIAqQR8AAIArQR2AAIAqAR4AAIAqwR6AAIAqgR1AAIAqQR9AAIArQR3AAIAqAR5AAIAqwR7AAIAqgSCAAIAqQSKAAIArQSEAAIAqASGAAIAqwSIAAIAqgSDAAIAqQSLAAIArQSFAAIAqASHAAIAqwSJAAIAqgKcAAIAqQQ6AAIArQKbAAIAqAQ8AAIAqwKeAAIAqgS1AAIArAKkAAIAqQRSAAIArQKjAAIAqARUAAIAqwRWAAIAqgS3AAIArAKoAAIAqQRkAAIArQKnAAIAqARiAAIAqwL2AAIAqgS5AAIArAK3AAIAqQQ7AAIArQK2AAIAqAQ9AAIAqwK5AAIAqgS2AAIArAK/AAIAqQRTAAIArQK+AAIAqARVAAIAqwRXAAIAqgS4AAIArALIAAIAqQRnAAIArQLHAAIAqARpAAIAqwLKAAIAqgS8AAIArALNAAIAqQR/AAIArQLMAAIAqASBAAIAqwMxAAIAqgTAAAIArAKtAAIAqQRmAAIArQKsAAIAqARoAAIAqwKvAAIAqgS7AAIArAKyAAIAqQR+AAIArQKxAAIAqASAAAIAqwMwAAIAqgS/AAIArATUAAMAqgCpBN0AAwCqAKkAAgARACUAKQAAACsALQAFAC8ANAAIADYAOwAOAD0APgAUAEUASQAWAEsATQAbAE8AVAAeAFYAWwAkAF0AXgAqAIEAgQAsAIMAgwAtAIYAhgAuAIkAiQAvAI0AjQAwAJgAmwAxANAA0AA1AAA=',\n    }\n    this.baseUrl = packages.window.location.origin\n    this.pdfMake = packages.pdfMake\n\n    this.pdfMake.addVirtualFileSystem(vfs)\n    this.fonts = {\n      Roboto: {\n        normal: 'Roboto-Regular.ttf',\n        bold: 'Roboto-Medium.ttf',\n        italics: 'Roboto-Italic.ttf',\n        bolditalics: 'Roboto-MediumItalic.ttf',\n      },\n    }\n    this.title = 'Wartung.pdf'\n    this.settings = {\n      companyLogoUrl:\n        this.baseUrl +\n        '/api/docs/5a5cfd6a-1748-4c6a-a2a1-64490c6e28ae/fields/file/_content?version=initial&dataUrl=aeppic-local%3A%2F%2F82284574-24dd-4f19-a51f-ac7b62565a1c%2F1', // bizpin color svg\n    }\n\n    locals.url = ''\n    locals.blob = null\n\n    locals.urlWip = ''\n    locals.blobWip = ''\n\n    const company = await Aeppic.get(params.document.a[0])\n    if (company) {\n      if (company.data.logo.dataUrl) {\n        this.settings.companyLogoUrl = this.baseUrl + Aeppic.Content.getSrc(company, 'logo')\n      }\n    }\n\n    // if (packages.window.location.origin?.includes('bizpin-dev.bizpin.de')) {\n    //   this.generatePdf()\n    // }\n  }\n\n  async generatePdf() {\n    const tableWidths = ['50%', 'auto', '*']\n    const tableHeaders = [\n      [\n        {\n          text: 'Titel',\n          bold: true,\n          color: '#666',\n        },\n        {\n          text: 'Zustand',\n          bold: true,\n          color: '#666',\n        },\n        {\n          text: 'Bemerkung',\n          bold: true,\n          color: '#666',\n        },\n      ],\n    ]\n    const body = []\n\n    const wartung = params.document\n    if (!(wartung?.f.id === this.FORMS.Wartungsdurchfuehrung)) {\n      throw new Error(`Provide params.document with correct formId ${this.FORMS.Wartungsdurchfuehrung}`)\n    }\n\n    const wartungsplan = await Aeppic.get(wartung.data.maintenance)\n    const wartungssteile = await Aeppic.getAll(wartungsplan.data.parts)\n    const wartungspunkte = (\n      await Promise.all(wartungssteile.map(async (wartungteil) => Aeppic.getAll(wartungteil.data.items)))\n    )\n      .flat()\n      .filter(Boolean)\n\n    const allArbeiten = (\n      await Promise.all(wartungspunkte.map(async (wartungspunkt) => Aeppic.getAll(wartungspunkt.data.workItems)))\n    )\n      .flat()\n      .filter(Boolean)\n\n    const statusField = (await Aeppic.getForm(allArbeiten[0].f.id)).getField('status')\n    const labelsOfStatus = statusField.settings.options\n\n    const teams = await Aeppic.getAll(wartung.data.team)\n    const object = await Aeppic.get(wartung.data.object)\n    const location = await Aeppic.get(wartung.data.location)\n\n    this.title = `${object.data.name} - ${wartungsplan.data.name} - Erstellt: ${Aeppic.DateTime.fromISO(\n      wartung.created.at\n    ).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)} - Wartungsteam: ${teams.map((team) => team.data.name).join(', ')}`\n\n    //FIXME: minutes had to be inverted because some bug!? should be positive\n\n    const subtitleParts = [\n      wartungsplan.data.started && \n      `Dauer: ${Aeppic.DateTimeDuration.fromObject(wartungsplan.data.duration).hours}h ${\n        Aeppic.DateTimeDuration.fromObject(wartungsplan.data.duration).minutes\n      }m. Beginn: ${Aeppic.DateTime.fromISO(wartungsplan.data.started)\n        .setLocale('de-de')\n        .toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}.`,\n      wartungsplan.data.ended &&\n        `Ende: ${Aeppic.DateTime.fromISO(wartungsplan.data.ended)\n          .setLocale('de-de')\n          .toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}`,\n    ]\n    this.subtitle = subtitleParts.join(' ')\n\n    const content = []\n    const attachments = []\n    const images = []\n\n    // === create a table for each Wartungsteil\n    for (const [index, wartungsteil] of wartungssteile.entries()) {\n      const wartungsteilParts = [\n        `${wartungsteil.data.part}`,\n        wartungsteil.data.identifier && `(${wartungsteil.data.identifier})`,\n      ]\n\n      // add pageBreak before each Wartungsteil\n      if (index > 0) {\n        content.push({\n          margin: [0, 0, 0, 0],\n          style: 'header',\n          text: wartungsteilParts.join(' '),\n          pageBreak: 'before',\n        })\n      } else {\n        content.push({\n          margin: [0, 0, 0, 0],\n          style: 'header',\n          text: wartungsteilParts.join(' '),\n        })\n      }\n\n      const wartungspunkte = (await Aeppic.getAll(wartungsteil.data.items)).filter(Boolean)\n\n      for (const wartungspunkt of wartungspunkte) {\n        const tableBody = []\n\n        const parts = [\n          `${wartungspunkt.data.title}`,\n          wartungspunkt.data.identifier && `(${wartungspunkt.data.identifier})`,\n        ]\n        tableBody.push([{ text: parts.join(' '), colSpan: 3, bold: true }])\n\n        const arbeiten = (await Aeppic.getAll(wartungspunkt.data.workItems)).filter(Boolean)\n\n        for (const arbeit of arbeiten) {\n          const workLabel = labelsOfStatus.find((label) => label.value === arbeit.data.status)\n          const readableIo = workLabel?.display || arbeit.data.status || arbeit.id\n          const workColor = workLabel.tags?.color\n\n          tableBody.push([\n            arbeit.data.name,\n            {\n              text: readableIo,\n              color: workColor,\n            },\n            { text: arbeit.data.comment, color: 'darkblue' },\n          ])\n\n          // === add records on this workItem\n          const recordings = await Aeppic.getAll(arbeit.data.recordings)\n\n          const fieldLabels = new Set()\n          const valuesByEachRecording = []\n\n          const recordingsAsText = (\n            await Promise.all(\n              recordings.map(async (recording) => {\n                const recordingForm = await Aeppic.getFormForDocument(recording)\n\n                const values = []\n\n                for (const field of recordingForm.fields) {\n                  const value = recording.data[field.name]\n\n                  if (!value) {\n                    continue\n                  }\n\n                  const fieldLabel = recordingForm.getPlaceholder(field.name)?.label || field.name\n\n                  fieldLabels.add(fieldLabel)\n\n                  if (field.subType === 'date') {\n                    if (recordingForm.getFieldControlParams(field.name)?.type === 'year-month') {\n                      values.push(\n                        Aeppic.DateTime.fromISO(value)\n                          .setLocale('de-de')\n                          .toLocaleString({ month: 'numeric', year: 'numeric' })\n                      )\n                      continue\n                    }\n\n                    values.push(Aeppic.DateTime.fromISO(value).setLocale('de-de').toLocaleString())\n\n                    continue\n                  }\n\n                  values.push(value)\n                }\n\n                valuesByEachRecording.push(values)\n\n                return values.join('\\n')\n              })\n            )\n          ).join('\\n')\n\n          // console.log(recordings, recordingsAsText, valuesByEachRecording)\n\n          if (recordings.length) {\n            tableBody.push([\n              {\n                text: `Erfassungen (${recordings[0].f.text})`,\n                margin: [30, 0, 0, 0],\n                colSpan: 3,\n                bold: true,\n              },\n            ])\n            tableBody.push([\n              {\n                layout: 'lightHorizontalLines',\n                italics: true,\n                color: 'darkblue',\n                table: {\n                  // calculate the widths to 100%. */auto columns will overflow page width!\n                  widths: new Array(fieldLabels.size).fill(`${100 / fieldLabels.size}%`),\n                  body: [[...fieldLabels], ...valuesByEachRecording],\n                },\n                colSpan: 3,\n              },\n            ])\n          }\n          // ===\n\n          const photos = (await Aeppic.getAll(arbeit.data.photos)).filter(Boolean)\n\n          if (photos.length > 0) {\n            tableBody.push([\n              {\n                text: `Fotos`,\n                margin: [30, 0, 0, 0],\n                colSpan: 3,\n                bold: true,\n              },\n            ])\n\n            for (const photo of photos) {\n              // SVGs are not converted to jpg by Aeppic.Content.getPreviewSrc\n              if (photo.data.datei.type === 'image/svg+xml') {\n                tableBody.push([\n                  {\n                    text: `[FEHLER] Foto nicht darstellbar: ${photo.data.name}`,\n                    colSpan: 3,\n                  },\n                ])\n\n                continue\n              }\n\n              images.push({\n                [photo.id]: this.baseUrl + Aeppic.Content.getPreviewSrc(photo, 'datei', { format: 'jpg' }),\n              })\n              tableBody.push([\n                {\n                  text: `Foto: ${photo.data.name}`,\n                  colSpan: 3,\n                },\n              ])\n              tableBody.push([\n                {\n                  image: photo.id,\n                  cover: { width: 150, height: 150, valign: 'center', align: 'center' },\n                  width: 150,\n                  height: 150,\n                  colSpan: 3,\n                },\n              ])\n\n              // add photo as full page image\n              if (attachments.length === 0) {\n                attachments.push({\n                  pageBreak: 'before',\n                  text: 'Anlagen',\n                  style: 'header',\n                  margin: [0, 20]\n                })\n\n                attachments.push({\n                  text: `Foto: ${photo.data.name}`,\n                })\n              } else {\n                attachments.push({\n                  text: `Foto: ${photo.data.name}`,\n                  pageBreak: 'before',\n                })\n              }\n\n              // A4 @72dpi = 595x842\n              attachments.push({\n                image: photo.id,\n                fit: [595 - 150, 842 - 150],\n                // width: 595 - 150,\n                // height: 842 - 150,\n              })\n            }\n          }\n        }\n\n        const tableDefinition = {\n          margin: [10, 10],\n          alignment: 'left',\n          layout: 'lightHorizontalLines',\n          table: {\n            widths: tableWidths,\n            body: [...tableHeaders, ...tableBody],\n          },\n        }\n        content.push(tableDefinition)\n\n        content.push([\n          {\n            text: `Benötigte Hilfs- und Messmittel`,\n            bold: true,\n          },\n          {\n            text: wartungspunkt.data.toolsAndEquipment.trim() || 'keine',\n            marginBottom: 30,\n          },\n        ])\n      }\n    }\n\n    const docDefinition = this._createDocDefinition({ content, images, attachments })\n\n    const { url, blob } = await this._renderPdf(docDefinition, { title: this.title })\n\n    locals.url = url\n    locals.blob = blob\n\n    await Aeppic.nextRenderPass()\n\n    $refs.downloadLink.click()\n    // $refs.dialog.show()\n  }\n\n  _createDocDefinition(options) {\n    const { content, images, attachments } = options\n\n    const docDefinition = {\n      info: {\n        title: this.title,\n      },\n      pageSize: 'A4',\n      pageOrientation: 'portrait',\n      pageMargins: [40, 70, 40, 60],\n      header: {\n        alignment: 'center',\n        margin: [10, 10],\n        columns: [\n          {\n            fontSize: 10,\n            text: this.title,\n            // alignment: 'left',\n            bold: true,\n          },\n          {\n            image: 'companyLogo',\n            fit: [100, 20],\n            alignment: 'right',\n          },\n        ],\n      },\n      footer: {\n        margin: [0, 10],\n        style: 'footer',\n        alignment: 'center',\n        columns: [\n          `Dokumenten-ID ${params.document.id}`,\n          '',\n          'Erstellt: ' + DateTime.local().setLocale('de-de').toLocaleString(DateTime.DATETIME_MED),\n        ],\n      },\n      content: [...content, ...attachments],\n      defaultStyle: {\n        font: 'Roboto',\n        fontSize: 10,\n      },\n      styles: {\n        header: {\n          fontSize: 13,\n          bold: true,\n        },\n        tableHeader: {\n          bold: true,\n          fillColor: '#ededed',\n        },\n        footer: {\n          fontSize: 8,\n        },\n      },\n      images: {\n        companyLogo: this.settings.companyLogoUrl,\n        ...images.reduce((acc, curr) => ((acc[Object.keys(curr)] = curr[Object.keys(curr)]), acc), {}),\n      },\n    }\n\n    // console.log({ docDefinition, images })\n\n    return docDefinition\n  }\n\n  // async generatePdfWip() {\n  //   const widths = ['*', 'auto', 'auto']\n  //   const headers = [\n  //     [\n  //       {\n  //         text: 'Titel',\n  //         bold: true,\n  //         color: '#666',\n  //       },\n  //       {\n  //         text: 'Zustand',\n  //         bold: true,\n  //         color: '#666',\n  //       },\n  //       {\n  //         text: 'Bemerkung',\n  //         bold: true,\n  //         color: '#666',\n  //       }\n  //     ]\n  //   ]\n  //   const body = []\n\n  //   const wartung = params.document\n  //   if (!(wartung?.f.id === 'c211ffaa-14f8-4439-9126-f42f65ac4424')) {\n  //     throw new Error('Provide params.document with formId c211ffaa-14f8-4439-9126-f42f65ac4424 (Wartung)')\n  //   }\n\n  //   const wartungsplan = await Aeppic.findOne(`p:${wartung.id} f.id:522ca40d-810b-4021-835f-beeace3af7fa`)\n\n  //   const [ firma, objekt ] = await Aeppic.getAll([wartung.data.firma, wartung.data.objekt])\n\n  //   this.title = `${objekt.data.name} - ${wartungsplan.data.name} - ${firma.data.name} - ${Aeppic.DateTime.fromISO(wartung.created.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}`\n\n  //   // ${Aeppic.DateTime.fromISO(wartung.created.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}\n  //   // ${Aeppic.DateTime.fromISO(wartung.modified.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}\n\n  //   const anlagen = (await Aeppic.getAll(wartungsplan.data.anlagen)).filter(d => !!d)\n\n  //   for (const anlage of anlagen) {\n  //     const anlagenteile = (await Aeppic.getAll(anlage.data.anlagenteile)).filter(d => !!d)\n  //     const allArbeiten = (await Promise.all(anlagenteile.map(teil => Aeppic.getAll(teil.data.arbeiten)))).filter(d => !!d).flat()\n\n  //     const todo = allArbeiten.filter(arbeit => arbeit.data.io === 0)\n  //     const error = allArbeiten.filter(arbeit => arbeit.data.io === 1)\n  //     const rest = allArbeiten.filter(arbeit => arbeit.data.io === 2)\n\n  //     body.push(['', '', ''])\n  //     body.push([\n  //       {\n  //         text: [anlage.data.nummer, anlage.data.name].join(' '),\n  //         bold: true,\n  //       },\n  //       {\n  //         text: `Todo: ${todo.length} / Fehler: ${error.length} / In Ordnung: ${rest.length}`,\n  //         colSpan: 2,\n  //       }\n  //     ])\n\n  //     for (const anlagenteil of anlagenteile) {\n  //       const anlagenteilEintrag = await Aeppic.get(anlagenteil.data.eintrag)\n\n  //       const arbeiten = (await Aeppic.getAll(anlagenteil.data.arbeiten)).filter(d => !!d)\n  //       const labelsOfIo = (await Aeppic.getForm(arbeiten[0].f.id)).getField('io').settings.options\n\n  //       const todo = arbeiten.filter(arbeit => arbeit.data.io === 0)\n  //       const error = arbeiten.filter(arbeit => arbeit.data.io === 1)\n  //       const rest = arbeiten.filter(arbeit => arbeit.data.io === 2)\n\n  //       body.push([\n  //         {\n  //           text: anlagenteilEintrag?.data.name,\n  //           bold: true,\n  //           margin: [10, 0, 0, 0]\n  //         },\n  //         '',\n  //         // `Todo: ${todo.length} / Fehler: ${error.length} / In Ordnung: ${rest.length}`,\n  //         '',\n  //         // {\n  //           //   text: readableIo,\n  //           //   color: ioColor\n  //           // },\n  //         ])\n\n  //       for (const arbeit of arbeiten) {\n  //         const eintrag = await Aeppic.get(arbeit.data.eintrag)\n  //         const readableIo = labelsOfIo.find(label => label.value === arbeit.data.io)?.display || arbeit.data.io\n  //         const ioColor = arbeit.data.io === 0 ? 'black' : arbeit.data.io === 1 ? 'red' : 'green'\n\n  //         // console.log(eintrag, arbeit)\n  //         body.push([\n  //           {\n  //             text: eintrag?.data.name,\n  //             margin: [20, 0, 0, 0]\n  //           },\n  //           {\n  //             text: readableIo,\n  //             color: ioColor\n  //           },\n  //           arbeit.data.bemerkungen\n  //         ])\n\n  //         const erfassungen = await Aeppic.getAll(arbeit.data.erfassungen)\n\n  //         const erfassungenAsText = (await Promise.all(erfassungen.map(async (erfassung) => {\n  //           const erfassungsForm = await Aeppic.getFormForDocument(erfassung)\n\n  //           const values = []\n\n  //           for (const field in erfassung.data) {\n  //             const value = erfassung.data[field]\n\n  //             if (!value) {\n  //               continue\n  //             }\n\n  //             const fieldName = erfassungsForm.getPlaceholder(field)?.label || field\n\n  //             values.push(`${fieldName}: ${value}`)\n  //           }\n\n  //           return values.join('\\n')\n  //         }))).join('\\n')\n\n  //         console.log(erfassungen, erfassungenAsText)\n\n  //         if (erfassungen.length) {\n  //           body.push([\n  //             {\n  //               text: 'Erfassungen',\n  //               margin: [30, 0, 0, 0]\n  //             },\n  //             {\n  //               text: erfassungenAsText,\n  //               colSpan: 2,\n  //             },\n  //           ])\n  //         }\n  //       }\n  //     }\n  //   }\n\n  //   const tableDefinition = {\n  //     widths,\n  //     body: [...headers, ...body]\n  //   }\n\n  //   const docDefinition = this._createDocDefinition(tableDefinition)\n\n  //   const { url, blob } = await this._renderPdf(docDefinition, { title: this.title })\n\n  //   console.log(url, blob)\n\n  //   locals.urlWip = url\n  //   locals.blobWip = blob\n\n  //   await Aeppic.nextRenderPass()\n\n  //   $refs.downloadLinkWip.click()\n  //   // $refs.dialog.show()\n  // }\n\n  async _renderPdf(docDefinition, options) {\n    const pdf = await this.pdfMake.createPdf(docDefinition, null, this.fonts)\n    return this._convertPdf(pdf)\n  }\n\n  _convertPdf(pdfData) {\n    return new Promise((resolve) => {\n      pdfData.getBlob((blob) => {\n        const objectUrl = URL.createObjectURL(blob)\n        resolve({ url: objectUrl, blob })\n        // $emit('file-blob', { blob, title: options.title })\n      })\n    })\n  }\n}\n","css":"","name":"Export Wartungtunsdurchführung as PDF","packages":[{"id":"6d4d5df8-bc1e-42ae-aa48-f0cfdc009ff7","text":"pdfmake","v":"b0c5aef3a774d0f1"},{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"d4ce6dec568c3dc1"}],"template":"<div class=\"flex gap-2\">\n  <ae-layout layout-id=\"f6bdd129-3852-4bac-9375-559b929486bc\"\n              @selected=\"controller.generatePdf()\"\n              param-icon=\"fa fa-file-pdf\"\n              param-text=\"Als PDF herunterladen\"\n  ></ae-layout>\n\n  <a target=\"_blank\" v-show=\"false\" ref=\"downloadLink\" v-if=\"locals.url\" :href=\"locals.url\" type=\"application/pdf\" :download=\"controller.title + '.pdf'\"></a>\n\n  <!-- <ae-layout v-if=\"locals.showWip\"\n              layout-id=\"f6bdd129-3852-4bac-9375-559b929486bc\"\n              @selected=\"controller.generatePdfWip()\"\n              param-icon=\"fa fa-file-pdf\"\n              param-text=\"Als PDF (Wartungsgesellschaft) herunterladen\"\n  ></ae-layout>\n\n  <a target=\"_blank\" v-show=\"false\" ref=\"downloadLinkWip\" v-if=\"locals.urlWip\" :href=\"locals.urlWip\" type=\"application/pdf\" :download=\"controller.title + '.pdf'\"></a> -->\n</div>\n\n\n<!-- <ae-dialog ref=\"dialog\" :dialog-size=\"{ width: 'var(--ae-dialog__width--medium)', height: 'var(--ae-dialog__height--big)' }\">\n  <template #header=\"scope\">\n    <div class=\"flex justify-between items-center\">\n      <div>{{controller.title}}</div>\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n  <template #body>\n    <div class=\"\">\n      <iframe ref=\"pdfFrame\" class=\"w-full h-full\" v-if=\"locals.url\" :src=\"locals.url\" type=\"application/pdf\"></iframe>\n    </div>\n  </template>\n</ae-dialog> -->"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"20a6dabd-5c89-4fb9-a12b-5bc63a48e7ca","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-06-01T12:37:42+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"aac11114-46bb-4f29-a280-51d889a8aaca","text":"Export Wartung as PDF","v":"24e668d8fb35e875"},"p":"594e6b26-7310-4d00-aad9-2a577ccab542","previous":{"v":"47f7e2edf334df74"},"stamps":[],"t":1780317462703,"v":"9231a943f08aed17"},{"id":"bbd6d99f-571d-422f-a2bc-15d3f8ecfae8","v":"5c957208634a1b44","previous":{"v":"aeb6e899ac6104aa"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"File Preview Dialog","applies":"","packages":[],"template":"<ae-dialog ref=\"dialog\" v-if=\"locals.show\" :dialog-size=\"{ height: 'var(--ae-dialog__height--big)', width: 'var(--ae-dialog__width--big)' }\">\n\t<div slot=\"header\" class=\"_CSS-dialog-header\" slot-scope=\"scope\">\n\t\t<a class=\"ae-button ae-button--primary\" v-if=\"locals.document\" :href=\"controller.downloadHref\" target=\"_blank\"\n\t\t :download=\"params.fileName\">\n\t\t\t<ae-icon class=\"fa fa-download\"></ae-icon> Download\n\t\t</a>\n\t\t<ae-design v-if=\"!params.fileName && locals.document\" name=\"title\" :document=\"locals.document\"></ae-design>\n    <span class=\"_CSS-filename\">{{ params.fileName }}</span>\n\t\t<div class=\"ae-button\" @click=\"scope.close()\">\n\t\t\t<ae-icon class=\"fa fa-times\"></ae-icon>\n\t\t</div>\n\t</div>\n\n  <div slot=\"body\" class=\"_CSS-dialog__body\" @keyup.esc.capture=\"() => $refs.dialog.close()\" tabindex=\"0\" ref=\"body\">\n\t  <ae-control name=\"file-viewer\" :field-name=\"params.fieldName\" :document=\"locals.document\" style=\"flex:1;\" :param-preview-format=\"params.previewFormat\"></ae-control>\n  </div>\n</ae-dialog>\n  ","css":"._CSS-dialog-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  overflow: hidden;\n}\n\n._CSS-dialog__body {\n  outline: none;\n  margin: 0 !important;\n  flex: 1;\n  display: flex;\n}\n\n._CSS-filename {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}","controller":"class Controller {\n  init() {\n    locals.document = params.document\n\n    locals.show = false\n    this.subscription = null\n\n    this.show = async (eventData) => {\n      console.log(eventData)\n      locals.show = true\n\n      await Aeppic.nextRenderPass()\n      await Aeppic.nextRenderPass()\n\n      $refs.dialog.show(eventData)\n\n      await Aeppic.nextRenderPass()\n      await Aeppic.nextRenderPass()\n\n      $refs.body && $refs.body.focus()\n    }\n\n    this.close = () => {\n      $refs.dialog.close()\n      locals.show = false\n    }\n\n    $on('show', this.show)\n    $on('close', this.close)\n\n\n    watchParam('document', (newDocument) => {\n      if (this.subscription) {\n        this.subscription.cancel()\n      }\n      \n      if (!newDocument) {\n        locals.document = null\n        return\n      }\n\n      const hasChanged = !locals.document || (locals.document.id !== newDocument.id || locals.document.v !== newDocument.v)\n\n      if (!hasChanged) {\n        return\n      }\n\n      locals.document = newDocument\n    })\n  }\n\n  get downloadHref() {\n    if (params.downloadPdf) {\n      return Aeppic.Content.getPdfUrl(locals.document, params.fieldName)\n    }\n\n    return Aeppic.Content.getSrc(locals.document, params.fieldName)\n  }\n}\n\n"},"locks":[],"created":{"at":"2018-02-21T10:36:47+01:00","by":"","from":"","client":"server"},"modified":{"at":"2023-02-10T14:08:00+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1676038080670,"ct":1621428481253,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"1e9d55d2-a4f8-474e-897b-0b747c5c6a01","v":"fb1b6d8634aa53d1","previous":{"v":"d4ad612ea296bf0d"},"p":"44e0edf9-6515-4e4b-ad48-98a04d28df11","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Files Form Layout","applies":"","packages":[],"template":"<ae-control v-if=\"locals.form\" name=\"children\" :document=\"params.document\" field-name=\"files\" :params=\"locals.form.getFieldControlParams('files')\"></ae-control>\n","css":"","controller":"async init() {\n  locals.form = null\n  locals.form = await Aeppic.getFormForDocument(params.document)\n}"},"locks":[],"created":{"at":"2018-06-20T10:40:51+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583892442,"ct":1529491251106,"a_depth":4,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","e89b29a9-6ab9-47dc-a6fe-91ebda92871d","44e0edf9-6515-4e4b-ad48-98a04d28df11"],"a_forms":["folder","application-form","folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"8a0cffef-ae8c-4090-a071-05c1a6f87804","v":"initial","p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Files Playback Dialog","applies":"","packages":[],"template":"<ae-dialog ref=\"dialog\" :full-screen=\"Aeppic.Device === 'Phone'\" :dialog-classes=\"{ '_CSS-dialog--desktop': Aeppic.Device !== 'Phone' }\" >\n  <div slot=\"header\" slot-scope=\"scope\" class=\"_CSS-dialog__header\">\n    <button class=\"_CSS-playback-control _CSS-control-close\" @click.stop=\"scope.close()\">\n      <ae-icon class=\"far fa-arrow-left\"></ae-icon>\n    </button>\n    <ae-design name=\"editable-title\" :document=\"controller.playbackDocument\" class=\"_CSS-dialog__header-title\"></ae-design>\n    <ae-design name=\"button-download\" :document=\"controller.playbackDocument\"></ae-design>\n  </div>\n  <div  class=\"_CSS-dialog__body\"\n        ref=\"dialogBody\"\n        slot=\"body\"\n        slot-scope=\"scope\"\n        @keydown.right.capture=\"controller.nextPlayback($event)\"\n        @keydown.left.capture=\"controller.previousPlayback($event)\"\n        @keydown.esc.capture=\"scope.close()\"\n        tabindex=\"0\"\n  >\n    <ae-design v-if=\"$refs.dialog && $refs.dialog.isOpen\" name=\"playback\" :document=\"controller.playbackDocument\" :param-preview-format=\"params.previewFormat\"></ae-design>\n\n    <button v-if=\"controller.canNavigate\" class=\"_CSS-playback-control _CSS-playback-control--left\" @click=\"controller.previousPlayback()\">\n      <ae-icon class=\"far fa-angle-left\"></ae-icon>\n    </button>\n\n    <button v-if=\"controller.canNavigate\" class=\"_CSS-playback-control _CSS-playback-control--right\" @click=\"controller.nextPlayback()\">\n      <ae-icon class=\"far fa-angle-right\"></ae-icon>\n    </button>\n\n  </div>\n</ae-dialog>\n ","css":"\n/* DIALOG */\n\n._CSS-dialog--desktop {\n  min-height: 88% !important;\n  min-width: 50% !important;\n}\n\n._CSS-dialog--phone {\n  height: 100% !important;\n  width: 100% !important;\n}\n\n._CSS-dialog__header {\n  display: flex;\n  align-items: center;\n}\n\n._CSS-dialog__header-title {\n  margin: auto;\n  min-width: 0;\n}\n\n._CSS-dialog__body {\n  display: flex;\n  flex-flow: column;\n\n  outline: none;\n  position: relative;\n  margin: 0 !important;\n\n  height: 100%;\n}\n\n._CSS-playback-control {\n  font-size: 2rem;\n  width: 3rem;\n  height: 3rem;\n  user-select: none;\n  border: 3px solid #fff;\n  border-radius: 50%;\n  background: rgba(0,0,0,0.5);\n  color: white;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  opacity: 0.5;\n  cursor: pointer;\n}\n\n._CSS-playback-control:enabled:hover {\n  opacity: 1;\n}\n\n\n._CSS-control-close {\n  /* position: absolute; */\n  /* top: 5px; */\n  /* left: 5px; */\n}\n\n._CSS-playback-control--left {\n  position: absolute;\n  top: 50%;\n  left: 15px;\n}\n\n._CSS-playback-control--right {\n  position: absolute;\n  top: 50%;\n  right: 15px;\n}","controller":"class Controller {\n  async init() {\n    locals.playbackFileIndex = null\n\n    $on('show-index', index => this.showDialog(index))\n  }\n\n  get _fileFieldName() {\n    return params.fileFieldName || 'datei'\n  }\n\n  showDialog(withIndex) {\n    locals.playbackFileIndex = withIndex || 0 \n\n    $refs.dialog.show()\n\n    Aeppic.nextRenderPass(() => {\n      $refs.dialogBody && $refs.dialogBody.focus()\n    })\n  }\n\n  get canNavigate() {\n    return params.documents.length > 1\n  }\n\n  get playbackDocument() {\n    if (locals.playbackFileIndex == null) {\n      return\n    }\n\n    return params.documents[locals.playbackFileIndex]\n  }\n\n  previousPlayback(event) {\n    if (locals.playbackFileIndex === 0) {\n      locals.playbackFileIndex = params.documents.length - 1\n    } else {\n      locals.playbackFileIndex -= 1\n    }\n\n  }\n\n  nextPlayback(event) {\n    if (locals.playbackFileIndex === params.documents.length - 1) {\n      locals.playbackFileIndex = 0\n    } else {\n      locals.playbackFileIndex += 1\n    }\n  }\n}\n\n"},"locks":[],"created":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583893980,"ct":1602583893979,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"ffbbd328-5e05-470b-97ce-305f6b3b5847","v":"30f15a46977f8b27","previous":{"v":"1aa3b90914028a13"},"p":"24730991-d920-4a1e-8041-6a9dc6c0ffc1","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Film Form Layout","applies":"","packages":[],"template":"<div class=\"_CSS-card\">\n  <div class=\"_CSS-title\">\n    <ae-icon class=\"fa fa-film\" style=\"margin-right: 8px;\"></ae-icon>\n    <ae-design name=\"title\" :document=\"params.document\" v-if=\"params.readonly\"></ae-design>\n    <ae-control v-else field-name=\"name\" :document=\"params.document\"></ae-control>\n  </div>\n\n  <div class=\"_CSS-subtitle\">{{ Aeppic.translate(params.form.getPlaceholder('roles').label) }}</div>\n\n  <ae-control class=\"_CSS-list ae-form-cell\" name=\"children\" :document=\"params.document\" field-name=\"roles\"\n  :param-template-parent-id=\"params.document.id\" xparam-design=\"card--tiny,card\"  :readonly=\"params.readonly\"\n  :params=\"params.form.getFieldControlParams('roles')\"></ae-control>\n\n  <div class=\"_CSS-subtitle\">{{ Aeppic.translate(params.form.getPlaceholder('files').label) }}</div>\n\n  <ae-control class=\"_CSS-list ae-form-cell\" name=\"children\" :document=\"params.document\" field-name=\"files\"\n  :param-template-parent-id=\"params.document.id\" :readonly=\"params.readonly\"\n  :params=\"params.form.getFieldControlParams('files')\"></ae-control>\n</div>","css":"._CSS-card {\n  display: flex;\n  flex-flow: column;\n\n  overflow: hidden;\n\n  background: rgba(255,255,255,0.7);\n  padding: 1rem;\n}\n\n._CSS-title {\n  font-size: 1.5rem;\n  font-weight: bold;\n  text-transform: uppercase;\n  display: flex;\n  align-items: center;\n}\n\n._CSS-subtitle {\n  font-size: 1.3rem;\n  text-transform: uppercase;\n}\n\n._CSS-list {\n  margin-bottom: 2rem;\n}\n","controller":""},"locks":[],"created":{"at":"2018-06-20T08:38:41+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583892187,"ct":1529483921726,"a_depth":4,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","e89b29a9-6ab9-47dc-a6fe-91ebda92871d","24730991-d920-4a1e-8041-6a9dc6c0ffc1"],"a_forms":["folder","application-form","folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"3d2eacbb-f420-4946-b381-6d2dfe417234","v":"b31e869c14b92cfa","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Filter Bar","applies":"","packages":[],"template":"<div v-if=\"locals.filters\" class=\"_CSS-filter__area\">\n    <div v-for=\"filter of locals.filters\">\n        <div v-if=\"controller.showLabel(filter)\" class=\"_CSS-filter-card ae-button ae-button--secondary\">\n            <span class=\"_CSS-filter-card__label\"> {{ controller.customizeLabels(locals.form.getPlaceholder(filter.field.name).label) + ':' }} </span>\n            <div v-for=\"option of filter.values\" class=\"_CSS-filter-card__content\">\n                {{'&nbsp' + controller.displayBooleanOptions(filter.field,option.value)}}\n                <div v-if=\"option.enabled\" class=\"_CSS-filter-card__label\">{{option.display}}</div>\n                <div v-if=\"filter.field.subType === 'date'\" class=\"_CSS-filter-card__date\">\n                    <div v-if=\"option.start && !option.end\" class=\"_CSS-filter-card__option\">ab&nbsp</div>\n                    <div v-if=\"!option.start && option.end\" class=\"_CSS-filter-card__option\">bis&nbsp</div>\n                    <div v-if=\"option.start\" class=\"_CSS-filter-card__option\">\n                        {{ Aeppic.DateTime.fromISO(option.start).toLocaleString(Aeppic.DateTime.DATE_SHORT)}}\n                    </div>\n                    <div v-if=\"option.start && option.end\" class=\"_CSS-filter-card__option\">&nbsp - &nbsp</div>\n                    <div v-if=\"option.end\" class=\"_CSS-filter-card__option\">\n                        {{Aeppic.DateTime.fromISO(option.end).toLocaleString(Aeppic.DateTime.DATE_SHORT)}}\n                    </div>\n                </div>\n                <div v-if=\"option.id\" class=\"_CSS-filter-card__option _CSS-filter-card__label\">\n                    <ae-design name=\"icon\" :param-readonly=\"true\" :document-id=\"option.id\"></ae-design>\n                </div>\n            </div>\n            <button v-if=\"filter.field.subType !== 'switch'\" class=\"ae-button ae-button--secondary\" @click.stop=\"controller.removeActiveOption(filter)\">\n              <ae-icon class=\"fal fa-times\"></ae-icon>     \n            </button>\n        </div>\n    </div>\n</div>\n","css":"._CSS-filter-card__content {\n    display: flex;\n    flex-direction: row;\n}\n\n._CSS-filter-card__option {\n    align-self: center;\n}\n._CSS-filter-card__date {\n    display: flex;\n}\n\n._CSS-filter__area {\n    width: 100%;\n    min-height: var(--ae-size-6);\n    padding: var(--ae-size-1);\n    overflow: auto;\n    display: flex;\n    margin-top: var(--ae-size-1);\n}\n\n._CSS-filter-card {\n    margin: 0 var(--ae-size-2);\n    padding: 0 var(--ae-size-1) 0 var(--ae-size-1);\n    height: var(--ae-size-7);\n    display: flex;\n    align-items: center;\n\n}\n\n._CSS-filter-card__label {\n  max-width: var(--ae-size-12);\n  text-overflow: ellipsis;\n  overflow: hidden;\n  white-space: pre;\n} \n\n._CSS-filter-card:hover {\n  background: var(--ae-primary-200) !important;\n}","controller":"class Controller {\n    async init() {\n        locals.filters = params.filterObject\n        locals.form = params.filterForm\n\n        watchParam(\"filterObject\", (filter) => locals.filters = filter)\n    }\n\n    showLabel(filter) {\n        if (filter.values.length === 0) {\n            return false\n        }\n\n        if (filter.field.subType === 'select') {\n            const enabledOption = filter.values.find(value => {\n                return value.enabled\n            })\n            return !!enabledOption\n        }\n\n        if (filter.field.subType === 'date') {\n            const hasStartOption = filter.values.find(value => {\n                return value.start\n            })\n\n            const hasEndOption = filter.values.find(value => {\n                return value.end\n            })\n\n            return hasStartOption || hasEndOption\n        }\n        return true\n    }\n\n    customizeLabels(filterName) {\n        if (filterName === 'Erledigt') {\n            return 'Status'\n        }\n\n        return filterName\n    }\n\n    displayBooleanOptions(filter, value) {\n\n        if (filter.subType !== 'switch') {\n            return ''\n        }\n\n        if (filter.name === 'erledigt') {\n            if (value === false) {\n                return 'offen'\n            }\n            if (value === true) {\n                return 'erledigt'\n            }\n            if (value === null) {\n                return 'alle'\n            }\n        }\n\n        if(filter.subType === 'switch') {\n          if (value === false) {\n                return 'nein'\n            }\n            if (value === true) {\n                return 'ja'\n            }\n            if (value === null) {\n                return 'alle'\n            }\n        }\n    }\n\n    removeActiveOption(filter) {\n        $emit('remove-option', filter)\n    }\n}"},"locks":[],"created":{"at":"2020-10-14T13:51:01+00:00","by":"77031fd1-c20d-4484-b4b4-46c01bdab986","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481254,"ct":1621428481254,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"b8f10c74f733d9c2","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"f237a0a3-5122-4162-815d-960008d169cc","v":"14dd8417a265c27b","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Filter Content","applies":"","packages":[],"template":"<section v-if=\"locals.filtersTemp\" class=\"_CSS-filters\">\n    <div v-for=\"filter of locals.filtersTemp\" class=\"_CSS-filter\">\n        <label class=\"_CSS-filter__label\">\n            {{ controller.customizeLabels(locals.form.getPlaceholder(filter.field.name).label) }}\n        </label>\n        <div>\n            <section v-if=\"filter.field.subType === 'select'\" class=\"_CSS-filter__control-select\">\n                <div v-for=\"option of filter.values\">\n                    <template v-if=\"option.display\">\n                        <button class=\"ae-button  _CSS-filter__select-button\"\n                            @click.stop=\"controller.toggleSelect(filter, option)\"\n                            :class=\"{'_CSS-filter__control-select--active': option.enabled === true }\">\n                            {{ option.display }}\n                        </button>\n                    </template>\n                </div>\n                <div v-for=\"option of filter.values\">\n                    <template v-if=\"!option.display\">\n                        <button class=\"ae-button _CSS-filter__select-button\"\n                            @click.stop=\"controller.toggleSelect(filter, option)\"\n                            :class=\"{'_CSS-filter__select-button--active': option.enabled === true }\">\n                            <i>alle</i>\n                        </button>\n                    </template>\n                </div> \n            </section>\n            <section v-if=\"filter.field.subType === 'switch'\">\n                <div v-if=\"filter.values.length === 0? controller.addValue(filter) : ''\"> </div>\n                <div style=\"display: flex\" v-for=\"option of filter.values\">                  \n                    <button class=\"ae-button _CSS-filter__select-button\" @click.stop=\"option.value = true\" :class=\"{'_CSS-filter__select-button--active': option.value === true }\">{{controller.displayBooleanOptions(filter.field, true)}}</button>\n                    <button class=\"ae-button _CSS-filter__select-button\" @click.stop=\"option.value = false\" :class=\"{'_CSS-filter__select-button--active': option.value === false }\">{{controller.displayBooleanOptions(filter.field, false)}}</button>\n                    <button class=\"ae-button _CSS-filter__select-button\" @click.stop=\"option.value = null\" :class=\"{'_CSS-filter__select-button--active': option.value === null }\"><i>{{controller.displayBooleanOptions(filter.field, null)}}</i></button>\n                </div>\n            </section>\n            <section v-else-if=\"filter.field.subType === 'ref'\" class=\"_CSS-filter__control-ref\">\n\n                <div class=\"_CSS-filter__control-ref__value\" v-for=\"value of filter.values\" v-if=\"value.id\">\n                    <ae-design name=\"icon\" :param-readonly=\"true\" :document-id=\"value.id\"></ae-design>\n                    <ae-design name=\"title\" :param-readonly=\"true\" :document-id=\"value.id\"></ae-design>\n                    <button class=\"ae-button\" @click.stop=\"controller.removeActiveOption(filter,value)\">\n                        <ae-icon class=\"fa fa-times\"></ae-icon>\n                    </button>\n                </div>\n                <button class=\"ae-button\" @click.stop=\"controller.showRefSelection($event, filter)\">\n                    <ae-icon class=\"fa fa-plus\"></ae-icon> Auswählen\n                </button>\n            </section>\n            <section v-if=\"filter.field.subType === 'date'\">\n                <div v-if=\"filter.values.length === 0? controller.addValue(filter) : ''\"> </div>\n                <div class=\"_CSS-filter__control-ref__value\" v-for=\"option of filter.values\">\n                    <ae-layout layout-id=\"3e185751-e4f9-4493-b73d-3c99055d1b86\" @input=\"option.start = $event.replace(/T.*/, '')\" :param-value=\"option.start\">\n                    </ae-layout>\n                    <span>&nbspbis&nbsp</span>\n                    <ae-layout layout-id=\"3e185751-e4f9-4493-b73d-3c99055d1b86\" @input=\"option.end = $event.replace(/T.*/, '')\" :param-value=\"option.end\"></ae-layout>\n                    <button class=\"ae-button\" @click.stop=\"controller.removeValue(filter, option)\">\n                        <ae-icon class=\"fa fa-times\"></ae-icon>\n                    </button>\n                </div>\n            </section>\n        </div>\n    </div>\n</section>\n<section class=\"_CSS-popup__actions\">\n    <button class=\"ae-button\" style=\"color: var(--ae-accent-red-400);\" @click.stop=\"controller.resetFilters()\">\n        Filter zurücksetzen\n    </button>\n    <button class=\"ae-button ae-button--primary\" @click.stop=\"controller.applyFilters()\">\n        Filter anwenden\n    </button>\n</section>\n\n<ae-layout \n    layout-id=\"ed2cc4c2-d2a0-4969-8da7-49fb3d539cc9\" \n    ref=\"popup\" \n    :params=\"{ items: locals.refSelectionItems, hidePath: true, searchSize: controller.searchSize }\" \n    @filter=\"controller.filterItems($event)\" \n    @selected=\"controller.addReference($event)\"\n    @load-more=\"controller.loadMoreItems()\"></ae-layout>","css":"._CSS-filter__label {\n    color: var(--ae-background-500);\n}\n\n._CSS-filters {\n    display: flex;\n    flex-flow: column;\n    max-height: 400px;\n    overflow: auto;\n    margin-bottom: var(--ae-size-4);\n}\n\n._CSS-filter {\n    display: flex;\n    flex-flow: column;\n    padding: var(--ae-size-3);\n}\n\n._CSS-filter__control-select {\n    display: flex;\n    flex-wrap: wrap;\n}\n\n._CSS-filter__select-button {\n    border: var(--ae-border-width) solid var(--ae-border-color) !important;\n}\n\n._CSS-filter__select-button--active,\n._CSS-filter__control-select--active,\n._CSS-filter__select-button:hover {\n    background: var(--ae-primary-200) !important;\n    border: var(--ae-border-width) solid var(--ae-primary-600) !important;\n    color: var(--ae-primary-800) !important;\n}\n\n._CSS-filter__control-ref__value {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n}\n\n._CSS-popup__actions {\n    display: flex;\n    justify-content: space-between;\n}","controller":"class controller {\n  init() {\n      locals.filtersTemp = params.filterObject\n      locals.form = params.filterForm\n      locals.document = params.filterDocument\n  }\n\n  customizeLabels(filterName) {\n      if (filterName === 'Erledigt') {\n          return 'Status'\n      }\n\n      return filterName\n  }\n\n  applyFilters() {\n      $emit('apply')\n  }\n\n  resetFilters() {\n      $emit('reset')\n  }\n\n  addValue(filter, ref) {\n      if (ref) {\n          const addRef = {\n              filter: filter,\n              ref: ref,\n          }\n          $emit('add', addRef)\n      } else {\n          $emit('add', filter)\n      }\n  }\n\n  toggleSelect(filter, option) {\n      const select = {\n          filter: filter,\n          option: option\n      }\n\n      $emit('toggle', select)\n  }\n\n  removeValue(filter, option) {\n      const value = {\n          filter: filter,\n          option: option\n      }\n\n      $emit('remove', value)\n  }\n\n  removeActiveOption(filter, value) {\n      const option = {\n          filter: filter,\n          value: value\n      }\n\n      $emit('remove-option', option)\n  }\n\n  async addReference(ref) {\n      locals.reference = ref\n      locals.refFilter = this.refFilter\n\n      $emit('refFilter', locals.refFilter)\n\n      this.addValue(locals.refFilter, locals.reference)\n  }\n\n  async showRefSelection(clickEvent, filter) {\n      this.refSearchSize = 20\n      this.refFilter = filter\n\n      await this.filterItems()\n\n      $refs.popup.$emit('show', clickEvent)\n  }\n\n  async filterItems(rawFilter = '') {\n      const searchParts = [this.refFilter.field.joinedFilter]\n\n      const queryLimiting = this.queryLimit\n      if (queryLimiting) {\n          searchParts.push(queryLimiting)\n      }\n\n      if (rawFilter !== '') {\n          const filter = rawFilter.trim()\n\n          if (filter.indexOf(':') === -1) {\n              filter.split(/\\s/).map(part => searchParts.push(part + '*'))\n          } else {\n              searchParts.push(filter)\n          }\n      }\n\n      const fullsearch = searchParts.join(' ')\n\n      locals.refSelectionItems = await Aeppic.find(fullsearch, {\n          size: this.refSearchSize\n      })\n  }\n\n  get queryLimit() {\n      const document = locals.document\n\n      const parts = []\n\n      if (params.ancestorSearchLimit) {\n          if (document.a.length < params.ancestorSearchLimit) {\n              console.error('ancestorSearchLimit is out of bounds: limit is greater than document ancestors')\n          } else {\n              parts.push(`a:${document.a[document.a.length - params.ancestorSearchLimit]}`)\n          }\n      }\n\n      const ancestorForm = params.ancestorForm || 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df' // fallback to 'Unternehmen'\n\n      if (ancestorForm) {\n          const ancestorIndex = document['a_forms'].findIndex(formId => formId === ancestorForm)\n\n          if (ancestorIndex === -1) {\n              console.error(`ancestorForm is out of bounds: ${ancestorForm} is not in a_forms`)\n          } else {\n              const ancestorId = document.a[ancestorIndex]\n\n              parts.push(`a:${ancestorId}`)\n          }\n      }\n\n      if (params.ancestor) {\n          parts.push(this._fieldIdsAsQueryString(form.getField(params.ancestor), document.data[params.ancestor], 'a:'))\n      }\n\n      if (params.parent) {\n          parts.push(this._fieldIdsAsQueryString(form.getField(params.parent), document.data[params.parent], 'p:'))\n      }\n\n      return parts.join(' AND ')\n  }\n  \n  async loadMoreItems() {\n      this.refSearchSize += 20\n\n      locals.refSelectionItems = await Aeppic.find(this.refSearchFieldInfo.joinedFilter, {\n          size: this.refSearchSize\n      })\n  }\n\n  displayBooleanOptions(filter, value) {\n    if (filter.name === 'erledigt') {\n        if (value === false) {\n            return 'offen'\n        }\n        if (value === true) {\n            return 'erledigt'\n        }\n        if (value === null) {\n            return 'alle'\n        }\n    }\n\n    if(filter.subType === 'switch') {\n      if (value === false) {\n            return 'nein'\n        }\n        if (value === true) {\n            return 'ja'\n        }\n        if (value === null) {\n            return 'alle'\n        }\n    }\n  }\n}\n"},"locks":[],"created":{"at":"2020-10-01T10:12:05+00:00","by":"ab01efe6-018d-4330-8ec4-5989e212f82a","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481254,"ct":1621428481254,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"0559f01943e7d076","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"841a30ba-4f52-4b81-a022-06bada89fa8e","v":"07c09f5e55971fdf","previous":{"v":"7eeaed4be909a8ba","p":"2d2705a2-824a-4c8f-b61d-b5c657e81f4b","a":["apps","2d2705a2-824a-4c8f-b61d-b5c657e81f4b"]},"p":"014f9cfc-ec00-48ce-bebf-bad5e80a16d0","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"FIX: cloneDeep failing for Projekt Leistung's Aufgaben","applies":"","packages":[],"template":"","css":"","controller":"async init() {\n  const stammdaten = await Aeppic.find(`a_forms:089eb68f-d2ec-4e30-a3bb-6549d72932ec`, { size: 999 })\n  await Aeppic.getAll(stammdaten)\n  console.log(stammdaten)\n}"},"locks":[],"created":{"at":"2021-09-01T13:33:09+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-09-06T12:20:41+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1630930841618,"ct":1630503189600,"a_depth":3,"a":["apps","2d2705a2-824a-4c8f-b61d-b5c657e81f4b","014f9cfc-ec00-48ce-bebf-bad5e80a16d0"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"6660c0f5-a770-41a3-8bce-5210f8c0bba7","v":"c94f0fb93aa69d75","previous":{"v":"08fd6ea675d7afa9"},"p":"b527e1f4-0f84-4523-b682-74390e265561","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"Followup Dialog","applies":"","packages":[],"template":"<ae-dialog ref=\"dialog\" @close=\"() => controller?.generateNewData()\" :full-screen=\"Aeppic.Device === 'Phone'\">\n  <template #header=\"scope\">\n    <div class=\"_CSS-dialog__header\">\n      <span>Wiedervorlage</span>\n\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n  \n  <template #body=\"scope\">\n    <div class=\"_CSS-dialog__body\">\n      <section class=\"_CSS-line ae-form-cell ae-control-container\">\n        <label class=\"ae-form-cell__label\">Neu</label>\n        <ae-form v-if=\"locals.newDocument\" :document=\"locals.newDocument\"></ae-form> \n      </section>\n\n      <section class=\"_CSS-line ae-form-cell ae-control-container\">\n        <label class=\"ae-form-cell__label\">Bestehende Wiedervorlagen</label>\n        <ae-list  list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n                  :search=\"locals.existingQuery\"\n                  param-design=\"ref-card\"\n                  sort=\"data.date\"\n        ></ae-list>\n      </section>\n\n      <!-- <section class=\"_CSS-line ae-form-cell ae-control-container\">\n        <label class=\"ae-form-cell__label\">Senden an</label>\n        <div class=\"ae-form-cell__input class _CSS-line__input\">\n          <ae-design v-if=\"locals.data.employee\" name=\"avatar--tiny\" :document=\"locals.data.employee\"></ae-design>\n          <ae-design v-if=\"locals.data.employee\" name=\"title\" :document=\"locals.data.employee\" style=\"margin: 0 var(--ae-size-2);\"></ae-design>\n\n          <ae-layout layout-id=\"36649f27-5869-49e6-9b49-3b5c3b9c795d\" :param-settings=\"locals.selectorSettings\" :param-hide-path=\"true\" @selected=\"locals.data.employee = $event\"></ae-layout>\n        </div>\n\n      </section>\n\n      <section class=\"_CSS-line ae-form-cell ae-control-container\">\n        <label class=\"ae-form-cell__label\">Kommentar (optional)</label>\n        <textarea v-model=\"locals.data.comment\"></textarea>\n      </section> -->\n\n    </div>\n  </template>\n  <template #commands=\"scope\">\n    <section class=\"_CSS-dialog__actions\">\n      <button class=\"ae-button ae-button\" @click.stop=\"scope.close()\">Abbrechen</button>\n      <button class=\"ae-button ae-button--primary\" :disabled=\"!locals.newDocument || !locals.newDocument.data.date\" @click.stop=\"controller.save()\">\n        Speichern\n      </button>\n    </section>\n  </template>\n</ae-dialog>\n","css":"._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n._CSS-dialog__body {\n  min-height: 200px;\n}","controller":"class Controller {\n  init() {\n    this.FORMS = {\n      NotificationRequest: 'ddaa6921-770e-4a73-b8a4-b4a99abed24b',\n      Account: 'account',\n      Employee: 'd2ac3563-3c3f-4f02-b923-9b67abf98d10',\n      Followup: '53eecc66-c1a1-47da-b9df-67cc2b8b60f5',\n    }\n\n    locals.data = {}\n    locals.newDocument = null\n    locals.existingQuery = `p:${Aeppic.Account.id} f.id:${this.FORMS.Followup} data.document.id:${params.document.id}`\n\n    locals.selectorSettings = {\n      filter: {\n        base: `f.id: ${this.FORMS.Employee}`,\n        ancestorId: params.document.a[0]\n      }\n    }\n\n    $on('show', () => {\n      this.showSelector()\n    })\n  }\n\n  async generateNewData() {\n    const followup = await Aeppic.new(this.FORMS.Followup, Aeppic.Account.id)\n\n    followup.addReference('document', params.document)\n\n    locals.newDocument = followup\n  }\n\n  async showSelector() {\n    await this.generateNewData()\n\n    $refs.dialog && $refs.dialog.show({ target: $refs.button })\n  }\n\n  async save() {\n    Aeppic.save(locals.newDocument)\n\n    locals.newDocument = null\n\n    $refs.dialog && $refs.dialog.close()\n  }\n\n  destroy() {\n    locals.newDocument = null\n\n    $refs.dialog && $refs.dialog.close()\n  }\n}"},"locks":[],"created":{"at":"2020-05-08T08:52:36+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2023-01-16T14:50:39+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1673880639737,"ct":1588927956535,"a_depth":3,"a":["apps","8884dd6d-4320-4de2-91fe-6777ecfebec9","b527e1f4-0f84-4523-b682-74390e265561"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9"],"a_depth":4,"a_forms":["system-folder-form","folder","form","folder"],"created":{"at":"2025-10-07T13:50:27+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759845027435,"data":{"applies":"","controller":"","css":"","name":"Form","packages":[],"template":"<section\n    class=\"bg-surface text-on-surface rounded-2xl p-4\"\n  >\n  <h1>Form</h1>\n  <section\n    class=\"flex gap-4 flex-wrap items-center\"\n  >\n    <ae-form  \n      documentId=\"1639640d-efbd-4a6b-8db1-14bdd6459248\" \n      :auto-save=\"true\"\n      :auto-save-after=\"1000\"\n      layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n      class=\"w-full\"\n      :readonly=\"params.readonly\"\n    ></ae-form>\n  </section>\n</section>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"bfc075e0-b1ee-42d2-a8d5-32a88560b6e9","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-07T13:50:39+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"6ad6f21b-b086-4e9c-aa38-4893fd343fb9","previous":{"v":"initial"},"stamps":[],"t":1759845039733,"v":"769591f3e18dac50"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2022-02-15T13:03:42+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","client":"server","from":""},"ct":1645019729892,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.showHelp = false\n    locals.placeholder = params.form.getPlaceholder(params.field.name) \n    \n    const settings = locals.placeholder?.field?.settings\n    locals.help = settings?.help\n    locals.helpExtended = settings?.helpExtended\n  }\n}\n ","css":"._CSS {\n  // display:flex;\n  // flex-direction: column;\n  // justify-items:start;\n  // align-items:start;\n  // display: block;\n  // border: 2px solid black;\n  //flex:none;\n}","name":"Form Field Layout","packages":[],"template":"<!-- {ro}{{params.readonly}} {{params.document.readonly}} -->\n\n<div class=\"flex flex-col justify-between\">\n  <label :for=\"id('input_id_for_label')\" \n          class=\"w-full font-medium  text-neutral-600 whitespace-nowrap flex flex-row items-center gap-1 justify-start \"\n  >\n    <span class=\"text-clip\"\n      :mouseenter=\"locals.showHelp = true\"\n      :mouseleave=\"locals.showHelp = false\"\n      :title=\"params.field.label\">\n      {{params.field.label}}\n    </span> \n\n    <span v-if=\"locals.help?.html\" :title=\"locals.help?.text\"\n      class=\"shrink-2 truncate ml-1 mt-1 font-normal text-gray-400 text-sm\"\n      xv-html=\"locals.help.html\">\n      {{locals.help.text}}\n    </span>  \n\n    <ae-control v-if=\"locals.helpExtended\"\n      name=\"field-help\" \n      class=\"px-1\"\n      :field=\"params.field\"\n      :field-name=\"params.field.name\"\n      :document=\"params.document\"\n      :form=\"params.form\"\n      :readonly=\"true\"\n    ></ae-control> \n\n  </label> \n\n  <ae-control \n    :name=\"params.field.controlName + '-add'\"\n    :field=\"params.field\"\n    :field-name=\"params.field.name\"\n    :params=\"params.field.controlParams\"\n    :document=\"params.document\"\n    :form=\"params.form\"\n    :param-input-id=\"id('input_id_for_label--add')\"\n    :data-original-control-name=\"params.field.controlName + '-add'\"\n    :disable-default-control=\"true\"\n    :readonly=\"params.readonly\"\n  ></ae-control>\n</div>\n<ae-control  \n  class=\"overflow-x \"\n  :name=\"params.field.controlName\"\n  :field-name=\"params.field.name\"\n  :document=\"params.document\"\n  :form=\"params.form\"\n  :placeholder=\"params.placeholder\"\n  :params=\"params.field.controlParams\"\n  :param-input-id=\"id('input_id_for_label')\"\n  :data-original-control-name=\"params.field.controlName\"\n  :readonly=\"params.readonly\"\n></ae-control>\n\n<!-- <section class=\"h-full  justify-between flex-col gap-1\" :data-readonly=\"params.readonly\">\n</section>  -->\n    <!-- :param-debug=\"Aeppic.Account.data.allowDevMode\" -->"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"7f087b7f-c6a4-49d8-803a-4486341ae23d","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-05-12T09:28:22+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"31c9296c9e5ad658"},"stamps":[],"t":1778578102433,"v":"8234bb523fee4028"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2022-02-15T13:03:44+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","client":"server","from":""},"ct":1705417831360,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.allowOptional = false\n    locals.hasOptionalSections = false\n    locals.nested = false\n\n    function handleFormParam() {\n      if (params.form) {\n        locals.allowOptional = params.form.data.allowUndefinedFields\n        locals.hasOptionalSections = params.form.getTaggedSections(['optional']).length > 0\n      } else {\n        locals.allowOptional = false\n        locals.hasOptionalSections = false\n      }\n    }\n\n    watchParam('form', handleFormParam, { immediate: true })\n    watchParam('rootSection', handleFormParam, { immediate: true })\n\n    await Aeppic.nextRenderPass()\n\n    // Is it nested inside another form ?\n    if ($refs.rootFormElement.parentElement.closest('._CSS_form-layout')) {\n      // console.log('nested form. not limiting height')\n      locals.nested = true\n    }\n  }\n\n  get theme() {\n    return {\n      ...params.theme,\n      ...{\n        field: {\n          ...params.theme.field,\n          layoutId: '7f087b7f-c6a4-49d8-803a-4486341ae23d',\n        }\n      },\n    }\n  }\n}","css":"._CSS {  \n}","name":"Form Layout (Experimental)","packages":[],"template":"<div  ref=\"rootFormElement\"\n      class=\"_CSS_form-layout grid md:gap-4 relative overflow-none transition-all\" \n     :class=\"{ 'ae-form-nested': locals.nested, 'grid-cols-1': !locals.hasOptionalSections, 'grid-cols-[minmax(100px,max-content)_1fr]': locals.hasOptionalSections }\">\n  <ae-layout\n    v-if=\"locals.hasOptionalSections && locals.allowOptional\"\n    class=\"hidden md:block overflow-auto pr-4 min-w-24 xborder-r-2 border-r-gray-500/20\"\n    layout-id=\"0faa83f8-3ed7-4303-b645-d729a8230057\"\n    :param-document=\"params.document\"\n    :param-form=\"params.form\"\n  ></ae-layout>\n  <ae-form-section-next\n    class=\"pl-0 md:pl-2\"\n    :class=\"locals.nested ? [] : ['pr-2', 'pt-2']\"\n    :style=\"{ 'xmax-height': locals.nested ? 'unset' : 'calc(99vh - var(--ae-max-top-content))' }\"\n    layout-id=\"4dfdf094-32b3-41fe-a2eb-50a809c39d7d\"\n    :form=\"params.form\"\n    :document=\"params.document\"\n    :section=\"params.rootSection\"\n    :theme=\"controller.theme\" \n    :readonly=\"params.readonly\"\n  ></ae-form-section-next>\n  <!-- <ae-design name=\"form-extra\" :document=\"params.document\"></ae-design> -->\n</div>    \n\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"6c39f2cc-6059-42b2-8796-5c803899367c","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-04-16T11:27:14+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"62417282bb94c72f"},"stamps":[],"t":1776338834018,"v":"57360c5ac5d7af51"},{"id":"f78eeea3-a3af-4738-a799-e49597d681fc","v":"c2f16fb8f26d6dc9","previous":{"v":"040284853fb833e6"},"p":"28527c6d-4f85-4881-8f5d-948021a60ad0","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Form Layout for Share","applies":"","packages":[],"template":"<ae-layout layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\"\n          :param-readonly=\"params.readonly\"\n          :param-document=\"params.document\"\n          param-fields-to-display=\"typ,personName,personTelefon,personEmail,beschreibung,bild,newsletter\"\n></ae-layout>","css":"","controller":""},"locks":[],"created":{"at":"2022-05-04T09:44:03+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-08-17T14:01:48+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1660744908293,"ct":1651657443577,"a_depth":4,"a":["apps","86189c5a-b9f4-445a-879f-d94574960df0","15292d56-6806-4263-b6d0-9194687203e1","28527c6d-4f85-4881-8f5d-948021a60ad0"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"8974ef10-ff5f-4584-8299-59979915d2b6","v":"0b93e1ee2ff4abc8","previous":{"v":"e2836160f23750c0"},"p":"77223328-2527-4344-84b1-4092bdf006ba","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Form Layout: Aufgaben eines Projekts","applies":"","packages":[],"template":"<ae-layout\n  v-if=\"params.document && locals.form\"\n  :param-document=\"params.document\"\n  :param-form=\"locals.form\"\n  layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\"\n  :param-fields-to-display=\"['aufgaben']\"\n  :param-fields-ignore-hidden=\"['aufgaben']\"\n  :param-readonly=\"params.readonly\"\n  :param-hide-path=\"params.hidePath\"\n  :param-no-add=\"params.noAdd\"\n></ae-layout>\n","css":"","controller":"async init() {\n  locals.form = null\n  locals.form = await Aeppic.getFormForDocument(params.document)\n\n  watchParam('document', async () => {\n    locals.form = await Aeppic.getFormForDocument(params.document)\n  })\n}"},"locks":[],"created":{"at":"2018-10-24T09:39:38+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-01-14T14:12:29+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1610633549459,"ct":1540373978844,"a_depth":3,"a":["apps","5acfd7a2-33e4-498a-9150-71e1ab772bfc","77223328-2527-4344-84b1-4092bdf006ba"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"f3ef7a79-d6a6-4211-b255-7bb77dcf31f1","v":"533cf6122aad65f9","cloneOf":{"id":"0b61fc10-ac8c-4dd2-9803-6a381752d54d","v":"8a91e200c061afd2","text":"Form Layout: Verknüpfungen eines Kunden"},"originalCloneOf":{"id":"0b61fc10-ac8c-4dd2-9803-6a381752d54d","v":"8a91e200c061afd2","text":"Form Layout: Verknüpfungen eines Kunden"},"previous":{"v":"34932aeef8224ba6"},"p":"15e997fb-2bff-421c-b0d0-c3ce2562aba0","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"},"data":{"name":"Form Layout: Feld Kunde","applies":"","packages":[],"template":"<ae-layout\n  v-if=\"params.document && locals.form\"\n  :param-document=\"params.document\"\n  :param-form=\"locals.form\"\n  layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\"\n></ae-layout>\n  <!-- :param-fields-to-display=\"['street', 'streetNumber', 'supplement', 'postalCode', 'city']\" -->\n\n ","css":"","controller":"async init() {\n  locals.form = null\n  locals.form = await Aeppic.getFormForDocument(params.document)\n\n  watchParam('document', async () => {\n    locals.form = await Aeppic.getFormForDocument(params.document)\n  })\n}"},"locks":[],"created":{"at":"2021-02-17T15:54:29+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-02-17T16:09:27+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1613578167709,"ct":1613577269557,"a_depth":3,"a":["apps","9d6ee173-26fe-4472-a271-7667f717094e","15e997fb-2bff-421c-b0d0-c3ce2562aba0"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"0b61fc10-ac8c-4dd2-9803-6a381752d54d","v":"8a91e200c061afd2","previous":{"v":"initial"},"p":"15e997fb-2bff-421c-b0d0-c3ce2562aba0","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"},"data":{"name":"Form Layout: Verknüpfungen eines Kunden","applies":"","packages":[],"template":"<ae-layout\n  v-if=\"params.document && locals.form\"\n  :param-document=\"params.document\"\n  :param-form=\"locals.form\"\n  layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\"\n  :param-fields-to-display=\"['dmsFolder', 'project']\"\n  :param-readonly=\"params.readonly\"\n  :param-hide-path=\"params.hidePath\"\n  :param-no-add=\"params.noAdd\"\n></ae-layout>\n","css":"","controller":"async init() {\n  locals.form = null\n  locals.form = await Aeppic.getFormForDocument(params.document)\n\n  watchParam('document', async () => {\n    locals.form = await Aeppic.getFormForDocument(params.document)\n  })\n}"},"locks":[],"created":{"at":"2020-08-07T11:48:47+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-08-07T11:49:32+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1596800972477,"ct":1596800927881,"a_depth":3,"a":["apps","9d6ee173-26fe-4472-a271-7667f717094e","15e997fb-2bff-421c-b0d0-c3ce2562aba0"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"58a24ea3-5dcd-486f-a76f-d86a9c0c74a8","v":"45e673e627811c5e","previous":{"v":"8081f4c5a6f437a0"},"p":"647b2571-aea1-4247-8adb-b43bb4c94afc","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Form Ref Verantwortlich","applies":"","packages":[],"template":"<ae-control\n  :name=\"locals.field.controlName\"\n  field-name=\"verantwortlich\"\n  :document=\"params.document\"\n  :params=\"locals.controlParams\"\n  :form=\"params.form\"\n></ae-control>","css":"","controller":"class Controller {\n  init() {\n    locals.field = params.form.getField('verantwortlich')\n    locals.controlParams = { \n      ...params.form.getFieldControlParams('verantwortlich'),\n      onlyAdd: true,\n    }\n  }\n}"},"locks":[],"created":{"at":"2022-05-18T13:52:59+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-05-18T14:05:31+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1652882731042,"ct":1652881979544,"a_depth":3,"a":["apps","144e85c0-d7f9-4b20-8928-be30f0c78bda","647b2571-aea1-4247-8adb-b43bb4c94afc"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2022-02-15T13:03:46+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","client":"server","from":""},"ct":1645019734070,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.key = 0\n    locals.selectedTabSection = null\n    locals.isRootSection = false\n    locals.subSectionsAreLevel1 = false\n    locals.showTabs = false\n    locals.collapsedChanged = 0\n    // locals.allItemsHidden = false\n\n    locals.shouldScroll = false\n    \n    locals.defaultTab = Aeppic.LocalStorage.getItem('form-section-layout:last-tab:' + params.document?.id)\n    \n    locals.headerClassesByLevel = {\n      1: 'mt-6 mb-4 p-2 text-2xl font-semibold m-auto w-max',\n      2: 'mt-4 mb-2 p-2 text-xl font-semibold', // p-1 mr-2',\n      3: 'mt-4 mb-2 p-2 text-lg font-semibold',\n      4: 'mt-4 mb-2 p-2 text-base font-semibold',\n      5: 'mt-4 mb-2 p-2 text-sm font-semibold',\n      6: 'mt-4 mb-2 p-2 text-xs font-semibold',\n    }\n\n    // this._updateAllItemsHidden(params.paragraphs)  \n    // watchParam('paragraphs', paragraphs => this._updateAllItemsHidden(paragraphs))\n\n    const refreshBounced = Aeppic.debounce(() => {\n      this._refresh()\n    })\n\n    watchParam('form', refreshBounced)\n    watchParam('paragraphs', refreshBounced)\n    watchParam('section', refreshBounced)\n    watchParam('subSections', refreshBounced)\n\n   // Variable to store the ID of the requestAnimationFrame\n    let requestId = null\n    let pending = false\n\n    // Scroll event listener\n    this.updateStickiness = (target) => {\n      // console.log('up stick', target)\n      if (requestId === null) {\n        pending = false\n        requestId = requestAnimationFrame(() => {\n          try {\n            this._checkContainer(target, 'sticky')\n          } finally {\n            requestId = null\n            if (pending) {\n              checkContainerWhenPossible()\n            }\n          }\n        })\n      } else {\n        pending = true\n      }\n    }\n\n    this._watchScrollablesDebounced = Aeppic.debounce(() => {\n      // console.log('something changed',$refs.scrollContainer)\n      this._cleanStickiness?.()\n      this._cleanStickiness = this._observeStickiness($refs.scrollContainer, 'sticky')\n    })\n\n    this._refresh()\n    await Aeppic.nextRenderPass()\n    refreshBounced()\n    // this._checkStickiness()\n  }\n\n  mergeClasses() {\n    let classes = []\n\n    for (const c of arguments) {\n      if (typeof c === 'string') {\n        classes += c + ' '\n      }\n      else {\n        for (const [key,value] of Object.entries(c)) {\n          if (!!value) {\n            classes += ' ' + key\n          }\n        }\n      }\n    }\n\n    return classes.trim()\n  }\n\n  isSectionCollapsible(section) {\n       if (!params.document) {\n      return false\n    } \n\n    return section.tags?.collapsible\n  }\n\n  isSectionCollapsed(section) {\n    if (!params.document) {\n      return false\n    } \n\n    if (!section.tags?.collapsible) {\n      return false\n    }\n\n    let stored =  Aeppic.LocalStorage.getItem('form-section-layout:section:' + params.document.id + ':' + section.key + ':collapsed')\n    return stored === 'true'\n  }\n\n  toggleSectionCollapsed(section) {\n    if (!section.tags?.collapsible) {\n      return \n    }\n\n    let newCollapsed = !this.isSectionCollapsed(section)\n\n    const key = 'form-section-layout:section:' + params.document.id + ':' + section.key + ':collapsed'\n    \n    if (newCollapsed) {\n      Aeppic.LocalStorage.setItem(key, true)\n    } else {\n      Aeppic.LocalStorage.removeItem(key)\n    }\n\n    locals.collapsedChanged++\n  }\n\n  stickyToggle(element) {\n    // console.log('toggle')\n  }\n\n  destroy() {\n    this._cleanStickiness?.()\n  }\n\n  async _checkStickiness() {\n    await Aeppic.nextRenderPass()\n    \n    this._cleanObservers?.()\n    this._cleanObservers = this._watchScrollableContainers(this._watchScrollablesDebounced)\n  }\n\n  async _refresh() {\n    this._refreshSectionInfo()\n  }\n\n  _refreshSectionInfo() {\n    locals.isRootSection && console.log('refresh section info')\n    locals.isRootSection = params.section.type === 'ROOT'\n    locals.subSectionsAreLevel1 = params.subSections.every(section => section.level === 1)\n\n    locals.showTabs = locals.isRootSection && locals.subSectionsAreLevel1  && params.subSections.filter(s => s.isVisible).length > 1\n\n    if (locals.showTabs) {\n      let sectionToShow = locals.selectedTabSection\n      const visibleSections = params.subSections.filter(s => s.isVisible)\n      \n      if (!sectionToShow) {\n        const lastTabIndex = this.readNumberFromTempStorage('last-tab-index') ?? 0\n        sectionToShow = params.subSections.find(s => s.index === lastTabIndex)\n      }\n\n      if (sectionToShow) {\n        const tabNotVisible = !visibleSections.includes(sectionToShow)\n\n        if (tabNotVisible) {\n          const nextVisibleSection = visibleSections.find(s => s.index >= sectionToShow.index)\n\n          if (nextVisibleSection) {\n            sectionToShow = nextVisibleSection\n          } else {\n            const previousVisible = visibleSections.findLast(s => s.index < sectionToShow.index)\n            sectionToShow = previousVisible\n          }\n        }\n      }\n      \n      if (!sectionToShow) {\n        sectionToShow = visibleSections[0]\n      }\n\n      if (sectionToShow) {\n        this.selectSection(sectionToShow)\n      }\n    } else {\n      locals.selectedTabSection = null\n    }\n  }\n\n  isSelected(section) {\n    if (section && locals.selectedTabSection) {\n      return (section.index === locals.selectedTabSection.index)\n    }\n\n    return false\n  }\n\n\n  get hasOptionalFields() {\n    if (!params.document) {\n      return false\n    }\n    \n    locals.fields = params.document.form.fields\n    locals.optionalFields = locals.fields.filter(f => f.tags.optional)\n    return locals.optionalFields.length > 0\n  }\n\n  focusPreviousSection(section) {\n    let index = this.findSectionIndex(section)\n    index --\n    if (index >= 0) {\n      const section = params.subSections[index]\n      this.focusSection(section)\n    }\n  }\n\n  focusNextSection(section) {\n    let index = this.findSectionIndex(section)\n    index ++\n    if (index >= 0) {\n      const section = params.subSections[index]\n      this.focusSection(section)\n    }\n  }\n\n  findSectionIndex(section) {\n    return params.subSections.findIndex(s => s == section)\n  }\n\n  focusSection(section) {\n    const index = this.findSectionIndex(section)\n   \n    const tab = $refs.sectionHeaders?.[index]\n    tab?.focus()\n  }\n\n  selectSection(section) {\n    if (locals.selectedTabSection !== section) {\n      locals.selectedTabSection = section\n      locals.key ++\n      this.focusSection(locals.selectedTabSection)\n    }\n\n    this.storeNumberInTempStorage('last-tab-index', section.index)\n    this._checkStickiness()\n\n  }\n\n  readNumberFromTempStorage(keyName) {\n    const savedString = Aeppic.LocalStorage.getItem(`temp:form-section-layout:${params.document?.id ?? '<unknown>'}:${keyName}`)\n    \n    try {\n      return Number.parseInt(savedString, 10)\n    } catch (error) {\n      console.warn('Saved number is not parseable as number', keyName)\n    }\n  }\n  \n  storeNumberInTempStorage(keyName, number) {\n    Aeppic.LocalStorage.setItem(`temp:form-section-layout:${params.document?.id ?? '<unknown>'}:${keyName}`, number.toString())\n  }\n\n  // _updateAllItemsHidden(paragraphs) { \n  //   locals.allItemsHidden = paragraphs.every(paragraph => \n  //       paragraph.items.length === 0 || \n  //       paragraph.items.every(item => item.type !== 'FIELD')\n  //     )\n  // }\n  _checkContainer(container, targetClass) {\n    // console.log('checking', container, targetClass)\n    \n    // console.log('container', container)\n    if (!('getElementsByClassName' in container)) {\n      console.log('checking null 2')\n      return null\n    }\n\n    // \n    const allStickies = Array.from(container.getElementsByClassName(targetClass));\n    \n    // console.log('checking container', container, allStickies.length)\n    const containerRect = container.getBoundingClientRect();\n    const allStickyOnes = []\n\n    // Get all target elements within the container\n\n    const targets = allStickies.map(s => {\n      const stickyRect = s.getBoundingClientRect();\n      const offsetTop = stickyRect.top - containerRect.top;      \n\n      return {\n        element: s,\n        offsetTop,\n      }\n    }).sort((t1, t2) => t1.offsetTop - t2.offsetTop)\n    \n    targets.forEach(function(target) {\n      // console.log('checking t', target.offsetTop)\n      target.element.classList.remove('stuck-overriden');\n\n      if (target.offsetTop <= 5) {\n        // The target is sticky, add the 'stuck' class\n        target.element.classList.add('stuck');\n        allStickyOnes.push(target.element)\n      } else {\n        // The target is not sticky, remove the 'stuck' class\n        target.element.classList.remove('stuck');\n      }\n    })\n\n    allStickyOnes.pop()\n\n    if (allStickyOnes.length > 0) {\n      allStickyOnes.forEach(function(target) {\n        target.classList.add('stuck-overriden');\n        target.classList.remove('stuck');\n      })\n    }\n  }\n\n  _observeStickiness(containerRef, targetClass) {\n    if (!containerRef) {\n      return null\n    }\n\n    const container = containerRef.$el\n    \n    // console.log('container', container)\n    if (!('getElementsByClassName' in container)) {\n      return null\n    }\n  \n    // Variable to store the ID of the requestAnimationFrame\n    let requestId = null;\n    let pending = false;\n\n    // Scroll event listener\n    function scrollListener() {\n      // console.log('scrolling')\n      if (requestId === null) {\n        pending = false\n        requestId = requestAnimationFrame(checkStickiness);\n        setTimeout(checkStickiness,50)\n      } else {\n        pending = true;\n      }\n    }\n\n    // Function to check if each target is sticky\n    function checkStickiness() {\n      // Get all target elements within the container\n      const targets = Array.from(container.getElementsByClassName(targetClass));\n\n      // console.log('checking container', container, targets.length)\n\n      var containerRect = container.getBoundingClientRect();\n      const allStickyOnes = []\n\n      targets.forEach(function(target) {\n        // console.log('checking')\n\n        var targetRect = target.getBoundingClientRect();\n        var offsetTop = targetRect.top - containerRect.top;\n\n        target.classList.remove('stuck-overriden')\n\n        if (offsetTop <= 0) {\n          // The target is sticky, add the 'stuck' class\n          target.classList.add('stuck');\n          allStickyOnes.push(target)\n        } else {\n          // The target is not sticky, remove the 'stuck' class\n          target.classList.remove('stuck');\n        }\n      });\n\n      allStickyOnes.pop()\n\n      if (allStickyOnes.length > 0) {\n        allStickyOnes.forEach(function(target) {\n          target.classList.add('stuck-overriden')\n          target.classList.remove('stuck')\n        })\n      }\n\n      // Reset the requestId so the scroll listener can request another animation frame\n      requestId = null;\n      \n      if (pending) { \n        scrollListener()\n      }\n    }\n\n    // Add the scroll listener to the container\n    container.addEventListener('scroll', scrollListener, false);\n\n    scrollListener()\n\n    return () => {\n      container.removeEventListener('scroll', scrollListener, false)\n    }\n  }\n\n  _watchScrollableContainers(callback) {\n    // Define a function to check if an element is scrollable\n    const isScrollable = (el) => {\n      const style = getComputedStyle(el);\n      return style.overflowY === 'auto' || style.overflowY === 'scroll' || style.overflow === 'auto' || style.overflow === 'scroll';\n    }\n\n    const element = $el\n\n    if (!element) {\n      return null\n    }\n\n    // Create an observer instance\n    const observer = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        if (mutation.type === 'childList') {\n          callback()\n        }\n      })\n    })\n\n    // Configuration of the observer\n    const config = {\n      attributes: false,\n      childList: true,\n      characterData: false,\n      subtree: true // This makes the observer look at all descendants, not just immediate children\n    };\n\n    // Start observing\n    observer.observe(element, config);\n\n    // Return a cleanup function\n    return () => observer.disconnect();\n  }\n}\n","css":"._CSS {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  // display: grid;\n  //grid-auto-rows: min-content;\n}\n\n._CSS > .sticky {\n  transition: all 0.1s;\n}\n\n._CSS > .stuck {\n  box-shadow: 0px 10px 7px 0px rgba(0,0,0,0.15);\n  opacity: 1.0;\n}\n\n._CSS > .stuck-overriden {\n  opacity: 0;\n  // background-color: red;\n  box-shadow: none;\n}\n\n._CSS .ae-control input {\n  border: solid 1px rgba(0,0,0,0.2);\n  padding: 6px;\n  width: 100%;\n}\n\n._CSS-collapsible:hover ._CSS-collapsible--marker  {\n  opacity: 1;\n}\n\n._CSS-collapsible:hover  {\n  opacity: 1;\n  box-shadow: 0px 4px 0px rgba(85, 75, 138, 0.298) ;\n}\n\n\n._CSS-collapsible._CSS_collapsed {\n  background-color: rgb(236, 239, 244);\n  color: rgba(0, 0, 0, 0.701);\n  border-bottom: 2px solid rgba(215, 215, 215, 0.872);\n}\n\n._CSS-collapsible._CSS_collapsed.stuck {\n  // background-color: rgb(197, 191, 228);\n  //display: none;\n}\n._CSS_form-paragraph {\n  \n}\n._CSS_form-paragraph .ae-form-field {\n  min-width: 10px;\n  max-width: 100%;\n/*  border:1px solid black;*/\n}","name":"Form Section Layout (Experimental)","packages":[],"template":"<div \n  v-if=\"!params.hideTitle && locals.isRootSection && params.section.title.trim() != ''\"\n  class=\"sticky\"\n  data-section-layout-title=\"top\"\n  :class=\"controller.mergeClasses(locals.headerClassesByLevel[section.level], { '_CSS_collapsed': controller.isSectionCollapsed(section) })\"\n  @click=\"controller.toggleSectionCollapsed(section)\"\n  :key=\"'ht-c-' + locals.collapsedChanged\"\n        >\n  <ae-header :level=\"params.section.level\">{{params.section.title}}</ae-header>\n  \n</div>\n<template>\n  <!-- \n    <div v-for=\"paragraph of params.paragraphs\">\n      {{ paragraph.items.length }} {{ paragraph.isVisible }}\n    </div>  -->\n  <ae-form-paragraph v-for=\"paragraph of params.paragraphs\"\n    v-if=\"paragraph.items.length && paragraph.isVisible\" \n    @scroll.native=\"controller.updateStickiness($event.target)\"    \n    :key=\"'p-' + paragraph.key\"\n    :paragraph=\"paragraph\"\n    :document=\"params.document\"\n    :form=\"params.form\" \n    :theme=\"params.theme\"\n    :readonly=\"params.readonly\"\n    class=\"_CSS_form-paragraph gap-4 flex-wrap sm:flex-nowrap\"\n    >\n    <template #debug>\n      <!-- lgt{{paragraph.items.length}} vi{{ paragraph.isVisible}} ro{{ paragraph.isReadonly}} -->\n      <pre v-show=\"false\" v-if=\"paragraph.type === 'TEXT'\">[not-supported] Type: {{paragraph.type}}</pre> \n      <pre v-show=\"false\">{{paragraph}}</pre>\n    </template>\n  </ae-form-paragraph>\n\n  <div v-if=\"locals.showTabs\" class=\"grid grid-auto-min\">\n    <div class=\"sticky top-0 overflow-x-auto right-0 bb-1 min-w-0 m-0 mb-4 overflow-hidden rounded drop-shadow bg-slate-100 border-gray-300 border\"> \n      <nav\n        class=\"relative flex justify-start rounded px-1  select-none items-center justify-start w-full\"\n        role=\"list\"\n      >\n        <a v-for=\"section of params.subSections\"\n          v-if=\"section.isVisible\" \n          :title=\"section.title\"\n          :tabindex=\"0\"\n          ref=\"sectionHeaders\"\n          @keydown.enter.prevent.stop=\"controller.selectSection(section)\"\n          @keydown.left.prevent.stop=\"controller.focusPreviousSection(section)\"\n          @keydown.right.prevent.stop=\"controller.focusNextSection(section)\"\n          @click.prevent.stop=\"controller.selectSection(section)\"\n          class=\"flex-initial min-w-16 z-30 m-1 py-3 px-1 flex-1 cursor-pointer inline-block z-30 m-0 text-center cursor-pointer rounded transition-all ease-in-out truncate\"\n          :active=\"controller.isSelected(section)\"\n          :aria-selected=\"controller.isSelected(section).toString()\"\n          :key=\"'tab-' + section.key\"\n          :class=\"controller.isSelected(section) ? ['bg-indigo-100', 'text-indigo-700'] : ['text-gray-500', 'hover:text-gray-700', 'hover:bg-indigo-50']\" >\n            {{ section.title }}\n        </a>\n      </nav>\n    </div>\n  </div>\n\n  <template v-if=\"locals.selectedTabSection\">\n    <!--\n      <div class=\"flex-1 overflow-y-auto _CSS-form-tab-content\">\n      <div style=\"background:red; height:1000px\"></div>\n      <div style=\"background:white;position:sticky;top:0\">HEADER</div>\n      <div style=\"background:red; height:1000px\"></div>\n      <div style=\"background:white;position:sticky;top:0\">HEADER</div>\n      <div style=\"background:red; height:10000px\"></div>\n    </div>\n    -->\n    \n    <ae-form-section-next \n      @scroll.native=\"controller.updateStickiness($event.target)\"\n      class=\"flex-1 overflow-auto _CSS-form-tab-content pr-2\"      \n      layout-id=\"4dfdf094-32b3-41fe-a2eb-50a809c39d7d\"\n      :key=\"locals.key\"\n      :section=\"locals.selectedTabSection\"\n      :document=\"params.document\"\n      :form=\"params.form\"\n      :theme=\"params.theme\"\n      :readonly=\"params.readonly\"\n      :hide-title=\"true\"\n      >\n    </ae-form-section-next>\n  </template>\n  <template v-else>\n    <template v-for=\"section of params.subSections\">\n\n      <div v-if=\"!locals.isRootSection && section.title.trim() != ''\"\n        class=\"xcursor-pointer sticky top-0 z-50 rounded flex flex-row items-end bg-gradient-to-br from-slate-100 to-slate-200 border border-slate-300 hover:bg-slate-300\"\n        :class=\"controller.mergeClasses(locals.headerClassesByLevel[section.level], { '_CSS_collapsed': controller.isSectionCollapsed(section), '_CSS-collapsible': controller.isSectionCollapsible(section) })\"\n        @click=\"controller.toggleSectionCollapsed(section)\"\n        :key=\"'ht-collapsed-' +section.key +locals.collapsedChanged\"\n        >\n        <ae-header  \n          class=\"grow flex flex-col\"\n          data-section-layout-title=\"middle\"\n          :key=\"'header-' + section.key\"\n          :level=\"section.level\"\n        >\n          {{section.title}}\n          <span v-if=\"section.tags.subtitle\"\n            class=\"text-sm opacity-80\"\n            >{{section.tags.subtitle}}</span>\n        </ae-header> \n\n        <!-- <ae-icon class=\"fal fa-ellipsis opacity-50\"></ae-icon> -->\n        <template v-if=\"section.tags?.collapsible\">\n          <ae-icon v-if=\"controller.isSectionCollapsed(section)\" class=\"_CSS-collapsible--marker fa fa-caret-down opacity-30\"></ae-icon>\n          <ae-icon v-else class=\"_CSS-collapsible--marker fa fa-caret-up opacity-10\"></ae-icon>\n        </template>\n      </div>\n      <ae-form-section-next \n        v-if=\"section.isVisible && !controller.isSectionCollapsed(section)\"\n        :key=\"'section-' + section.key\"\n        :section=\"section\"\n        :document=\"params.document\"\n        :form=\"params.form\"\n        :theme=\"params.theme\"\n        layout-id=\"4dfdf094-32b3-41fe-a2eb-50a809c39d7d\"\n        :readonly=\"params.readonly\"\n        :hide-title=\"true\"\n        >\n      </ae-form-section-next>\n    </template>\n  </template>\n</template>\n<!-- === -->"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"4dfdf094-32b3-41fe-a2eb-50a809c39d7d","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-05-27T07:32:43+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"427a47bf3c3acc0d"},"stamps":[],"t":1779867163292,"v":"104f3c82e2567127"},{"id":"b49f14a7-aab4-401e-9958-cad026b2eec3","v":"b6fd0f7311e79676","previous":{"v":"af368a2062c46252"},"p":"3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Fragebogen Inline Layout","applies":"","packages":[],"template":"<div class=\"ae-form-cell__input _CSS-container\" v-if=\"locals.document\">\n  <!-- <ae-design name=\"title\"\n              :document=\"locals.document\"\n              class=\"_CSS-title\"\n  ></ae-design> -->\n\n  <div class=\"_CSS-list\">\n    <ae-form v-for=\"ref of locals.document.data.fragenUndAntworten\" \n            :document-id=\"ref.id\"\n            class=\"_CSS-list__entry\"\n            :auto-save=\"true\"\n    ></ae-form>\n  </div>\n\n  <!-- <ae-control name=\"children\"\n              :document=\"locals.document\"\n              field-name=\"fragenUndAntworten\"\n              :readonly=\"false\"\n              :param-inline=\"true\"\n  ></ae-control> -->\n\n  <div class=\"_CSS-remove\">\n    <ae-layout v-if=\"!params.readonly\"\n            layout-id=\"1eb9a22f-6e91-491d-bdc8-e88c6ec87f79\"\n            @remove=\"$emit('remove', locals.document)\"\n    ></ae-layout>\n  </div>\n</div>\n","css":"._CSS-container {\n  display: flex;\n}\n\n._CSS-title {\n  margin-bottom: var(--ae-space-2);\n  font-weight: 600;\n}\n\n._CSS-list {\n  flex: 1;\n  display: flex;\n  flex-flow: column;\n  gap: var(--ae-space-5);\n}\n\n._CSS-list__entry {\n\n}\n\n._CSS-remove {\n  display: flex;\n  align-items: center;\n}","controller":"class Controller {\n  async init() {\n    locals.document = null\n    locals.document = await Aeppic.get(params.documentId)\n  }\n}\n"},"locks":[],"created":{"at":"2022-11-08T16:05:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-11-09T14:10:48+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1668003048108,"ct":1667923501236,"a_depth":3,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"b5e1d4b4-91d7-4d6d-a209-2008f5e1aa4e","v":"a8b7a06641bcac46","previous":{"v":"93f76593c2a2d9b0"},"p":"d3295b12-08f1-47f2-b73d-5a48cdba162e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Gantt Test Layout","applies":"","packages":[],"template":"<ae-list \r\n  style=\"height:800px\"\r\n  list-id=\"e29d4e55-ca37-4e72-a368-e7351f956130\"\r\n  param-title=\"Gantt\"\r\n  xparam-popup-design=\"card\"\r\n  search=\"id:apps OR a:apps\"\r\n  :sort=\"{ field: 'modified.at', descending: true } \"\r\n  > \r\n</ae-list>\r\n","css":"","controller":""},"locks":[],"created":{"at":"2019-03-13T17:56:20+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2019-03-13T17:58:51+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1552499931145,"ct":1552499780872,"a_depth":3,"a":["apps","7d22534a-76b5-4f1c-8761-af3d7a1d5111","d3295b12-08f1-47f2-b73d-5a48cdba162e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","a4f1ee77-01e0-483a-811b-6d64b067bdea","b5c091e5-d704-4b33-8418-c9fecb1158be"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2024-01-22T10:51:15+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1705920675987,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    // this.generate()\n  }\n\n  async askForGeneration() {\n    const count = packages.window.prompt('How many test documents should be created?', \"1\")\n\n    const number = Number(count)\n\n    if (!count || !number || Number.isNaN(number)) {\n      console.error('No valid number given')\n      return\n    }\n\n    await this.generate(number)\n  }\n\n  async generate(count = 1) {\n    function getProperty(obj, path) {\n      let parts = path.split('.');\n      let property = obj;\n\n      for (let part of parts) {\n        if (property[part] !== undefined) {\n          property = property[part];\n        } else {\n          return undefined;\n        }\n      }\n\n      return property;\n    }\n\n    const { fakerDE, fakerEN } = packages.Faker\n\n    let form = null\n\n    if (params.formId) {\n      form = await Aeppic.getForm(params.formId) \n    } else {\n      const formId = packages.window.prompt('Provide form id of documents to create')\n      form = await Aeppic.getForm(formId)\n    }\n\n    const fakerDocuments = await Aeppic.find(`p:${form.id} f.id:87b511d3-450b-4ecc-aee4-e32739830e33`)\n\n    if (!fakerDocuments.length) {\n      throw new Error(`No Faker defintions of form found ${form.id}`)\n    }\n\n    const parent = await Aeppic.get(params.parent)\n\n    const FIND_CACHE = {}\n\n    const cachedFind = async (query) => {\n      if (FIND_CACHE[query]) {\n        return FIND_CACHE[query]\n      }\n\n      const result = await Aeppic.find(query, { size: 9999 })\n      FIND_CACHE[query] = result\n\n      return result\n    }\n\n    function randomizeArray(array) {\n      return array.concat().sort(() => 0.5 - Math.random())\n    }\n\n    for (const fakerDocument of fakerDocuments) {\n      const fakerFunctions = {}\n\n      const definition = JSON.parse(fakerDocument.data.definition)\n      for (const fieldName in definition) {\n        const fieldDefintion = definition[fieldName]\n\n        const fieldFakers = []\n\n        if (fieldDefintion.fakers) {\n          fieldFakers.push(...fieldDefintion.fakers)\n        } else if (Array.isArray(fieldDefintion)) {\n          fieldFakers.push(...fieldDefintion)\n        } else if (typeof fieldDefintion === 'string') {\n          fieldFakers.push({\n            faker: fieldDefintion\n          })\n        } else {\n          fieldFakers.push(fieldDefintion)\n        }\n  \n        const functions = []\n\n        for (const fieldFaker of fieldFakers) {\n          const { faker, options, arguments: fakerArguments } = fieldFaker \n\n          functions.push(async (doc) => {\n            if (faker === 'aeppic.child') {\n              const children = await cachedFind(`p:${parent.id} f.id:${options.form}`)\n\n              if (!children.length) {\n                return {\n                  id: '',\n                  v: '',\n                  text: '',\n                }\n              } \n\n              const randomChildIndex = fakerEN.number.int({ min: 0, max: children.length - 1 })\n\n              return await Aeppic.asReference(randomizeArray(children)[randomChildIndex])\n            }\n\n            if (faker === 'aeppic.search') {\n              const companyId = doc.a[doc.a_forms.findIndex(aForm => aForm === 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df')]\n              const ancestorForm = doc.a[doc.a_forms.findIndex(aForm => aForm === options.ancestorForm)]\n              const ancestor = doc.a[doc.a_forms.findIndex(aForm => aForm === options.ancestorForm)]\n              if (!ancestor) {\n                throw new Error(`Could not find ancestor by ancestorForm: ${options.ancestorForm}`)\n              }\n\n              const locations = await cachedFind(`a:${ancestor} f.id:${options.locationForm}`)\n\n              const realmId = locations.length ? locations[0].id : ancestor\n\n              const descendants = await cachedFind(`a:${realmId} f.id:${options.form}`)\n\n              if (!descendants.length) {\n                return {\n                  id: '',\n                  v: '',\n                  text: '',\n                }\n              } \n\n              const max = fakerEN.number.int({ min: options.min || 0, max: options.max || 1 })\n\n              const children = randomizeArray(descendants).slice(0, max)\n\n              return await Promise.all(children.map(async child => Aeppic.asReference(child)))\n            }\n\n            if (faker === 'aeppic.new.child') {\n              const child = await Aeppic.new(options.form, doc.id, { allowMissingParent: true })\n\n              child.data = { ...child.data, ...options.data }\n\n              return child\n            }\n            \n            const fakerOptions = fakerArguments ? fakerArguments : options\n            const value = getProperty(fakerDE, faker)(fakerOptions)\n\n            if (faker.includes('date')) {\n              return Aeppic.DateTime.fromJSDate(value).toISO()\n            }\n\n            return value\n          })\n        }\n\n        fakerFunctions[fieldName] = async (doc) => {\n          const values = await Promise.all(functions.map(f => f(doc)))\n\n          if (fieldDefintion.fakers) {\n            return values.join(' ')\n          }\n\n          if (Array.isArray(fieldDefintion)) {\n            return values\n          }\n\n          return values[0]\n        }\n      }  \n\n      // const fakerFunctions = {}\n      // for (const field of form.fields) {\n      //   console.log(field.name, field.tags)\n\n      //   const faker = field.tags.faker\n      //   if (!faker) {\n      //     continue\n      //   }\n\n      //   for (let fakerFunctionPath of faker.split(',')) {\n      //     // console.log(fakerFunctionPath)\n      //     const fakerFunctionPathParts = fakerFunctionPath.split('-')\n      //     const parameters = [] \n      //     if (fakerFunctionPathParts.length > 1) {\n      //       parameters.push(...fakerFunctionPathParts[1])\n      //       fakerFunctionPath = fakerFunctionPathParts[0]\n      //     } \n\n      //     fakerFunctions[field.name] = () => {\n      //       return getProperty(fakerDE, fakerFunctionPath)(...parameters)\n      //     }\n      //   }\n      // }\n      // ### EXAMPLE FORM for above code\n      // {hidden}\n      // [Name][name]\n      // [name]: text <editable=projektName> = projektName \n\n      // {ref ancestor-form=b48189af-7305-4ee5-ab8b-e15cbcd55aa7 hide-path=true}\n      // [Ordner][ordner]\n      // [ordner]: /e85fc64c-df8a-493a-a7ce-fefa6d85d608\n\n      // [Termin][termin]\n      // [termin]: date <faker=date.soon>\n\n      // [Start][start]\n      // [start]: date <faker=date.soon-30>\n\n      // [Express][express]\n      // [express]: switch <faker=datatype.boolean>\n\n      // [Projekt][projektName] [Datum][datum]\n\n      // [projektName]: text <required faker=number.int,company.name,company.buzzPhrase>\n      // [datum]: date\n\n    \n      const docs = []\n\n      let counter = count\n      while(counter) {\n        counter -= 1\n\n        if (counter < 0) {\n          return\n        }\n\n        const doc = await Aeppic.new(form, params.parent)\n        docs.push(doc)\n\n\n        for (const fieldName in fakerFunctions) {\n          let fieldValue = await fakerFunctions[fieldName](doc)\n\n\n          // fieldName can be e.g. 'address.street'. Resolve and set sub-object property\n          const fieldNameParts = fieldName.split('.')\n          if (fieldNameParts.length > 1) {\n            const value = getProperty(doc.data, fieldNameParts.slice(0,-1).join('.'))\n            value[fieldNameParts.slice(-1)[0]] = fieldValue\n\n            fieldValue = value\n          }\n\n          const actualFieldName = fieldNameParts[0]\n\n          if (Aeppic.isEditableDocument(fieldValue)) {\n            docs.push(fieldValue)\n          } else if (Array.isArray(doc.data[actualFieldName])) {\n            if (Array.isArray(fieldValue)) {\n              doc.data[actualFieldName] = fieldValue\n            } else {\n              doc.data[actualFieldName] = [fieldValue]\n            }\n          } else {\n            doc.data[actualFieldName] = fieldValue\n          }\n        }\n      }\n\n      console.log(docs)\n\n      Aeppic.saveAll(docs)\n    }\n  }\n}                ","css":"","name":"Generate Fake Data Dialog Button","packages":[{"id":"5ee487a2-5811-4ad8-add5-b797e041be38","text":"faker-js","v":"3d3644c37f9a4a8e"},{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"d4ce6dec568c3dc1"}],"template":"<ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-text=\"Generate test data\"\n            param-border=\"border\"\n            @selected=\"controller.askForGeneration()\"\n></ae-layout>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"95874087-d16c-46b7-bdc8-38854c466a35","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-02-06T09:16:31+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"b5c091e5-d704-4b33-8418-c9fecb1158be","previous":{"v":"20bef00587ae0bea"},"stamps":[],"t":1770369391249,"v":"fa50ab951e64fdee"},{"id":"7c69cff2-474f-482c-b841-9cf6ae7a23cb","v":"initial","p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"c8bc0bdb50e017f8","text":"Layout"},"data":{"name":"Global Hostname Check","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"b4b56f8f5af60919","text":"Window"}],"template":"<ae-dialog ref=\"dialog\" :backdrop-close=\"false\">\n  <template v-slot:header>\n    <div class=\"_CSS-dialog__header\">\n      Bizpin URL fehlerhaft\n    </div>\n  </template>\n  <template v-slot:body>\n    <div class=\"_CSS-dialog__body\" v-if=\"locals.check\">\n      <ae-icon class=\"fa fa-do-not-enter fa-3x\" style=\"color:var(--ae-accent-red);\"></ae-icon>\n      <p>Bizpin wurde unter einer fehlerhaften URL aufgerufen.</p>\n      <p>Bitte nutzen Sie die folgende <b>korrigierte</b> URL:</p>\n\n      <a :href=\"'https://' + locals.check.hostname\">\n        {{ locals.check.hostname }}\n      </a>\n    </div>\n  </template>\n</ae-dialog>","css":"._CSS-dialog__body {\n  display: flex;\n  flex-flow: column;\n  align-items: center;\n}","controller":"class Controller {\n  async init() {\n    locals.check = null\n    await Aeppic.nextRenderPass()\n\n    locals.check = this.checkHostname()\n    if (!locals.check.ok) {\n      $refs.dialog.show()\n    }\n  }\n\n  checkHostname() {\n    try {\n    if (!packages.window) {\n      return { ok: true }\n    }\n\n    const ok  = !packages.window.location.hostname.startsWith('www.')\n    return {\n      ok,\n      hostname: ok ? packages.window.location.hostname : packages.window.location.hostname.replace('www.', '')\n    }\n    } catch (e) {\n      return { ok: true }\n    }\n  }\n}\n"},"locks":[],"created":{"at":"2021-02-10T14:48:02+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-02-10T14:48:02+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1612968482114,"ct":1612968482109,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2025-11-24T09:55:15+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1763978115457,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Dashboard: '7be5f2c5-206b-4ab6-9d4d-c4834baf8e32',\n      AnmeldungWartung: '941d2b8f-5694-4054-8c99-c51ad62f6c2f', \n      AnmeldungAufnahme: 'c6931d87-a1f3-4b34-bc1b-3f0bfe7398f8',\n    }\n\n    this.IDS = {\n      WartungRootLayout: 'abc36759-63ce-423b-9176-69d395e76082',\n      AufnahmeRootLayout: '3e4651ee-fd1d-412b-94ae-d0586f15beba',\n    }\n\n    Aeppic.on('login', async () => {\n      await this._evaluate()\n    })\n\n    await this._evaluate()\n  }\n\n  async _evaluate() {\n    if (!Aeppic.ProfilePage) {\n      // without a profile page, we cannot resolve \n      return\n    }\n\n    if (Aeppic.Account?.data.isAdmin) {\n      // allow dev to stay\n      return\n    }\n\n    const dashboard = await Aeppic.findOne(`p:${Aeppic.ProfilePage.a[0]} f.id:${this.FORMS.Dashboard}`)\n\n    if (!dashboard) {\n      return\n    }\n\n    if (dashboard.data.type === 'KEEPTRACK') {\n      this.redirectForKeeptrack(dashboard)\n    }\n  }\n\n  async redirectForKeeptrack(dashboard) {\n    const isVerwalterResult = await Aeppic.Commands.execute('9b14b2ed-9b0e-486f-8693-e22dd315817e', dashboard)\n\n    const layoutId = Aeppic.Root.layout?.id \n\n    if (isVerwalterResult.ok) {\n      if (isVerwalterResult.value === true) {\n        if (layoutId === this.IDS.WartungRootLayout || layoutId === this.IDS.AufnahmeRootLayout) {\n          console.log('redirect to HomePage')\n          // might not be needed, but navigate away\n          Aeppic.navigateTo(Aeppic.HomePage)\n          // change url \n          Aeppic.onLinkClicked(null, '/')\n          Aeppic.reload()\n          return\n        }\n      } \n\n      if (isVerwalterResult.value === false) {\n        if (layoutId === this.IDS.WartungRootLayout || layoutId === this.IDS.AufnahmeRootLayout) {\n          return\n        }\n\n        const companyId = Aeppic.ProfilePage.a[0]\n\n        const [ aufnahme, wartung ] = await await Promise.all([\n          Aeppic.findOne(`p:${companyId} f.id:${this.FORMS.AnmeldungAufnahme}`),\n          Aeppic.findOne(`p:${companyId} f.id:${this.FORMS.AnmeldungWartung}`),\n        ])\n\n        if (wartung) {\n          console.log('redirect to /wartung')\n      Aeppic.onLinkClicked(null, '/wartung')\n          Aeppic.reload()\n        } else if (aufnahme) {\n          console.log('redirect to /aufnahme')\n      Aeppic.onLinkClicked(null, '/aufnahme')\n          Aeppic.reload()\n        } else {\n          console.warn('Intended to redirect but no target configured')\n        }\n      }\n    }\n  }\n}","css":"","name":"Global Redirection&Reload Layout","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"429d193aa0c72c7a"}],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":""},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"aa3b60b1-07c4-44b5-ae4a-89baf2bbb70a","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-02-20T14:18:56+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"f75d0676b006e775"},"stamps":[],"t":1771597136204,"v":"ab0a2909a3665faa"},{"id":"7313ec10-af57-412b-b7b9-d42c177105f7","v":"cb722de89131daa4","previous":{"v":"8f75f4c8690b1312"},"p":"a266683d-c5cc-48db-aa99-a306d20ae787","f":{"id":"layout-form","v":"3d11330b5bf3982d","text":"Layout"},"data":{"name":"Global Selection Handler Layout","applies":"","packages":[],"template":"<ae-layout  class=\"_CSS-selection\"\n            ref=\"selectionHandler\"\n            layout-id=\"8c5c60ec-b7d1-4e46-a9ca-180c3c153179\"\n            :param-page-document-id=\"params.pageDocumentId\"\n            :param-page-document=\"params.pageDocument\"\n            :param-page-application-id=\"params.pageApplicationId\"\n            :param-selection=\"params.selection\"\n></ae-layout>","css":"._CSS-selection {\n  position: fixed;\n  right: var(--ae-size-4);\n  bottom: var(--ae-size-4);\n\n  z-index: 1;\n}","controller":""},"locks":[],"created":{"at":"2020-05-13T07:54:37+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-01-27T15:14:43+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1611760483485,"ct":1589356477183,"a_depth":3,"a":["apps","5a8a5d3c-f995-43ef-8d37-1f8a5e4550da","a266683d-c5cc-48db-aa99-a306d20ae787"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"c07bacfd-ec47-4105-98f1-e6d6e9b00201","v":"e6e127c99aec61e5","previous":{"v":"c7cf49538903f26c"},"p":"d3d08873-80a4-471b-b999-eadf1f28c038","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Ich","applies":"","packages":[],"template":"<div class=\"_CSS-rows__background\" :style=\"{ 'background-image': 'url(' + locals.background + ')' }\"></div>\n<div class=\"_CSS-rows__stacking\">\n  <ae-design class=\"_CSS-avatar\" name=\"avatar--resizes-with-font\" :document=\"Aeppic.ProfilePage\"></ae-design>\n  <ae-design class=\"_CSS-name\" name=\"title\" :document=\"Aeppic.ProfilePage\"></ae-design>\n</div>\n","css":"._CSS {\n  height: 100%;\n  position: relative;\n  background: var(--ae-ui-background);\n  border-bottom: var(--ae-border-width) solid var(--ae-border-color);\n}\n\n._CSS-rows__background {\n  background-position: center;\n  background-repeat: no-repeat;\n  background-size: cover;\n  height: 70%;\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n}\n\n._CSS-rows__stacking {\n  position: absolute;\n  bottom: 20px;\n  left: 30px; \n  right: 0;\n\n  display: flex;\n  align-items: flex-end;\n}\n\n._CSS-name {\n  margin-left: 20px;\n  font-weight: 500;\n}\n\n._CSS-avatar {\n  font-size: 120px;\n  border: 4px solid var(--ae-ui-background);\n  border-radius: 50%;\n}\n","controller":"class Controller {\n  async init() {\n    const company = await Aeppic.get(params.companyId)\n    locals.background = Aeppic.Content.getSrc(company, 'banner')\n  }\n}"},"locks":[],"created":{"at":"2018-11-30T14:19:40+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2019-05-03T13:08:55+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1556888935331,"ct":1543587580108,"a_depth":3,"a":["apps","43f84041-0fd7-4ccb-b7b5-7a38f89ada37","d3d08873-80a4-471b-b999-eadf1f28c038"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"d9add436-a425-4208-a254-052ddcabe529","v":"initial","p":"c3df0a76-ded1-4a65-92f0-8f78ecbde232","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Ich","applies":"","packages":[],"template":"<div class=\"_CSS-rows__background\" :style=\"{ 'background-image': 'url(' + locals.background + ')' }\"></div>\n<div class=\"_CSS-rows__stacking\">\n  <ae-design class=\"_CSS-avatar\" name=\"avatar--resizes-with-font\" :document=\"Aeppic.ProfilePage\"></ae-design>\n  <ae-design class=\"_CSS-name\" name=\"title\" :document=\"Aeppic.ProfilePage\"></ae-design>\n</div>\n","css":"._CSS {\n  height: 100%;\n  position: relative;\n  background: var(--ae-ui-background);\n  border-bottom: var(--ae-border-width) solid var(--ae-border-color);\n}\n\n._CSS-rows__background {\n  background-position: center;\n  background-repeat: no-repeat;\n  background-size: cover;\n  height: 70%;\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n}\n\n._CSS-rows__stacking {\n  position: absolute;\n  bottom: 20px;\n  left: 30px; \n  right: 0;\n\n  display: flex;\n  align-items: flex-end;\n}\n\n._CSS-name {\n  margin-left: 20px;\n  font-weight: 500;\n}\n\n._CSS-avatar {\n  font-size: 120px;\n  border: 4px solid var(--ae-ui-background);\n  border-radius: 50%;\n}\n","controller":"class Controller {\n  async init() {\n    const company = await Aeppic.get(params.companyId)\n    locals.background = Aeppic.Content.getSrc(company, 'banner')\n  }\n}"},"locks":[],"created":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1568969971415,"ct":1568969971415,"a_depth":3,"a":["apps","8fa52498-fa07-4bad-87b3-5c8df671aca4","c3df0a76-ded1-4a65-92f0-8f78ecbde232"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"b7bd3ae4-ed59-46e9-975c-400ee9ea1aca","v":"6718a081eb25a438","previous":{"v":"4fb0519a550ddd8e"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Image Preview","applies":"","template":"<img v-if=\"params.document\" class=\"w-full min-h-32\"  :src=\"Aeppic.Content.getSrc(params.document, params.fieldName)\" /> \n\n<ae-popup ref=\"preview\" max-width=\"800px\">\n  <slot name=\"popup\">\n    <img v-if=\"params.document\" class=\"w-80 min-h-32\"  :src=\"Aeppic.Content.getSrc(params.document, params.fieldName)\"/> \n  </slot>\n</ae-popup>","css":"","controller":"getThumbnailSrc() {\n  debugger\n  let a = Aeppic.Content.getThumbnailSrc(params.document, params.fieldName)\n  return a\n}","packages":[]},"locks":[],"created":{"at":"2024-07-01T15:52:28+02:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-07-01T16:06:45+02:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719842805774,"ct":1719841948011,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"8794b29c-532b-4692-8f8b-9e3010820328","v":"0a58811ffe7a5585","cloneOf":{"id":"dbd64622-6605-40bb-a9e1-eb28c598b66f","v":"2f7f8a3dad759cb8","text":"Import CSV as Contacts Button"},"originalCloneOf":{"id":"dbd64622-6605-40bb-a9e1-eb28c598b66f","v":"2f7f8a3dad759cb8","text":"Import CSV as Contacts Button"},"previous":{"v":"b9d2583dede29666"},"p":"ccc7e7bc-4bea-4692-b184-772c84353393","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Import CSV as Contacts Button","applies":"","packages":[],"template":"<!-- <template v-if=\"Aeppic.Account && Aeppic.Account.data.isAdmin\"> -->\n\n  <button class=\"ae-button\" @click.stop=\"$refs.dialog.$emit('show')\">\n    <ae-icon class=\"fa fa-file-import\"></ae-icon>\n    csv-Datei importieren\n  </button>\n\n  <ae-layout ref=\"dialog\"\n              layout-id=\"5ea858d8-1941-44cf-9002-9658f6183085\"\n              :param-document=\"params.document\"\n              :param-form-id=\"locals.contactFormId\"\n              :param-csv-column-names=\"locals.fields\"\n              :param-map-entry-to-document-data-function=\"(args) => controller.mapEntryToDocumentData(args)\"\n  ></ae-layout>\n\n<!-- </template> -->","css":"","controller":"class Controller {\n  init() {\n    this.CONTACTS_FORM = '6f641574-7cb6-424a-9657-4b8d652a2cf7'\n\n    locals.contactFormId = this.CONTACTS_FORM\n    locals.fields = [\n      'Vorname',\n      'Nachname',\n      'Anrede',\n      'Unternehmen',\n      'Abteilung',\n      'Position',\n      'Telefon1',\n      'Telefon2',\n      'Telefon3',\n      'Email1',\n      'Email2',\n      'Email3',\n      'Geburtsdatum',\n      'Notizen',\n      'Url',\n    ]\n  }\n\n  mapEntryToDocumentData(entry) {\n    const data = {}\n\n    data.vorname = entry.Vorname ? entry.Vorname.trim() : ''\n    data.nachname = entry.Nachname ? entry.Nachname.trim() : ''\n\n    if (entry.Anrede) {\n      if (entry.Anrede.trim() === 'Herr') {\n        data.anrede = 'MALE'\n      } else if (entry.Anrede.trim() === 'Frau') {\n        data.anrede = 'FEMALE'\n      }\n    }\n    data.unternehmen = entry.Unternehmen ? entry.Unternehmen.trim() : ''\n    data.abteilung = entry.Abteilung ? entry.Abteilung.trim() : ''\n    data.position = entry.Position ? entry.Position.trim() : ''\n    data.telefon1 = entry.Telefon1 ? entry.Telefon1.trim() : ''\n    data.telefon2 = entry.Telefon2 ? entry.Telefon2.trim() : ''\n    data.telefon3 = entry.Telefon3 ? entry.Telefon3.trim() : ''\n    data.email1 = entry.Email1 ? entry.Email1.trim() : ''\n    data.email2 = entry.Email2 ? entry.Email2.trim() : ''\n    data.email3 = entry.Email3 ? entry.Email3.trim() : ''\n\n    data.geburtsdatum = entry.Geburtsdatum ? entry.Geburtsdatum.trim() : ''\n    data.notizen = entry.Notizen ? entry.Notizen.trim() : ''\n    data.url = entry.Url ? entry.Url.trim() : ''\n    \n    console.log(entry, '=>', data)\n\n    return data\n  }\n}"},"locks":[],"created":{"at":"2020-10-27T08:44:40+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2020-10-27T09:38:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1603791501207,"ct":1603788280094,"a_depth":3,"a":["apps","37fafb3d-18da-4182-af74-082971d50956","ccc7e7bc-4bea-4692-b184-772c84353393"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"hidden":false,"readonly":false},{"id":"dbd64622-6605-40bb-a9e1-eb28c598b66f","v":"2f7f8a3dad759cb8","previous":{"v":"a52b20c3abbf1101"},"p":"8d98d455-3f46-4f30-a930-8bbde4a2ffa4","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Import CSV as Contacts Button","applies":"","packages":[],"template":"<template v-if=\"Aeppic.Account && Aeppic.Account.data.isAdmin\">\n\n  <button class=\"ae-button\" style=\"font-style:italic;\" @click=\"$refs.dialog.$emit('show')\">\n    <ae-icon class=\"fa fa-file-import\"></ae-icon>\n    csv-Datei importieren\n  </button>\n\n  <ae-layout ref=\"dialog\"\n              layout-id=\"5ea858d8-1941-44cf-9002-9658f6183085\"\n              :param-document=\"params.document\"\n              :param-form-id=\"locals.contactFormId\"\n              :param-map-entry-to-document-data-function=\"(args) => controller.mapEntryToDocumentData(args)\"\n  ></ae-layout>\n\n</template>","css":"","controller":"class Controller {\n  init() {\n    this.CONTACTS_FORM = 'f8fd3176-4995-455f-a8a8-d2742a836816'\n\n    locals.contactFormId = this.CONTACTS_FORM\n  }\n\n  mapEntryToDocumentData(entry) {\n    const data = {}\n\n    const contactName = [entry.FirstName, entry.LastName].filter(e => e != null).join(' ').trim()\n\n    data.firma = entry.Company ? entry.Company.trim() : ''\n    data.ansprechpartner = contactName\n    // data.geburtsdatum \n    // data.bewertung\n    // data.kategorie\n    data.festnetz = [entry.Home, entry.Home2].filter(e => e != null).join(' ').trim()\n    data.mobil = [entry.Mobile, entry.Mobile2].filter(e => e != null).join(' ').trim()\n    data.email = entry.Email ? entry.Email.trim() : ''\n    // data.adresse\n\n    return data\n  }\n}"},"locks":[],"created":{"at":"2019-08-22T12:19:57+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-09-17T11:55:18+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1600343718586,"ct":1566476397686,"a_depth":3,"a":["apps","bc036ad0-6dbc-415b-b506-325fb0a44046","8d98d455-3f46-4f30-a930-8bbde4a2ffa4"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"da7d7591-812b-4af2-8ec1-635f08a277c2","v":"c09087c4ececf29b","previous":{"v":"110442bfb13fbdd6"},"p":"cfd3ce74-9fa5-46c8-a9e9-cba33a3b8e70","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Import CSV as Projects Button","applies":"","packages":[],"template":"<template v-if=\"Aeppic.Account && Aeppic.Account.data.isAdmin\">\n  <button class=\"ae-button\" style=\"font-style:italic;\" @click=\"$refs.dialog.$emit('show')\">\n    <ae-icon class=\"fa fa-file-import\"></ae-icon>\n    csv-Datei importieren\n  </button>\n\n  <ae-layout ref=\"dialog\"\n              layout-id=\"5ea858d8-1941-44cf-9002-9658f6183085\"\n              :param-document=\"params.document\"\n              :param-form-id=\"locals.formId\"\n              :param-map-entry-to-document-data-function=\"(args) => controller.mapEntryToDocumentData(args)\"\n              :param-debug=\"false\"\n  ></ae-layout>\n</template>\n","css":"","controller":"class Controller {\n  init() {\n    this.PROJECT_FORM = '98c77209-1245-43d6-90b5-8625183f470c'\n    this.EMPLOYEE_FORM = 'd2ac3563-3c3f-4f02-b923-9b67abf98d10'\n    this.CONTACT_FORM = 'f8fd3176-4995-455f-a8a8-d2742a836816'\n\n    locals.formId = this.PROJECT_FORM\n  }\n\n  async mapEntryToDocumentData(entry) {\n    // Sample Entry:\n    /*\nAuftraggeber: \"\"\nBeginn: \"07.01.2016\"\nBei Auswertungen nicht berücksichtigen: \"0\"\nBeschreibung: \"Sanierung Umnutzung eines ehem. Weinguts\"\nEnde: \"\"\nHonorar: \"0\"\nIm Stundennachweis berücksichtigen: \"0\"\nIn Zeitprotokoll bei Anmeldung aktivieren: \"0\"\nKategorie: \"Einfamilienhaus\"\nNach Aufwand abrechnen: \"0\"\nOrt: \"Sprendlingen\"\nProjekt: \"2016_007 Hanson\"\nProjekt Status: \"In Bearbeitung\"\nProjektleiter: \"Luca Arenz\"\nStunden: \"0\"\nZu Gemeinkosten hinzurechnen: \"0\"\n*/\n\n    const data = {\n      name: entry.Projekt,\n      status: this.parseStatus(entry['Projekt Status']),\n      prioritaet: 'MEDIUM',\n      projektleiter: await this.getEmployeeRef(entry.Projektleiter),\n      ansprechpartner: await this.getContactRef(entry.Auftraggeber),\n      baustellenAdresse: {\n        city: entry.Ort || '',\n        street: '',\n        streetNumber: '',\n        postalCode: '',\n        state: '',\n        country: 'Germany',\n        supplement: '',\n      },\n      beschreibung: entry.Beschreibung,\n    }\n\n    // const contactName = [entry.FirstName, entry.LastName].filter(e => e != null).join(' ')\n\n    // data.name = entry.Company\n    // data.ansprechpartner = contactName\n    // data.geburtsdatum \n    // data.bewertung\n    // data.kategorie\n    // data.festnetz = [entry.Home, entry.Home2].filter(e => e != null).join(' ')\n    // data.mobil = [entry.Mobile, entry.Mobile2].filter(e => e != null).join(' ')\n    // data.email = entry.Email\n    // data.adresse\n\n    return data\n  }\n\n  parseStatus(status) {\n    if (!status) {\n      return ''\n    }\n\n    if (status === 'In Bearbeitung' || status === 'Akquisition') {\n      return 'PROGRESS'\n    }\n\n    if (status === 'Ruhend') {\n      return 'DORMANT'\n    }\n\n    if (status === 'Abgeschlossen') {\n      return 'DONE'\n    }\n\n    return ''\n  }\n\n  async getEmployeeRef(name) {\n    const emptyRef = { id: '', text: '', v: '' }\n\n    if (!name) {\n      return emptyRef\n    }\n\n    const employee = await Aeppic.findOne(`a:${params.document.a[0]} f.id:${this.EMPLOYEE_FORM} data.name:\"${name}\"`)\n\n    if (!employee) {\n      return emptyRef\n    }\n\n    return Aeppic.asReference(employee)\n  }\n\n  async getContactRef(name) {\n    if (!name) {\n      return []\n    }\n\n    const parts = name.split(',').map((p) => {\n      const part = p.trim()\n\n      return `\"*${part}*\"`\n    })\n\n    const contacts = await Aeppic.find(`a:${params.document.a[0]} f.id:${this.CONTACT_FORM} AND (${parts.join(' OR ')})`)\n\n    if (!contacts.length) {\n      return []\n    }\n\n    return contacts\n  }\n}"},"locks":[],"created":{"at":"2019-08-22T12:20:36+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-09-17T11:55:22+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1600343722637,"ct":1566476436729,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","cfd3ce74-9fa5-46c8-a9e9-cba33a3b8e70"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","05787127-986a-494f-a69e-8733c1176596","6138e497-f561-430e-b3f1-8c3c7db046a7"],"a_depth":4,"a_forms":["folder","application-form","form-folder","form"],"cloneOf":{"id":"da7d7591-812b-4af2-8ec1-635f08a277c2","text":"Import CSV as Projects Button","v":"c09087c4ececf29b"},"created":{"at":"2025-11-25T15:43:11+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1764085399020,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this.FORMS = {\n      Wartungsteil: 'f5850e39-8581-4b62-8cfe-f4fa95009a1a',\n      Wartungspunkt: 'aa947792-4f31-40c9-9a6a-e1ad71697911',\n      Arbeit: '8c113cd0-af90-42fa-aa05-f67809d0a9a5',\n      WartungsteileVorlagen: 'd4d60ebf-b329-44dd-a97f-d1a905bddfc5',\n    }\n\n    this.lastWartungsteil = null\n    this.lastWartungspunkt = null\n    this.intervalByIndex = []\n\n    this.INTERVAL_MAP = {\n      '14 tägig': {\n        intervalLength: 2,\n        interval: 'WEEK',\n      },\n      '1-monatl.': {\n        intervalLength: 1,\n        interval: 'MONTH',\n      },\n      '2-monatl.': {\n        intervalLength: 2,\n        interval: 'MONTH',\n      },\n      '3-monatl.': {\n        intervalLength: 3,\n        interval: 'MONTH',\n      },\n      '6-monatl.': {\n        intervalLength: 6,\n        interval: 'MONTH',\n      },\n      '12-monatl.': {\n        intervalLength: 1,\n        interval: 'YEAR',\n      },\n      '24-monatl.': {\n        intervalLength: 2,\n        interval: 'YEAR',\n      },\n      'bei Bedarf': {\n        intervalLength: 0,\n        interval: '',\n      },\n      '1 jährl.': {\n        intervalLength: 1,\n        interval: 'YEAR',\n      },\n      '2 jährl.': {\n        intervalLength: 2,\n        interval: 'YEAR',\n      },\n      '3 jährl.': {\n        intervalLength: 3,\n        interval: 'YEAR',\n      },\n      '4 jährl.': {\n        intervalLength: 4,\n        interval: 'YEAR',\n      },\n    }\n\n    this.wartungsteileVorlagen = null\n  }\n\n  async mapEntryToDocument(entry, options) {\n    // SAMPLE\n    // {\n    //     \"KEEPTRACK\": \"WT\",\n    //     \"KG\": \"430\",\n    //     \"LK1\": \"1\",\n    //     \"LK2\": \"0\",\n    //     \"LK3\": \"0\",\n    //     \"LK4\": \"0\",\n    //     \"Inspektions- und Wartungsarbeiten\": \"Luftfördereinrichtungen\",\n    //     \"14 tägig\": \"\",\n    //     \"1-monatl.\": \"\",\n    //     \"2-monatl.\": \"\",\n    //     \"3-monatl.\": \"\",\n    //     \"6-monatl.\": \"\",\n    //     \"12-monatl.\": \"\",\n    //     \"24-monatl.\": \"\",\n    //     \"bei Bedarf\": \"\",\n    //     \"Bemerkungen\": \"\"\n    // }\n\n    const { parentId } = options ?? {}\n\n    if (!parentId) {\n      throw new Error('Missing parentId')\n    }\n\n    if (!this.wartungsteileVorlagen) {\n      this.wartungsteileVorlagen = await Aeppic.findOne(`p:${parentId} f.id:${this.FORMS.WartungsteileVorlagen}`)\n\n      if (!this.wartungsteileVorlagen) {\n        throw new Error('Missing this.wartungsteileVorlagen')\n      }\n    }\n\n    const documents = []\n    const remove = []\n    const replace = []\n\n    let todos = {\n      isWartungsteil: false, // WT\n      isWartungsteilPart: false, // WT+\n      isWartungspunkt: false, // WP\n      isWartungspunktPart: false, // WP+\n      isArbeit: false, // everything else\n    }\n\n    switch (entry.KEEPTRACK.trim()) {\n      case 'WT': {\n        todos.isWartungsteil = true\n        break\n      }\n      case 'WT+': {\n        todos.isWartungsteilPart = true\n        break\n      }\n      case 'WP': {\n        todos.isWartungspunkt = true\n        break\n      }\n      case 'WP+': {\n        todos.isWartungspunktPart = true\n        break\n      }\n      default: {\n        todos.isArbeit = true\n        break\n      }\n    }\n\n    const identifier = `${entry.KG} ${[entry.LK1, entry.LK2, entry.LK3, entry.LK4].filter(Boolean).join('.')}`.trim()\n    const name = `${entry['Inspektions- und Wartungsarbeiten']}`\n    const comment = entry['Bemerkungen'] || ''\n\n    if (!identifier && !name) {\n      return null\n    }\n\n    if (todos.isWartungsteil) {\n      const doc = await Aeppic.new(this.FORMS.Wartungsteil, this.wartungsteileVorlagen)\n      doc.data.part = name\n      doc.data.identifier = identifier\n      doc.data.description = comment\n\n      documents.push(doc)\n      this.lastWartungsteil = doc\n      this.lastWartungsteilPart = null\n    }\n\n    if (todos.isWartungsteilPart) {\n      if (!this.lastWartungsteil) {\n        const err = 'Got WT+ but not WT before'\n        console.error({ entry }, err)\n        throw new Error(err)\n      }\n\n      const doc = await Aeppic.new(this.FORMS.Wartungsteil, this.wartungsteileVorlagen)\n\n      const lastName = this.lastWartungsteil.data.part\n      const lastIdentifier = this.lastWartungsteil.data.identifier\n      const lastComment = this.lastWartungsteil.data.description\n\n      doc.data.part = `${lastName} | ${name}`\n      doc.data.identifier = `${lastIdentifier} | ${identifier}`\n      doc.data.description = [lastComment, comment].filter(Boolean).join(' | ')\n\n      remove.push(this.lastWartungsteil)\n\n      documents.push(doc)\n      // this.lastWartungsteil = doc\n      this.lastWartungsteilPart = doc\n    }\n\n    if (todos.isWartungspunkt) {\n      const doc = await Aeppic.new(this.FORMS.Wartungspunkt, this.lastWartungsteilPart || this.lastWartungsteil)\n      doc.data.title = name\n      doc.data.identifier = identifier\n      doc.data.description = comment\n\n      documents.push(doc)\n      this.lastWartungspunkt = doc\n      this.lastWartungspunktPart = null\n\n      const wt = this.lastWartungsteilPart || this.lastWartungsteil\n      wt.addReference('items', doc)\n      replace.push(wt)\n    }\n\n    if (todos.isWartungspunktPart) {\n      if (!this.lastWartungspunkt) {\n        const err = 'Got WP+ but not WP before'\n        console.error({ entry }, err)\n        throw new Error(err)\n      }\n\n      const doc = await Aeppic.new(this.FORMS.Wartungspunkt, this.lastWartungsteilPart || this.lastWartungsteil, {\n        allowMissingParent: true,\n      })\n\n      const lastName = this.lastWartungspunkt.data.title\n      const lastIdentifier = this.lastWartungspunkt.data.identifier\n      const lastComment = this.lastWartungspunkt.data.description\n\n      doc.data.title = `${lastName} | ${name}`\n      doc.data.identifier = `${lastIdentifier} | ${identifier}`\n      doc.data.description = [lastComment, comment].filter(Boolean).join(' | ')\n\n      const wt = this.lastWartungsteilPart || this.lastWartungsteil\n      wt.removeReference('items', this.lastWartungspunkt)\n      wt.addReference('items', doc)\n      replace.push(wt)\n\n      remove.push(this.lastWartungspunkt)\n\n      documents.push(doc)\n      // this.lastWartungspunkt = doc\n      this.lastWartungspunktPart = doc\n    }\n\n    if (todos.isArbeit) {\n      if (!this.lastWartungspunkt) {\n        const err = 'Got Arbeit but not WP'\n        console.error({ entry }, err)\n        throw new Error(err)\n      }\n\n      const doc = await Aeppic.new(this.FORMS.Arbeit, this.lastWartungspunktPart || this.lastWartungspunkt, {\n        allowMissingParent: true,\n      })\n      doc.data.activity = name\n      doc.data.identifier = identifier\n      doc.data.instructions = comment\n\n      const entryIntervals = Object.keys(this.INTERVAL_MAP)\n      // [\n      //   '14 tägig',\n      //   '1-monatl.',\n      //   '2-monatl.',\n      //   '3-monatl.',\n      //   '6-monatl.',\n      //   '12-monatl.',\n      //   '24-monatl.',\n      // ]\n\n      for (const ei of entryIntervals) {\n        if (entry[ei]) {\n          doc.data.interval = this.INTERVAL_MAP[ei].interval\n          doc.data.intervalLength = this.INTERVAL_MAP[ei].intervalLength\n        }\n      }\n\n      ;(this.lastWartungspunktPart || this.lastWartungspunkt).addReference('workItems', doc)\n\n      documents.push(doc)\n    }\n\n    return {\n      documents,\n      remove,\n      replace,\n    }\n  }\n\n  async getEmployeeRef(name) {\n    const emptyRef = { id: '', text: '', v: '' }\n\n    if (!name) {\n      return emptyRef\n    }\n\n    const employee = await Aeppic.findOne(`a:${params.document.a[0]} f.id:${this.EMPLOYEE_FORM} data.name:\"${name}\"`)\n\n    if (!employee) {\n      return emptyRef\n    }\n\n    return Aeppic.asReference(employee)\n  }\n\n  async getContactRef(name) {\n    if (!name) {\n      return []\n    }\n\n    const parts = name.split(',').map((p) => {\n      const part = p.trim()\n\n      return `\"*${part}*\"`\n    })\n\n    const contacts = await Aeppic.find(\n      `a:${params.document.a[0]} f.id:${this.CONTACT_FORM} AND (${parts.join(' OR ')})`\n    )\n\n    if (!contacts.length) {\n      return []\n    }\n\n    return contacts\n  }\n}\n","css":"","name":"Import CSV as WT/WP/A","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<template v-if=\"Aeppic.Account && Aeppic.Account.data.isAdmin\">\n  <button class=\"ae-button\" style=\"font-style:italic;\" @click=\"$refs.dialog.$emit('show')\">\n    <ae-icon class=\"fa fa-file-import\"></ae-icon>\n    csv-Datei importieren\n  </button>\n\n  <ae-layout ref=\"dialog\"\n              layout-id=\"5ea858d8-1941-44cf-9002-9658f6183085\"\n              :param-document=\"params.document\"\n              :xparam-form-id=\"locals.formId\"\n              :xparam-map-entry-to-document-data-function=\"(arg, arg1) => controller.mapEntryToDocumentData(arg, arg1)\"\n              :param-map-entry-to-document-function=\"(arg, arg1) => controller.mapEntryToDocument(arg, arg1)\"\n              :param-debug=\"true\"\n  ></ae-layout>\n</template>\n"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"276421ac-73bb-4e98-8d8f-1b35b6214b85","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2025-12-18T11:02:30+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"da7d7591-812b-4af2-8ec1-635f08a277c2","text":"Import CSV as Projects Button","v":"c09087c4ececf29b"},"p":"6138e497-f561-430e-b3f1-8c3c7db046a7","previous":{"v":"ca17bb16d447c9e8"},"stamps":[],"t":1766055750925,"v":"04aed3eabab94d38"},{"a":["apps","3339944f-c35f-44b1-b427-a6db1d012825","c4651b79-e62d-44e7-a5a7-8b49d602ea90"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2019-08-22T12:19:57+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1566476397753,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this.FILE_FORM = '8bf0fb31-716d-4b76-98d8-b7349f1d7529'\n\n    locals.error = null\n    locals.extendingFormDocument = null\n\n    $on('show', () => this.show())\n\n    if (!params.formId || !params.mapEntryToDocumentDataFunction) {\n      console.warn('params formId AND mapEntryToDocumentDataFunction are required')\n    }\n  }\n\n  async _initialize() {\n    locals.step = ''\n    locals.file = null\n    locals.fileChanged = false\n\n    locals.documents = []\n    locals.newReferences = []\n\n    locals.steps = ['upload', 'parse', 'end']\n\n    if (params.extendingFormId) {\n      locals.extendingFormDocument = await Aeppic.new(params.extendingFormId, params.document)\n    }\n  }\n\n  nextStep() {\n    locals.error = null\n\n    locals.steps.push(locals.step)\n\n    const newStep = locals.steps.shift()\n    locals.step = newStep\n    \n\n    if (newStep === 'parse') {\n      this.parse()\n    }\n\n    if (newStep === 'end') {\n      $emit('done')\n    }\n  }\n\n  async show() {\n    await this._initialize()\n\n    this.nextStep()\n\n    locals.file = await this.newFile()\n\n    $refs.dialog.show()\n  }\n\n  async newFile() {\n    const file = await Aeppic.new(this.FILE_FORM, params.document)\n    Aeppic.commit(file)\n    return file\n  }\n\n  async resetFile() {\n    locals.file = await this.newFile()\n  }\n\n  async saveFile() {\n    Aeppic.save(locals.file)\n\n    this.nextStep()\n  }\n\n  async parse() {\n    try {\n\n    const csv = await this.fetchFileContent()\n\n    const result = packages.parse(csv, {\n      header: true\n    })\n\n    const data = result.data\n\n    if (params.debug) {\n      console.log('csv result', csv, result)\n    }\n\n    const all = await this.createDocumentsOfParseData(data)\n\n    // NOTE: every document has to have data.name or will NOT be imported!\n    locals.documents = all //.filter(d => d.data.name)\n    locals.newReferences = params.newReferences || []\n\n    } catch (e) {\n      locals.error = `Fehler bei der Verarbeitung aufgetreten: ${e}`\n    }\n  }\n\n  async createDocumentsOfParseData(csvEntries) {\n    const documents = []\n    const toRemove = []\n    const toReplace = []\n\n    for (const entry of csvEntries) {\n      const docs = []\n\n\n      if (params.mapEntryToDocumentFunction) {\n        const mapped = await params.mapEntryToDocumentFunction(entry, { parentId: params.document.id })\n        if (!mapped) {\n          continue\n        }\n\n        const { documents, replace, remove } = mapped\n\n        if (documents?.length ) {\n          docs.push(...documents)\n        }\n\n        if (replace?.length) {\n          toReplace.push(...replace)\n        }\n\n        if (remove?.length) {\n          toRemove.push(...remove)\n        }\n      } else {\n        const doc = await Aeppic.new(params.formId, params.document)\n        const data = await params.mapEntryToDocumentDataFunction(entry, { id: doc.id })\n\n        if (!data) {\n          continue\n        }\n        \n        doc.data = { ...doc.data, ...data }\n        docs.push(doc)\n      }\n\n\n      if (locals.extendingFormDocument) {\n        docs.forEach(doc => {\n          doc.data = { ...doc.data, ...locals.extendingFormDocument.data }\n        })\n      }\n\n      // Trigger field calculations\n      docs.forEach(doc => Aeppic.commit(doc))\n      \n\n      documents.push(...docs)\n    }\n\n    if (params.debug) {\n      console.log('create documents of parse result', documents)\n    }\n\n    let filteredDocuments = documents\n\n    if (toRemove.length) {\n      const ids = toRemove.map(x => x.id)\n      filteredDocuments = documents.filter(doc => ids.includes(doc.id) === false)\n    }\n\n    if (toReplace.length) {\n      // reverse order to replace with latest added document (if added multiple times)\n      const inversedToReplace = toReplace.concat().reverse()\n      const ids = inversedToReplace.map(x => x.id)\n\n      filteredDocuments = filteredDocuments.reduce((result, cur) => {\n        if (ids.includes(cur.id)) {\n          const replacedDoc = inversedToReplace.find(doc => doc.id === cur.id)\n\n          result.push(replacedDoc)\n        } else {\n          result.push(cur)\n        }\n\n        return result\n      }, [])\n    }\n\n    return filteredDocuments\n  }\n\n  async fetchFileContent(retries = 5, wait = 500) {\n    if (params.debug) {\n      console.log('fetchFileContent', retries)\n    }\n\n    if (retries <= 0) {\n      return null\n    }\n\n    const promise = new Promise(async (resolve, reject) => {\n      const content = await this.fileContentAsString()\n\n      if (content === null) {\n        Aeppic.setTimeout(async () => {\n          const res = await this.fetchFileContent(retries - 1, wait)\n          resolve(res)\n        }, wait)\n      } else {\n        resolve(content)\n      }\n\n    })\n\n    return promise\n  }\n\n  async fileContentAsString() {\n    const url = Aeppic.Content.getUrl(locals.file, 'file')\n\n    if (!url) {\n      return null\n    }\n\n    const response = await Aeppic.fetch(url)\n\n    if (!response.ok) {\n      return null\n    }\n\n    return response.text()\n  }\n\n  async importDocuments() {\n    if (params.newReferences?.length) {\n      Aeppic.saveAll(params.newReferences)  \n    }\n\n    Aeppic.saveAll(locals.documents)\n\n    this.nextStep()\n  }\n}","css":"._CSS-list-columnnames {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-error {\n  color: var(--ae-accent-red);\n  font-size: var(--ae-font-size-6);\n}","name":"Import CSV Layout","packages":[{"id":"0b308b82-a87f-4c2c-9cee-e09b90d37156","text":"CSV Parser","v":"6f67ebc4c27be59e"}],"template":"<ae-dialog ref=\"dialog\" :dialog-size=\"{ height: '90vh', width: '70vw'}\">\n  <div slot=\"header\">\n    csv-Datei importieren\n  </div>\n  <div slot=\"body\" class=\"ae-form-cell\">\n      <div v-if=\"locals.step === 'upload'\">\n        <template v-if=\"locals.file\">\n\n\n          <div v-if=\"params.csvColumnNames\">\n            <label class=\"ae-form-cell__label\">\n              Verfügbare Spalten-Namen\n\n              <ae-control name=\"help\" :document=\"params.document\" param-text=\"In der CSV-Datei müssen die Spalten-Namen exakt die hier aufgelisteten Bezeichnungen haben, um zugeordnet zu werden. Alle anderen Spalten werden ignoriert.\"></ae-control>\n            </label>\n\n            <div class=\"ae-control-container\">\n              <div class=\"ae-form-cell__input _CSS-list-columnnames\">\n                <span v-for=\"fieldName of params.csvColumnNames\">\n                  {{ fieldName }}\n                </span> \n              </div>\n            </div>\n          </div>\n\n          <div v-if=\"params.extendingFormId\">\n            <ae-form :document=\"locals.extendingFormDocument\"></ae-form>\n          </div>\n\n          <label class=\"ae-form-cell__label\">\n            csv-Datei auswählen\n          </label>\n\n          <ae-form ref=\"form\"\n                    :document=\"locals.file\"\n                    @data-changed=\"Aeppic.commit(locals.file)\"\n                    layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n                    :view=\"{ only: { fields: ['file' ] } }\"\n          ></ae-form>\n          <ae-layout  layout-id=\"73fd81e5-c901-4c56-9b38-cd04a7d17f8a\"\n                      :key=\"locals.file.id\"\n                      :param-document-id=\"locals.file.id\"\n                      @document-revision=\"locals.fileChanged = true\"\n                      v-show=\"false\"\n          ></ae-layout>\n                <!-- @save=\"controller.saveFile()\"\n                @reset=\"controller.resetFile()\" -->\n        </template>\n        </div>\n    </template>\n    <template v-else-if=\"locals.step === 'parse'\">\n      <label class=\"ae-form-cell__label\">\n        Vorschau auf zu importierende Dokumente ({{locals.documents.length}})\n      </label>\n\n      <div v-if=\"locals.error\" class=\"_CSS-error\">\n        {{locals.error}}\n      </div>\n      <ae-layout v-else-if=\"!locals.documents.length\"\n                  layout-id=\"fefa8352-0e9a-4ba8-8349-c9402ac8aefa\"\n                  style=\"height: var(--ae-size-6); width: var(--ae-size-6)\"\n      ></ae-layout>\n   \n      <ae-list v-else\n               list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n              :documents=\"locals.documents\"\n              :watch-documents=\"false\"\n              :param-no-watch=\"true\"\n              param-design=\"import-card,card\"\n      ></ae-list>\n\n      <template v-if=\"locals.newReferences.length\">\n        <div>Zusätzlich werden folgende Referenzen gespeichert ({{ locals.newReferences.length }})</div>\n\n        <ae-list \n                list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n              :documents=\"locals.newReferences\"\n              :watch-documents=\"false\"\n              :param-no-watch=\"true\"\n              param-design=\"import-card,card\"\n              sort=\"data.name\"\n        ></ae-list>\n      </template>\n    </template>\n    <template v-else-if=\"locals.step === 'end'\">\n      <p>\n        Die Dokumente wurden importiert.\n      </p>\n    </template>\n  </div>\n  <div slot=\"commands\" class=\"_CSS-commands\">\n    <button class=\"ae-button\" @click=\"$refs.dialog.close()\" v-if=\"locals.step !== 'end'\">\n      Abbrechen\n    </button>\n\n    <button class=\"ae-button ae-button--primary\" @click=\"controller.saveFile()\" v-if=\"locals.step === 'upload'\" :disabled=\"!locals.fileChanged\">\n      Vorschau anzeigen\n    </button>\n\n    <button class=\"ae-button ae-button--primary\" @click=\"controller.importDocuments()\" v-if=\"locals.step === 'parse'\" :disabled=\"!locals.documents.length\">\n      Importieren\n    </button>\n\n    <button class=\"ae-button ae-button--primary\" @click=\"$refs.dialog.close()\" v-if=\"locals.step === 'end'\">\n      Schließen\n    </button>\n  </div>\n</ae-dialog> "},"f":{"id":"layout-form","text":"Layout","v":"dc3356051e0928cf"},"id":"5ea858d8-1941-44cf-9002-9658f6183085","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-12-16T12:45:44+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"c4651b79-e62d-44e7-a5a7-8b49d602ea90","previous":{"v":"a88c134df3857e38"},"stamps":[],"t":1765889144314,"v":"51d68aabc2728e65"},{"id":"55429207-71d1-431a-82c8-eeda5b55bb87","v":"5e58a237460f7f7f","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"incoming-page-layout","applies":"","packages":[],"template":"<ae-design v-if=\"params.selected && params.selected.node && params.selected.node.document1\" :documentId=\"params.selected.node.document1.id\" name=\"inspect\" :edit=\"false\" ></ae-design>\n","css":"","controller":""},"locks":[],"created":{"at":"2018-01-03T10:10:50+01:00","by":"","from":"","client":"bb319a4c-46b1-46bb-90e9-bf4d3e036eaf"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481254,"ct":1621428481254,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"cb26482f4ce8f39b","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"927d8bb5-07be-4620-9e9b-60a8d91df733","v":"initial","previous":{"v":""},"p":"e6ffdfd0-88dd-429d-965b-a4634b065b3b","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"incoming-page-layout","applies":"","packages":[],"template":"<ae-design v-if=\"params.selected && params.selected.node && params.selected.node.document1\" :documentId=\"params.selected.node.document1.id\" name=\"inspect\" :edit=\"false\" ></ae-design>","css":"","controller":""},"locks":[],"created":{"at":"2018-05-29T13:38:21+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"from":"","client":"server"},"modified":{"at":"2018-05-29T13:38:21+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"from":"","client":"server"},"t":1527601101853,"ct":1527601101853,"a_depth":4,"a":["apps","90340217-c9b1-46fe-9b56-163953318522","2acd7a85-e378-49d3-a959-75ea2cab13a4","e6ffdfd0-88dd-429d-965b-a4634b065b3b"],"a_forms":["folder","application-form","folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"2d3b9b80-0da6-4040-9806-3e0ae0595018","v":"c2d330b4693aa8f1","previous":{"v":"062761356b2c8724"},"p":"fb822f2f-880c-4676-be8b-cc557e822bc4","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Inline Leistungs Form","applies":"","packages":[],"template":"\n<template v-if=\"locals.document && locals.document.data.aufgaben.length\">\n  <button class=\"ae-button\" v-if=\"locals.canEdit\" @click.stop=\"$refs.dialog.show()\">\n    <ae-icon class=\"fa fa-user\"></ae-icon>\n    Alle Aufgaben einem Verantworlichen zuordnen\n  </button>\n\n  <div class=\"_CSS-list-container\">\n    <ae-list :documents=\"locals.document.data.aufgaben\"\n              list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n              param-design=\"ref-card\"\n              @selected=\"Aeppic.drillInto($event, arguments[1])\" \n              class=\"_CSS-list\"\n              :param-design-params=\"{ readonly: params.readonly }\"\n    ></ae-list>\n\n    <!-- FIXME: remove remove-button here and push back to ref -->\n    <ae-layout v-if=\"!params.readonly\"\n              layout-id=\"1eb9a22f-6e91-491d-bdc8-e88c6ec87f79\"\n              @remove=\"$emit('remove', locals.document)\"\n    ></ae-layout>\n  </div>\n\n</template>\n\n<ae-dialog ref=\"dialog\" v-if=\"locals.assigneRequestDocument\">\n  <div slot=\"header\">\n    Verantworlichen für alle Aufgaben überschreiben\n  </div>\n  <div slot=\"body\">\n    <ae-form :document=\"locals.assigneRequestDocument\" :watch=\"false\"></ae-form>\n  </div>\n  <div slot=\"commands\">\n    <button class=\"ae-button\" @click=\"controller.closeAssigneChangeDialog()\">\n      Abbrechen\n    </button>\n    <button class=\"ae-button ae-button--primary\" @click=\"controller.changeAssigneForAllTasks()\" :disabled=\"!locals.assigneRequestDocument.data.verantwortlich.id\">\n      Verantworlichen überschreiben\n    </button>\n  </div>\n</ae-dialog>","css":"._CSS {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-list {\n  flex: 1;\n  min-width: 0;\n}\n\n._CSS-list-container {\n  display: flex;\n  flex-flow: row;\n  align-items: center;\n}\n","controller":"async init() {\n  this.ASSIGNE_REQUEST_DOCUMENT_FORM = 'a9904076-b0a6-4ea3-8d3a-db0d1ba3e1cb'\n\n  locals.canEdit = false\n  locals.assigneRequestDocument = null\n\n  watchParam('documentId', async () => {\n    await this._setup()\n    await this._renewAssigneRequestDocument()\n  })\n\n  this.deleteHandler = () => {\n    locals.document = null\n  }\n\n  $on('delete', this.deleteHandler)\n\n  await this._setup()\n  await this._renewAssigneRequestDocument()\n}\n\nasync _renewAssigneRequestDocument() {\n  if (!params.documentId) {\n    locals.assigneRequestDocument = null\n    return\n  }\n\n  locals.assigneRequestDocument = await Aeppic.new(this.ASSIGNE_REQUEST_DOCUMENT_FORM, params.documentId)\n}\n\nasync _setup() {\n  if (params.documentId) {\n    locals.document = await Aeppic.edit(params.documentId)\n  } else if (params.document) {\n    if (Aeppic.isEditableDocument(params.document)) {\n      locals.document = params.document\n    } else {\n      locals.document = await Aeppic.edit(params.document)\n    }\n  } else {\n    locals.document = null\n  }\n\n  locals.canEdit = await Aeppic.canEdit(locals.document)\n} \n\nasync closeAssigneChangeDialog() {\n  $refs.dialog && $refs.dialog.close()\n\n  await this._renewAssigneRequestDocument()\n}\n\nasync changeAssigneForAllTasks() {\n  const commandResult = await Aeppic.Commands.execute('e5450e16-f55f-41d8-b048-708ab8d5b98d', locals.document, {\n    assignee: locals.assigneRequestDocument.data.verantwortlich\n  })\n\n  if (!commandResult.ok) {\n    console.error('Could not changeAssigneForAllTasks')\n  }\n\n  this.closeAssigneChangeDialog()\n}"},"locks":[],"created":{"at":"2019-05-20T15:28:39+02:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2022-02-25T16:02:13+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1645804933389,"ct":1558358919884,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","fb822f2f-880c-4676-be8b-cc557e822bc4"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"8ad94a11-3afc-4eff-9d5c-99b7c69d4110","v":"initial","p":"7fd7c5cc-1eed-440b-8ce2-d6183cdb421b","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"inspected-element-highlight","applies":"","packages":[],"template":"<div ref=\"elementHighlight\" class=\"_CSS-elementHighlight\"></div>","css":"._CSS-elementHighlight{\n  position: fixed;\n  border: solid 1px rgba(65,105,225,0.6);\n  background: rgba(65,105,225,0.1);\n  display: none;\n  pointer-events: none;\n  z-index:10000;\n}","controller":"class Controller {\n  init () {\n    const self = this\n    this.cbOn  = (elementId)=>self.highlightElement(elementId)\n    this.cbOff = ()=>self.highlightOff()\n    Aeppic.Developer.on('highlight-element', this.cbOn)\n    Aeppic.Developer.on('highlight-element-off', this.cbOff)\n  }\n\n  destroy() {\n    Aeppic.Developer.off('highlight-element', this.cbOn)\n    Aeppic.Developer.off('highlight-element-off', this.cbOff)\n  }\n\n  highlightElement(elementId){\n    const info = Aeppic.Developer.getInspectedElementInfo(elementId)\n    if(!info){\n      return;\n    }\n\n    $refs.elementHighlight.style.top = info.top + 'px'\n    $refs.elementHighlight.style.left = info.left + 'px'\n    $refs.elementHighlight.style.width = info.width + 'px'\n    $refs.elementHighlight.style.height = info.height + 'px'\n    $refs.elementHighlight.style.display = 'block'\n  }\n\n  highlightOff(){\n    $refs.elementHighlight.style.display = 'none'\n  }\n}"},"locks":[],"created":{"at":"2019-02-14T12:06:30+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-02-14T12:06:30+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1550145990307,"ct":1550145990307,"a_depth":5,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","427e6b73-968a-4747-be77-c6bb820a3190","7fd7c5cc-1eed-440b-8ce2-d6183cdb421b"],"a_forms":["folder","application-form","folder","folder","folder"],"inheritedLocks":[null,null,null,null,null,null],"stamps":[]},{"id":"137c12db-1c94-4ec1-9847-3493828b637a","v":"aa71f0631cb44ecc","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Inspector Discovered Path","applies":"","packages":[],"template":"<div v-if=\"locals.elements.length > 0\" style=\"overflow-x:auto\">\r\n  <label :for=\"id('hd')\">DOM</label>\r\n  <input :id=\"id('hd')\" v-model=\"locals.hideDOM\" type=\"checkbox\">\r\n  <div v-for=\"(el,index) in locals.elements\" style=\"white-space:nowrap\"  :style=\"{ paddingLeft: (index*4)+'px' }\"> \r\n    <div v-if=\"el && el.classList && el.classList.contains('ae-design') && controller.getDesignForm(el)\">\r\n      <span class=\"_CSS_label\" @click=\"controller.select(controller.getDynamicComponentDocument(el))\">Design</span>&nbsp;<ae-design  @click.native=\"controller.select(controller.getDynamicComponentDocument(el))\" style=\"display:inline-block\" :document=\"controller.getDynamicComponentDocument(el)\" name=\"inspector-title,title\"></ae-design>\r\n      <span class=\"_CSS_label _CSS_label--small _CSS_label--document\" @click=\"controller.select(controller.getDesignDocument(el))\" >Document</span>&nbsp;<ae-design @click.native=\"controller.select(controller.getDesignDocument(el))\"  style=\"display:inline-block\" :document=\"controller.getDesignDocument(el)\" name=\"inspector-title,title\"></ae-design>      \r\n      <span class=\"_CSS_label _CSS_label--small _CSS_label--form\" @click=\"controller.select(controller.getDesignForm(el).document)\" >Form</span>&nbsp;<ae-design @click.native=\"controller.select(controller.getDesignForm(el).document)\"  style=\"display:inline-block\" :document=\"controller.getDesignForm(el).document\" name=\"inspector-title,title\"></ae-design>      \r\n    </div>\r\n    <div v-else-if=\"el && el.classList && el.classList.contains('ae-list')\" @click=\"controller.select(controller.getDynamicComponentDocument(el))\">\r\n      <span class=\"_CSS_label\">List</span>&nbsp;<ae-design style=\"display:inline-block\" :document=\"controller.getDynamicComponentDocument(el)\" name=\"inspector-title,title\"></ae-design>\r\n    </div> \r\n    <div v-else-if=\"el && el.classList && el.classList.contains('ae-form') && controller.getForm(el)\" >\r\n      <span class=\"_CSS_label\">Form</span>&nbsp;<ae-design @click.native=\"controller.select(controller.getForm(el).document)\" style=\"display:inline-block\" :document=\"controller.getForm(el).document\" name=\"inspector-title,title\"></ae-design>\r\n      <span style=\"margin-left:10px;\" class=\"_CSS_label _CSS_label--small\">Layout</span><ae-design  @click.native=\"controller.select(controller.getFormLayout(el))\" style=\"display:inline-block\" :document=\"controller.getFormLayout(el)\" name=\"inspector-title,title\"></ae-design>      \r\n    </div>\r\n    <div v-else-if=\"el && el.classList && el.classList.contains('ae-layout')\" @click=\"controller.select(controller.getDynamicComponentDocument(el))\" style=\"display:flex;align-items: center\"> \r\n      <span class=\"_CSS_label\">Layout</span>&nbsp;<ae-design style=\"display:inline-block\" :document=\"controller.getDynamicComponentDocument(el)\" name=\"inspector-title,title\"></ae-design>      \r\n    </div>\r\n    <div v-else-if=\"el && el.classList && el.classList.contains('ae-form-section')\">\r\n      <span class=\"_CSS_label\">Form Section</span>&nbsp;\r\n    </div>\r\n    <div v-else-if=\"el && el.classList && el.classList.contains('ae-control')\" @click=\"controller.select(controller.getDynamicComponentDocument(el))\">\r\n      <span class=\"_CSS_label\">Control</span>&nbsp;<ae-design style=\"display:inline-block\" :document=\"controller.getDynamicComponentDocument(el)\" name=\"inspector-title, title\"></ae-design>\r\n    </div>\r\n    <div v-else-if=\"el && el.classList && el.classList.contains('ae-splitter')\">\r\n      <div class=\"_CSS_label _CSS_label--component\">Splitter</div>\r\n    </div>\r\n    <div v-else-if=\"el && el.classList && el.classList.contains('ae-query')\">\r\n      <div class=\"_CSS_label _CSS_label--component\">Query</div>\r\n    </div>\r\n    <div v-else v-show=\"!locals.hideDOM\" class=\"_CSS_element\">\r\n      <span class=\"_CSS_bracket\">&lt;</span><span class=\"_CSS_tag__name\">{{el && el.tagName && el.tagName.toLowerCase()}}</span><span v-for=\"a of el.attributes\">&nbsp;<span class=\"_CSS_attr\">{{a.name}}=</span>&quot;<span class=\"_CSS_attr__value\">{{a.value}}</span>&quot;</span> <span class=\"_CSS_bracket\">&gt;</span> \r\n    </div> \r\n  </div> \r\n</div>   ","css":"._CSS {\r\n  font-size:14px;\r\n}\r\n\r\n._CSS_label {\r\n  background: red;\r\n  padding: 2px 4px;\r\n  border-radius: 4px;\r\n  display:inline-block;\r\n}\r\n\r\n._CSS_label--small {\r\n  font-size: 0.8em;\r\n  background: lightgray;\r\n}\r\n\r\n._CSS_label--component {\r\n  background: lightgreen;\r\n}\r\n\r\n._CSS_label--document {\r\n  background: lightblue;\r\n}\r\n\r\n._CSS_label--form {\r\n  background: lightgray;\r\n}\r\n\r\n._CSS_attr {\r\n  color: blue;\r\n}\r\n \r\n._CSS_attr__value {\r\n  color: green;\r\n}\r\n\r\n._CSS_element {\r\n  font-family: Consolas;\r\n}\r\n","controller":"class Constructor {\r\n  init() {\r\n    locals.elements = []\r\n    locals.hideDOM = false\r\n\r\n    this.cb = (elements) => {\r\n      locals.elements.length = 0\r\n      locals.elements.push(...elements)\r\n      locals.elements.reverse()\r\n      locals.elements.splice(0,3)\r\n    }\r\n\r\n    Aeppic.Developer.inspectorPath && this.cb(Aeppic.Developer.inspectorPath)\r\n\r\n    Aeppic.Developer.on('inspector-path-updated', this.cb)\r\n  }\r\n\r\n  destroy() {\r\n    Aeppic.Developer.removeEventListener('inspector-path-updated', this.cb)\r\n  }\r\n\r\n  select(document) {\r\n    $emit('selected', document.id)\r\n  }\r\n\r\n  getDesignDocument(el) {\r\n    const component = Aeppic.lookupComponentForElement(el)\r\n    if (component) {\r\n      return component.documentToBeRendered\r\n    }    \r\n  }\r\n\r\n  getDesignForm(el) {\r\n    const document = this.getDesignDocument(el)\r\n\r\n    if (document) {\r\n      return Aeppic.getDocumentForm(document)\r\n    }\r\n  }\r\n\r\n  getDynamicComponent(el) {\r\n    const component = Aeppic.lookupComponentForElement(el)\r\n    \r\n    if (component && component.dynamicComponent) {\r\n      return component.dynamicComponent\r\n    }\r\n  }\r\n\r\n  getDynamicComponentDocument(el) {\r\n    const dynamicComponent = this.getDynamicComponent(el)\r\n    \r\n    if (dynamicComponent) {\r\n      return dynamicComponent.document\r\n    } \r\n  }\r\n\r\n  getForm(el) {\r\n    const component = Aeppic.lookupComponentForElement(el)\r\n    \r\n    if (component) {\r\n      return component.formToRender\r\n    }\r\n  }\r\n\r\n   getFormLayout(el) {\r\n    const component = Aeppic.lookupComponentForElement(el)\r\n\r\n    if (component) {\r\n      const listComponent = component.$children[0]\r\n      return listComponent.dynamicComponent.document\r\n    }\r\n   }\r\n}"},"locks":[],"created":{"at":"2017-09-19T21:14:28+02:00","by":"","from":"","client":"8c4d9670-4cfd-471d-b421-28c0a4336718"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481254,"ct":1621428481254,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"289a88469a79e832","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"956d0d01-3f82-4f11-9569-3f292044da8e","v":"b90541a826dbc836","previous":{"v":"d0f6808f4ed3c164"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Inspector Layout","applies":"","packages":[],"template":"<ae-splitter :limit-expand=\"false\" :split=\"30\">\n  <div slot=\"left-pane\" class=\"ae-row-spaceBetween-column-noGutter\" style=\"padding:4px;height:100%;align-items:stretch\">\n    <ae-list style=\"flex:1;overflow:auto;padding:4px\" class=\"ae-col\" @selected=\"id => controller.select(id)\" list-id=\"tree-list\" :param-root-id=\"locals.rootId\" :param-show-forms=\"locals.showForms\" :param-selected=\"locals.selected\" @toggle-show-forms=\"locals.showForms = !locals.showForms\"></ae-list>\n    <div>\n      <ae-layout layout-id=\"137c12db-1c94-4ec1-9847-3493828b637a\" @selected=\"id => controller.select(id)\" ></ae-layout>\n    </div>\n    <label><input type=\"checkbox\" v-model=\"Aeppic.flags.watchUIRevisions\">Watch UI Revisions</label>\n  </div>\n  <div slot=\"right-pane\" style=\"padding:4px;height:100%;overflow-x:hidden\">\n    <ae-design :document-id=\"locals.selectedId\" name=\"inspect\" :edit=\"true\" :watch-design=\"false\"  @selected=\"id => controller.select(id)\"></ae-design>\n  </div>\n</ae-splitter>\n","css":"\n._CSS_DWN svg {\n  fill: gray;\n}\n._CSS_DWN:hover svg {\n  fill: #5d5d5d;\n}\n\n._CSS-edit-row {\n  margin-bottom: 8px;\n}\n\n._CSS-edit-row button {\n  background: white;\n  border: 1px solid darkgray;\n  padding: 4px;\n}\n\n._CSS-edit-row button:hover {\n  background: #D1D1D1;\n}","controller":"class Controller {\n  constructor() {\n    locals.rootId = 'root'\n    locals.selectedId = locals.rootId\n    locals.selected = null\n    locals.readonly = false\n    locals.showForms = false\n  }\n  \n  async select(id) {\n    locals.selectedId = id\n    locals.selected = await Aeppic.get(id)\n  }\n}"},"locks":[],"created":{"at":"2017-08-24T10:36:08+02:00","by":"","from":"","client":"6d38103e-eed4-4603-82b6-79fbf34368ec"},"modified":{"at":"2024-01-09T13:39:11+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1704807551709,"ct":1621428481254,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"b0c099c3-6afb-4322-9f7c-97a2b2062db9","v":"0ba5d6d168ee6e0f","previous":{"v":"initial","locks":[]},"p":"0c8ef865-fd1b-40bd-b665-97ad067fd10f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Install PWA","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"401d78c99871e308","text":"Window"}],"template":"<template v-if=\"!locals.alreadyInstalled\">\n  <button v-if=\"!locals.success\" class=\"bp-button bp-button--transparent _CSS-button\" @click=\"controller.addPwa()\">\n    <ae-icon class=\"fal fa-plus-circle\"></ae-icon>\n    Bizpin zum Desktop hinzufügen\n  </button>\n\n  <template v-if=\"locals.executed\">\n    <div v-if=\"locals.success\" class=\"_CSS-message--sucess\">\n      Bizpin wurde installiert.\n    </div>\n    <div v-else class=\"_CSS-message--failure\">\n      Beim Hinzufügen ist etwas schiefgelaufen. Versuchen Sie es bitte erneut.\n    </div>\n  </template>\n\n</template>\n","css":"._CSS ._CSS-button {\n  margin: 1em 0;\n  border: 1px solid #bbb;\n  border-radius: 2px;\n  color: black;\n}\n","controller":"init() {\n  locals.alreadyInstalled = !(packages.window.aePwaDeferredPrompt())\n\n  if (locals.alreadyInstalled) {\n    return\n  }\n\n  locals.executed = false\n  locals.success = false\n\n  this.promptResultHandler = (choiceResult) => {\n    console.log(choiceResult)\n    locals.executed = true\n\n    if (choiceResult.outcome === 'accepted') {\n      console.log('User accepted the A2HS prompt')\n      locals.success = true\n    } else {\n      console.log('User dismissed the A2HS prompt')\n      locals.success = false\n    }\n  }\n\n  this.onBeforeInstallPromptHandler = (event) => {\n    console.log('onBeforeInstallPromptHandler')\n    // Prevent Chrome 67 and earlier from automatically showing the prompt\n    event.preventDefault()\n\n    locals.deferredPrompt = event\n  }\n\n  locals.deferredPrompt = packages.window.aePwaDeferredPrompt()\n\n\n  // watch for beforeinstallprompt events after the initial one\n  packages.window.addEventListener('beforeinstallprompt', this.onBeforeInstallPromptHandler)\n} \n\ndestroy() {\n  packages.window.removeEventListener('beforeinstallprompt', this.onBeforeInstallPromptHandler)\n}\n\naddPwa() {\n  locals.deferredPrompt.prompt()\n  locals.deferredPrompt.userChoice.then(this.promptResultHandler).then(() => {\n    console.log('finish')\n  }).catch((e) => {\n    console.log('error', e)\n  })\n}\n\n"},"locks":[],"created":{"at":"2018-10-18T13:22:55+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2018-10-18T13:38:48+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1539869928068,"ct":1539868975870,"a_depth":4,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","6b892ddf-3264-4056-b191-166f4410d9fa","0c8ef865-fd1b-40bd-b665-97ad067fd10f"],"a_forms":["folder","application-form","folder","folder"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"2c74fe2d-00f7-4cca-9f97-7a5d3bd49c8d","v":"03293ec13774e104","previous":{"v":"0dbd6d28f067de7d"},"p":"5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Keeptrack Application Layout","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"d4ce6dec568c3dc1","text":"Window"}],"template":"<!-- FIXME: one could move some content into the status bar to make it look better: https://dev.to/karmasakshi/make-your-pwas-look-handsome-on-ios-1o08 -->\n<!-- absolute -top-4 bottom-0 left-0 right-0 -->\n<!-- @ae-drill-into.capture.stop.prevent=\"Aeppic.navigateTo($event)\" -->\n<div class=\"h-screen flex flex-col\" >\n  <header class=\"w-full flex px-4 py-2 items-center gap-2 bg-white xbg-blue-500\"> \n    <img class=\"h-7 sm:h-11 w-auto\" v-if=\"locals.logo\" :src=\"Aeppic.Content.getSrc(locals.logo, 'file')\"\n          @xclick.stop=\"Aeppic.navigateTo('7a988036-70c3-422c-a5a2-2bfa149193da')\">\n\n    <div class=\"flex-1\"></div>\n    <ae-layout v-show=\"!locals.connected\" layout-id=\"ee288bba-3301-4d3b-b2bd-e6e86128e0e6\" :param-connected=\"locals.connected\"></ae-layout>\n    <button v-if=\"Aeppic.Developer.remoteDeveloperMode === 'Client'\" class=\"\" style=\"color:var(--ae-accent-red)\" title=\"Remote Developer Preview Mode\"><ae-icon class=\"fad fa-presentation\" ></ae-icon></button>\n\n    <ae-layout layout-id=\"a2cd7699-9b46-494f-8f89-cb1f62151d82\"\n               param-text=\"Informationen zur Testversion\"\n               @selected=\"$refs.demoInfo.show()\"\n               param-classes=\"text-xs border border-sky-900 text-sky-900\"\n    ></ae-layout>\n\n    <button class=\"ae-button\" ref=\"hamburger\" @click.stop=\"$refs.hamburgerMenu.show({ target: $refs.hamburger })\">\n      <ae-icon class=\"fa fa-bars\"></ae-icon>\n    </button>\n  </header>\n   \n   <!-- @scroll=\"controller.onScroll($event)\" -->\n  <content class=\"flex-1 h-full overflow-auto bg-slate-50 shadow-inner flex flex-col\"> \n    <ae-design class=\"max-w-screen-lg w-full m-auto\" name=\"page\" :document=\"params.pageDocument\"></ae-design>\n \n    <div class=\"flex-1\"></div>\n\n    <ae-layout v-if=\"Aeppic.Device === 'Phone'\" layout-id=\"13f79e1b-ca79-4e86-93b9-57201ef8b11a\"></ae-layout>\n\n    <ae-popup ref=\"hamburgerMenu\">\n      <div class=\"flex flex-col\">\n        <button class=\"ae-button\" @click.stop=\"Aeppic.reload()\">\n          <ae-icon class=\"fa fa-redo\"></ae-icon>\n          Neuladen & Zur Startseite\n        </button>\n\n        <button class=\"ae-button\" @click.stop=\"controller.logout()\">\n          <ae-icon class=\"fa fa-sign-out\"></ae-icon>\n          Abmelden\n        </button>\n      </div>\n    </ae-popup>\n \n    <ae-dialog ref=\"demoInfo\"> \n      <template #header=\"scope\">\n        <div class=\"flex justify-between items-center\">\n          <header class=\"text-xl font-bold mx-auto\">\n            Willkommen bei der Keep Track Testversion!\n          </header> \n            \n          <ae-layout layout-id=\"a2cd7699-9b46-494f-8f89-cb1f62151d82\"\n              param-icon=\"fa fa-times\"\n               @selected=\"scope.close()\"\n          ></ae-layout>\n        </div>\n      </template>\n      <template #body>\n        <div>\n          <div class=\"p-4 flex flex-col max-w-2xl mx-auto\">\n            <div>\n              Sie befinden sich aktuell in der <strong>Wartungsoberfläche</strong> von Keep Track. Dies stellt den Startpunkt für die Durchführung von Wartungen dar.\n            </div>\n\n            <div class=\"mt-2\">\n              Bei Fragen können Sie uns gerne telefonisch oder per E-Mail erreichen. Wir bieten Ihnen auch gerne eine geführte Live-Demo an.\n            </div>\n\n            <div class=\"mt-4\">\n              Möchten Sie auf die <strong>Verwaltungsoberfläche</strong> wechseln?\n              Dann melden Sie sich bitte ab und nutzen den Anmeldenamen <span class=\"font-mono italic\">{{ locals.custodian?.data.name }}</span> mit dem selben Passwort.\n            </div> \n\n          </div>\n        </div>\n      </template> \n    </ae-dialog>\n  </content>\n \n  <ae-layout v-if=\"Aeppic.Device !== 'Phone'\" layout-id=\"13f79e1b-ca79-4e86-93b9-57201ef8b11a\"></ae-layout>\n</div> ","css":"","controller":"class Controller {\n  async init() {\n    locals.connected = true  \n    locals.isDemo = `${packages.window.location.hostname}`.includes('bizpin-dev.bizpin.de') || `${packages.window.location.hostname}`.includes('keeptrack.bizpin.de')\n    locals.custodian = null\n\n    if (Aeppic.Account?.data.allowDevMode) {\n      Aeppic.Developer.enableRemoteDeveloper(Aeppic.Account.id, 'Client')\n      locals.devmode \n    }\n\n    this.vue = new Vue({\n      computed: {\n        connection() {\n          return Aeppic.ConnectionStatus.connected\n        }\n      },\n      watch: {\n        connection(newValue, oldValue) {\n          locals.connected = newValue\n        }\n      } \n    })\n\n    locals.logo = null\n    locals.logo = await Aeppic.get('d3797a0e-c2dd-4f04-8b1b-066f06a67e53')\n\n    if (locals.isDemo) {\n      locals.custodian = await Aeppic.findOne(`a:${params.pageDocument.a[0]} f.id:account data.disabled:false data.name:verwalter*`)\n    }\n\n    \n    locals.isVerwalter = false\n    locals.isVerwalter = (await Aeppic.Commands.execute('950f35d3-95ba-4d5a-a164-0074c767d600', document, { Account: Aeppic.Account })).value\n\n    if (locals.isVerwalter) {\n      Aeppic.onLinkClicked(null, packages.window.location.origin)\n      Aeppic.reload()\n    }\n  }\n\n  // async onScroll(event) {\n  //   if (this._onScrollHandlerProcessing) {\n  //     return\n  //   }\n\n  //   this._onScrollHandlerProcessing = true\n\n  //   await Aeppic.waitForNextAnimationFrame()\n\n\n  //   const y = event.target.scrollTop\n  //   const x = event.target.scrollLeft\n\n  //   locals.scrollY = y \n  //   console.log(y)\n\n  //   this._onScrollHandlerProcessing = false\n  // }\n\n  logout() {\n    if (packages.window.confirm('Wollen Sie sich wirklich abmelden?')) {\n      Aeppic.logout()\n    }\n  }\n\n  destroy() {\n    this.vue && this.vue.$destroy()\n  }\n}"},"locks":[],"created":{"at":"2022-03-08T14:16:13+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-04-11T15:04:43+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1681225483096,"ct":1646748973710,"a_depth":3,"a":["apps","d4581623-f542-4ade-86be-8b3ecec56f0e","5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","594e6b26-7310-4d00-aad9-2a577ccab542"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2025-08-06T15:38:21+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1754494711129,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Company: 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df',\n      AnmeldungWartung: '941d2b8f-5694-4054-8c99-c51ad62f6c2f',\n      AnmeldungAufnahme: 'c6931d87-a1f3-4b34-bc1b-3f0bfe7398f8',\n    }\n    this.initialized = false\n\n    locals.connected = true\n    locals.isDemo =\n      `${packages.window.location.hostname}`.includes('bizpin-dev.bizpin.de') ||\n      `${packages.window.location.hostname}`.includes('keeptrack.bizpin.de')\n    locals.custodian = null\n    locals.logo = null\n    locals.anmeldungWartungDocument = null\n    locals.anmeldungAufnahmeDocument = null\n\n    if (Aeppic.Account?.data.allowDevMode) {\n      Aeppic.Developer.enableRemoteDeveloper(Aeppic.Account.id, 'Client')\n    }\n\n    this.vue = new Vue({\n      computed: {\n        connection() {\n          return Aeppic.ConnectionStatus.connected\n        },\n      },\n      watch: {\n        connection(newValue, oldValue) {\n          locals.connected = newValue\n        },\n      },\n    })\n\n    watchParam('pageDocument', (pageDocument) => this.onPageDocument(pageDocument))\n\n    this.onPageDocument(params.pageDocument)\n\n    locals.logo = await Aeppic.get('d3797a0e-c2dd-4f04-8b1b-066f06a67e53')\n  }\n\n  async onPageDocument(pageDocument) {\n    if (!pageDocument) {\n      console.warn('no pageDocument')\n      return\n    }\n\n    if (this.initialized) {\n      return\n    }\n\n    const companyId = pageDocument.f.id === this.FORMS.Company ? pageDocument.id : pageDocument.a[0]\n\n    if (!companyId) {\n      return\n    }\n\n    // we can set initialized to true, because we want to execute the following code only once at any given time\n    this.initialized = true\n\n    try {\n      if (typeof tailwind != 'undefined') {\n        tailwind.config = {\n          darkMode: 'selector',\n          theme: { extend: {} },\n        }\n\n        const companyCi = await Aeppic.findOne(`p:${companyId} f.id:81da74f7-1abf-48c1-add1-18266cd4c30e`)\n\n        if (companyCi) {\n          try {\n            tailwind.config.theme.extend.colors = JSON.parse(companyCi.data.colors)\n          } catch (error) {\n            console.error(`Error parsing company CI: ${error}`)\n          }\n        } else {\n          tailwind.config.theme.extend.colors = {\n            primary: tailwind.colors.blue,\n            secondary: tailwind.colors.slate,\n            'brand-accent': tailwind.colors.lime,\n            'brand-accent-secondary': tailwind.colors.fuchsia,\n            info: tailwind.colors.indigo,\n            warn: tailwind.colors.amber,\n            error: tailwind.colors.rose,\n          }\n        }\n      }\n    } catch (err) {\n      console.error('Error configuring company CI or tailwind', { err })\n    }\n\n    if (locals.isDemo) {\n      locals.custodian = await Aeppic.findOne(`a:${companyId} f.id:account data.disabled:false data.name:*verwalter*`)\n    }\n\n    const [aufnahme, wartung] = await await Promise.all([\n      Aeppic.findOne(`p:${companyId} f.id:${this.FORMS.AnmeldungAufnahme}`),\n      Aeppic.findOne(`p:${companyId} f.id:${this.FORMS.AnmeldungWartung}`),\n    ])\n\n    locals.anmeldungAufnahmeDocument = aufnahme ?? null\n    locals.anmeldungWartungDocument = wartung ?? null\n  }\n\n  reloadTo(anmeldungDocument) {\n    if (anmeldungDocument.f.id === this.FORMS.AnmeldungAufnahme) {\n      console.log('redirect to /aufnahme')\n      Aeppic.onLinkClicked(null, '/aufnahme')\n      Aeppic.reload()\n      return\n    }   \n    \n    if (anmeldungDocument.f.id === this.FORMS.AnmeldungWartung) {\n      console.log('redirect to /wartung')\n      Aeppic.onLinkClicked(null, '/wartung')\n      Aeppic.reload()\n      return\n    }\n  }\n\n  logout() {\n    if (packages.window.confirm('Wollen Sie sich wirklich abmelden?')) {\n      Aeppic.onLinkClicked(null, '/')\n      Aeppic.logout()\n    }\n  }\n\n  destroy() {\n    this.vue && this.vue.$destroy()\n  }\n}\n","css":"","name":"Keeptrack Application Layout","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"d4ce6dec568c3dc1"}],"template":"<!-- FIXME: one could move some content into the status bar to make it look better: https://dev.to/karmasakshi/make-your-pwas-look-handsome-on-ios-1o08 -->\n<!-- absolute -top-4 bottom-0 left-0 right-0 -->\n<!-- @ae-drill-into.capture.stop.prevent=\"Aeppic.navigateTo($event)\" -->\n<div class=\"h-screen flex flex-col\">\n  <header class=\"w-full flex px-4 py-2 items-center gap-2 bg-white xbg-blue-500\">\n    <img class=\"h-7 sm:h-11 w-auto\" v-if=\"locals.logo\" :src=\"Aeppic.Content.getSrc(locals.logo, 'file')\" />\n\n    <div class=\"flex-1\"></div>\n\n    <ae-layout\n      v-show=\"!locals.connected\"\n      layout-id=\"ee288bba-3301-4d3b-b2bd-e6e86128e0e6\"\n      :param-connected=\"locals.connected\"\n    ></ae-layout>\n    <button v-if=\"Aeppic.Developer.remoteDeveloperMode === 'Client'\" class=\"\" title=\"Remote Developer Preview Mode\">\n      <ae-icon class=\"far fa-presentation text-red-500\"></ae-icon>\n    </button>\n\n    <div v-if=\"params.pageDocument\">\n      <ae-layout\n        v-if=\"(params.pageDocument.id === locals.anmeldungAufnahmeDocument?.id) && locals.anmeldungWartungDocument?.id\"\n        layout-id=\"f6bdd129-3852-4bac-9375-559b929486bc\"\n        param-icon=\"\"\n        param-text=\"Zur Wartung\"\n        @selected=\"controller.reloadTo(locals.anmeldungWartungDocument)\"\n        param-classes=\"text-xs border border-sky-900 text-sky-900\"\n      ></ae-layout>\n      <ae-layout\n        v-if=\"(params.pageDocument.id === locals.anmeldungWartungDocument?.id) && locals.anmeldungAufnahmeDocument?.id\"\n        layout-id=\"f6bdd129-3852-4bac-9375-559b929486bc\"\n        param-icon=\"\"\n        param-text=\"Zur Aufnahme\"\n        @selected=\"controller.reloadTo(locals.anmeldungAufnahmeDocument)\"\n        param-classes=\"text-xs border border-sky-900 text-sky-900\"\n      ></ae-layout>\n    </div>\n\n    <ae-layout\n      layout-id=\"f6bdd129-3852-4bac-9375-559b929486bc\"\n      param-text=\"Informationen zur Testversion\"\n      @selected=\"$refs.demoInfo.show()\"\n      param-classes=\"text-xs border border-sky-900 text-sky-900\"\n    ></ae-layout>\n\n    <button class=\"ae-button\" ref=\"hamburger\" @click.stop=\"$refs.hamburgerMenu.show({ target: $refs.hamburger })\" data-test=\"keeptrack-account-menu\">\n      <ae-icon class=\"fa fa-bars\"></ae-icon>\n    </button>\n  </header>\n\n  <!-- @scroll=\"controller.onScroll($event)\" -->\n  <content class=\"flex-1 h-full overflow-auto bg-slate-50 shadow-inner flex flex-col\">\n    <ae-design class=\"max-w-screen-lg w-full m-auto\" name=\"rd:page--worker\" :document=\"params.pageDocument\"></ae-design>\n\n    <div class=\"flex-1\"></div>\n\n    <ae-layout v-if=\"Aeppic.Device === 'Phone'\" layout-id=\"4817b42f-4680-40b7-8319-64b802e0c063\"></ae-layout>\n\n    <ae-popup ref=\"hamburgerMenu\">\n      <div class=\"flex flex-col\">\n        <button class=\"ae-button\" @click.stop=\"Aeppic.reload()\">\n          <ae-icon class=\"fa fa-redo\"></ae-icon>\n          Neuladen & Zur Startseite\n        </button>\n\n        <button class=\"ae-button\" @click.stop=\"controller.logout()\">\n          <ae-icon class=\"fa fa-sign-out\"></ae-icon>\n          Abmelden\n        </button>\n      </div>\n    </ae-popup>\n\n    <ae-dialog ref=\"demoInfo\">\n      <template #header=\"scope\">\n        <div class=\"flex justify-between items-center\">\n          <header class=\"text-xl font-bold mx-auto\">Willkommen bei der Keep Track Testversion!</header>\n\n          <ae-layout\n            layout-id=\"f6bdd129-3852-4bac-9375-559b929486bc\"\n            param-icon=\"fa fa-times\"\n            @selected=\"scope.close()\"\n          ></ae-layout>\n        </div>\n      </template>\n      <template #body>\n        <div>\n          <div class=\"p-4 flex flex-col max-w-2xl mx-auto\">\n            <div>\n              Sie befinden sich aktuell in der <strong>Wartungsoberfläche</strong> von Keep Track. Dies stellt den\n              Startpunkt für die Durchführung von Wartungen dar.\n            </div>\n\n            <div class=\"mt-2\">\n              Bei Fragen können Sie uns gerne telefonisch oder per E-Mail erreichen. Wir bieten Ihnen auch gerne eine\n              geführte Live-Demo an.\n            </div>\n\n            <div class=\"mt-4\">\n              Möchten Sie auf die <strong>Verwaltungsoberfläche</strong> wechseln? Dann melden Sie sich bitte ab und\n              nutzen den Anmeldenamen <span class=\"font-mono italic\">{{ locals.custodian?.data.name }}</span> mit dem\n              selben Passwort.\n            </div>\n          </div>\n        </div>\n      </template>\n    </ae-dialog>\n  </content>\n\n  <ae-layout v-if=\"Aeppic.Device !== 'Phone'\" layout-id=\"4817b42f-4680-40b7-8319-64b802e0c063\"></ae-layout>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"f6811177-daaf-4f7d-b9a6-b5aae0960800","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-03-27T13:06:02+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"p":"594e6b26-7310-4d00-aad9-2a577ccab542","previous":{"v":"8d6493d47b4acc61"},"stamps":[],"t":1774616762378,"v":"dac0301361b9a621"},{"a":["apps","d4581623-f542-4ade-86be-8b3ecec56f0e","5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2022-03-09T09:29:27+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1646818167679,"data":{"applies":"","controller":"","css":"","name":"Keeptrack Button","packages":[],"template":"<button\n  class=\"p2 rounded-lg py-3 px-5 bg-primary-200 text-primary-900 hover:bg-primary-300 hover:shadow-sm shadow-primary-500 focus:outline-none focus:ring focus:ring-primary-200 gap-2 flex justify-center items-center cursor-pointer disabled:opacity-75 disabled:bg-primary-200 disabled:cursor-not-allowed\"\n  :class=\"params.classes\"\n  :disabled=\"params.disabled\"\n  @click.stop=\"$emit('selected')\"\n>\n  <svg\n    v-if=\"params.icon === 'custom-nfc'\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    fill=\"#000000\"\n    viewBox=\"0 0 50 50\"\n    width=\"50px\"\n    height=\"50px\"\n  >\n    <path\n      d=\"M 17.921875 2 L 16.861328 2.1503906 C 9.5223281 3.2003906 4 9.4696875 4 16.929688 C 4 20.439687 5.2400781 23.749375 7.3300781 26.359375 C 9.4200781 28.979375 12.359297 30.900391 15.779297 31.650391 C 16.829297 31.880391 17.91 32 19 32 C 19.98 32 20.939375 31.910703 21.859375 31.720703 L 21.310547 29.789062 L 20.75 27.859375 C 20.18 27.949375 19.59 28 19 28 C 17.49 28 16.020391 27.699141 14.650391 27.119141 C 12.630391 26.259141 10.970547 24.839375 9.8105469 23.109375 C 8.6505469 21.369375 8 19.300859 8 17.130859 C 8 12.700859 10.672266 8.8909375 14.822266 7.2109375 L 15.431641 6.9707031 L 15.902344 7.4296875 C 16.732344 8.2396875 17.822188 8.6796875 18.992188 8.6796875 C 20.162188 8.6796875 21.252031 8.2396875 22.082031 7.4296875 L 22.542969 6.9707031 L 23.152344 7.2109375 C 24.992344 7.9509375 26.550937 9.0004687 27.710938 10.480469 L 29.910156 9.8496094 L 31.910156 9.2792969 C 29.650156 5.4492969 25.741094 2.8103906 21.121094 2.1503906 L 20.0625 2 L 19.992188 3.0703125 C 19.952188 3.6003125 19.512187 4.0097656 18.992188 4.0097656 C 18.472188 4.0097656 18.032187 3.6003125 17.992188 3.0703125 L 17.921875 2 z M 15.029297 9.1699219 C 11.959297 10.659922 10 13.720859 10 17.130859 C 10 20.670859 12.129687 23.869297 15.429688 25.279297 C 16.559688 25.759297 17.76 26 19 26 C 19.41 26 19.809219 25.969922 20.199219 25.919922 L 18.060547 18.5 C 17.290547 15.84 18.83 13.039531 21.5 12.269531 L 25.589844 11.089844 C 24.849844 10.309844 23.970703 9.6599219 22.970703 9.1699219 C 21.850703 10.059922 20.46 10.539062 19 10.539062 C 17.54 10.539062 16.149297 10.059922 15.029297 9.1699219 z M 36.044922 10.058594 C 35.843984 10.074043 35.640703 10.110469 35.439453 10.167969 L 22.050781 14.027344 C 20.450781 14.487344 19.510469 16.167344 19.980469 17.777344 L 26.560547 40.810547 L 27.710938 44.810547 C 27.930937 45.590547 28.450156 46.230859 29.160156 46.630859 C 29.610156 46.880859 30.109141 47.009766 30.619141 47.009766 C 30.899141 47.009766 31.180938 46.970625 31.460938 46.890625 L 44.849609 43.029297 C 45.629609 42.809297 46.279922 42.290078 46.669922 41.580078 C 47.059922 40.880078 47.149687 40.059297 46.929688 39.279297 L 45.779297 35.300781 L 45.779297 35.269531 L 39.199219 12.246094 C 38.787969 10.837344 37.451484 9.9504492 36.044922 10.058594 z M 38.169922 15.886719 L 43.580078 34.869141 L 28.199219 39.289062 L 22.789062 20.316406 L 38.169922 15.886719 z M 39.064453 39.474609 C 39.450234 39.519141 39.790156 39.791953 39.910156 40.189453 C 40.060156 40.719453 39.750703 41.279687 39.220703 41.429688 L 35.380859 42.539062 C 35.290859 42.559063 35.189609 42.570312 35.099609 42.570312 C 34.669609 42.570312 34.270625 42.289609 34.140625 41.849609 C 33.990625 41.319609 34.290078 40.769375 34.830078 40.609375 L 38.669922 39.509766 C 38.802422 39.469766 38.935859 39.459766 39.064453 39.474609 z\"\n    />\n  </svg>\n  <ae-icon v-else-if=\"params.icon\" :class=\"params.icon\"></ae-icon>\n  {{ params.text }}\n</button>\n"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"a2cd7699-9b46-494f-8f89-cb1f62151d82","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-08-06T12:27:05+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5","previous":{"v":"043ec7b35a992636"},"stamps":[],"t":1754483225313,"v":"105b0fab745e4785"},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","594e6b26-7310-4d00-aad9-2a577ccab542"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2025-08-06T15:38:21+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1754494711130,"data":{"applies":"","controller":"","css":"","name":"Keeptrack Button","packages":[],"template":"<button\n  class=\"w-full rounded-lg py-3 px-5 bg-primary-200 text-primary-900 hover:bg-primary-300 hover:shadow-sm shadow-primary-500 focus:outline-none focus:ring focus:ring-primary-200 gap-2 flex justify-center items-center cursor-pointer disabled:opacity-75 disabled:bg-primary-200 disabled:cursor-not-allowed\"\n  :class=\"params.classes\"\n  :disabled=\"params.disabled\"\n  @click.stop=\"$emit('selected', $event)\"\n  :title=\"params.title\"\n>\n  <svg\n    v-if=\"params.icon === 'custom-nfc'\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    fill=\"#000000\"\n    viewBox=\"0 0 50 50\"\n    width=\"50px\"\n    height=\"50px\"\n  >\n    <path\n      d=\"M 17.921875 2 L 16.861328 2.1503906 C 9.5223281 3.2003906 4 9.4696875 4 16.929688 C 4 20.439687 5.2400781 23.749375 7.3300781 26.359375 C 9.4200781 28.979375 12.359297 30.900391 15.779297 31.650391 C 16.829297 31.880391 17.91 32 19 32 C 19.98 32 20.939375 31.910703 21.859375 31.720703 L 21.310547 29.789062 L 20.75 27.859375 C 20.18 27.949375 19.59 28 19 28 C 17.49 28 16.020391 27.699141 14.650391 27.119141 C 12.630391 26.259141 10.970547 24.839375 9.8105469 23.109375 C 8.6505469 21.369375 8 19.300859 8 17.130859 C 8 12.700859 10.672266 8.8909375 14.822266 7.2109375 L 15.431641 6.9707031 L 15.902344 7.4296875 C 16.732344 8.2396875 17.822188 8.6796875 18.992188 8.6796875 C 20.162188 8.6796875 21.252031 8.2396875 22.082031 7.4296875 L 22.542969 6.9707031 L 23.152344 7.2109375 C 24.992344 7.9509375 26.550937 9.0004687 27.710938 10.480469 L 29.910156 9.8496094 L 31.910156 9.2792969 C 29.650156 5.4492969 25.741094 2.8103906 21.121094 2.1503906 L 20.0625 2 L 19.992188 3.0703125 C 19.952188 3.6003125 19.512187 4.0097656 18.992188 4.0097656 C 18.472188 4.0097656 18.032187 3.6003125 17.992188 3.0703125 L 17.921875 2 z M 15.029297 9.1699219 C 11.959297 10.659922 10 13.720859 10 17.130859 C 10 20.670859 12.129687 23.869297 15.429688 25.279297 C 16.559688 25.759297 17.76 26 19 26 C 19.41 26 19.809219 25.969922 20.199219 25.919922 L 18.060547 18.5 C 17.290547 15.84 18.83 13.039531 21.5 12.269531 L 25.589844 11.089844 C 24.849844 10.309844 23.970703 9.6599219 22.970703 9.1699219 C 21.850703 10.059922 20.46 10.539062 19 10.539062 C 17.54 10.539062 16.149297 10.059922 15.029297 9.1699219 z M 36.044922 10.058594 C 35.843984 10.074043 35.640703 10.110469 35.439453 10.167969 L 22.050781 14.027344 C 20.450781 14.487344 19.510469 16.167344 19.980469 17.777344 L 26.560547 40.810547 L 27.710938 44.810547 C 27.930937 45.590547 28.450156 46.230859 29.160156 46.630859 C 29.610156 46.880859 30.109141 47.009766 30.619141 47.009766 C 30.899141 47.009766 31.180938 46.970625 31.460938 46.890625 L 44.849609 43.029297 C 45.629609 42.809297 46.279922 42.290078 46.669922 41.580078 C 47.059922 40.880078 47.149687 40.059297 46.929688 39.279297 L 45.779297 35.300781 L 45.779297 35.269531 L 39.199219 12.246094 C 38.787969 10.837344 37.451484 9.9504492 36.044922 10.058594 z M 38.169922 15.886719 L 43.580078 34.869141 L 28.199219 39.289062 L 22.789062 20.316406 L 38.169922 15.886719 z M 39.064453 39.474609 C 39.450234 39.519141 39.790156 39.791953 39.910156 40.189453 C 40.060156 40.719453 39.750703 41.279687 39.220703 41.429688 L 35.380859 42.539062 C 35.290859 42.559063 35.189609 42.570312 35.099609 42.570312 C 34.669609 42.570312 34.270625 42.289609 34.140625 41.849609 C 33.990625 41.319609 34.290078 40.769375 34.830078 40.609375 L 38.669922 39.509766 C 38.802422 39.469766 38.935859 39.459766 39.064453 39.474609 z\"\n    />\n  </svg>\n  <ae-icon class=\"\" v-else-if=\"params.icon\" :class=\"params.icon\"></ae-icon>\n  {{ params.text  }}\n</button>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"f6bdd129-3852-4bac-9375-559b929486bc","inheritedLocks":[null,null,null,null],"locks":[],"meta":{},"modified":{"at":"2026-02-27T15:50:39+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"594e6b26-7310-4d00-aad9-2a577ccab542","previous":{"v":"9ee6e8c2c959b77e"},"stamps":[],"t":1772207439587,"v":"207c9c672d089538"},{"id":"13f79e1b-ca79-4e86-93b9-57201ef8b11a","v":"abb078c919d89f05","previous":{"v":"initial"},"p":"5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Keeptrack Footer Layout","applies":"","packages":[],"template":"<footer class=\"w-full p-4 bg-white flex items-center gap-4 shadow-inner text-sm\">\n    <span> \n    Copyright © 2022 - Exapris GmbH\n    </span>\n\n    <div class=\"flex-1\"></div>\n\n    <template v-if=\"Aeppic.Device === 'Phone'\">\n      <a class=\"px-2\" href=\"mailto:info@exapris.de\" target=\"_blank\">\n        <span>\n          <ae-icon class=\"fa fa-envelope\"></ae-icon>\n        </span>\n      </a>\n\n      <a class=\"px-2\" href=\"tel:+4961369941910\" target=\"_blank\">\n        <span>\n          <ae-icon class=\"fa fa-phone\"></ae-icon>\n        </span>\n      </a>\n    </template>\n    <template v-else>\n      <span>\n        <ae-icon class=\"fa fa-envelope\"></ae-icon>\n          info@exapris.de\n      </span>\n      <span>\n        <ae-icon class=\"fa fa-phone\"></ae-icon>\n        +49 6136 994 191 0\n      </span>\n    </template>\n</footer> ","css":"","controller":""},"locks":[],"created":{"at":"2022-04-26T12:29:24+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-04-26T12:29:40+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1650976180946,"ct":1650976164847,"a_depth":3,"a":["apps","d4581623-f542-4ade-86be-8b3ecec56f0e","5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"4817b42f-4680-40b7-8319-64b802e0c063","v":"7a315f18cc5146ae","p":"594e6b26-7310-4d00-aad9-2a577ccab542","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Keeptrack Footer Layout","applies":"","template":"<footer class=\"w-full p-4 bg-white flex items-center gap-4 shadow-inner text-sm\">\n    <span> \n    Copyright © 2022 - Exapris GmbH\n    </span>\n\n    <div class=\"flex-1\"></div>\n\n    <template v-if=\"Aeppic.Device === 'Phone'\">\n      <a class=\"px-2\" href=\"mailto:info@exapris.de\" target=\"_blank\">\n        <span>\n          <ae-icon class=\"fa fa-envelope\"></ae-icon>\n        </span>\n      </a>\n\n      <a class=\"px-2\" href=\"tel:+4961369941910\" target=\"_blank\">\n        <span>\n          <ae-icon class=\"fa fa-phone\"></ae-icon>\n        </span>\n      </a>\n    </template>\n    <template v-else>\n      <span>\n        <ae-icon class=\"fa fa-envelope\"></ae-icon>\n          info@exapris.de\n      </span>\n      <span>\n        <ae-icon class=\"fa fa-phone\"></ae-icon>\n        +49 6136 994 191 0\n      </span>\n    </template>\n</footer> ","css":"","controller":"","packages":[]},"locks":[],"created":{"at":"2025-08-06T15:38:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2025-08-06T15:38:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1754494711130,"ct":1754494711130,"a_depth":3,"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","594e6b26-7310-4d00-aad9-2a577ccab542"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"previous":{"v":"initial","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"}},"meta":{"modified":{"at":"2025-08-06T15:38:31+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"id":"c3813f58-e560-46d2-9764-214968641ef6","v":"623ef71dede211cf","cloneOf":{"id":"5090a8cb-f75c-4bc7-a9b9-795e759b812c","v":"c476632ae797d99e","text":"Benachrichtigungen"},"originalCloneOf":{"id":"5090a8cb-f75c-4bc7-a9b9-795e759b812c","v":"c476632ae797d99e","text":"Benachrichtigungen"},"previous":{"v":"6f5f3e98fb36da41"},"p":"d3d08873-80a4-471b-b999-eadf1f28c038","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Kürzlich geöffnet","applies":"","packages":[],"template":"<div class=\"_CSS-card\" v-if=\"!controller.isGroupAccount\">\n\n  <div class=\"_CSS-header\">\n    Kürzlich geöffnet\n  </div>\n\n  <ae-list  :documents=\"locals.recentDocuments.slice(0,5)\"\n              class=\"_CSS-list\"\n            list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n\n            param-design=\"search-card\"\n            @selected=\"Aeppic.navigateTo($event)\"\n  ></ae-list>\n\n</div>","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n  width: 400px;\n}\n\n._CSS-card {\n  background: var(--ae-ui-card-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-header {\n  padding: 10px;\n  font-size: 1.2em;\n}\n\n._CSS-list {\n  padding: 10px;\n  background: var(--ae-background-100);\n  border-radius: 0 0 var(--ae-border-radius) var(--ae-border-radius);\n}","controller":"class Controller {\n  async init() {\n    locals.recentDocuments = []\n\n    Aeppic.subscribe(`p:${params.userId} f.id:0a8dbc2a-384e-457b-ab48-57013109ba44`, (documents) => {\n      this.watcher && this.watcher.stop()\n\n      if (!documents[0]) {\n        locals.recentDocuments = []\n        return\n      }\n\n      this.watcher = Aeppic.watch(documents[0], (recentDocumentsDocument) => {\n        locals.recentDocuments = recentDocumentsDocument.data.documents\n      })\n    })\n  }\n\n  get isGroupAccount() {\n    return Aeppic.Account && Aeppic.Account.data.isGroupAccount === true\n  }\n}\n\n"},"locks":[],"created":{"at":"2018-12-03T16:10:56+00:00","by":"c5ed555f-cc11-463b-960b-0a60b3118e69","from":"","client":"server"},"modified":{"at":"2019-05-03T13:06:33+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1556888793799,"ct":1543853456292,"a_depth":3,"a":["apps","43f84041-0fd7-4ccb-b7b5-7a38f89ada37","d3d08873-80a4-471b-b999-eadf1f28c038"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"f46659ee-b6b2-4be0-adab-15fe8a690f93","v":"82eb82a4acbd4cc4","previous":{"v":"initial"},"p":"c7886010-d818-4786-bdd4-c312eb4e6e37","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"Label Button","applies":"","packages":[],"template":"<template v-if=\"locals.enabled\">\n  <div v-if=\"controller.activeStamp\">\n    <button :disabled=\"params.readonly\" class=\"ae-button\" ref=\"button\" @click.stop=\"controller.show($event)\">\n      <ae-design name=\"icon\" :document-id=\"controller.activeStamp.type.id\"></ae-design>\n    </button>\n  </div>\n\n  <button v-else :disabled=\"params.readonly\" class=\"ae-button\" ref=\"button\" @click.stop=\"controller.show($event)\">\n    <ae-icon class=\"fa fa-tags\"></ae-icon>\n  </button>\n\n\n  <ae-popup ref=\"popup\" placement=\"bottom-start\">\n    <template slot=\"popup\" slot-scope=\"popup\">\n      <div class=\"_CSS-popup\" :style=\"{ 'min-width': popup.baseWidth * 2 +'px' }\" @click.stop>\n        <div class=\"_CSS-stamp\" :style=\"{ 'background-color': label.data.namedIconColor }\" v-for=\"label of locals.labels\" @click.stop=\"controller.labelAs(label)\">\n          <span class=\"_CSS-stamp__label\">{{ label.data.name }}</span>\n          <ae-icon v-if=\"controller.activeStamp && controller.activeStamp.type.id === label.id\" class=\"fa fa-check\"></ae-icon>\n          <ae-icon v-else class=\"fa\"></ae-icon>\n        </div>\n        <div>\n        </div>\n      </div>\n    </template>\n  </ae-popup> \n</template>\n","css":"._CSS {\n  display: flex;\n  align-items: center;\n}\n\n._CSS-popup {\n  padding: var(--ae-size-2) 0;\n  background-color: var(--ae-ui-background);\n  box-shadow: var(--ae-shadow-2);\n  transition: opacity .15s, visibility 1s;\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-stamp {\n  color: var(--ae-background-100);\n  padding: var(--ae-size-1);\n}\n\n._CSS-stamp__label {\n  margin-right: var(--ae-size-4);\n}\n","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      LabelsFolder: '26b8297d-a71f-4e9d-96dc-69fdb3562d00',\n      UnlabelLabel: '289b157e-645f-4cbe-a5ec-4eac51c9d196'\n    }\n    this.IDS = {\n      LabelWorkflow: '7bfb45dd-a7a6-4de5-9001-ca3e6e6eb12d',\n    }\n\n    locals.enabled = false\n\n    locals.workflowRef = null\n    locals.labels = []\n\n    const company = await Aeppic.get(params.document.a[0])\n    locals.enabled = await Aeppic.Preferences.getSettingForDocument('apps:395b74e1-4675-4df1-b059-604e297c2954:enabled', company)\n  }\n\n  async labelAs(label) {\n    if (this.activeStamp && this.activeStamp.type.id === label.id) {\n      await this.unlabel()\n      return\n    }\n\n    await Aeppic.stamp(params.document, label, {\n      workflow: locals.workflowRef\n    })\n\n    this.close()\n  }\n\n  async unlabel() {\n    await Aeppic.stamp(params.document, this.FORMS.UnlabelLabel, {\n      workflow: locals.workflowRef\n    })\n\n    this.close()\n  }\n\n  async show(event) {\n    locals.workflowRef = await Aeppic.asReference(this.IDS.LabelWorkflow)\n    locals.labels = await Aeppic.find(`a:${params.document.a[0]} a_forms:${this.FORMS.LabelsFolder} f.id:form data.tags:label`)\n    \n    $refs.popup && $refs.popup.show({ target: $refs.button })\n  }\n\n  close() {\n    $refs.popup && $refs.popup.close()\n  }\n\n  get activeStamp() {\n    return params.document.stamps && params.document.stamps.find(s => s.workflow && s.workflow.id === this.IDS.LabelWorkflow && s.type.id !== this.FORMS.UnlabelLabel)\n  }\n}\n"},"locks":[],"created":{"at":"2020-05-08T08:52:42+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2020-09-01T09:49:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1598953774265,"ct":1588927962856,"a_depth":3,"a":["apps","395b74e1-4675-4df1-b059-604e297c2954","c7886010-d818-4786-bdd4-c312eb4e6e37"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2018-08-16T09:18:28+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1534411108206,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    Aeppic.Translator.devMode = Aeppic.Account && (Aeppic.Account.data.allowDevMode || Aeppic.Account.data.isAdmin)\n\n    locals.targetLanguage = ''\n\n    Aeppic.Translator.currentLanguage = this.currentLanguage\n\n    const root = await Aeppic.get('root')\n\n    if (!root || !root.data.translations) {\n      console.warn('[translations]: Will not be able to load any translations')\n      $emit('loaded')\n      return\n    }\n\n    const translations = await Aeppic.getAll(root.data.translations)\n\n    if (!translations.length) {\n      console.warn('[translations]: No translations to load')\n      $emit('loaded')\n      return\n    }\n\n    for (const translation of translations) {\n      Aeppic.Translator.addTranslations(translation.data.translations)\n    }\n    $emit('loaded')\n  }\n\n  get currentLanguage() {\n    if (Aeppic.Account && Aeppic.Account.data.uilanguage && Aeppic.Account.data.uilanguage !== 'auto') {\n      return Aeppic.Account.data.uilanguage\n    }\n\n    return Aeppic.Translator.currentLanguage\n  }\n\n  showLanguageConfirm(languageKey) {\n    $refs.popup && $refs.popup.close()\n\n    if (!languageKey || languageKey === this.currentLanguage) {\n      return\n    }\n\n    locals.targetLanguage = languageKey\n\n    $refs.dialog.show()\n  }\n\n  async _setAccountUiLanguage(languageKey) {\n    if (!Aeppic.Account) {\n      return\n    }\n\n    if (Aeppic.Account.a[0] === 'system' || Aeppic.Account.a[0] === 'apps') {\n      return\n    }\n\n    const result = await Aeppic.Commands.execute('cda78ea7-65a9-499c-bc33-03b83bfd4f24', Aeppic.Account, {\n      languageKey\n    })\n\n    if (!result.ok) {\n      console.error('[translations]: Could not change accounts language')\n    }\n  }\n\n  async confirmLanguageSelection() {\n    if (!locals.targetLanguage) {\n      console.error('[translations]: Tried to set language but no language was selected')\n      return\n    }\n\n    $refs.dialog.close()\n\n    await this.setLanguageTo(locals.targetLanguage)\n\n    locals.targetLanguage = ''\n  }\n\n  async setLanguageTo(targetLanguage) {\n    Aeppic.Translator.currentLanguage = targetLanguage\n\n    await this._setAccountUiLanguage(targetLanguage)\n\n    $emit('language-change')\n  }\n}\n","css":"._CSS-flag {\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n  padding: 2px 8px;\n}\n\n._CSS-flag:hover {\n  background: rgba(0,0,0,0.2)\n}\n\n._CSS-flag__checkmark {\n  margin-right: 1em;\n}\n\n._CSS-popup {\n  background: var(--ae-background);\n  border: 1px solid var(--ae-ui-element-border-color);\n  box-shadow: 4px 2px 16px 3px #00000012;\n}\n\n._CSS-dialog__commands {\n  display: flex;\n}\n\n.ae-button._CSS-button--active {\n  box-shadow: var(--ae-shadow-inset);\n  xborder: var(--ae-border-width) solid var(--ae-border-color);\n}","name":"Language Switch","packages":[],"template":"<div class=\"_CSS-inline\" v-if=\"params.inline\">\n  <button class=\"ae-button ae-button--small\" :class=\"{ '_CSS-button--active': controller.currentLanguage.startsWith('en') }\" @click.stop=\"controller.setLanguageTo('en-us')\">\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"20\" viewBox=\"0 0 60 30\">\n      <clipPath id=\"a\">\n        <path d=\"M0 0v30h60V0z\" />\n      </clipPath>\n      <clipPath id=\"b\">\n        <path d=\"M30 15h30v15zv15H0zH0V0zV0h30z\" />\n      </clipPath>\n      <g clip-path=\"url(#a)\">\n        <path d=\"M0 0v30h60V0z\" fill=\"#012169\" />\n        <path d=\"M0 0l60 30m0-30L0 30\" stroke=\"#fff\" stroke-width=\"6\" />\n        <path d=\"M0 0l60 30m0-30L0 30\" clip-path=\"url(#b)\" stroke=\"#C8102E\" stroke-width=\"4\" />\n        <path d=\"M30 0v30M0 15h60\" stroke=\"#fff\" stroke-width=\"10\" />\n        <path d=\"M30 0v30M0 15h60\" stroke=\"#C8102E\" stroke-width=\"6\" />\n      </g>\n    </svg>\n  </button>\n  <button class=\"ae-button ae-button--small\" :class=\"{ '_CSS-button--active': controller.currentLanguage.startsWith('de') }\" @click.stop=\"controller.setLanguageTo('de-de')\">\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"20\" viewBox=\"0 0 640 480\">\n     <path fill=\"#ffce00\" d=\"M0 320h640v160H0z\"/>\n      <path d=\"M0 0h640v160H0z\"/>\n      <path fill=\"#d00\" d=\"M0 160h640v160H0z\"/>\n    </svg>\n  </button>\n</div>\n<template v-else>\n  <button class=\"ae-button\" @click.stop=\"$refs.popup.toggle($event)\">\n    <ae-icon class=\"fa fa-language\"></ae-icon> {{ Aeppic.translate('language') }}\n  </button>\n\n  <ae-popup ref=\"popup\">\n    <div slot=\"popup\" slot-scope=\"scope\" class=\"_CSS-popup\" :style=\"{ 'min-width': scope.baseWidth * 2 +'px' }\">\n      <div @click=\"controller.showLanguageConfirm('de-de')\" class=\"_CSS-flag\">\n        <ae-icon v-if=\"controller.currentLanguage.startsWith('de')\" class=\"fa fa-check _CSS-flag__checkmark\"></ae-icon>\n\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"20\" viewBox=\"0 0 640 480\">\n          <path fill=\"#ffce00\" d=\"M0 320h640v160H0z\"/>\n          <path d=\"M0 0h640v160H0z\"/>\n          <path fill=\"#d00\" d=\"M0 160h640v160H0z\"/>\n        </svg>\n\n      </div>\n\n\n      <div @click=\"controller.showLanguageConfirm('en-us')\" class=\"_CSS-flag\">\n        <ae-icon v-if=\"controller.currentLanguage.startsWith('en')\" class=\"fa fa-check _CSS-flag__checkmark\"></ae-icon>\n\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"20\" viewBox=\"0 0 640 480\">\n          <g fill-rule=\"evenodd\">\n            <g stroke-width=\"1pt\">\n              <path fill=\"#bd3d44\" d=\"M0 0h972.8v39.4H0zm0 78.8h972.8v39.4H0zm0 78.7h972.8V197H0zm0 78.8h972.8v39.4H0zm0 78.8h972.8v39.4H0zm0 78.7h972.8v39.4H0zm0 78.8h972.8V512H0z\" transform=\"scale(.9375)\"/>\n              <path fill=\"#fff\" d=\"M0 39.4h972.8v39.4H0zm0 78.8h972.8v39.3H0zm0 78.7h972.8v39.4H0zm0 78.8h972.8v39.4H0zm0 78.8h972.8v39.4H0zm0 78.7h972.8v39.4H0z\" transform=\"scale(.9375)\"/>\n            </g>\n            <path fill=\"#192f5d\" d=\"M0 0h389.1v275.7H0z\" transform=\"scale(.9375)\"/>\n            <path fill=\"#fff\" d=\"M32.4 11.8L36 22.7h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7H29zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zm64.8 0l3.6 10.9H177l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7h11.5zm64.9 0l3.5 10.9H242l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.2-6.7h11.4zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.5zM64.9 39.4l3.5 10.9h11.5L70.6 57 74 67.9 65 61.2l-9.3 6.7L59 57 50 50.3h11.4zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 10.9-9.3-6.7-9.3 6.7L124 57l-9.3-6.7h11.5zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.7-9.3 6.7 3.5-10.9-9.2-6.7H191zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 10.9-9.3-6.7-9.2 6.7 3.5-10.9-9.3-6.7H256zm64.9 0l3.5 10.9h11.5L330 57l3.5 10.9-9.2-6.7-9.3 6.7 3.5-10.9-9.2-6.7h11.4zM32.4 66.9L36 78h11.4l-9.2 6.7 3.5 10.9-9.3-6.8-9.2 6.8 3.5-11-9.3-6.7H29zm64.9 0l3.5 11h11.5l-9.3 6.7 3.5 10.9-9.2-6.8-9.3 6.8 3.5-11-9.2-6.7h11.4zm64.8 0l3.6 11H177l-9.2 6.7 3.5 10.9-9.3-6.8-9.2 6.8 3.5-11-9.3-6.7h11.5zm64.9 0l3.5 11H242l-9.3 6.7 3.6 10.9-9.3-6.8-9.3 6.8 3.6-11-9.3-6.7h11.4zm64.8 0l3.6 11h11.4l-9.2 6.7 3.5 10.9-9.3-6.8-9.2 6.8 3.5-11-9.2-6.7h11.4zm64.9 0l3.5 11h11.5l-9.3 6.7 3.6 10.9-9.3-6.8-9.3 6.8 3.6-11-9.3-6.7h11.5zM64.9 94.5l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.5zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7H191zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7H256zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zM32.4 122.1L36 133h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7H29zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.7-9.3 6.7 3.5-10.9-9.2-6.7h11.4zm64.8 0l3.6 10.9H177l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7h11.5zm64.9 0l3.5 10.9H242l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.2-6.7h11.4zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.5zM64.9 149.7l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.8-9.3 6.8 3.5-11-9.2-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 10.9-9.3-6.8-9.3 6.8 3.6-11-9.3-6.7h11.5zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.8-9.3 6.8 3.5-11-9.2-6.7H191zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 10.9-9.3-6.8-9.2 6.8 3.5-11-9.3-6.7H256zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.8-9.3 6.8 3.5-11-9.2-6.7h11.4zM32.4 177.2l3.6 11h11.4l-9.2 6.7 3.5 10.8-9.3-6.7-9.2 6.7 3.5-10.9-9.3-6.7H29zm64.9 0l3.5 11h11.5l-9.3 6.7 3.6 10.8-9.3-6.7-9.3 6.7 3.6-10.9-9.3-6.7h11.4zm64.8 0l3.6 11H177l-9.2 6.7 3.5 10.8-9.3-6.7-9.2 6.7 3.5-10.9-9.3-6.7h11.5zm64.9 0l3.5 11H242l-9.3 6.7 3.6 10.8-9.3-6.7-9.3 6.7 3.6-10.9-9.3-6.7h11.4zm64.8 0l3.6 11h11.4l-9.2 6.7 3.5 10.8-9.3-6.7-9.2 6.7 3.5-10.9-9.2-6.7h11.4zm64.9 0l3.5 11h11.5l-9.3 6.7 3.6 10.8-9.3-6.7-9.3 6.7 3.6-10.9-9.3-6.7h11.5zM64.9 204.8l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.5zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7H191zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7H256zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zM32.4 232.4l3.6 10.9h11.4l-9.2 6.7 3.5 10.9-9.3-6.7-9.2 6.7 3.5-11-9.3-6.7H29zm64.9 0l3.5 10.9h11.5L103 250l3.6 10.9-9.3-6.7-9.3 6.7 3.6-11-9.3-6.7h11.4zm64.8 0l3.6 10.9H177L168 250l3.5 10.9-9.3-6.7-9.2 6.7 3.5-11-9.3-6.7h11.5zm64.9 0l3.5 10.9H242l-9.3 6.7 3.6 10.9-9.3-6.7-9.3 6.7 3.6-11-9.3-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 10.9-9.3-6.7-9.2 6.7 3.5-11-9.2-6.7h11.4zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.6 10.9-9.3-6.7-9.3 6.7 3.6-11-9.3-6.7h11.5z\" transform=\"scale(.9375)\"/>\n          </g>\n        </svg>\n\n      </div>\n    </div>\n  </ae-popup>\n</template>\n\n  <ae-dialog ref=\"dialog\">\n    <div slot=\"header\">\n      {{ Aeppic.translate('language:change') }}\n    </div>\n    <div slot=\"body\" slot-scope=\"slot\" class=\"_CSS-dialog__body\">\n      {{ Aeppic.translate('language:change-and-reload') }}\n      <p>\n        {{ Aeppic.translate('language:change-to') }}\n        <svg v-if=\"locals.targetLanguage.startsWith('en')\" xmlns=\"http://www.w3.org/2000/svg\" id=\"flag-icon-css-us\" width=\"24\" height=\"20\" viewBox=\"0 0 640 480\">\n          <g fill-rule=\"evenodd\">\n            <g stroke-width=\"1pt\">\n              <path fill=\"#bd3d44\" d=\"M0 0h972.8v39.4H0zm0 78.8h972.8v39.4H0zm0 78.7h972.8V197H0zm0 78.8h972.8v39.4H0zm0 78.8h972.8v39.4H0zm0 78.7h972.8v39.4H0zm0 78.8h972.8V512H0z\" transform=\"scale(.9375)\"/>\n              <path fill=\"#fff\" d=\"M0 39.4h972.8v39.4H0zm0 78.8h972.8v39.3H0zm0 78.7h972.8v39.4H0zm0 78.8h972.8v39.4H0zm0 78.8h972.8v39.4H0zm0 78.7h972.8v39.4H0z\" transform=\"scale(.9375)\"/>\n            </g>\n            <path fill=\"#192f5d\" d=\"M0 0h389.1v275.7H0z\" transform=\"scale(.9375)\"/>\n            <path fill=\"#fff\" d=\"M32.4 11.8L36 22.7h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7H29zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zm64.8 0l3.6 10.9H177l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7h11.5zm64.9 0l3.5 10.9H242l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.2-6.7h11.4zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.5zM64.9 39.4l3.5 10.9h11.5L70.6 57 74 67.9 65 61.2l-9.3 6.7L59 57 50 50.3h11.4zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 10.9-9.3-6.7-9.3 6.7L124 57l-9.3-6.7h11.5zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.7-9.3 6.7 3.5-10.9-9.2-6.7H191zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 10.9-9.3-6.7-9.2 6.7 3.5-10.9-9.3-6.7H256zm64.9 0l3.5 10.9h11.5L330 57l3.5 10.9-9.2-6.7-9.3 6.7 3.5-10.9-9.2-6.7h11.4zM32.4 66.9L36 78h11.4l-9.2 6.7 3.5 10.9-9.3-6.8-9.2 6.8 3.5-11-9.3-6.7H29zm64.9 0l3.5 11h11.5l-9.3 6.7 3.5 10.9-9.2-6.8-9.3 6.8 3.5-11-9.2-6.7h11.4zm64.8 0l3.6 11H177l-9.2 6.7 3.5 10.9-9.3-6.8-9.2 6.8 3.5-11-9.3-6.7h11.5zm64.9 0l3.5 11H242l-9.3 6.7 3.6 10.9-9.3-6.8-9.3 6.8 3.6-11-9.3-6.7h11.4zm64.8 0l3.6 11h11.4l-9.2 6.7 3.5 10.9-9.3-6.8-9.2 6.8 3.5-11-9.2-6.7h11.4zm64.9 0l3.5 11h11.5l-9.3 6.7 3.6 10.9-9.3-6.8-9.3 6.8 3.6-11-9.3-6.7h11.5zM64.9 94.5l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.5zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7H191zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7H256zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zM32.4 122.1L36 133h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7H29zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.7-9.3 6.7 3.5-10.9-9.2-6.7h11.4zm64.8 0l3.6 10.9H177l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7h11.5zm64.9 0l3.5 10.9H242l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.2-6.7h11.4zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.5zM64.9 149.7l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.8-9.3 6.8 3.5-11-9.2-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 10.9-9.3-6.8-9.3 6.8 3.6-11-9.3-6.7h11.5zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.8-9.3 6.8 3.5-11-9.2-6.7H191zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 10.9-9.3-6.8-9.2 6.8 3.5-11-9.3-6.7H256zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 10.9-9.2-6.8-9.3 6.8 3.5-11-9.2-6.7h11.4zM32.4 177.2l3.6 11h11.4l-9.2 6.7 3.5 10.8-9.3-6.7-9.2 6.7 3.5-10.9-9.3-6.7H29zm64.9 0l3.5 11h11.5l-9.3 6.7 3.6 10.8-9.3-6.7-9.3 6.7 3.6-10.9-9.3-6.7h11.4zm64.8 0l3.6 11H177l-9.2 6.7 3.5 10.8-9.3-6.7-9.2 6.7 3.5-10.9-9.3-6.7h11.5zm64.9 0l3.5 11H242l-9.3 6.7 3.6 10.8-9.3-6.7-9.3 6.7 3.6-10.9-9.3-6.7h11.4zm64.8 0l3.6 11h11.4l-9.2 6.7 3.5 10.8-9.3-6.7-9.2 6.7 3.5-10.9-9.2-6.7h11.4zm64.9 0l3.5 11h11.5l-9.3 6.7 3.6 10.8-9.3-6.7-9.3 6.7 3.6-10.9-9.3-6.7h11.5zM64.9 204.8l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.3 6.7 3.6 11-9.3-6.8-9.3 6.7 3.6-10.9-9.3-6.7h11.5zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7H191zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 11-9.3-6.8-9.2 6.7 3.5-10.9-9.3-6.7H256zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.5 11-9.2-6.8-9.3 6.7 3.5-10.9-9.2-6.7h11.4zM32.4 232.4l3.6 10.9h11.4l-9.2 6.7 3.5 10.9-9.3-6.7-9.2 6.7 3.5-11-9.3-6.7H29zm64.9 0l3.5 10.9h11.5L103 250l3.6 10.9-9.3-6.7-9.3 6.7 3.6-11-9.3-6.7h11.4zm64.8 0l3.6 10.9H177L168 250l3.5 10.9-9.3-6.7-9.2 6.7 3.5-11-9.3-6.7h11.5zm64.9 0l3.5 10.9H242l-9.3 6.7 3.6 10.9-9.3-6.7-9.3 6.7 3.6-11-9.3-6.7h11.4zm64.8 0l3.6 10.9h11.4l-9.2 6.7 3.5 10.9-9.3-6.7-9.2 6.7 3.5-11-9.2-6.7h11.4zm64.9 0l3.5 10.9h11.5l-9.3 6.7 3.6 10.9-9.3-6.7-9.3 6.7 3.6-11-9.3-6.7h11.5z\" transform=\"scale(.9375)\"/>\n          </g>\n        </svg>\n        <svg v-if=\"locals.targetLanguage.startsWith('de')\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"20\" viewBox=\"0 0 640 480\">\n          <path fill=\"#ffce00\" d=\"M0 320h640v160H0z\"/>\n          <path d=\"M0 0h640v160H0z\"/>\n          <path fill=\"#d00\" d=\"M0 160h640v160H0z\"/>\n        </svg>\n        ({{ Aeppic.translate(locals.targetLanguage) }})\n      </p>\n    </div>\n    <div slot=\"commands\" slot-scope=\"scope\" class=\"_CSS-dialog__commands\">\n      <div class=\"ae-button\" @click=\"scope.close()\"> {{ Aeppic.translate('abort') }}</div>\n      <div class=\"ae-button ae-button--primary\" @click=\"controller.confirmLanguageSelection()\">\n        {{ Aeppic.translate('language:change:confirm') }}\n      </div>\n    </div>\n  </ae-dialog> "},"f":{"id":"layout-form","text":"Layout","v":"dc3356051e0928cf"},"id":"7a66c0bd-aaa4-406d-80da-0b0d5a6ee330","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-02-21T12:39:08+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"9f9b8d05549fbfe7"},"stamps":[],"t":1740141548297,"v":"9f077a3ae990ff21"},{"id":"b2b99ee1-c14c-4186-a2f3-e1316f765f94","v":"initial","p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Language Switch (dbps hardcoded)","applies":"","packages":[],"template":"\n<!-- TODO: remove param-company-id since it is not needed anymore -->\n<!-- TODO: because of this, one can delete this wrapper and directly include language switch in all places -->\n\n<ae-layout layout-id=\"7a66c0bd-aaa4-406d-80da-0b0d5a6ee330\"\n@language-change=\"$emit('language-change', $event)\"\nparam-company-id=\"f0f8cb82-e014-4edb-bede-ad11a17ecfb6\"></ae-layout>","css":"","controller":""},"locks":[],"created":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583893986,"ct":1602583893986,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"5bc11b18-5c5a-49f2-a874-a755c4e90698","v":"8ddd76b18c8e0613","previous":{"v":"2765a2868396b714"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Laufliste Download Button","applies":"","packages":[],"template":"<!-- <div class=\"dbps-button _CSS-container\" ref=\"listDownload\" @click.stop=\"$refs.popupDownload.$emit('show', { target: $refs.listDownload })\"> -->\n<div class=\"ae-noselect dbps-button _CSS-container\" ref=\"listDownload\" @click.stop=\"controller.download()\">\n  <ae-icon class=\"fa fa-list\"></ae-icon>\n  <div>Laufliste</div>\n  <ae-icon class=\"fa fa-download\"></ae-icon>\n</div>\n\n<!-- <ae-layout  layout-id=\"066b41f7-036f-422c-9afc-4c3015ddc4b4\"\n            param-list-id=\"bbdc944e-2695-43cf-9068-c7fad4884e1d\"\n            :param-documents=\"['all', 1, 2, 3]\"\n            ref=\"popupDownload\"\n            @selected=\"controller.downloadModels($event)\"\n></ae-layout> -->\n","css":"._CSS-container {\n  display: inline-flex;\n  flex-flow: column;\n}","controller":"  download() {\n    console.log('download the laufliste')\n  }"},"locks":[],"created":{"at":"2018-06-20T17:46:11+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2018-06-20T17:48:24+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"from":"","client":"server"},"t":1529516904813,"ct":1529516771911,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"d9ac7381-bec7-498d-ab29-7f24b5a30fe9","v":"56adfd50fecc2f9b","previous":{"v":"033d1afab226adde"},"p":"5152f88f-3006-46f9-959a-423139accf79","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"Layout Attachment Download","applies":"","packages":[],"template":"\n<ae-control name=\"attachment\"\n            v-if=\"locals.form\"\n            :document=\"params.document\"\n            field-name=\"anhaenge\"\n            :params=\"{ ...locals.form.getFieldControlParams('anhaenge'), ...params }\"\n            :param-show-download=\"true\"\n></ae-control>","css":"","controller":"class Controller {\n  async init() {\n    locals.form = null\n    locals.form = await Aeppic.getFormForDocument(params.document)\n    \n    watchParam('document', async (doc) => locals.form = await Aeppic.getFormForDocument(doc))\n  }\n}"},"locks":[],"created":{"at":"2021-06-28T13:32:45+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2021-06-28T13:58:18+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1624888698939,"ct":1624887165832,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","5152f88f-3006-46f9-959a-423139accf79"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"fefaeb0f-65d1-48cc-9148-d74dc7bd3afc","v":"79efeda32840df61","previous":{"v":"9e277f00c160a8cf"},"p":"9bad9050-10a9-42d2-9ac6-64c532dd4198","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Legende","applies":"","packages":[],"template":"<button class=\"ae-button\" @click.stop=\"$refs.popup.show($event)\">\n  <ae-icon class=\"fa fa-info\"></ae-icon> Legende\n</button>\n\n<ae-popup ref=\"popup\">\n  <div class=\"p-2 flex flex-col gap-2\">\n    <div class=\"flex gap-1 items-center\" v-for=\"color of locals.colors\">\n      <div class=\"w-4 h-4 rounded-lg\" :class=\"['bg-' + color.color ]\"></div>\n      {{ color.name }}\n    </div>\n  </div>  \n</ae-popup>\n","css":"","controller":"class Controller {\n  async init() {\n    locals.colors = []\n    locals.colors = (\n      await Aeppic.Actions.run(['27a207ee-3162-4d0a-947b-3f017855579b'], { params: { info: true } })\n    )[0]?.value\n  }\n}\n"},"locks":[],"created":{"at":"2022-08-18T12:21:02+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-08-18T12:49:35+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1660826975205,"ct":1660825262297,"a_depth":3,"a":["apps","86189c5a-b9f4-445a-879f-d94574960df0","9bad9050-10a9-42d2-9ac6-64c532dd4198"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"bb8ff784-7b41-4853-93b1-82f40d5b7dc7","v":"c84187bcdddc26e0","previous":{"v":"0e10bef228a03afc"},"p":"c6349b48-9561-4c06-9200-fe9df9b6fb3e","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Limited Access Form Layout","applies":"","packages":[],"template":"\n<label class=\"ae-form-cell__label\">\n{{ params.form.getPlaceholder('dateienBerechnung').label }}  \n</label> \n\n<ae-control :document=\"params.document\" name=\"attachment\" field-name=\"dateienBerechnung\" :params=\"params.form.getFieldControlParams('dateienBerechnung')\"></ae-control>\n ","css":"","controller":""},"locks":[],"created":{"at":"2022-05-19T13:07:38+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-05-19T13:27:35+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1652966855374,"ct":1652965658478,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","c6349b48-9561-4c06-9200-fe9df9b6fb3e"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"73bda69b-6e1c-415f-bb46-3613e6aa6e3f","v":"66c7dbd2786e216f","previous":{"v":"6f2b9da120b3b2fb"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Link Sharing Layout","applies":"","packages":[],"template":"\n<ae-design v-for=\"share of locals.shares\" v-if=\"share\" name=\"model-ageny:card,card,title\" :document=\"share\" :param-readonly=\"params.readonly\" :param-share-prefix=\"params.sharePrefix\"></ae-design>\n<!-- <div v-if=\"!locals.shares.length\">{{ params.labelNoShares || \"Keine Einladungslinks erstellt.\" }}</div> -->\n\n<button class=\"ae-button ae-button--secondary\" @click=\"$refs.dialog.show()\" v-if=\"!params.readonly && (!params.singleShare || (params.singleShare && locals.shares.length === 0))\">\n  <ae-icon class=\"fa fa-plus\"></ae-icon>\n  &nbsp;\n  Einladung erstellen\n</button>\n\n<ae-dialog ref=\"dialog\">\n  <div slot=\"header\" slot-scope=\"slot\" class=\"_CSS-dialog__header\">\n    {{ params.labelNewShare || \"Einladungslink erstellen\" }}\n    <button class=\"bp-button bp-button-icon\" @click=\"slot.close()\">\n      <ae-icon class=\"fa fa-window-close\"></ae-icon>\n    </button>\n  </div>\n  <div slot=\"body\" class=\"_CSS-creator-container\">\n    <div>\n      <label for=\"_CSS-name\">(Interne) Bezeichnung</label><br>\n      <input id=\"_CSS-name\" type=\"text\" v-model=\"locals.newShareName\">\n    \n      <template v-if=\"params.filters\">\n        <div style=\"margin-top:0.5rem;\"></div>\n        <br>\n        <label for=\"_CSS-filter\">Film Filter</label><br>\n        <p>\n          Hier können die verfügbaren Filme für dieses Share ausgewählt werden.<br>\n          Hinweis: Es können mehrere Filme gleichzeitig ausgewählt werden.\n        </p>\n        <select id=\"_CSS-filter\" v-model=\"locals.newShareFilters\" multiple>\n          <option value=\"\">Alle Filme</option>\n          <option v-for=\"filter of params.filters\" :key=\"filter.id\" :value=\"filter\">\n            {{filter.data.name}}\n            <!-- NOTE: do not use <ae-design> within an option, it will just render the initial state -->\n            <!-- <ae-design name=\"title\" :document=\"filter\"></ae-design> -->\n          </option>\n        </select>\n        </template>\n    </div>\n    <div class=\"_CSS-button-create dbps-button\" @click=\"controller.createShare()\" >\n      <span>{{ params.labelCreateShare || \"Einladung erstellen\" }}</span>\n    </div>\n  </div>\n</ae-dialog>\n","css":"._CSS-button-create {\n  font-size: 1.1em;\n  display: inline-flex;\n  justify-content: center;\n  cursor: pointer;\n}\n\n._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n}","controller":"class Controller {\n  async init() {\n    this.sharesFolderId = '4f2ebae5-4382-4717-9a10-83dcebfe34dd'\n    this.shareFormId = '804bed89-803a-4090-8b1b-857cab8ec6dd'\n    this.shareFilterFormId = 'a1d626fd-bb29-4e7a-9d54-a13957c0a37b'\n\n    locals.newShareName = ''\n    locals.share = null\n    locals.shares = []\n    locals.newShareFilters = []\n\n    this.shareQueryString = `p:${this.sharesFolderId} f.id:${this.shareFormId} data.target.id:${params.targetId} data.targetInfo:${params.targetInfo} data.backingAccount.id:${params.backingAccountId}`\n\n    Aeppic.subscribe(this.shareQueryString, (documents) => {\n      locals.shares = documents\n    })\n  }\n \n  async createShare(name) {\n    const share = await Aeppic.new(this.shareFormId, this.sharesFolderId)\n\n    const target = await Aeppic.asReference(params.targetId)\n    const backingAccount = await Aeppic.asReference(params.backingAccountId)\n\n    const identifier = this._getIdentifier()\n\n    share.data = {\n      targetInfo: params.targetInfo,\n      target,\n      backingAccount,\n      name: locals.newShareName,\n      identifier\n    }\n\n    Aeppic.save(share)\n\n    if (locals.newShareFilters.length) {\n      const newShareFilters = locals.newShareFilters.filter(f => f !== '')\n      console.log('newShareFilters', newShareFilters)\n\n      for (const movie of newShareFilters) {\n        const filter = await Aeppic.new(this.shareFilterFormId, share.id)\n\n        filter.data.name = 'movie'\n        filter.data.query = `id:${movie.id}`\n\n        Aeppic.save(filter)\n      }\n\n      locals.newShareFilters = []\n    }\n\n    locals.newShareName = ''\n\n    $refs.dialog.close()\n  }\n\n  _getIdentifier() {\n    return encodeURIComponent(`${params.document.id}_${Date.now()}`)\n  }\n}\n"},"locks":[],"created":{"at":"2018-06-21T16:01:52+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583893993,"ct":1529596912144,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9"],"a_depth":4,"a_forms":["system-folder-form","folder","form","folder"],"created":{"at":"2025-10-07T13:54:54+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759845294240,"data":{"applies":"","controller":"","css":"","name":"List","packages":[],"template":"<section\n    class=\"bg-surface text-on-surface rounded-2xl p-4 \"\n  >\n  <h1 class=\"\">List</h1>\n  <section\n    class=\"flex justify-center\"\n  >\n    <ae-list\n      listId=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n      class=\"w-1/3 bg-surface-container-lowest p-2 rounded-md shadow-2\"\n      search=\"f.id:0deb4864-cbb6-420c-99ee-337c7444ab24 p:7463532f-e074-4dfb-84dd-c8a220b757a4\"\n      param-design=\"rd:search-card\"\n      param-gap=\"medium\"\n    ></ae-list>\n  </section>\n</section>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"d0044e2c-369d-4f35-9b4f-31dc72bd7c37","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-07T13:55:01+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"6ad6f21b-b086-4e9c-aa38-4893fd343fb9","previous":{"v":"initial"},"stamps":[],"t":1759845301770,"v":"f7efa0544b3a70e0"},{"id":"7487988f-6580-45ce-ac84-14893a6876b2","v":"0141683e8643f105","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"List Filter","applies":"","template":"<div class=\"_CSS-bar\">\n  <section class=\"_CSS-search\"  v-if=\"!params.disableSearch\">\n    <button class=\"ae-button ae-button--small\">\n      <ae-icon class=\"fa fa-search\"></ae-icon>\n    </button>\n    <input  v-model=\"locals.search.active\" \n            @blur=\"locals.view.search = false\" \n            @input=\"() => controller.updateFilter()\"\n            style=\"width: 8rem;\"\n            type=\"text\" \n            autocomplete=\"off\"\n            class=\"border rounded p-1\"\n    >\n  </section>\n\n  <section class=\"_CSS-sort\" v-if=\"!params.disableSort\">\n    <select v-model=\"locals.sort.active.field\" @change=\"controller.updateSort()\">\n      <optgroup label=\"Sortierung\">\n          <!-- <option value=\"\" v-if=\"!params.initialSort\">Unsortiert</option> -->\n          <option v-for=\"option of locals.sort.options\"\n                  :value=\"option.field.subType === 'ref' ? 'data.' + option.field.name + '.text' : 'data.' + option.field.name\">\n              {{ Aeppic.translate(option.placeholder.label) }}</option>\n          <option value=\"created.at\">Erstelldatum</option>\n          <option value=\"modified.at\">Änderungsdatum</option>\n      </optgroup>\n    </select> \n \n    <button class=\"ae-button ae-button--small\" @click.stop=\"locals.sort.active.descending = !locals.sort.active.descending; controller.updateSort()\">\n      <ae-icon class=\"fa fa-sort-alpha-up-alt\" v-if=\"locals.sort.active.descending\"></ae-icon> \n      <ae-icon class=\"fa fa-sort-alpha-down\" v-else></ae-icon>\n\n      <!-- <button :disabled=\"!locals.sort.field\" class=\"ae-button\" v-show=\"locals.sort.descending\" @click.stop=\"locals.sort.descending = false;controller.updateSort()\" title=\"Absteigend\" style=\"cursor:pointer\">\n          <ae-icon class=\"fa fa-sort-amount-down\"></ae-icon>\n      </button>\n      <button :disabled=\"!locals.sort.field\" class=\"ae-button \" v-show=\"!locals.sort.descending\" @click.stop=\"locals.sort.descending = true;controller.updateSort()\" title=\"Aufsteigend\" style=\"cursor:pointer\">\n          <ae-icon class=\"fa fa-sort-amount-up\"></ae-icon>\n      </button> -->\n    </button>\n  </section>\n\n  <section v-if=\"params.additionalFilterLayoutId\">\n    <ae-layout :layout-id=\"params.additionalFilterLayoutId\"\n                :param-document=\"params.listDocument\"\n    ></ae-layout>\n  </section>\n\n  <section class=\"_CSS-filters\" v-if=\"!params.disableFilter && locals.filters.options.length\">\n    <button class=\"ae-button ae-button--small\" \n            v-if=\"!params.disableFilters\"\n            ref=\"box\"\n            :class=\"{ '_CSS-filter-button--active': locals.filters.active.length }\"\n    >\n      <template v-if=\"locals.filters.active.length\">\n        <ae-icon  class=\"fa fa-funnel-dollar\"></ae-icon>\n        {{locals.filters.active.length}}\n      </template>\n        <ae-icon v-if=\"!locals.filters.active.length\" class=\"far fa-filter\"></ae-icon>\n    </button>\n\n    <ae-layout  layout-id=\"da851478-7787-4bd6-9530-ef868c1697ee\"\n                :param-document=\"params.document\"\n                :param-options=\"locals.filters.options\"\n                :param-active=\"locals.filters.active\"\n                @toggle=\"controller.toggleFilter($event)\"\n                @set=\"controller.setFilter($event)\"\n                @reset=\"controller.resetFilters()\"\n    ></ae-layout>\n\n    <div class=\"_CSS-popup\" ref=\"popup\" v-show=\"locals.showPopup\">\n      <ae-layout  layout-id=\"4f84e6fb-332f-4d62-b01d-17a32bd28a82\"\n                  :param-document=\"params.document\"\n                  :param-options=\"locals.filters.options\"\n                  :param-active=\"locals.filters.active\"\n                  :param-hide-path=\"true\"\n                  @toggle=\"controller.toggleFilter($event)\"\n                  @set=\"controller.setFilter($event)\"\n                  @reset=\"controller.resetFilters()\"\n      ></ae-layout>\n    </div>\n  </section>\n  \n</div>\n","css":"._CSS-bar {\n  display: flex;\n  flex-wrap: wrap;\n  padding: var(--ae-space-1);\n}\n\n._CSS-sort {\n  margin-left: var(--ae-space-3);\n  display: flex;\n  flex: 1;\n}\n\n._CSS-filters {\n  margin-left: var(--ae-space-2);\n\n  display: flex;\n  align-items: center;\n}\n\n._CSS ._CSS-filter-button--active {\n  color: var(--ae-primary);\n}\n\n\n._CSS-popup {\n  max-height: 60vh;\n  overflow: auto;\n}","controller":"class Controller {\n  async init() {\n    this.form = null\n    this.state = {\n      search: {\n        active: ''\n      },\n      sort: {\n        active: {\n          field: '',\n          descending: false\n        },\n        options: []\n      },\n      filters: {\n        active: [\n        // SELECT\n        // {\n        //   values: [{ display: 'Herr', value: 'MALE' }],\n        //   field: { #form.getField('fielName') }\n        // }\n        // SWITCH\n        ],\n        options: [],\n      }, \n    }\n\n    this._updateFilterDebounced = Aeppic.debounce(() => {\n      this.announceFilter()\n      this._persistState()\n    }, 300, this)\n\n    locals.showPopup = false\n    locals.sort = this.state.sort\n    locals.filters = this.state.filters\n    locals.search = this.state.search\n    locals.view = { \n      search: false\n    }\n\n    await this._initialize(params.listFormId)\n\n    watchParam('listFormId', async listFormId => await this._initialize(listFormId))\n  }\n\n  async _initialize(listFormId) {\n    if (!listFormId) {\n      console.error('Missing listFormId')\n      return\n    }\n\n  // try to resolve without async so the list, where this filter is included, does not render twice\n    try {\n      this.form = Aeppic.Model.getMostRecentForm(listFormId)\n    } catch (e) {\n      this.form = await Aeppic.getForm(listFormId)\n    }\n\n    if (!this.form?.id) {\n      throw new Error('Missing form id. Cannot generate storageKey')\n    }\n\n    this._updateActiveSortByInitialSort()\n\n    const sortableFields = []\n    const filterableFields = []\n\n    for (const field of this.form.fields) {\n      const filterCheck = this._fieldIsFilterable(field)\n      if (filterCheck.result) {\n        filterableFields.push(filterCheck)\n      }\n\n      const sortCheck = this._fieldIsSortable(field)\n      if (sortCheck.result) {\n        sortableFields.push(sortCheck)\n      }\n    }\n\n\n    this.state.sort.options = sortableFields\n    this.state.filters.options = filterableFields\n\n\n    this._loadPersistedState()\n\n    this.announceFilter()\n    this.announceSort()\n\n\n    if (locals.filters.options.length) {\n      await Aeppic.nextRenderPass()\n      this.tippy = Aeppic.Modules.Tippy.default($refs.box, {\n        content: $refs.popup,\n        interactive: true,\n        delay: [50, 100],\n        trigger: 'click',\n        popperOptions: {\n          modifiers: [\n            {\n              name: 'preventOverflow',\n              options: {\n                altAxis: true,\n                xtether: false,\n              },\n            },\n          ],\n        },\n      })\n\n      locals.showPopup = true\n    }\n  }\n\n  _loadPersistedState() {\n    if (!Aeppic.LocalStorage.isAvailable) {\n      return\n    }\n\n    const persisted = Aeppic.LocalStorage.getValue(this._storageKey)\n\n    if (!persisted) {\n      return\n    }\n\n    const state = {\n      sort: {\n        active: persisted.sort\n      },\n      filters: {\n        active: []\n      }\n    }\n\n    if (persisted.filters) {\n      for (const persistedFilter of persisted.filters) {\n        // restore pointer to field Object by fieldName of persisted\n        const option = this.state.filters.options.find(option => option.field.name === persistedFilter.fieldName)\n        \n        const filter = {\n          ...option,\n          values: persistedFilter.values\n        }\n\n        if (filter.field) {\n          state.filters.active.push(filter)\n        }\n      }\n    }\n\n    if (state.filters.active) {\n      this.state.filters.active = state.filters.active\n    }\n    if (state.sort.active) {\n      this.state.sort.active = state.sort.active\n    }\n    console.log(persisted, state)\n\n\n  }\n\n  _persistState() {\n    if (!Aeppic.LocalStorage.isAvailable) {\n      return\n    }\n\n    const state = {\n      sort: locals.sort.active,\n      filters: locals.filters.active.map(filter => ({\n        fieldName: filter.field.name,\n        values: filter.values\n      }))\n    }\n\n    Aeppic.LocalStorage.setValue(this._storageKey, state)\n  }\n\n  get _storageKey() {\n    if (params.storageKey) {\n      return params.storageKey\n    }\n\n\n    return `pref-user@layout=${layout.id}@form=${this.form.id}`\n  }\n \n  _updateActiveSortByInitialSort() {\n    // TODO: what about manual sorting?\n    // Currently one has NOT to use this Layout to make manual sorting possible\n\n    const sort = {\n      field: '',\n      descending: false\n    }\n\n    const initialSort = params.initialSort\n\n    if (initialSort) {\n      if (typeof initialSort === 'string') {\n        sort.field = initialSort\n      } else {\n        sort.field = initialSort.field\n        sort.descending = initialSort.descending \n      }\n    }\n\n    sort.field = sort.field || 'data.name' \n\n    this.state.sort.active = sort\n  }\n\n  updateSort() {\n    this.announceSort()\n    this._persistState()\n  }\n\n  announceSort() {\n    if (params.disableSort) {\n      return \n    }\n\n    const nullifiedDescending = (locals.sort.active.descending === '' || locals.sort.active.descending == null) ? null : locals.sort.active.descending\n\n    const sort = [\n      {\n        field: locals.sort.active.field,\n        descending: nullifiedDescending\n      },\n      { field: 'id' } // always fallback to id\n    ]\n\n    $emit('sort', sort)\n  }\n\n  updateFilter() {\n    this._updateFilterDebounced()\n  }\n\n  announceFilter() {\n    if (params.disableFilter && params.disableSearch) {\n      return\n    }\n\n    const parts = []\n\n    for (const active of this.state.filters.active) {\n      const filters = active.values.map(value => this._buildNewFilterValue(active.field, value)).filter(f => f != null)\n      console.log(active, filters)\n\n      if (filters.length) {\n        parts.push(`(${filters.join(' OR ')})`)\n      }\n    }\n\n    if (this.state.search.active) {\n      const searchParts = this.state.search.active.trim().replace(/\\s{2,}/g, ' ').split(/\\s/)\n \n      let searchQueryStringParts = []\n      // let refQueryStringParts = []\n\n      for (const searchPart of searchParts) {\n        searchQueryStringParts.push(`*${searchPart}*`)\n\n        // non-text values do not support wildcards\n        searchQueryStringParts.push(`${searchPart}`)\n\n        // const refsQueryString = locals.info.refsQueryStringStubs.map(stub => `${stub}:*${searchPart}*`).join(' OR ')\n        // refQueryStringParts.push(refsQueryString)\n      }\n\n      const search = searchQueryStringParts.join(' OR ')  \n      parts.push(search)\n      // const refSearch = refQueryStringParts.join(' ')\n\n      // const searchWithRefs = `(${search} ${refSearch? `OR  (${refSearch})` : ''})`\n\n      // parts.push(searchWithRefs)\n    }\n\n    const filter = parts.join(' AND ')\n\n    params.debug && console.log('emitFilter [parts]', parts)\n \n    $emit('filter', filter) \n  }\n\n\n  _buildNewFilterValue(field, filterValue) {\n    // remember to check for subTypes first, then fallback to types.\n    // this is because a subType switch can be of type number or string\n  \n    const resultPrefix = `data.${field.name}`\n\n    console.log('_buildNewFilterValue', resultPrefix, filterValue)\n\n    if (field.subType === 'select') {\n      return `${resultPrefix}:\"${filterValue.value}\"`\n    }\n\n    if (field.subType === 'date') {\n      const start = filterValue.start || '*'\n      const end = filterValue.end || '*'\n\n      if(filterValue.start && filterValue.end) {\n        return `${resultPrefix}:[${start} TO ${end}]` \n      } else if (filterValue.start) {\n        return `${resultPrefix}:[${start} TO ${end}]`\n      } else if (filterValue.end) {\n        return `${resultPrefix}:[${start} TO ${end}]`\n      } \n    }\n\n    // if (field.type === 'number') {\n    //   // TODO: support less than and greater than\n    //   return filterValue.value\n    // }\n \n    if (field.type === 'boolean') {\n      if(filterValue === null) {\n        return\n      }\n      return `${resultPrefix}:${filterValue}`\n    }\n\n    if (field.type === 'object') {\n      if (field.subType === 'ref') {\n        if (filterValue.id) {\n          return `${resultPrefix}.id:${filterValue.id}`\n        }\n\n        return ''\n      }\n    }\n  }\n\n  _fieldIsSortable(field) {\n    const sortFields = this._parseParamSortFields()\n\n    if (sortFields.length && sortFields.includes(`data.${field.name}`) === false) {\n      return { result: false }\n    }\n\n    const fieldTypeIsObjectButNotRef = field.type === 'object' && field.subType !== 'ref'\n\n    if (fieldTypeIsObjectButNotRef) {\n      return { result: false }\n    }\n\n    const unsupportedControls = ['attachment']\n\n    const placeholder = this.form.getPlaceholder(field.name)\n\n    const isSortable = placeholder && (!placeholder.control || unsupportedControls.includes(placeholder.control.name) === false)\n\n    return {\n      result: isSortable,\n      placeholder,\n      field,\n    }\n  }\n\n  _fieldIsFilterable(field) {\n    const filterFields = this._parseParamFilterFields()\n\n    if (filterFields.length && filterFields.includes(`data.${field.name}`) === false) {\n      return { result: false }\n    }\n\n    const unsupportedSubTypes = ['image', 'address', 'geolocation', 'file', 'text', 'number']\n\n    if (unsupportedSubTypes.includes(field.subType)) {\n      return { result: false }\n    }\n\n    const unsupportedControls = ['attachment']\n    const placeholder = this.form.getPlaceholder(field.name)\n\n    const isFilterable = placeholder && (!placeholder.control || unsupportedControls.includes(placeholder.control.name) === false)\n\n    if (!isFilterable) {\n      return {\n        result: false\n      }\n    }\n\n    const params = this.form.getFieldControlParams(field.name)\n\n    return { \n      result: isFilterable,\n      placeholder,\n      field,\n      params\n    }\n  }\n\n  _parseParamFilterFields() {\n    if (!params.filterFields) {\n        return []\n    }\n\n    return params.filterFields.split(',')\n  }\n\n  _parseParamSortFields() {\n    if (!params.sortFields) {\n        return []\n    }\n\n    return params.sortFields.split(',')\n  }\n\n\n  // event methods\n  toggleFilter(event) {\n    const { filter, option } = event\n\n    console.log(this.state.filters.options.find(o => o === filter))\n    const activeIndex = this.state.filters.active.findIndex(active => active.field === filter.field)\n\n    if (activeIndex >= 0) {\n      const active = this.state.filters.active[activeIndex]\n\n      const valueIndex = active.values.findIndex((v, indexx) => {\n        if (typeof v === 'object') {\n          if ('value' in v) {\n            return v.value === option.value\n          }\n\n          return v.id === option.id\n        }\n\n        return v === option\n      })\n\n      if (valueIndex >= 0) {\n        active.values.splice(valueIndex, 1)\n\n        const removeEmptyFilterFromActives = active.values.length === 0\n        if (removeEmptyFilterFromActives) {\n          this.state.filters.active.splice(active, 1)\n        }\n      } else {\n        active.values.push(option)\n      }\n    } else {\n      this.state.filters.active.push({\n        field: filter.field,\n        values: [option]\n      })\n    }\n\n    this.updateFilter()\n  }\n\n  setFilter(event) {\n    const { filter, values } = event\n    \n\n    const sanitzedValues = values === null ? [] : values\n\n    if (Array.isArray(sanitzedValues) === false) {\n      throw new Error(`Provide array not ${typeof values}`)\n    }\n\n    console.log(filter, values)\n\n    const option = {\n        field: filter.field,\n        values: sanitzedValues\n      }\n\n    const activeIndex = this.state.filters.active.findIndex(active => active.field === filter.field)\n\n    if (activeIndex >= 0) {\n      const extendDateField = filter.field.subType === 'date' && option.values[0]\n\n      if (extendDateField) {\n        option.values[0] = { ...this.state.filters.active[0].values[0] , ... option.values[0] } \n      }\n\n      const hasNoValues = option.values.length === 0 || (extendDateField && !option.values[0].start && !option.values[0].end)\n\n      if (hasNoValues) {\n        this.state.filters.active.splice(activeIndex, 1)  \n      } else {\n        this.state.filters.active.splice(activeIndex, 1, option)\n      }\n    } else {\n      this.state.filters.active.push(option)\n    }\n\n    this.updateFilter()\n  }\n\n  resetFilters() {\n    this.state.filters.active = []\n\n    this.updateFilter()\n  }\n}","packages":[]},"locks":[],"created":{"at":"2021-07-26T14:28:16+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-07-04T08:20:36+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1688458836029,"ct":1688458836029,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"0de4a4976a36ad62","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"}}},{"id":"da851478-7787-4bd6-9530-ef868c1697ee","v":"f1e8343d634bf7b7","cloneOf":{"id":"4f84e6fb-332f-4d62-b01d-17a32bd28a82","v":"6dcc3615e0c5e03b","text":"List Filter Selector"},"originalCloneOf":{"id":"4f84e6fb-332f-4d62-b01d-17a32bd28a82","v":"6dcc3615e0c5e03b","text":"List Filter Selector"},"previous":{"v":"c54435b9519d1bad"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"List Filter Actives","applies":"","packages":[],"template":"<div class=\"_CSS-filters\" v-if=\"locals.ready\">\n  <div class=\"_CSS-filter\" v-for=\"filter of params.options\" v-if=\"controller.getActive(filter)\">\n    <!-- {{ filter.field }} -->\n\n    <label class=\"_CSS-filter__label\">\n      {{ Aeppic.translate(filter.placeholder.label) }}\n    </label>\n\n    <section class=\"_CSS-options\"\n      v-if=\"filter.field.subType === 'select'\"\n    >\n      <div v-for=\"option of filter.field.settings.options\" v-if=\"controller.isActive(filter, option)\">\n        <template v-if=\"option.value\">\n          <button\n            class=\"ae-button ae-button--small\"\n            @click.stop=\"controller.toggle(filter, option)\"\n          >\n            <template v-if=\"option.display\">\n              {{ option.display }}\n            </template>\n            <template v-else-if=\"option.value\">\n              <i>leer</i>\n            </template>\n            <!-- NOTE: only possible if empty-value has a value. \"field empty\"-query not supported by query engine  -->\n            <!-- <template v-else>\n              <i>leer</i>\n            </template> -->\n          </button>\n        </template>\n      </div>\n    </section>\n    <section class=\"_CSS-options\" v-else-if=\"filter.field.subType === 'ref'\">\n      <!-- <template v-if=\"controller.getActive(filter)\"> -->\n        <div v-for=\"value of controller.getActive(filter)?.values\" class=\"_CSS-option--ref\"> \n          <!-- {{ value }} -->\n            <ae-design\n              name=\"tag\"\n              :document-id=\"value.id\"\n              :params=\"{ readonly: true, showRemove: true }\"\n              @remove=\"controller.toggle(filter, value)\"\n            ></ae-design>\n        </div>\n      <!-- </template> -->\n\n      <!-- <ae-layout  layout-id=\"36649f27-5869-49e6-9b49-3b5c3b9c795d\"\n                  @selected=\"controller.toggle(filter, $event)\"\n                  ref=\"selectionButton\" \n                  :params=\"{ hidePath: params.hidePath, settings: locals.filterSettingsByFilter.get(filter), fullPath: params.showFullPathm, icon: params.icon }\"\n      ></ae-layout> -->\n    </section>\n    <section class=\"_CSS-options\" v-else-if=\"filter.field.subType === 'switch'\">\n      <button class=\"ae-button ae-button--small\"\n              v-if=\"controller.isActive(filter, true)\"\n              @click.stop=\"controller.setFilter(filter, null)\"\n      >\n        <ae-icon class=\"fa fa-check-square\"></ae-icon>\n      </button>\n      <button class=\"ae-button ae-button--small\"\n                v-if=\"controller.isActive(filter, false)\"\n              @click.stop=\"controller.setFilter(filter, null)\"\n      >        <ae-icon class=\"far fa-square\"></ae-icon>\n      </button>\n    </section>\n    <section class=\"_CSS-options\" v-else-if=\"filter.field.subType === 'date'\">\n        <ae-layout  layout-id=\"3e185751-e4f9-4493-b73d-3c99055d1b86\"\n                    v-if=\"controller.getActive(filter)?.values[0]?.start\"\n                    @input=\"controller.setFilter(filter, [{ start: $event.replace(/T.*/, '') }])\"\n                    :param-value=\"controller.getActive(filter)?.values[0]?.start || ''\"\n                    :param-max=\"controller.getActive(filter)?.values[0]?.end\"\n        ></ae-layout>\n        <span v-if=\"controller.getActive(filter)?.values[0]?.start && controller.getActive(filter)?.values[0]?.end\" style=\"padding: 0 1ch;\">bis</span>\n\n        <ae-layout  layout-id=\"3e185751-e4f9-4493-b73d-3c99055d1b86\"\n                    v-if=\"controller.getActive(filter)?.values[0]?.end\"\n                    @input=\"controller.setFilter(filter, [{ end: $event.replace(/T.*/, '') }])\"\n                    :param-value=\"controller.getActive(filter)?.values[0]?.end || ''\"\n                    :param-min=\"controller.getActive(filter)?.values[0]?.start\"\n        ></ae-layout>\n    </section>\n\n    <section class=\"_CSS-options\" v-else>\n      [nicht unterstützer Filter] {{ filter.field.name }}\n      <!-- {{ filter.field }} -->\n    </section>\n\n    <!-- <button\n          class=\"ae-button ae-button--small\"\n          @click.stop=\"controller.setFilter(filter, null)\"\n          :class=\"[ controller.isEmpty(filter) ? 'ae-button--primary' : 'ae-button--tertiary' ]\"\n        >\n      <i>alle</i>\n    </button> -->\n   \n      <!-- <section v-if=\"filter.field.subType === 'date'\">\n        <div\n          v-if=\"filter.values.length === 0? controller.addValue(filter) : ''\"\n        ></div>\n        <div\n          class=\"_CSS-filter__control-ref__value\"\n          v-for=\"option of filter.values\"\n        >\n          <ae-layout\n            layout-id=\"3e185751-e4f9-4493-b73d-3c99055d1b86\"\n            @input=\"option.start = $event.replace(/T.*/, '')\"\n            :param-value=\"option.start\"\n          >\n          </ae-layout>\n          <span>&nbspbis&nbsp</span>\n          <ae-layout\n            layout-id=\"3e185751-e4f9-4493-b73d-3c99055d1b86\"\n            @input=\"option.end = $event.replace(/T.*/, '')\"\n            :param-value=\"option.end\"\n          ></ae-layout>\n          <button\n            class=\"ae-button ae-button--small\"\n            @click.stop=\"controller.removeValue(filter, option)\"\n          >\n            <ae-icon class=\"fa fa-times\"></ae-icon>\n          </button>\n        </div>\n      </section> -->\n  </div>\n  <!-- <button class=\"ae-button ae-button--small ae-button--small\" style=\"color:var(--ae-accent-red)\" @click.stop=\"$emit('reset')\">\n    Zurücksetzen\n  </button> -->\n</div>\n\n  </div>\n</div>","css":"._CSS-filters {\n  display: flex;\n  flex-flow: row wrap;\n\n  font-size: var(--ae-font-size-2);\n}\n\n._CSS-filter~._CSS-filter {\n  margin: 0 var(--ae-space-2);\n}\n\n._CSS-options {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n._CSS-filter {\n  display: flex;\n  align-items: center;\n  flex-flow: column;\n}\n\n._CSS-filter__label {\n  font-size: var(--ae-font-size-1);\n}","controller":"class Controller {\n  init() {\n    locals.ready = false\n    locals.filterSettingsByFilter = new Map()\n\n    watchParam('options', (newOptions) => this._updateFilterSettings(newOptions) )\n\n    this._updateFilterSettings(params.options) \n\n    locals.ready = true \n  }\n\n  _updateFilterSettings(options) { \n    const settingsMap = new Map()\n\n    for (const filter of options) {\n      if (filter.field.subType !== 'ref') {\n        continue\n      }\n\n      const fieldInfo = filter.field\n      const fieldParams = filter.params || {}\n\n      const settings = {\n          filter: {\n          base: fieldInfo.joinedFilter && `${fieldInfo.joinedFilter.replace(/'/g, '\"')}`,\n          targetDocument: params.document,\n          ancestorForm: fieldParams.ancestorForm,\n          queryLimitCommand: fieldParams.queryLimitCommand,\n          ancestorSearchLimit: fieldParams.ancestorSearchLimit,\n          ancestorId: fieldParams.ancestorId,\n          parentId: fieldParams.parentId,\n          formIds: fieldParams.forms,\n        },\n        search: { \n          size: 20,\n          sort: [{\n            field: 'data.name',\n            descending: false\n          },\n          {\n            field: 'modified.at',\n            descending: true\n          }],\n          searchAllFields: false\n        },\n      }\n\n      settingsMap.set(filter, settings)\n    } \n\n    locals.filterSettingsByFilter = settingsMap\n  }\n\n  toggle(filter, option) {\n    $emit('toggle', { filter, option })\n  }\n\n  setFilter(filter, values) {\n    $emit('set', { filter, values })\n  }\n\n  isActive(filter, option) {\n    if (!params.active) {\n      return null\n    }\n\n    const active = this.getActive(filter)\n\n    return active && active.values.find(v => {\n      if (typeof v === 'object') {\n        return v.value === option.value\n      }\n\n      return v === option\n    }) !== undefined\n  }\n\n  getActive(filter) {\n    if (!params.active) {\n      return null\n    }\n\n    // compare by pointer to field\n    return params.active.find(active => active.field === filter.field)\n  }\n\n  isEmpty(filter) {\n    const isActiveWithAnyValue = params.active.some(active => active.field === filter.field && active.values.length)\n    return !isActiveWithAnyValue\n  }\n}"},"locks":[],"created":{"at":"2021-07-30T10:36:06+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-02-11T14:52:24+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1644591144298,"ct":1627641366921,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"4f84e6fb-332f-4d62-b01d-17a32bd28a82","v":"f4c60d56dd2023f7","previous":{"v":"420e4402f760b2f1"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"List Filter Selector","applies":"","packages":[],"template":"<!-- {{params.active}} -->\n<div class=\"_CSS-filters bp-card bp-card--bordered\" v-if=\"locals.ready\">\n  <div class=\"_CSS-filter\" v-for=\"filter of params.options\">\n    <!-- {{ filter.field }} -->\n    <!-- {{filter.placeholder.label}} -->\n\n    <label class=\"ae-form-cell__label\">\n      {{ Aeppic.translate(filter.placeholder.label) }}\n    </label>\n\n    <section class=\"_CSS-options\"\n      v-if=\"!filter.placeholder.label\">\n      [kein Label gefunden für] {{ filter.field.name }}\n    </section>  \n    <section class=\"_CSS-options\"\n      v-else-if=\"filter.field.subType === 'select'\"\n    >\n      <div v-for=\"option of filter.field.settings.options\">\n        <template v-if=\"option.value\">\n          <button\n            class=\"ae-button\"\n            @click.stop=\"controller.toggle(filter, option)\"\n            :class=\"[ controller.isActive(filter, option) ? 'ae-button--primary' : 'ae-button--tertiary' ]\"\n          >\n            <template v-if=\"option.display\">\n              {{ option.display }}\n            </template>\n            <template v-else-if=\"option.value\">\n              <i>leer</i>\n            </template>\n            <!-- NOTE: only possible if empty-value has a value. \"field empty\"-query not supported by query engine  -->\n            <!-- <template v-else>\n              <i>leer</i>\n            </template> -->\n          </button>\n        </template>\n      </div>\n    </section>\n    <section class=\"_CSS-options\" v-else-if=\"filter.field.subType === 'ref'\">\n      <!-- <template v-if=\"controller.getActive(filter)\"> -->\n        <div v-for=\"value of controller.getActive(filter)?.values\" class=\"_CSS-option--ref\"> \n          <!-- {{ value }} -->\n            <ae-design\n              name=\"tag\"\n              :document-id=\"value.id\"\n              :params=\"{ readonly: true, showRemove: true }\"\n              @remove=\"controller.toggle(filter, value)\"\n            ></ae-design>\n        </div>\n      <!-- </template> -->\n\n      <ae-layout  layout-id=\"36649f27-5869-49e6-9b49-3b5c3b9c795d\"\n                  @selected=\"controller.toggle(filter, $event)\"\n                  ref=\"selectionButton\" \n                  :params=\"{ hidePath: params.hidePath, settings: locals.filterSettingsByFilter.get(filter), fullPath: params.showFullPathm, icon: params.icon || 'far fa-caret-circle-down' }\"\n      ></ae-layout>\n    </section>\n    <section class=\"_CSS-options\" v-else-if=\"filter.field.subType === 'switch'\">\n      <button class=\"ae-button\"\n              :class=\"[ controller.isActive(filter, true) ? 'ae-button--primary' : 'ae-button--tertiary' ]\"\n              @click.stop=\"controller.setFilter(filter, [true])\"\n      >\n        <ae-icon class=\"fa fa-check-square\"></ae-icon>\n      </button>\n      <button class=\"ae-button\"\n              :class=\"[ controller.isActive(filter, false) ? 'ae-button--primary' : 'ae-button--tertiary' ]\"\n              @click.stop=\"controller.setFilter(filter, [false])\"\n      >        <ae-icon class=\"far fa-square\"></ae-icon>\n      </button>\n    </section>\n    <section class=\"_CSS-options\" v-else-if=\"filter.field.subType === 'date'\">\n        <ae-layout  layout-id=\"3e185751-e4f9-4493-b73d-3c99055d1b86\"\n                    @input=\"controller.setFilter(filter, [{ start: $event.replace(/T.*/, '') }])\"\n                    :param-value=\"controller.getActive(filter)?.values[0]?.start || ''\"\n                    :param-max=\"controller.getActive(filter)?.values[0]?.end\"\n        ></ae-layout>\n        <span style=\"padding: 0 1ch;\">bis</span>\n\n        <ae-layout  layout-id=\"3e185751-e4f9-4493-b73d-3c99055d1b86\"\n                    @input=\"controller.setFilter(filter, [{ end: $event.replace(/T.*/, '') }])\"\n                    :param-value=\"controller.getActive(filter)?.values[0]?.end || ''\"\n                    :param-min=\"controller.getActive(filter)?.values[0]?.start\"\n        ></ae-layout>\n    </section>\n\n    <section class=\"_CSS-options\" v-else>\n      [nicht unterstützer Filter] {{ filter.field.name }}\n      <!-- {{ filter.field }} -->\n    </section>\n\n    <button\n          class=\"ae-button\"\n          @click.stop=\"controller.setFilter(filter, null)\"\n          :class=\"[ controller.isEmpty(filter) ? 'ae-button--primary' : 'ae-button--tertiary' ]\"\n        >\n      <i>alle</i>\n    </button>\n   \n      <!-- <section v-if=\"filter.field.subType === 'date'\">\n        <div\n          v-if=\"filter.values.length === 0? controller.addValue(filter) : ''\"\n        ></div>\n        <div\n          class=\"_CSS-filter__control-ref__value\"\n          v-for=\"option of filter.values\"\n        >\n          <ae-layout\n            layout-id=\"3e185751-e4f9-4493-b73d-3c99055d1b86\"\n            @input=\"option.start = $event.replace(/T.*/, '')\"\n            :param-value=\"option.start\"\n          >\n          </ae-layout>\n          <span>&nbspbis&nbsp</span>\n          <ae-layout\n            layout-id=\"3e185751-e4f9-4493-b73d-3c99055d1b86\"\n            @input=\"option.end = $event.replace(/T.*/, '')\"\n            :param-value=\"option.end\"\n          ></ae-layout>\n          <button\n            class=\"ae-button\"\n            @click.stop=\"controller.removeValue(filter, option)\"\n          >\n            <ae-icon class=\"fa fa-times\"></ae-icon>\n          </button>\n        </div>\n      </section> -->\n  </div>\n  <button class=\"ae-button ae-button--small\" style=\"color:var(--ae-accent-red)\" @click.stop=\"$emit('reset')\">\n    Zurücksetzen\n  </button>\n</div>\n\n  </div>\n</div>","css":"._CSS-filters {\n  display: flex;\n  flex-flow: column;\n  align-items: stretch;\n}\n\n._CSS-filter~._CSS-filter {\n  margin-bottom: var(--ae-space-2);\n}\n\n._CSS-options {\n  display: flex;\n  flex-wrap: wrap;\n}","controller":"class Controller {\n  init() {\n    locals.ready = false\n    locals.filterSettingsByFilter = new Map()\n\n    watchParam('options', (newOptions) => this._updateFilterSettings(newOptions) )\n\n    this._updateFilterSettings(params.options) \n\n    locals.ready = true \n  } \n\n  _updateFilterSettings(options) { \n    const settingsMap = new Map()\n\n    for (const filter of options) {\n      if (filter.field.subType !== 'ref') {\n        continue\n      }\n\n      const fieldInfo = filter.field\n      const fieldParams = filter.params\n\n      if (!fieldParams) {\n        console.warn(`[WARN]: Ignoring field ${filter.field.name}`)  \n        continue\n      } \n \n      const settings = {\n          filter: {\n          base: fieldInfo.joinedFilter && `${fieldInfo.joinedFilter.replace(/'/g, '\"')}`,\n          targetDocument: params.document,\n          ancestorForm: fieldParams.ancestorForm,\n          queryLimitCommand: fieldParams.queryLimitCommand,\n          ancestorSearchLimit: fieldParams.ancestorSearchLimit,\n          ancestorId: fieldParams.ancestorId,\n          parentId: fieldParams.parentId,\n          formIds: fieldParams.forms,\n        },\n        search: { \n          size: 20,\n          sort: [{\n            field: 'data.name',\n            descending: false\n          },\n          {\n            field: 'modified.at',\n            descending: true\n          }],\n          searchAllFields: false\n        },\n      }\n\n      settingsMap.set(filter, settings)\n    } \n\n    locals.filterSettingsByFilter = settingsMap\n  }\n\n  toggle(filter, option) {\n    $emit('toggle', { filter, option })\n  }\n\n  setFilter(filter, values) {\n    $emit('set', { filter, values })\n  }\n\n  isActive(filter, option) {\n    if (!params.active) {\n      return null\n    }\n\n    const active = this.getActive(filter)\n\n    return active && active.values.find(v => {\n      if (typeof v === 'object') {\n        return v.value === option.value\n      }\n\n      return v === option\n    }) !== undefined\n  }\n\n  getActive(filter) {\n    if (!params.active) {\n      return null\n    }\n\n    // compare by pointer to field\n    return params.active.find(active => active.field === filter.field)\n  }\n\n  isEmpty(filter) {\n    const isActiveWithAnyValue = params.active.some(active => active.field === filter.field && active.values.length)\n    return !isActiveWithAnyValue\n  }\n}"},"locks":[],"created":{"at":"2021-07-28T14:23:30+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-02-16T16:14:30+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1645028070042,"ct":1627482210254,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2018-02-25T15:57:18+01:00","by":"","client":"server","from":""},"ct":1621428481255,"data":{"applies":"","controller":"class Controller {\r\n  async init() {\r\n    locals.showReset = false\r\n    //locals.company = await Aeppic.get('b61adbaf-b51b-46b5-9358-587ef518075b')\r\n    locals.companyName = /*locals.company.data.name ||*/ 'Exapris GmbH'\r\n\r\n    locals.username = ''\r\n    locals.password = ''\r\n    locals.remember = false\r\n\r\n    locals.loginPending = false\r\n    locals.loginRunning = false\r\n\r\n    locals.error = null\r\n    //await Aeppic.nextRenderPass()\r\n    //$refs.menu.show() \r\n\r\n    locals.resetRunning = false\r\n    locals.result = null\r\n\r\n    locals.title = this.getHostname().toLowerCase()\r\n  }\r\n\r\n  getHostname() {\r\n\r\n    if (!packages.window) {\r\n      return ''\r\n    } \r\n\r\n    const hostname = packages.window.location.hostname\r\n    const parts = hostname.split(/\\.exapris\\.de|\\.bizpin\\.de/)\r\n\r\n    return parts && parts[0] ? parts[0] : ''\r\n  }\r\n\r\n  async login() {\r\n    if (locals.loginRunning) {\r\n      locals.loginPending = true\r\n      return\r\n    }\r\n\r\n    locals.loginPending = false\r\n    locals.loginRunning = true\r\n    locals.error = null\r\n\r\n    await Aeppic.nextRenderPass()\r\n    await Aeppic.nextRenderPass()\r\n    \r\n    try {\r\n      const loginResult = await Aeppic.login(locals.username.trim(), locals.password.trim(), locals.remember)\r\n\r\n      if (loginResult.ok) {\r\n        locals.error = null\r\n\r\n        if (params.navigateToProfile) {\r\n          Aeppic.navigateToProfile()\r\n        } else {\r\n          Aeppic.navigateTo(Aeppic.HomePage)\r\n          // FIXME: not implemented / buggy\r\n          // Aeppic.navigateHome()\r\n        }\r\n      } else {\r\n        if (loginResult.status === 404) {\r\n          locals.error = {\r\n            unkownUser: true\r\n          }\r\n        } else {\r\n          locals.error = {\r\n            wrongPassword: true\r\n          }\r\n        }\r\n      }\r\n\r\n    } catch (error) {\r\n    }\r\n\r\n    await Aeppic.nextRenderPass()\r\n    locals.loginRunning = false\r\n\r\n    if (locals.loginPending) {\r\n      this.login()\r\n    }\r\n  }\r\n\r\n  async requestPasswordReset() {\r\n      if (locals.resetRunning) {\r\n      return\r\n    }\r\n\r\n    locals.resetRunning = true\r\n    locals.result = null\r\n\r\n    const baseUrl = packages.window && packages.window.location && packages.window.location.origin\r\n\r\n    // TODO: Commands.execute is not working for anonymous accounts\r\n    // const result = await Aeppic.Commands.execute('b4133914-da4f-44c4-898f-c93a93889c23', 'root', {\r\n    //   username: locals.username,\r\n    //   baseUrl\r\n    // })\r\n    const httpRequest = await Aeppic.fetch('api/docs/root/_executeCommand?commandId=b4133914-da4f-44c4-898f-c93a93889c23&apiToken=XtEnNKBzAx21oecVJB9qrxdG', {\r\n      method: 'POST',\r\n      headers: {\r\n        'Content-Type': 'application/json;charset=utf-8'\r\n      },\r\n      body: JSON.stringify({\r\n        parameters: {\r\n          username: locals.username,\r\n          baseUrl\r\n        }\r\n      })\r\n    })\r\n\r\n    if (!httpRequest.ok) {\r\n      locals.error = {\r\n        resetPassword: true\r\n      }\r\n    } else {\r\n      const result = await httpRequest.json()\r\n\r\n      if (result.ok) {\r\n        locals.result = {\r\n          resetPassword: true\r\n        }\r\n      } else {\r\n        locals.error = {\r\n          resetPassword: true\r\n        }\r\n      }\r\n    }\r\n\r\n    locals.resetRunning = false\r\n  }\r\n\r\n  // async resetPassword() {\r\n  //   if (locals.resetRunning) {\r\n  //     return\r\n  //   }\r\n\r\n  //   locals.resetRunning = true\r\n  //   locals.result = null\r\n\r\n  //   const account = (await Aeppic.find(`f.id:account AND data.name:${locals.username}`))[0]\r\n\r\n  //   try {\r\n  //     const result = await Aeppic.Commands.execute('5b8a9204-29f0-4ad1-9bbb-8c61b05249bb', account, {\r\n  //       token: locals.token,\r\n  //       password: locals.password\r\n  //     })\r\n\r\n  //     if (result.value && result.value.ok) {\r\n  //       locals.result = {\r\n  //         resetPassword: true\r\n  //       }\r\n  //     } else {\r\n  //       locals.error = {\r\n  //         resetPassword: true\r\n  //       }\r\n  //     }\r\n  //   } catch (e) {\r\n  //     console.error('reset password error', e)\r\n  //   }\r\n\r\n  //   locals.resetRunning = false\r\n  // }\r\n\r\n  addDevice() {\r\n  }\r\n\r\n  impersonate() {\r\n  }\r\n} ","css":"._CSS {\r\n  display:flex;\r\n  position: relative;\r\n}\r\n\r\n._CSS > * {\r\n  flex:1;\r\n  position:relative;\r\n  display:flex;\r\n  align-items: center;\r\n  justify-content: flex-start;\r\n  padding: 0 10%;\r\n}\r\n\r\n.ae-small ._CSS > *  {\r\n  justify-content: center;\r\n  padding: 0 0;\r\n}\r\n\r\n._CSS-login-dialog_lead {\r\n  margin-bottom: 10px;\r\n}\r\n\r\nsvg._CSS-logo {\r\n  xfill: white;\r\n  vertical-align: middle;\r\n  filter: drop-shadow(1px 1px 2px rgba(0,0,0,0.2));\r\n}\r\n\r\n.ae-small ._CSS-login-dialog_lead {\r\n  position:absolute;\r\n  z-index:1;\r\n}\r\n\r\n.ae-small svg._CSS-logo {\r\n  transform:scale(0.5);\r\n  transform-origin:top left;\r\n  filter: drop-shadow(1px 1px 4px rgba(0,0,0,0.5));\r\n}\r\n\r\n\r\nsvg._CSS-logo ._CSS-logo__st0{fill:#FFFFFF;}\r\nsvg._CSS-logo ._CSS-logo__st1{fill:#E73923;}\r\nsvg._CSS-logo ._CSS-logo__st2{fill:#63B8E8;}\r\nsvg._CSS-logo ._CSS-logo__st3{fill:#2E3D80;}\r\n\r\n._CSS-backdrop::before {\r\n  content:'';\r\n  position:absolute;\r\n  left:0;right:0;top:0;bottom:0;\r\n  background: url('https://images.unsplash.com/photo-1497864149936-d3163f0c0f4b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1950&q=80&flip=h');  xxbackground: url('assets/images/halloween-pumpkin-PYWJ3FQ.jpg');\r\n  background-size:cover;\r\n  background-position:right center;\r\n}\r\n\r\n._CSS-backdrop {\r\n  z-index: 1;\r\n}\r\n\r\n._CSS-backdrop::after {\r\n  content:'';\r\n  opacity:0.7;\r\n  position:absolute;\r\n  left:0;right:0;top:0;bottom:0;\r\n  xxbackground-color: #2d9cf4;\r\n  xbackground-image: radial-gradient(ellipse farthest-corner at center center, rgb(66, 165, 245) 0%, rgb(33, 150, 243) 75.6%, rgb(33, 150, 243) 100%);\r\n  xbackground-image: -ms-radial-gradient(center center, ellipse farthest-corner, rgb(66, 165, 245) 0%, rgb(33, 150, 243) 75.6%, rgb(33, 150, 243) 100%);\r\n  background-image: radial-gradient(ellipse farthest-corner at center center, rgb(201, 201, 201) 0%, rgb(192, 193, 195) 75.6%, rgb(165, 165, 165) 100%);\r\n  background-image: -ms-radial-gradient(ellipse farthest-corner at center center, rgb(201, 201, 201) 0%, rgb(192, 193, 195) 75.6%, rgb(165, 165, 165) 100%);\r\n}\r\n\r\n._CSS-attribution {\r\n  z-index: 1;\r\n  position:absolute;\r\n  right:10px;bottom:10px;\r\n  background:black;\r\n  color:white;\r\n  xmin-width:100px;\r\n  xmin-height:20px;\r\n}\r\n\r\n._CSS-login-dialog {\r\n  z-index:2;\r\n  display:flex;\r\n  flex-direction:column;\r\n  min-width: 300px;\r\n  width: 0;\r\n}\r\n\r\n.ae-small ._CSS-login-dialog {\r\n  min-width:100%;\r\n  height:100%;\r\n  /* background:red; */\r\n}\r\n\r\n// .ae-small ._CSS-backdrop::before {\r\n//   display:none;\r\n// }\r\n// .ae-small ._CSS-backdrop {\r\n//   background:lightblue;\r\n// }\r\n\r\n.ae-small ._CSS-login-dialog_lead {\r\n  padding: 16px 16px;\r\n  margin:0;\r\n}\r\n\r\n._CSS-login-dialog_body {\r\n  background:white;\r\n  border-radius: var(--ae-border-radius);\r\n\r\n  box-shadow: var(--ae-shadow-2);\r\n}\r\n\r\n.ae-small ._CSS-login-dialog_body {\r\n  flex:1;\r\n  display:flex;\r\n  flex-direction:column;\r\n}\r\n\r\n._CSS-login-dialog_body header {\r\n  height: 176px;\r\n  background:lightblue;\r\n  color:white;\r\n  position:relative;\r\n  display:flex;\r\n\r\n  border-radius: var(--ae-border-radius) var(--ae-border-radius) 0 0;\r\n}\r\n\r\n.ae-small ._CSS-login-dialog_body header {\r\n  text-shadow: 0 0 15px rgba(0,0,0,0.5);\r\n}\r\n\r\n.ae-small ._CSS-login-dialog_body header::after {\r\n  content:'';\r\n  background:lightblue;\r\n  position:absolute;\r\n  width:100%;height:100%;\r\n  z-index:1;\r\n  opacity:0.2;\r\n}\r\n\r\n._CSS-login-dialog_body header::before {\r\n  content:'';\r\n  opacity:0.4;\r\n  background: url('https://images.unsplash.com/photo-1553774034-9669d64baeb5?ixlib=rb-1.2.1&q=…l=mika-baumeister-kdBlv2XBcQA-unsplash.jpg&auto=format&fit=crop&w=300&q=80');\r\n  background-size:cover;\r\n  background-position:top center;\r\n  position:absolute;\r\n  width:100%;height:100%;\r\n  z-index:0;\r\n\r\n  border-radius: var(--ae-border-radius) var(--ae-border-radius) 0 0;\r\n}\r\n\r\n.ae-small ._CSS-login-dialog_body header {\r\n  xheight: 128px;  \r\n}\r\n\r\n._CSS-login-dialog_body header > * {\r\n  position:relative;\r\n  z-index:2;\r\n}\r\n\r\n._CSS-login-dialog_body header > h1 {\r\n  margin:0;\r\n  bottom:8px;\r\n  left:12px;\r\n  position:absolute;\r\n  z-index:2;\r\n  color:white;\r\n  text-shadow: 1px 1px 8px rgba(0,0,0,0.3);\r\n}\r\n\r\n._CSS-login-dialog_body header ._CSS-login-dialog_menu {\r\n  position: absolute;\r\n  padding: 8px 8px 24px 24px;\r\n  right:0;\r\n  color:white;\r\n  background:none;\r\n  border:none;\r\n}\r\n\r\n.ae-small ._CSS-login-dialog_body header ._CSS-login-dialog_menu {\r\n  padding: 16px 16px 24px 24px;\r\n}\r\n\r\n.ae-small ._CSS-login-dialog_body_map {\r\n  display:none;\r\n}\r\n\r\n._CSS-login-dialog_body header ._CSS-login-dialog_body_map {\r\n  position:absolute;\r\n  left:0;\r\n  top:0;\r\n  right:0;\r\n  bottom:0;\r\n  xpointer-events:none;\r\n  overflow:hidden;\r\n  opacity:0.1;\r\n  z-index:1;\r\n}\r\n\r\n._CSS-login-form {\r\n  display:flex;\r\n  flex-flow: column;\r\n  min-height: 260px;\r\n  padding: var(--ae-space-3) var(--ae-space-2);\r\n  flex:1;\r\n  /* grid-gap: 16px; */\r\n  /* grid-template-rows: auto auto 1fr auto; */\r\n}\r\n\r\n._CSS-login-form > * {\r\n  padding-top: 16px;\r\n}\r\n\r\n._CSS-login-form--running {\r\n  opacity: 0.5;\r\n}\r\n\r\n.ae-small ._CSS-login-form {\r\n  /* align-items:start; */\r\n  /* grid-template-rows: auto auto auto auto 1fr; */\r\n}\r\n._CSS-login-form input {\r\n  line-height: 1.8em;\r\n  margin: var(--ae-space-3);\r\n  border:none;\r\n  border-bottom: var(--ae-border-width) solid var(--ae-border-color);\r\n  border-radius: var(--ae-border-radius);\r\n}\r\n\r\n._CSS-login-dialog_body footer {\r\n  display:flex;\r\n  justify-content:center;\r\n  padding:2em;\r\n}\r\n\r\n// ._CSS-login-dialog_footer-button {\r\n//   border:none;\r\n//   background:none;\r\n//   color: hsl(0, 0%, 60%);\r\n//   font-size: 0.7em;\r\n\r\n//   cursor: pointer;\r\n// }\r\n\r\n// ._CSS-login-dialog_footer-button:hover {\r\n//   color: hsl(0, 0%, 40%);\r\n// }\r\n\r\n._CSS-login-form input[type=text]:focus,\r\n._CSS-login-form input[type=password]:focus {\r\n  border-bottom: 1px solid #2d9cf4;\r\n  outline:none;\r\n}\r\n\r\n._CSS-login-form label {\r\n  color:gray;\r\n  font-size:0.8em;\r\n  vertical-align:middle;\r\n  line-height:2em;\r\n}\r\n._CSS-show-password {\r\n  position:absolute;\r\n  right:0;\r\n}\r\n\r\n// ._CSS-login-form button[type=submit] {\r\n//   background:lightblue;\r\n//   border:none;\r\n//   color:white;\r\n//   text-transform:uppercase;\r\n//   /* height: 48px; */\r\n//   transition: all 0.1s ease-in;\r\n//   padding:16px;\r\n//   display:flex;\r\n//   align-items:center;\r\n//   justify-content:space-between;\r\n//   position:relative;\r\n//   margin: 16px;\r\n\r\n//   border-radius: var(--ae-border-radius);\r\n\r\n//   cursor: pointer;\r\n// }\r\n\r\n// ._CSS-login-form button[type=submit]:focus {\r\n//   background: #3fbbe4;\r\n// }\r\n\r\n._CSS ._CSS-button--submit {\r\n  margin: var(--ae-space-3) var(--ae-space-3);\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n}\r\n\r\n._CSS-login-form ._CSS-button--success {\r\n  margin: 16px; \r\n  background:lightblue;\r\n  border:none;\r\n  color:white;\r\n  text-transform:uppercase;\r\n  /* height: 48px; */\r\n  transition: all 0.1s ease-in;\r\n  /* margin-top:auto; */\r\n  padding:16px;\r\n  \r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  position:relative;\r\n}\r\n\r\n// ._CSS-login-form button[type=submit]:hover {\r\n//   background: #3fbbe4;\r\n// }\r\n\r\n// ._CSS-login-form:invalid button[type=submit] {\r\n//   opacity:0.4;\r\n// }\r\n\r\n// .ae-phone ._CSS-login-form:invalid button[type=submit] {\r\n//   opacity:1;  \r\n//   background:#3fbbe4;\r\n// }\r\n\r\n._CSS-login-form input::placeholder,input::-webkit-input-placeholder {\r\n  color: #AAA;\r\n  font-size: 0.75em;\r\n}\r\n\r\n._CSS-login-dialog_body footer {\r\n\r\n}\r\n._CSS-login-dialog_followup {\r\n  margin-top:1em;\r\n  text-align: center;\r\n  font-size:0.7em;\r\n  opacity:1;\r\n}\r\n\r\n.ae-small ._CSS-login-dialog_followup {\r\n  display:none;\r\n}\r\n\r\n._CSS-login-dialog_followup-button {\r\n  border:none;\r\n  background:none;\r\n  color:rgba(255,255,255,0.8);\r\n  cursor:pointer;\r\n  text-shadow: 0px 0px 10px  black;\r\n}\r\n\r\n.ae-small ._CSS-login-dialog_followup-button {\r\n  text-shadow:none;\r\n}\r\n\r\n._CSS-login-dialog_followup-button:hover {\r\n  text-decoration: underline;  \r\n  color:white;\r\n}\r\n\r\n._CSS-login-menu {\r\n  display:flex;\r\n  flex-direction:column;\r\n  /* position:relative; */\r\n  top:8px;\r\n  right:8px;\r\n  background:white;\r\n  border: 1px solid rgba(0,0,0,0.4);\r\n  font-size: 0.8em;\r\n  box-shadow: 0 0 5px 1px rgba(0,0,0,0.2);\r\n}\r\n\r\n// ._CSS-login-menu > button {\r\n//   background:none;\r\n//   border:none;\r\n//   line-height:2em;\r\n//   cursor:pointer;\r\n// }\r\n\r\n// ._CSS-login-menu > button::disabled {\r\n//   opacity:0.3;\r\n// }\r\n\r\n// ._CSS-login-menu > button:hover {\r\n//   background:#DDD;\r\n// }\r\n\r\n._CSS-error {\r\n  position:absolute;\r\n  top:0;left:0;right:0;\r\n  background: rgba(255,0,0,0.8);\r\n  color:white;\r\n  text-align:center;\r\n  font-size: 0.8em;\r\n}","name":"Login Layout","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"3d2e823a6bb8033e"}],"template":"<!-- <ae-layout v-if=\"locals.title === 'xbizpin-dev' || locals.title.includes('itm')\" layout-id=\"0cf9d513-88c6-406f-bb73-dcdfe544e85d\"\r\n></ae-layout> -->\r\n<div v-responsive>\r\n  <div xv-if=\"Aeppic.Device !== 'Phone'\" class=\"_CSS-backdrop\">\r\n    <div class=\"_CSS-attribution\"></div>\r\n  </div> \r\n  <div class=\"_CSS-login-dialog\">\r\n    <div class=\"_CSS-login-dialog_lead\">\r\n<svg class=\"_CSS-logo\" version=\"1.1\" id=\"Ebene_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\r\n\t viewBox=\"0 0 2795.3 1401.6\" style=\"enable-background:new 0 0 2795.3 1401.6;\" xml:space=\"preserve\">\r\n<g>\r\n\t<g>\r\n\t\t<path class=\"_CSS-logo__st2\" d=\"M992.1,561.1h194.6c0,0-32.7,41.8-33.3,42.5c-14.8,19.5-11.1,47.3,8.4,62.2c19.5,14.8,47.3,11.1,62.2-8.4\r\n\t\t\tc0.5-0.7,89.1-113.8,89.1-113.8c22.9-28.5,1.8-71.3-35.3-71.3H992.1c-24.5,0-44.4,19.9-44.4,44.4\r\n\t\t\tC947.7,541.2,967.6,561.1,992.1,561.1\"/>\r\n\t\t<path class=\"_CSS-logo__st3\" d=\"M1277.8,841.1h-194.6c0,0,32.7-41.8,33.3-42.5c14.8-19.5,11.1-47.3-8.4-62.2c-19.5-14.8-47.3-11.1-62.2,8.4\r\n\t\t\tc-0.5,0.7-89.1,113.8-89.1,113.8c-20.5,29-1.6,71.3,35.3,71.3h285.7c24.5,0,44.4-19.9,44.4-44.4\r\n\t\t\tC1322.1,860.9,1302.3,841.1,1277.8,841.1\"/>\r\n\t</g>\r\n\t<g>\r\n\t\t<path class=\"_CSS-logo__st3\" d=\"M429.8,554.5c-25.8,0-49.5,6.4-70.4,19c-20.9,12.7-37.5,30.2-49.4,52.1c-11.9,22-18,47.2-18,74.7\r\n\t\t\tc0,27.6,6.1,52.9,18,75.2c11.9,22.2,28.5,39.9,49.4,52.5c20.9,12.6,44.6,19,70.4,19s49.5-6.4,70.4-19\r\n\t\t\tc20.9-12.7,37.7-30.3,49.8-52.6c12.2-22.3,18.4-47.6,18.4-75.1c0-27.5-6.2-52.6-18.3-74.7c-12.2-22-28.9-39.5-49.9-52.2\r\n\t\t\tC479.3,560.9,455.6,554.5,429.8,554.5 M429.8,932.5c-42.7,0-81.8-10.3-116.5-30.5c-34.7-20.2-62.5-48.3-82.7-83.5\r\n\t\t\tc-20.2-35.2-30.5-74.9-30.5-118.1V329.7c0-14.1,4.6-25.7,13.6-34.5c9-8.7,20.4-13.1,33.9-13.1c14.1,0,25.6,4.4,34.4,13.2\r\n\t\t\tc8.7,8.8,13.2,20.3,13.2,34.4V533c17.3-18.2,37.5-32.9,60.4-43.8c27.8-13.3,58.2-20.1,90.4-20.1c40,0,76.8,10.1,109.3,30.2\r\n\t\t\tc32.5,20,58.4,48,77,83.2c18.5,35.2,27.9,74.8,27.9,117.9c0,43.1-10.1,82.9-30.1,118c-20,35.2-47.9,63.3-83.1,83.6\r\n\t\t\tC511.9,922.2,472.4,932.5,429.8,932.5\"/>\r\n\t\t<path class=\"_CSS-logo__st3\" d=\"M802.2,929.2c-13.6,0-25-4.6-34-13.6c-9-9-13.6-20.4-13.6-34V519.9c0-14.1,4.6-25.7,13.7-34.4\r\n\t\t\tc9-8.7,20.4-13.1,33.9-13.1c14.1,0,25.6,4.4,34.4,13.2c8.8,8.7,13.2,20.3,13.2,34.4v361.8c0,13.5-4.4,24.9-13.1,33.9\r\n\t\t\tC827.9,924.6,816.3,929.2,802.2,929.2\"/>\r\n\t\t<path class=\"_CSS-logo__st3\" d=\"M1623.8,554.5c-25.8,0-49.5,6.4-70.4,19c-20.9,12.7-37.5,30.3-49.4,52.5c-11.9,22.3-18,47.6-18,75.2\r\n\t\t\ts6.1,52.7,18,74.7c11.9,22,28.5,39.5,49.4,52.2c20.9,12.6,44.6,19,70.4,19c25.9,0,49.6-6.4,70.4-19c20.9-12.7,37.7-30.2,49.8-52.2\r\n\t\t\tc12.2-22,18.3-47.2,18.3-74.7s-6.2-52.8-18.4-75.1c-12.2-22.2-28.9-39.9-49.8-52.6C1673.4,560.9,1649.7,554.5,1623.8,554.5\r\n\t\t\t M1441.8,1119.4c-13.5,0-24.9-4.4-33.9-13.1c-9.1-8.8-13.7-20.3-13.7-34.5V701.2c0-43.2,10.2-82.9,30.5-118.1\r\n\t\t\tc20.2-35.2,48.1-63.3,82.7-83.5c34.7-20.3,73.8-30.5,116.5-30.5c42.6,0,82.1,10.2,117.3,30.5c35.2,20.3,63.2,48.4,83.1,83.6\r\n\t\t\tc20,35.2,30.1,74.9,30.1,118c0,43.1-9.4,82.7-27.9,117.9c-18.6,35.2-44.5,63.2-77,83.2c-32.5,20-69.3,30.2-109.3,30.2\r\n\t\t\tc-32.2,0-62.7-6.8-90.4-20.1c-22.8-11-43.1-25.7-60.4-43.8v203.3c0,14.1-4.4,25.6-13.2,34.4\r\n\t\t\tC1467.4,1115,1455.8,1119.4,1441.8,1119.4\"/>\r\n\t\t<path class=\"_CSS-logo__st3\" d=\"M1997.1,929.2c-13.6,0-25-4.6-34-13.6c-9-9-13.6-20.4-13.6-34V519.9c0-14.1,4.6-25.7,13.7-34.4\r\n\t\t\tc9-8.7,20.4-13.1,33.9-13.1c14.1,0,25.6,4.4,34.4,13.2c8.8,8.7,13.2,20.3,13.2,34.4v361.8c0,13.5-4.4,24.9-13.1,33.9\r\n\t\t\tC2022.8,924.6,2011.3,929.2,1997.1,929.2\"/>\r\n\t\t<path class=\"_CSS-logo__st3\" d=\"M2547.6,930c-13.6,0-25-4.6-34-13.6c-9-9-13.6-20.4-13.6-34v-200c0-42-11.3-74-33.5-95.2\r\n\t\t\tc-22.3-21.3-52.5-32-89.7-32c-21.7,0-41.7,4.4-59.5,13.2c-17.7,8.7-31.6,20.6-41.5,35.3c-9.8,14.6-14.8,31.3-14.8,49.4v229.2\r\n\t\t\tc0,13.5-4.4,24.9-13.1,33.9c-8.8,9.1-20.3,13.7-34.5,13.7c-13.5,0-25-4.6-34-13.6c-9-9-13.6-20.4-13.6-34V519.9\r\n\t\t\tc0-14.1,4.6-25.7,13.7-34.5c9-8.7,20.4-13.1,33.9-13.1c14.1,0,25.6,4.4,34.4,13.2c7.7,7.7,12.1,17.7,13,29.6\r\n\t\t\tc15.6-13.4,33.6-24.2,53.6-32.1c24.5-9.7,50.9-14.7,78.7-14.7c38.2,0,73.1,8.5,103.7,25.1v0c30.7,16.7,55.1,41.5,72.4,73.6\r\n\t\t\tc17.2,31.9,25.9,70.8,25.9,115.5v200c0,13.5-4.6,25-13.6,34C2572.5,925.5,2561.1,930,2547.6,930\"/>\r\n\t</g>\r\n</g>\r\n</svg>\r\n\r\n    </div>\r\n\r\n\r\n\r\n    <div v-if=\"!locals.showReset\" class=\"_CSS-login-dialog_body\">\r\n      <header>\r\n        <!-- <ae-control class=\"_CSS-login-dialog_body_map\"  name=\"map-leaflet\" field-name=\"anschrift\" :document=\"locals.company\" :readonly=\"true\"></ae-control> -->\r\n        <h1>{{locals.title}}</h1>\r\n        <!-- <button class=\"_CSS-login-dialog_menu\" @click=\"$refs.menu.show($event)\"><ae-icon class=\"fa fa-ellipsis-v\"></ae-icon></button>\r\n        <ae-popup ref=\"menu\" popup-attachment=\"center center\" base-attachment=\"top right\">\r\n          <div slot=\"popup\" class=\"_CSS-login-menu\" :close-delay=\"500\">  \r\n            <button disabled>Diesen Arbeitsplatz hinzufügen</button>\r\n            <button disabled>Als anderer Benutzer anmelden</button>\r\n          </div>\r\n        </ae-popup> -->\r\n      </header>\r\n\r\n      <form class=\"_CSS-login-form\" @submit.prevent=\"controller.login()\" :class=\"{ '_CSS-login-form--running': locals.loginRunning }\">\r\n        <input  type=\"text\" v-model=\"locals.username\" required placeholder=\"Benutzername\" @input=\"locals.error = null\"/>\r\n        <!-- <input type=\"password\" v-model=\"locals.password\" placeholder=\"Anmeldecode / Passwort zurücksetzen Code\" @input=\"locals.error = null\"/> -->\r\n        <input type=\"password\" v-model=\"locals.password\" placeholder=\"Passwort\" @input=\"locals.error = null\"/>\r\n        <label  style=\"cursor: pointer;\"><input type=\"checkbox\" v-model=\"locals.remember\">Angemeldet bleiben</label>\r\n        <button type=\"submit\" class=\"ae-button ae-button--primary _CSS-button--submit\">\r\n          <div class=\"_CSS-error\" v-if=\"!!locals.error && !locals.loginRunning\">\r\n            Unbekannter Benutzername oder Passwort.\r\n          </div>\r\n          <span>Anmelden</span>\r\n          <svg style=\"fill:white\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M13.025 1l-2.847 2.828 6.176 6.176h-16.354v3.992h16.354l-6.176 6.176 2.847 2.828 10.975-11z\"/></svg>\r\n        </button>\r\n      </form>\r\n      <div class=\"ae-progress ae-progress--indeterminate\" v-show=\"locals.loginRunning\"></div>\r\n      <footer>\r\n        <button class=\"ae-button ae-button--secondary\" @click=\"locals.showReset = true\">Passwort vergessen ?</button>\r\n      </footer>\r\n    </div>\r\n    <div v-else class=\"_CSS-login-dialog_body\">\r\n      <header>\r\n        <!-- <ae-control class=\"_CSS-login-dialog_body_map\"  name=\"map-leaflet\" field-name=\"anschrift\" :document=\"locals.company\" :readonly=\"true\"></ae-control> -->\r\n        <h1>{{locals.title}}</h1>\r\n        <!-- <button class=\"_CSS-login-dialog_menu\" @click=\"$refs.menu.show($event)\"><ae-icon class=\"fa fa-ellipsis-v\"></ae-icon></button> -->\r\n        <!-- <ae-popup ref=\"menu\" popup-attachment=\"center center\" base-attachment=\"top right\">\r\n          <div slot=\"popup\" class=\"_CSS-login-menu\" :close-delay=\"500\">  \r\n            <button disabled>Diesen Arbeitsplatz hinzufügen</button>\r\n            <button disabled>Als anderer Benutzer anmelden</button>\r\n          </div>\r\n        </ae-popup> -->\r\n      </header>\r\n      <form class=\"_CSS-login-form\" @submit.prevent=\"controller.requestPasswordReset()\" :class=\"{ '_CSS-login-form--running': locals.resetRunning }\">\r\n        <div class=\"\">\r\n        <strong>Hinweis:</strong><br>\r\n        Bitte geben Sie Ihren <strong>Benutzernamen</strong> ein und nicht Ihre E-Mail Adresse.\r\n        </div>\r\n\r\n        <input  type=\"text\" v-model=\"locals.username\" required placeholder=\"Benutzername\" @input=\"locals.error = null\" autocomplete=\"off\"/>\r\n        <!-- <input type=\"text\" v-model=\"locals.token\" required autocomplete=\"off\" placeholder=\"Anmeldecode\" @input=\"locals.error = null\"/> -->\r\n        <!-- <input type=\"password\" v-model=\"locals.password\" required placeholder=\"Neues Passwort / PIN\" @input=\"locals.error = null\"/> -->\r\n        <!-- <label><input type=\"checkbox\" v-model=\"locals.remember\"/>Angemeldet bleiben</label> -->\r\n        <button v-if=\"!locals.result\" class=\"ae-button ae-button--primary _CSS-button--submit\" type=\"submit\">\r\n          <div class=\"_CSS-error\" v-if=\"!!locals.error && !locals.resetRunning\">\r\n            Fehler bei der Ausführung. Bitte probieren Sie es erneut.\r\n          </div>\r\n          <span>Anmeldecode anfordern</span>\r\n          <svg style=\"fill:white\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M13.025 1l-2.847 2.828 6.176 6.176h-16.354v3.992h16.354l-6.176 6.176 2.847 2.828 10.975-11z\"/></svg>\r\n        </button>\r\n        <div v-else>\r\n          <div style=\"margin: 16px 16px 0px 16px;\">Der Anmeldecode wurde angefordert, bitte prüfen Sie Ihre hinterlegten Kontaktmöglichkeiten.</div>\r\n        </div>\r\n      </form>\r\n       <div class=\"ae-progress ae-progress--indeterminate\" v-show=\"locals.resetRunning\"></div>\r\n      <footer>\r\n        <button class=\"ae-button ae-button--secondary\" @click=\"locals.showReset = false\">Zurück zur Anmeldung</button>\r\n      </footer>\r\n    </div>\r\n\r\n    <!-- <div class=\"_CSS-login-dialog_followup\"> -->\r\n      <!--<button class=\"_CSS-login-dialog_followup-button\" @click=\"controller.resetPassword()\">Passwort vergessen ?</button>-->\r\n    <!-- </div> -->\r\n  </div>\r\n</div>\r\n\r\n      <!-- <form class=\"_CSS-login-form\" @submit.prevent=\"controller.login()\" :class=\"{ '_CSS-login-form--running': locals.loginRunning }\">\r\n        <label><input type=\"checkbox\" v-model=\"locals.remember\"/>Angemeldet bleiben</label>\r\n\r\n        <button>Passwort mit Anmeldecode zurücksetzen</button>\r\n      </form> -->\r\n\r\n      \r\n\r\n<!-- <label style=\"position: absolute;z-index:999;\"><input type=\"checkbox\" v-model=\"locals.showReset\"/>showReset</label> -->"},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"e4c9e20a-a42d-4951-9121-c9ee191f1882","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-07-28T12:58:23+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"4db9661825a45e89"},"stamps":[],"t":1753707503928,"v":"98997f621b642336"},{"id":"929cc708-d50b-4f4f-92b1-17abe72288d2","v":"dd569ab6ab0bcedf","previous":{"v":"a4579ea6df4b218c"},"p":"3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Mail Share Layout","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"f67e8e185e6d963b","text":"Window"}],"template":"<div class=\"ae-dialog-region ae-stacking-context ae-app ae-theme ae-light _CSS-app-container\"\n      v-responsive\n      @drop.prevent\n      @dragover.prevent\n      @ae-drill-into.prevent.stop\n      @ae-will-navigate.prevent.stop\n>\n  <div class=\"_CSS-app\">\n    <ae-design  name=\"page--shared\"\n                :document-id=\"params.pageDocumentId\"\n                :param-share=\"locals.share\"\n    ></ae-design>\n    <!-- :key=\"locals.renderCounter\"\n    @language-change=\"locals.renderCounter += 1\" -->\n  </div>\n</div>\n\n","css":"._CSS-app-container {\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n}\n\n._CSS-app {\n  width: 100%;\n  height: 100%;\n  overflow-y: scroll;\n  overflow-x: hidden; \n  -webkit-overflow-scrolling: touch;\n  background: var(--ae-background-100);\n  color: var(--ae-background-900);\n}","controller":"async init() {\n  this.SHARES_FOLDER_ID = '4f2ebae5-4382-4717-9a10-83dcebfe34dd'\n\n  // Aeppic.Translator.devMode = true\n\n  // locals.targetLanguage = ''\n\n  // const translation = await Aeppic.get('be83d460-03db-4cab-b95b-69a14d95a459')\n\n  // if (translation) {\n  //   Aeppic.Translator.addTranslations(translation.data.translations)\n  // }\n\n  const shareIdentifier = packages.window.location.pathname.split('/').slice(-1)\n\n  if (!shareIdentifier) {\n    return\n  }\n  \n  locals.share = await Aeppic.findOne(`p:${this.SHARES_FOLDER_ID} data.identifier:${shareIdentifier}`) \n  if (!locals.share) {\n    locals.share = await Aeppic.findOne(`p:${params.pageDocumentId} data.identifier:${shareIdentifier}`)\n  }\n}"},"locks":[],"created":{"at":"2019-04-17T15:00:11+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2024-05-07T14:11:49+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1715091109360,"ct":1555513211255,"a_depth":3,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381"],"a_depth":3,"a_forms":["system-folder-form","folder","form"],"created":{"at":"2025-10-07T13:44:46+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759844686546,"data":{"applies":"","controller":"class Controller {\n  init() {\n  }\n\n\n  \n}","css":"","name":"Main Layout","packages":[],"template":"<div\n  class=\"h-full w-full flex flex-col gap-4\"\n  id=\"CSS_\"\n>\n  <ae-layout\n    layoutId=\"63b6cadb-9c72-4418-9e64-01291117a51e\"\n    class=\"w-full\"\n  ></ae-layout>\n  <ae-layout\n    layoutId=\"a6156e84-5588-48fd-aa0e-31ccd38c4c5b\"\n    class=\"w-full\"\n  ></ae-layout>\n  <ae-layout\n    layoutId=\"d55ee142-2da7-4d53-84b4-15a7fc71c1fb\"\n    class=\"w-full\"\n  ></ae-layout>\n  <ae-layout\n    layoutId=\"bfc075e0-b1ee-42d2-a8d5-32a88560b6e9\"\n    class=\"w-full\"\n  ></ae-layout>\n  <ae-layout\n    layoutId=\"d0044e2c-369d-4f35-9b4f-31dc72bd7c37\"\n    class=\"w-full\"\n  ></ae-layout>\n  <ae-layout\n    layoutId=\"3e2e1673-085b-4252-807b-e99153df7bb0\"\n    class=\"w-full\"\n  ></ae-layout>\n  <ae-layout\n    layoutId=\"cc50ceda-c259-4f93-95e2-83aff7d0c595\"\n    class=\"w-full\"\n  ></ae-layout>\n\n\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"612df656-c4e8-412f-98fa-befecacc9302","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-10-07T13:46:27+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"a9dbf1ad-0428-403e-b88b-bd73c35cf381","previous":{"v":"initial"},"stamps":[],"t":1759844787808,"v":"03e5a24ef887ad8c"},{"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","427e6b73-968a-4747-be77-c6bb820a3190","7fd7c5cc-1eed-440b-8ce2-d6183cdb421b"],"a_depth":5,"a_forms":["folder","application-form","folder","folder","folder"],"created":{"at":"2018-05-23T11:50:42+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","client":"server","from":""},"ct":1707216820531,"data":{"applies":"","controller":"class Controller {\n \n  async init(){ \n   \n    locals.Developer = params.Developer\n    locals.Developer.loadSettings()\n    locals.Developer.preferences.maxRecentDocuments = (await Aeppic.Preferences.getSetting('aeppic:developer:maxRecentDocuments') || 15)\n    locals.Developer.preferences.recentDocumentsSortOrder = await Aeppic.Preferences.getSetting('aeppic:developer:recentDocumentsSortOrder')    \n    locals.openDocuments = []\n    \n    // locals.navTreeTab = {\n    //   label: 'Nav',\n    //   layoutId: 'acebfbf8-e284-44b0-8ecd-3456ed4fb440',\n    //   pinned: false,\n    //   dynamic: false,\n    //   events: {\n    //     selected: (id) => this.onDocumentSelected(id)\n    //   }\n    // }\n     \n    locals.navTreeTab = this.findMyTab()\n  \n    locals.domTab = {\n      label: 'DOM',\n      layoutId: 'ab15392a-6e80-422f-baf9-878e630b8444',\n      pinned: false,\n      dynamic: false,\n      events: {\n        selected: (id, context) => this.onDocumentSelected(id, context)\n      } \n    }\n\n    locals.docsTab = {\n      label: 'Docs',\n      layoutId: '86377372-a6b4-4bff-ae9b-eca744787c98',\n      params: {\n        'documents': locals.openDocuments,\n        'documentsToRestore': await this.restoreRecentlyEditedDocuments(),\n        'Developer': locals.Developer\n      },\n      events: {\n        'selected': (id) => this.onDocumentSelected(id),\n        'save': (d) => Aeppic.save(d),\n        'editing-started':  (d) => this.onEditingStarted(d),\n        'close': (d) => this.closeDocument(d),\n        'close-all': (d) => this.closeAllDocuments()\n      },\n      pinned: false,\n      dynamic: false\n    }  \n\n    locals.wipTab = {\n      label: 'WIP',\n      layoutId: 'b9fda9fa-829a-4857-8292-ecfce4fe55c4',\n      pinned: false,\n      dynamic: false,\n      events: {\n        selected: (id, context) => this.onDocumentSelected(id, context)\n      } \n    }\n \n    //locals.Developer.navTabs.addTab(locals.navTreeTab)\n    locals.Developer.navTabs.addTab(locals.domTab)\n    locals.Developer.navTabs.addTab(locals.docsTab)\n    locals.Developer.navTabs.addTab(locals.wipTab)\n\n    await Aeppic.nextRenderPass()\n    locals.Developer.navTabs.showTab(locals.navTreeTab)\n    \n    this.onInspectorPathUpdated = () => locals.Developer.navTabs.showTab(locals.domTab)\n\n    Aeppic.Developer.on('inspector-path-updated', this.onInspectorPathUpdated)\n\n    this.restorePinnedTabs()\n\n    this.onNavigate = (event) => {\n      if (Aeppic.Developer.remoteDeveloperMode !== 'Server') {\n        return\n      }\n\n      event.stopPropagation()\n      event.preventDefault()\n\n      const documentId = event.detail.documentId\n      this.onDocumentSelected(documentId)\n    }\n\n    $refs.main.$root.$el.addEventListener('ae-will-navigate', this.onNavigate)\n  }\n\n  destroy() {\n    Aeppic.Developer.off('inspector-path-updated', this.onInspectorPathUpdated)\n  }\n\n  findMyTab(){\n    for(let tab of locals.Developer.navTabs.tabs) {\n      if(tab.layoutId === layout.id){\n        return tab\n      }\n    }\n  }\n\n  onDocumentSelected(id, context){\n    console.log('onDocumentSelected', id, context)\n    if(context){\n      this.showDocumentContext(context)\n    }\n    else if (id){\n      this.showDefaultContextForDocument(id)\n    }\n\n    $refs.main.$emit('onDocumentSelected', { id, context })\n  } \n\n  async getOpenDocument(id){\n    console.log('getOpenDocument', { id })\n \n    if(!id)\n      return \n\n    for(let i=0; i<locals.openDocuments.length; i++){\n      const doc=locals.openDocuments[i]\n\n      if(doc.id === id){\n        // locals.openDocuments.splice(i,1)\n        // locals.openDocuments.splice(0,0,doc)\n        return doc\n      }\n    } \n\n    const doc = await Aeppic.edit(id)\n\n    if(doc){\n      locals.openDocuments.splice(0,0,doc)\n      return doc\n    }\n    else{\n      return null\n    }\n  }\n \n  async showDefaultContextForDocument(id){\n    console.log('showDefaultContextForDocument', { id })\n\n    const doc = await this.getOpenDocument(id)\n\n    if(!doc)\n      return\n\n    const context = [doc.id]\n\n    const form = await Aeppic.getForm(doc.f)\n    console.log(form)\n    if (!form.document.a.includes('system')) {\n      context.push(doc.f.id)\n    }\n\n    this.showDocumentContext(context)\n  }\n\n  async showDocumentContext(context){\n    locals.Developer.devTabs.closeDynamicTabs()\n\n    let firstTab = null;\n    for(let id of context){\n      const doc = await this.getOpenDocument(id)\n\n      if(!doc) {\n        continue\n      }\n\n      // const formName = Aeppic.getDocumentForm(doc).document.data.name\n      const tab = this.addDocumentTab(doc, {reuseExisting: true}) \n      firstTab = !firstTab ? tab : firstTab\n    }\n\n    await Aeppic.nextRenderPass()\n    locals.Developer.devTabs.showTab(firstTab)\n  }\n  \n  addDocumentTab(doc, options){\n\n    let existingTab = null\n    \n    if (options && options.reuseExisting) {\n      existingTab = this.findTabForDocument(doc)\n      existingTab && locals.Developer.devTabs.closeTab(existingTab)\n    }\n\n    const tab = existingTab || {\n      get label() { \n        const name = tab.document ? (tab.document.data.name || tab.document.data.id) : '' \n        const star = tab.document && tab.document.hasRevisions ? ' *' : ''\n        return name + star\n      },\n      get labelPrefix() {\n        if (!tab.document)\n          return\n        return tab.document.f.id === 'control-form' ? 'Ct'\n             : tab.document.f.id === 'design-form' ? 'Ds'\n             : tab.document.f.id === 'layout-form' ? 'Ly'\n             : tab.document.f.id === 'list-form' ? 'Ls'\n             : tab.document.f.id === 'form' ? 'Fm'\n             : ''\n      },\n      // get sublabel() { return tab.document ? Aeppic.getDocumentForm(tab.document).name : ''},\n      document: doc,\n      design: 'developer-page, inspect',\n      watch: false,\n      pinned: false,\n      allowPin: false, // FIXME: pinning is buggy as hell\n      allowClose: true,\n      dynamic: true,\n      events: {\n        save: (d) => Aeppic.save(d),\n        'reset-edits': async (d) => await this.revertDocument(d),\n        'tab-pinned': (tab) => this.updateStoredSettings(),\n        'tab-unpinned': (tab) => this.updateStoredSettings(),\n        'tab-closed': (tab) => this.updateStoredSettings(),\n        'selected': (id) => this.onDocumentSelected(id),\n      }\n    }\n\n    if( locals.Developer.preferences.autopinTabs ){\n      Aeppic.watchRevisions(doc, (d)=>{\n        if(d === doc){\n          tab.pinned=true\n        }\n      })\n    }\n    \n    locals.Developer.devTabs.showTab(tab)\n    return tab\n  }\n\n  findTabForDocument(doc){\n    for(let tab of locals.Developer.devTabs.tabs){\n      if(tab.document === doc){\n        return tab\n      }\n    }\n  }\n\n  closeDocument(doc){\n    console.log('close')\n    const idx = locals.openDocuments.indexOf(doc)\n\n    if(idx >= 0){\n      locals.openDocuments.splice(idx,1)\n    }\n\n    // also close tab\n    const tab = this.findTabForDocument(doc)\n    if(tab){\n      locals.Developer.devTabs.closeTab(tab)\n    }\n  }\n\n  closeAllDocuments(){\n    const docsToClose = locals.openDocuments.slice(0)\n\n    for(let doc of docsToClose){\n      this.closeDocument(doc)\n    }\n  }\n\n  async revertDocument(doc){ \n     \n    const newDoc = await Aeppic.edit(doc.id)\n    const idx = locals.openDocuments.indexOf(doc)\n\n    if(idx >= 0){\n      locals.openDocuments.splice(idx,1, newDoc)\n    }\n\n    for(let tab of locals.Developer.navTabs.tabs){\n      if(tab.document === doc){\n        tab.document = newdoc\n      }\n    }\n\n    for(let tab of locals.Developer.devTabs.tabs){ \n      if(tab.document === doc){\n        tab.document = newDoc\n      } \n    }\n  }\n\n  async restorePinnedTabs(){\n    if(!locals.Developer.storedSettings.pinnedDocuments){\n      return\n    }\n\n    for(let id of locals.Developer.storedSettings.pinnedDocuments){\n      const doc = await this.getOpenDocument(id)\n\n      if(!doc){\n        continue\n      }\n\n      const tab = this.addDocumentTab(doc)\n      tab.pinned = true\n    }\n  }\n\n  async restoreRecentlyEditedDocuments(){\n    const result = []\n    \n    if(!locals.Developer.storedSettings.recentlyEditedDocuments){\n      return result\n    }\n\n    for(let id of locals.Developer.storedSettings.recentlyEditedDocuments){\n      // prefetch these for the docsTab\n      const doc = await this.getOpenDocument(id)\n      if (doc) {\n        result.push(doc)\n      }\n    }\n\n    return result\n  }\n\n  updateStoredSettings(tab){\n    locals.Developer.storedSettings.pinnedDocuments = locals.Developer.devTabs.tabs.filter(t=>t.pinned).map(t=>t.document.id)\n    locals.Developer.saveSettings()\n  }\n}\n\n\n\n","css":"","name":"main-view","packages":[],"template":"<ae-layout  layout-id=\"acebfbf8-e284-44b0-8ecd-3456ed4fb440\"\n            param-Developer=\"locals.Developer\"\n            @selected=\"(id) => controller.onDocumentSelected(id)\"\n            ref=\"main\"\n></ae-layout> "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"5a9a36c5-9d49-4ec6-b62c-26e77b5da99d","inheritedLocks":[null,null,null,null,null,null],"locks":[],"modified":{"at":"2026-02-06T12:15:16+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"7fd7c5cc-1eed-440b-8ce2-d6183cdb421b","previous":{"v":"8f80be89395a0ee3"},"stamps":[],"t":1770380116737,"v":"46f6a9ab5b2065e6"},{"id":"f9e65565-e569-463c-af90-354ff755617d","v":"8c703931a8e2ab75","previous":{"v":"0b07e79704312fb8"},"p":"8675fac2-1fb2-4704-bc87-de0345194e6a","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"main-view","applies":"","packages":[],"template":"<div style=\"xxposition:absolute; top:0; bottom:0; left:0; right:0; display:flex; flex-direction:column\">\n  <div>\n    <div  @drop.prevent.stop=\"controller.onDropFile($event)\" class=\"_CSS-dropzone\">\n      <div>\n        <select v-model=\"locals.selectedExportConfiguration\">\n          <option :value=\"null\">Apps/System (+ current Model -- NO files)</option>\n          <option v-for=\"manifest of locals.configuredExports\" :value=\"manifest.id\">{{manifest.data.name}}</option>\n        </select>\n        <button @click=\"controller.exportData()\"><ae-icon class=\"far fa-cloud-download\"></ae-icon> Export</button>\n        <button @click=\"$refs.file.click()\" style=\"margin-left:10px\"><ae-icon class=\"far fa-cloud-upload\"></ae-icon> Import</button>\n        <a href=\"/api/docs/_all\" download=\"_all.jsonl\">Download docs/_all</a>\n        <input ref=\"file\" @change=\"controller.onDropFile($event)\" type=\"file\" :accept=\"locals.extension + ',.zip,.jsonl'\" style=\"display:none\">\n      </div>\n      <div style=\"flex:1\"></div>\n      <div title=\"recompare\" @click=\"controller.recompare()\" v-show=\"locals.comparison && !locals.processing\" style=\"cursor:pointer; display:flex\">\n        <div style=\"margin-right:10px\">{{locals.fileName}}</div>\n        <div><ae-icon class=\"fas fa-redo\"></ae-icon></div>\n      </div>\n    </div>\n\n\n    <div v-show=\"locals.processing\" class=\"_CSS-progress-bar\">\n      <div class=\"_CSS-progress\" :style=\"{width: locals.progress + '%'}\"></div>\n      <div class=\"_CSS-progress-task\">{{locals.task}}</div>\n    </div>\n    \n    <!-- <div class=\"_CSS-buttons\" v-if=\"locals.selected && locals.selected.node && !locals.processing\">\n      <button v-show=\"(locals.selected.node.positionComparison === 'MISSING_IN_2')\" @click=\"controller.addIncoming(locals.selected.node)\">Add Incoming</button>\n      <button v-show=\"(locals.selected.node.positionComparison === 'MISSING_IN_2')\" @click=\"controller.addIncoming(locals.selected.node, true)\">\n        <div>Add Incoming</div>\n        <div><small>recursive</small></div>\n      </button>\n      <button v-show=\"(locals.selected.node.positionComparison === 'MISSING_IN_1')\" @click=\"controller.deleteExisting(locals.selected.node)\">Delete Existing</button>\n      <button v-show=\"(locals.selected.node.positionComparison === 'MOVED_HERE_IN_1') && !(locals.selected.node.positionComparison === 'MOVED_HERE_IN_2')\" @click=\"controller.moveExisting(locals.selected.node)\">Move Existing</button>\n      <button v-show=\"(locals.selected.node.dataComparison === 'DIFFERENT')\" @click=\"controller.copyIncoming(locals.selected.node)\">Copy Incoming</button>\n      <button v-show=\"(locals.selected.node.dataComparison === 'DIFFERENT')\" @click=\"controller.keepExisting(locals.selected.node)\">Keep Existing</button>\n      <button v-show=\"(locals.selected.node.dataComparison !== 'SAME') || (locals.selected.node.positionComparison !== 'SAME') || (locals.selected.node.formComparison !== 'SAME') || (locals.selected.node.differentDescendantsCount !== 0)\" @click=\"controller.assimilate(locals.selected.node, {testMode:false, recursive:true})\">\n        <div>Overwrite Existing</div>\n        <div><small>recursive</small></div>\n      </button>\n      <div v-if=\"(locals.selected.node.dataComparison !== 'SAME') || (locals.selected.node.positionComparison !== 'SAME') || (locals.selected.node.formComparison !== 'SAME') || (locals.selected.node.differentDescendantsCount !== 0)\" style=\"display: flex; align-items: center; padding: 10px;\">\n        <span v-if=\"controller.hasFiles()\"><input v-model=\"locals.includeFiles\" type=\"checkbox\"> include Files</input></span>\n        <span v-else style=\"color:var(--ae-opacity-2)\">(no Files in contained)</span>\n      </div>\n    </div> -->\n\n    <div class=\"_CSS-buttons\" v-if=\"locals.selected && locals.selected.node && !locals.processing\">\n      <button @click=\"controller.assimilate(locals.selected.node, locals.selected.recursive)\" v-show=\"(locals.selected.node.dataComparison !== 'SAME') || (locals.selected.node.positionComparison !== 'SAME') || (locals.selected.node.formComparison !== 'SAME') || (locals.selected.node.differentDescendantsCount !== 0)\" style=\"min-width:90px; min-height:50px\">\n        <ae-icon class=\"fas fa-fist-raised\"></ae-icon> Apply\n      </button>\n      <button @click=\"controller.toggleSkip(locals.selected.node, locals.selected.recursive)\" v-show=\"(locals.selected.node.dataComparison !== 'SAME') || (locals.selected.node.positionComparison !== 'SAME') || (locals.selected.node.formComparison !== 'SAME') || (locals.selected.node.differentDescendantsCount !== 0)\" style=\"min-width:90px; min-height:50px\" :class=\"{'_CSS-button-active': controller.hasOperation(locals.selected.node, 'SKIP')}\">\n        <ae-icon class=\"far fa-sheep\"></ae-icon> Skip\n      </button>\n\n      <div style=\"display:flex\">\n        <div v-if=\"locals.selected.recursive || (locals.selected.node.positionComparison && (locals.selected.node.positionComparison === 'MISSING_IN_2'))\" @click=\"controller.addIncoming(locals.selected.node, locals.selected.recursive)\" class=\"_CSS-action-icon\" :class=\"{'_CSS-has-action': locals.selected.node.positionComparison && (locals.selected.node.positionComparison === 'MISSING_IN_2'), '_CSS-action-taken': controller.hasOperation(locals.selected.node, 'ADD_INCOMING')}\" title=\"only in incoming tree | add!\">\n          <ae-icon  class=\"fas fa-2x fa-file-medical\" key=\"1\"></ae-icon>\n        </div>\n        <div v-if=\"locals.selected.recursive || (locals.selected.node.positionComparison && (locals.selected.node.positionComparison === 'MISSING_IN_1'))\" @click=\"controller.deleteExisting(locals.selected.node, locals.selected.recursive)\" class=\"_CSS-action-icon\" :class=\"{'_CSS-has-action': locals.selected.node.positionComparison && (locals.selected.node.positionComparison === 'MISSING_IN_1'), '_CSS-action-taken': controller.hasOperation(locals.selected.node, 'DELETE_EXISTING')}\" title=\"only in existing tree | delete!\">\n          <ae-icon  class=\"fas fa-2x fa-file-minus\" key=\"2\"></ae-icon>\n        </div>\n        <div v-if=\"(locals.selected.node.positionComparison && (locals.selected.node.positionComparison === 'MOVED_HERE_IN_2'))\" @click=\"controller.moveExisting(locals.selected.node, locals.selected.recursive)\" class=\"_CSS-action-icon\" :class=\"{'_CSS-has-action': locals.selected.node.positionComparison && (locals.selected.node.positionComparison === 'MOVED_HERE_IN_2'), '_CSS-action-taken': controller.hasOperation(locals.selected.node, 'MOVE_EXISTING')}\" title=\"moved (here in existing tree) | move away!\">\n          <ae-icon class=\"fas fa-2x fa-file-export\"  key=\"4\"></ae-icon>\n        </div>\n        <div v-else-if=\"locals.selected.recursive || (locals.selected.node.positionComparison && (locals.selected.node.positionComparison === 'MOVED_HERE_IN_1'))\" @click=\"controller.moveExisting(locals.selected.node, locals.selected.recursive)\" class=\"_CSS-action-icon\" :class=\"{'_CSS-has-action': locals.selected.node.positionComparison && (locals.selected.node.positionComparison === 'MOVED_HERE_IN_1'), '_CSS-action-taken': controller.hasOperation(locals.selected.node, 'MOVE_EXISTING')}\" title=\"moved (here in incoming tree) | move here!\">\n          <ae-icon  class=\"fas fa-2x fa-file-import\"  key=\"3\"></ae-icon>\n        </div>\n        <div v-if=\"locals.selected.recursive || (locals.selected.node.formComparison && (locals.selected.node.formComparison !== 'SAME'))\"  @click=\"controller.changeExisting(locals.selected.node, locals.selected.recursive)\" class=\"_CSS-action-icon\" :class=\"{'_CSS-has-action': locals.selected.node.formComparison && (locals.selected.node.formComparison !== 'SAME'), '_CSS-action-taken': controller.hasOperation(locals.selected.node, 'CHANGE_EXISTING') || controller.hasOperation(locals.selected.node, 'UPGRADE_EXISTING')}\" :title=\"locals.selected.node.formComparison && (locals.selected.node.formComparison === 'FORM_CHANGED') ? 'form changed | change form!' : 'form version changed | upgrade!' \">\n          <ae-icon class=\"fas fa-2x fa-file-invoice\" key=\"5\"></ae-icon>\n        </div>\n        <div v-if=\"locals.selected.recursive || (locals.selected.node.dataComparison && (locals.selected.node.dataComparison !== 'SAME'))\" @click=\"controller.copyIncoming(locals.selected.node, {recursive:locals.selected.recursive, keepForm:true})\" class=\"_CSS-action-icon\" :class=\"{'_CSS-has-action': locals.selected.node.dataComparison && (locals.selected.node.dataComparison !== 'SAME'), '_CSS-action-taken': controller.hasOperation(locals.selected.node, 'COPY_INCOMING')}\"  title=\"different data | copy!\">\n          <ae-icon  class=\"fas fa-2x fa-file-edit\" key=\"6\"></ae-icon>\n        </div>\n      </div>\n      \n      <div v-if=\"(locals.selected.node.dataComparison !== 'SAME') || (locals.selected.node.positionComparison !== 'SAME') || (locals.selected.node.formComparison !== 'SAME') || (locals.selected.node.differentDescendantsCount !== 0)\" style=\"display: flex; flex-wrap:wrap; align-items: center;\">\n        <div v-if=\"locals.selected.node.differentDescendantsCount !== 0\" style=\"margin-left:15px\"><input v-model=\"locals.selected.recursive\" type=\"checkbox\" title=\"process entire subtree, except skipped nodes\"> recursive</input></div>\n        <div v-if=\"controller.hasFiles()\" style=\"margin-left:15px\"><input v-model=\"locals.includeFiles\" type=\"checkbox\"> upload files</input></div>\n      </div>\n    </div>\n  </div>\n\n  <ae-layout v-if=\"locals.selected\" layout-id=\"35303033-f60a-49b7-b3ef-9cc3bb00f129\" :param-selected=\"locals.selected\"></ae-layout>\n</div>","css":"\n._CSS-dropzone{\n  display: flex;\n  flex-direction: row;\n  padding: 20px;\n  color: white;\n  background: var(--ae-primary);\n  border: 1px gray dashed;\n}\n\n._CSS-buttons button {\n  min-height: 50px;\n  min-width: 90px;\n  font-weight: bold;\n}\n\n._CSS-buttons button:hover {\n  background: var(--ae-background-d4);\n\n}\n\n._CSS-button-active {\n    background: var(--ae-background-d4);\n    /* color: green; */\n    border-top: solid 5px var(--ae-background-d4);\n    border-bottom: solid 5px green;\n    box-sizing: border-box;\n}\n\n._CSS-action-icon {\n  padding: 8px 0px 8px 8px;\n  cursor: pointer;\n  color: var(--ae-foreground-l4);\n}\n\n._CSS-has-action {\n  color: var(--ae-foreground-l1);\n}\n\n._CSS-action-taken {\n  color: green!important;\n}\n\n._CSS-action-icon:hover {\n  padding: 8px 0px 8px 8px;\n  /* background: var(--ae-background-d3); */\n  color: var(--ae-foreground-l1);\n}\n\n._CSS-progress-bar{\n  height: 20px;\n  background: var(--ae-primary-100);\n  border: solid 1px var(--ae-border-color);\n  overflow: hidden;\n  position: relative;\n}\n\n._CSS-progress{\n  height: 20px;\n  background: var(--ae-primary-300);\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n}\n\n._CSS-progress-task{\n  position: absolute;\n  top:0;\n  bottom:2px;\n  left:0;\n  right:0;\n  text-align: center;\n  font-size: 12px;\n}\n\n._CSS-buttons{\n  display: flex;\n  flex-direction: row;\n}\n\n\n/* DIALOG */\n\n._CSS-dialog__header {\n  flex: 1;\n  display: flex;\n  justify-content: space-between;\n}\n\n._CSS-dialog__commands {\n  flex: 1;\n  display: flex;\n  justify-content: space-between;\n}\n","controller":"class Controller{\n\n  async init(){\n    this.EXPORT_FILE_EXTENSION = '.aepx'\n\n    locals.extension = this.EXPORT_FILE_EXTENSION\n    locals.comparison = null\n    locals.message = ''\n    locals.assimilateLog = []\n    locals.progress = 0\n    locals.processing = false\n    locals.stopProcessing = false\n    locals.task = ''\n    locals.includeFiles = false\n    locals.fileName = ''\n    locals.configuredExports = []\n    locals.selected = null\n    locals.opCount = 1\n\n    this.deleteList = []\n    this.mergeTab = this.findMyTab()\n    this.mergeTab.events = this.mergeTab.events || {}\n    this.mergeTab.events['tab-closed'] = ()=>this.closeNavigationPane()\n\n    // Aeppic.subscribe('f.id:1327bd9b-34e5-4c38-bc43-5e709d8c01a2', (manifests)=> {\n    //   locals.configuredExports.splice(0)\n    //   locals.configuredExports.push(...manifests)\n    // })\n    \n    const refs = await Aeppic.Preferences.getSetting('aeppic:developer:exportConfigurations') || []\n    locals.configuredExports = await Aeppic.getAll(refs)\n\n    let self = this\n\n    locals.selected = {\n      node: null,\n      showAll: false,\n      recursive: false,\n      getOperationText(_node){\n        const node = _node || this.node\n        let  text = ''\n\n        if(self.hasOperation(node, 'ADD_INCOMING'))\n          text = self.concatText(text, 'added')\n        if(self.hasOperation(node, 'DELETE_EXISTING'))\n          text = self.concatText(text, 'deleted')\n        if(self.hasOperation(node, 'MOVE_EXISTING'))\n          text = self.concatText(text, 'moved')\n        if(self.hasOperation(node, 'CHANGE_EXISTING'))\n          text = self.concatText(text, 'changed form')\n        if(self.hasOperation(node, 'UPGRADE_EXISTING'))\n          text = self.concatText(text, 'upgraded form')\n        if(self.hasOperation(node, 'COPY_INCOMING'))\n          text = self.concatText(text, 'copied')\n        if(self.hasOperation(node, 'SKIP'))\n          text = self.concatText(text, 'skip')\n\n        return text\n      },\n\n      getDifferenceText(_node){\n        const node = _node || this.node\n        let result = ''\n\n        if(!node)\n          return result\n\n        if(node.positionComparison === 'MISSING_IN_1')\n          result += 'only in existing tree'\n        else if(node.positionComparison === 'MISSING_IN_2')\n          result += 'only in incoming tree'\n        else if(node.positionComparison === 'MOVED_HERE_IN_2')\n          result += 'moved (here in existing tree)'\n        else if(node.positionComparison === 'MOVED_HERE_IN_1' && node.document1)\n          result += 'moved (here in incoming tree)'\n        else if(node.positionComparison === 'PARENT_MOVED')\n          result += 'parent moved'\n        else if(node.formComparison === 'DIFFERENT')\n          result += 'form changed'\n        else if(node.formComparison === 'DIFFERENT_VERSION')\n          result += 'form version changed'\n\n        if(node.dataComparison === 'DIFFERENT'){\n          if(result)\n            result += ', '\n\n          result += 'different data'\n        }\n\n        return result || 'same'\n      },\n\n      get resultDocument(){\n        return this.node && this.node.$resultDocument\n      },\n\n      set resultDocument(value){\n        if(this.node)\n          this.node.$resultDocument = value\n      }\n    }\n\n    this.documentsJsonl = null\n  }\n\n  destroy() {\n    if(this.zip){\n      this.zip.close()\n      this.zip = null\n    }\n\n    if(this.fileObjectUrl){\n      URL.revokeObjectURL(this.fileObjectUrl)\n      this.fileObjectUrl = null\n    }\n  }\n\n  concatText(text1, text2) {\n    if(text1){\n      return `${text1}, ${text2}`\n    }\n    else {\n      return text2\n    }\n  }\n\n  initNavigationPane(rootDocuments, rootDifferenceNode, selected, onSelected){\n    if(!params.Developer){\n      console.error('no developer is set')\n      return\n    }\n\n    const Developer = params.Developer\n    const openNodes = new Set(['root'])\n\n    for(const doc of rootDocuments){\n      for(const a of (doc.a || [])){\n        openNodes.add(a)\n      }\n    }\n\n    this.mergeNavTab = {\n      label: 'Merge',\n      layoutId: '7b66279d-ab89-43de-9ee0-91763f456047',\n      pinned: false,\n      dynamic: false,\n      params: {\n        openNodes: Array.from(openNodes.values()),\n        selected: selected,\n        node: rootDifferenceNode\n      },\n      events: {\n        selected: onSelected\n      },\n    }\n\n    Developer.navTabs.showTab(this.mergeNavTab)\n  }\n\n  closeNavigationPane() {\n    for(const tab of params.Developer.navTabs.tabs){\n      if(tab.label === 'Merge'){\n        params.Developer.navTabs.closeTab(tab)\n      }\n    }\n  }\n\n  findMyTab(){\n    for(let tab of params.Developer.devTabs.tabs) {\n      if(tab.layoutId === layout.id){\n        return tab\n      }\n    }\n  }\n\n  async exportData(withFiles) {\n\n    if(locals.processing){\n      return\n    }\n\n    locals.processing = true\n    const options = {\n      json: 'lines', \n      content: 'loaded', \n      compress: true,\n      transportManifestId: locals.selectedExportConfiguration, \n      includeBinaryContent: withFiles,\n      filename: locals.selectedExportConfiguration ? '' : 'aeppic',\n      extension: this.EXPORT_FILE_EXTENSION\n    }\n\n    // FIXME:\n    // __start\n    console.warn('FIXME: Aeppic is lazy. I will now execute (in order) Aeppic.find(\"a:system\") and Aeppic.find(\"a:apps\") to make sure everything is loaded')\n    await Aeppic.find('a:system', { size: 9999999 })\n    await Aeppic.find('a:apps', { size: 9999999 })\n    // __end\n\n    await Aeppic.downloadModel(options, (progress, task) => {\n      locals.progress = progress\n      locals.task = task\n    })\n    locals.processing = false\n    locals.task = ''\n  }\n\n  async onDropFile(event){\n    var files = event.target.files || event.dataTransfer.files\n\n    if (!files.length || this.processing)\n      return\n\n    locals.processing = true\n\n    if(this.zip){\n      this.zip.close()\n      this.zip = null\n    }\n\n    if(this.fileObjectUrl){\n      URL.revokeObjectURL(this.fileObjectUrl)\n      this.fileObjectUrl = null\n    }\n\n    const fileName = files[0].name\n    if (fileName.endsWith('.zip') || fileName.endsWith(this.EXPORT_FILE_EXTENSION)) {\n      this.zip = this.ZipReader()\n      await this.zip.openFromBlob(files[0])\n      this.documentsJsonl = await this.zip.readAsData64Uri('documents.jsonl', (progress, task) => {\n        locals.progress = progress\n        locals.task = `reading documents ...`\n      })\n    }\n    else if (fileName.endsWith('.jsonl')) {\n      this.fileObjectUrl = URL.createObjectURL(files[0])\n      this.documentsJsonl = this.fileObjectUrl\n    }\n    locals.fileName = fileName\n    locals.processing = false\n    locals.task = ''\n\n    await this.compare(this.documentsJsonl)\n\n    locals.includeFiles = this.hasFiles()\n  }\n\n  async compare(documentsJsonl){\n    locals.processing = false\n    locals.progress = 0\n    locals.comparison = null\n    locals.selected.node = null\n\n    this.closeNavigationPane()\n\n    if(!documentsJsonl || locals.processing){\n      return\n    } \n\n    locals.processing = true\n\n    locals.task = 'pre-fetching all Children of ROOT...'\n    // // FIXME:\n    // // __start\n    console.warn('FIXME: Aeppic is lazy. I will fetch all Children of ROOT to make improve comparison runtime')\n    const rootChildren = await Aeppic.find(`p:root`, { size: 9999 })\n\n    await Aeppic.find(rootChildren.map(c => `a:${c.id}`).join(' OR '), { size: 999999 })\n\n    // await Aeppic.find('a:system', { size: 9999999 })\n    // await Aeppic.find('a:apps', { size: 9999999 })\n    // // __end\n\n    locals.task = 'loading model ...'\n\n    \n    this.incomingAeppicInstance = await Aeppic.newAeppic(documentsJsonl, '#otherAeppicVue')\n    locals.task = 'comparing ...'\n    const manifest = await this.getTransportManifest()\n    const rootDocumentIds = manifest && manifest.rootDocumentIds || ['root']\n    locals.comparison = await Aeppic.compareDocumentTrees(this.incomingAeppicInstance, rootDocumentIds, (progress)=>{\n      locals.progress = progress\n    })\n\n    locals.message = `${locals.comparison.differentDescendantsCount} differences.`\n    \n    this.incomingAeppicInstance.renderLayout('55429207-71d1-431a-82c8-eeda5b55bb87', {\n      params: {\n        selected: locals.selected\n      }\n    })\n\n    const openNodes = (manifest && manifest.rootDocuments) || []\n    this.initNavigationPane(openNodes, locals.comparison, locals.selected, node => this.showDocuments(node))\n    locals.processing = false;\n    locals.task = ''\n  }\n\n  hasFiles() {\n    return this.zip && (this.zip.length > 1)\n  }\n\n  async getTransportManifest() {\n    if(!this.incomingAeppicInstance) {\n      return\n    }\n\n    const manifest = await this.incomingAeppicInstance.findOne(`p:root AND f.id:1327bd9b-34e5-4c38-bc43-5e709d8c01a2`)\n\n    if (!manifest) {\n      console.error('no manifest found in transport file')\n      return\n    }\n\n    const rootDocuments = await this.incomingAeppicInstance.getAll(manifest.data.rootDocuments || [])\n    const result = {\n      manifest: manifest,\n      entries : [],\n      rootDocumentIds : [],\n      rootDocuments: []\n    }\n    for (const entry of rootDocuments) {\n      result.entries.push(entry)\n      if(entry.data.rootDocument && entry.data.rootDocument.id){\n        result.rootDocumentIds.push(entry.data.rootDocument.id)\n        const doc = await this.incomingAeppicInstance.get(entry.data.rootDocument.id)\n        doc && result.rootDocuments.push(doc)\n      }\n      result.rootDocuments.push()\n    }\n\n    return result\n  }\n\n  recompare(){\n    if(this.documentsJsonl){\n      this.closeNavigationPane();\n      this.compare(this.documentsJsonl);\n    }\n  }\n\n  showDocuments(node){\n    locals.selected.node = node\n    locals.selected.recursive = false\n  }\n\n  async addIncoming(node, recursive) {\n    await this.applyOperation(this._addIncoming, node, recursive)\n  }\n\n  async _addIncoming(node){\n    if(node.positionComparison !== 'MISSING_IN_2'){\n      return\n    }\n\n    const incoming = node.document1\n    let existing = await Aeppic.get(incoming.id)\n\n    if(existing){\n      console.error(`cannot import existing document: ${existing.id}`)\n      return\n    }\n \n    const parent = await Aeppic.get(incoming.p)\n\n    if(!parent){\n      console.error(`cannot import document, parent missing: ${incoming.p}`)\n      return\n    }\n\n    if(!await this.ensureForm(incoming)){\n      console.error(`cannot import document, form missing: ${incoming.f.id}@${incoming.f.v}`)\n      return\n    }\n\n    // check if a doc with this id has previously exisited\n    if (this.lastRestore && ((Date.now()-this.lastRestore) < 1000)) { \n      await this.sleep(1000)\n    }\n    \n    const historic = await Aeppic._history.latest(incoming.id)\n    \n    if (historic && historic.a.includes('recycler')) {\n      // new is actually an undelete\n      console.log('perform undelete')\n      \n      this.lastRestore = Date.now()\n      await this.importWithAncestry(historic)\n      Aeppic.restoreSingleDocumentFromRecycler(historic.id, incoming.p)\n      await this._copyIncoming(node)\n    }\n    else {\n      // regular new\n      existing = await Aeppic.new(incoming.f, incoming.p, {id:incoming.id, exactFormVersion: true, force:true})\n  \n      if(!existing){\n        console.error(`could not create document. form missing?`)\n        return\n      }\n    \n      existing.setData(incoming.data, {excludeFileFieldsfalse: true, cloneFromDefault:false, onlyMatchingFields:true})\n      await this.setFileData(incoming, existing, node.document2)\n      Aeppic.save(existing)\n      this.setOperation(node, 'ADD_INCOMING')\n    }\n  }\n\n\n  async deleteExisting(node, recursive) {\n    await this.applyOperation(this._deleteExisting, node, recursive, {enlistOnly: recursive})\n    await this.deleteEnlistedDocuments()\n  }\n\n  async _deleteExisting(node, options){\n    if(node.positionComparison !== 'MISSING_IN_1'){\n      return\n    }\n\n    const enlistOnly = options && options.enlistOnly\n\n    const existing = await Aeppic.edit(node.document2.id)\n\n    if(!existing){\n      console.error(`cannot delete non-existing document: ${node.document2.id}`)\n      return\n    }\n\n    if(enlistOnly){\n      this.deleteList.push(existing.id)\n    }\n    else{\n      Aeppic.delete(existing.id)\n    }\n    \n    \n    this.setOperation(node, 'DELETE_EXISTING')\n    this.markNodesProcessed(node, 'DELETE_EXISTING')\n  }\n\n\n  async copyIncoming(node, options) {\n    const recursive = options && options.recursive\n    await this.applyOperation(this._copyIncoming, node, recursive, options)\n  }\n\n  async _copyIncoming(node, options) {\n    if(node.dataComparison !== 'DIFFERENT'){\n      return\n    }\n\n    const keepForm = options && options.keepForm\n    const incoming = node.document1\n\n    let existing = await Aeppic.edit(node.document1.id)\n\n    if(!existing){\n      console.error(`cannot copy non-existing document: ${node.document1.id}`)\n      return\n    }\n\n    if(!this.areOfSameFormVersion(incoming, existing) && !keepForm){\n      if(!await this.ensureForm(incoming)){\n        console.error(`could not copy document. form missing?`)\n        return\n      }\n\n      this.setOperation(node, incoming.f.id === existing.f.id ? 'UPGRADE_EXISTING' : 'CHANGE_EXISTING')\n\n      const newFormVersion = Aeppic.getDocumentForm(incoming)\n      Aeppic.change(existing, newFormVersion, {initialData: incoming.data})\n      existing = await Aeppic.edit(node.document1.id)\n    }\n    \n    // TODO: initalData above doesnt work 100%\n    existing.setData(incoming.data, {excludeFileFieldsfalse: true, cloneFromDefault:false})\n\n    await this.setFileData(incoming, existing, node.document2)\n\n    // WARNING: hotfixed form-merging\n    if (existing.f.id === 'form') {\n      const existingForm = await Aeppic.getForm({ id: incoming.id, text: '', v: incoming.v })\n      if (existing) {\n        console.error('[WARN]: form is already existing! Aborting merging this change {incoming}', incoming, ' {existing}', existingForm)\n        return\n      }\n\n      Aeppic._startPendingFieldUploads(existing)\n      const changes = Aeppic._model.save(document, { version: incoming.v })\n      Aeppic._handleChanges(changes)\n    } else {\n      Aeppic.save(existing)\n    }\n    // WARNING: hotfixed form-merging\n\n\n    this.setOperation(node, 'COPY_INCOMING')\n  }\n\n  async changeExisting(node, recursive) {\n    await this.applyOperation(this._changeExisting, node, recursive)\n  }\n\n  async _changeExisting(node) {\n    if((node.formComparison !== 'DIFFERENT') && (node.formComparison !== 'DIFFERENT_VERSION')){\n      return\n    }\n\n    const incoming = node.document1\n\n    let existing = await Aeppic.edit(node.document1.id)\n\n    if(!existing){\n      console.error(`cannot change/upgrade non-existing document: ${node.document1.id}`)\n      return\n    }\n\n    if(!this.areOfSameFormVersion(incoming, existing)){\n      if(!await this.ensureForm(incoming)){\n        console.error(`could not change/upgrade document. form missing?`)\n        return\n      }\n\n      this.setOperation(node, incoming.f.id === existing.f.id ? 'UPGRADE_EXISTING' : 'CHANGE_EXISTING')\n\n      const newFormVersion = Aeppic.getDocumentForm(incoming)\n      Aeppic.change(existing, newFormVersion)\n    }\n  }\n\n\n  async toggleSkip(node, recursive) {\n    if(!this.hasOperation(node, 'SKIP')){\n      await this.applyOperation(this._skipExisting, node, recursive)\n    }\n    else{\n      await this.applyOperation(this._unskipExisting, node, recursive)\n    }\n  }\n\n  async _skipExisting(node){\n    if (this.hasDifference(node) || node.differentDescendantsCount) {\n      this.setOperation(node, 'SKIP')\n    }\n  }\n\n  async _unskipExisting(node){\n    this.unsetOperation(node, 'SKIP')\n  }\n\n  async moveExisting(node, recursive) {\n    await this.applyOperation(this._moveExisting, node, recursive)\n  }\n\n  async _moveExisting(node){\n    const incoming = node.document1\n    const existing = await Aeppic.get(node.document2.id)\n    const newParent = await Aeppic.get(node.document1.p)\n\n    if(!existing){\n      console.error(`cannot move non-existing document: ${node.document2.id}`)\n      return\n    }\n\n    if(!newParent){\n      console.error(`cannot move to non-existing parent: ${node.document1.p}`)\n      return\n    }\n\n    Aeppic.move(existing.id, incoming.p)\n    this.setOperation(node, 'MOVE_EXISTING')\n  }\n\n\n  async assimilate(node, recursive) {\n    await this.applyOperation(this._assimilate, node, recursive, {enlistDeleteOnly: recursive})\n    await this.deleteEnlistedDocuments()\n  }\n\n  async _assimilate(node, options){\n\n    const enlistDeleteOnly = options && options.enlistDeleteOnly\n    const incoming = node.document1\n\n    if (node.positionComparison === 'MISSING_IN_1') {\n      this.logAssimilateAction(node.document2, 'delete')\n      await this._deleteExisting(node, {enlistOnly: enlistDeleteOnly})\n    }\n    else if (node.positionComparison === 'MISSING_IN_2') {\n      this.logAssimilateAction(node.document1, 'add')\n      await this._addIncoming(node)\n    }\n    else if (node.positionComparison === 'MOVED_HERE_IN_1') {\n      this.logAssimilateAction(node.document1, 'move here')\n      await this._moveExisting(node)\n    }\n    else if (node.positionComparison === 'MOVED_HERE_IN_2') {\n      this.logAssimilateAction(node.document1, 'move away')\n      await this._moveExisting(node)\n    }\n\n    if ((node.document1 && node.document2) && ((node.formComparison === 'DIFFERENT') || (node.formComparison === 'DIFFERENT_VERSION'))){\n      await this._changeExisting(node)\n    }\n\n    if ((node.document1 && node.document2) && (node.dataComparison === 'DIFFERENT')){\n      this.logAssimilateAction(node.document1, 'copy')\n      await this._copyIncoming(node)\n    }\n  }\n\n  async applyOperation(operationFn, node, recursive, options, isRecursing) {\n\n    if (!isRecursing) {\n      locals.processing = true\n      locals.stopProcessing = false\n      this.docsToProcess = node.differentDescendantsCount\n      this.docsProcessed = 0\n    }\n\n    const skip = isRecursing && this.hasOperation(node, 'SKIP') && (operationFn !== this._skipExisting) && (operationFn !== this._unskipExisting)\n    !skip && await operationFn.apply(this, [node, options])\n    \n    if ((node.dataComparison && (node.dataComparison !== 'SAME'))\n     || (node.positionComparison && (node.positionComparison !== 'SAME') && (node.positionComparison !== 'PARENT_MOVED'))\n     || (node.formComparison && (node.formComparison !== 'SAME'))) {\n       //this.docsProcessed += (this.hasOperation(node, 'DELETE_EXISTING') ? node.differentDescendantsCount : 1)\n       this.docsProcessed++\n    }\n\n    this.setProgress(this.docsToProcess, this.docsProcessed)\n\n    if(recursive && node.differentDescendantsCount /*&& !this.hasOperation(node, 'DELETE_EXISTING')*/ && !locals.stopProcessing){\n      for(let childNode of node.children){\n        await this.applyOperation(operationFn, childNode, true, options, true)\n      }\n    }\n\n    if(!isRecursing){\n      locals.processing = false\n    }\n  }\n\n  async deleteEnlistedDocuments(){\n    if(!this.deleteList.length){\n      return\n    }\n\n    locals.processing = true\n    locals.task = 'deleting documents...'\n\n    for(let i=0; i<this.deleteList.length; i++){\n      const id = this.deleteList[i]\n      const doc = await Aeppic.get(id)\n      doc && Aeppic.delete(id)\n      this.setProgress(this.deleteList.length, i)\n    }\n    \n    this.deleteList.length = 0\n    locals.task = ''\n    locals.processing = false\n  }\n\n  setOperation(node, operation) {\n    if(!node.$operation) {\n      node.$operation = new Set()\n    }\n\n    node.$operation.add(operation)\n    node.$opCount = locals.opCount ++\n  }\n\n  unsetOperation(node, operation) {\n    if(!node.$operation) {\n      return\n    }\n\n    node.$operation.delete(operation)\n    node.$opCount = locals.opCount ++\n  }\n\n  hasOperation(node, operation) {\n    return node.$opCount && node.$operation && node.$operation.has(operation)\n  }\n\n  hasDifference(node) {\n    return ((node.dataComparison && (node.dataComparison !== 'SAME'))\n      || (node.positionComparison && (node.positionComparison !== 'SAME') && (node.positionComparison !== 'PARENT_MOVED'))\n      || (node.formComparison && (node.formComparison !== 'SAME')))\n  }\n\n  markNodesProcessed(node, operation) {\n    this.setOperation(node, operation)\n    for(let childNode of node.children){\n      this.markNodesProcessed(childNode, operation)\n    }\n  }\n\n  setProgress(total, done){\n    locals.progress = Math.floor((total === 0 ? 0 : done/total) * 100)\n  }\n\n  logAssimilateAction(doc, action) {\n    const id = doc.id\n    const v = doc.v\n    const name = doc.data.name || 'unnamed'\n    // console.log('=====> assimilate:', action, `${name}@${v}`, id)\n    const lastEntry = locals.assimilateLog[locals.assimilateLog.length-1]\n    let entry\n\n    if (lastEntry && lastEntry.id === id) {\n      lastEntry.actions.push(action)\n      entry = lastEntry\n    }\n    else{\n      entry = {\n        id: id,\n        actions: [action]\n      }\n    }\n\n    locals.assimilateLog.push(entry)\n    return entry\n  }\n\n  async ensureForm(document) {\n    if (await Aeppic.getForm({id:document.f.id, v:document.f.v})) {\n      // form is already available. nothing to do\n      return true\n    }\n\n    const incomingForm = this.incomingAeppicInstance && await this.incomingAeppicInstance.getForm({id:document.f.id, v:document.f.v})\n\n    if (!incomingForm) {\n      // form is not available in import. error\n      return false\n    }\n\n    // make sure that the form's form is available\n    if (!await this.ensureForm(incomingForm.document)) {\n      console.error('missing required form form-version')\n      return false\n    }\n\n    // import the incoming form\n    // console.log(`=======> add detached form ${incomingForm.document.data.name}@${incomingForm.document.v} for ${document.data.name || 'unnamed'}@${document.v}` )\n    Aeppic.saveDetachedVersion(incomingForm.document)\n    return true\n  }\n\n  areOfSameFormVersion(doc1, doc2) {\n    return (doc1.f.id === doc2.f.id) && (doc1.f.v === doc2.f.v)\n  }\n\n  async importWithAncestry(document) {\n\n    for(const a of document.a){\n      const ancestor = await Aeppic.History.latest(a)\n\n      if(!ancestor){\n        console.error(`could not import ancestor ${a} of ${document.id}`)\n      }\n      else{\n        await Aeppic.import(ancestor)\n      }\n    }\n\n    await Aeppic.import(document)\n  }\n\n  copyFields(sourceDoc, targetDoc){\n    for(let fieldName in sourceDoc.data){\n      if(targetDoc.data.hasOwnProperty(fieldName)){\n        targetDoc.data[fieldName] = sourceDoc.data[fieldName]\n      }\n    }\n  }\n\n  async setFileData(sourceDocument, targetDocument, targetOriginal) {\n    \n    if(!locals.includeFiles) {\n      return\n    }\n\n    // if(!this.areOfSameFormVersion(sourceDocument, targetDocument)) {\n    //   console.error('for file copies must be of same form, for now')\n    //   // todo: check if file field is available on both docs below\n    //   debugger\n    //   return\n    // }\n\n    const form = Aeppic.getDocumentForm(targetDocument)\n\n    for(let field of form.fields){\n      if(field.subType !== 'file' && field.subType !== 'image'){\n        continue\n      }\n\n      const sourceField = sourceDocument.data[field.name]\n      const targetField = targetDocument.data[field.name]\n      const targetOriginalField = targetOriginal && targetOriginal.data[field.name]\n      if (sourceField && sourceField.dataUrl){ \n       \n        if(targetOriginalField && targetOriginalField.dataUrl === sourceField.dataUrl){\n          // dataUrl of incoming is same as existing was before copying fields \n          continue\n        }\n\n        const entry = `content/${this.a2hex(sourceField.dataUrl)}`\n        const blob = this.zip && await this.zip.readAsBlob(entry)\n\n        if(blob){\n          targetDocument.setFile(field.name, blob, {type: sourceField.type, name: sourceField.name})\n        }\n      }\n    }\n  }\n\n  a2hex(str) {\n    var arr = [];\n    for (var i = 0, l = str.length; i < l; i ++) {\n      var hex = Number(str.charCodeAt(i)).toString(16);\n      arr.push(hex);\n    }\n    return arr.join('');\n  }\n\n  async sleep(millis) {\n    return new Promise((resolve, reject) => {\n      setTimeout(() => {\n        resolve()\n      }, millis)\n    })\n  }\n\n\n  //-------------------\n  //\n  //  zip reader\n  //\n  //-------------------\n\n\n \n  ZipReader() {\n    return {\n      _zipReader: null,\n      _entries: new Map(),\n\n      async openFromUrl(url) {\n        const self = this\n\n        return new Promise((resolve, reject) => {\n          zip.createReader(new zip.HttpReader(url), async (reader) => {\n            self._zipReader = reader\n            await self._readEntries()\n            resolve()\n          }, reject)\n        })\n      },\n\n      async openFromBlob(blob) {\n        const self = this\n\n        return new Promise((resolve, reject) => {\n          zip.createReader(new zip.BlobReader(blob), async (reader) => {\n            self._zipReader = reader\n            await self._readEntries()\n            resolve()\n          }, reject)\n        })\n      },\n\n      get entries() {\n        return this._entries.keys()\n      },\n\n      get length() {\n        return this._entries.size\n      },\n\n      async _readEntries() {\n        if (!this._zipReader) {\n          return\n        }\n\n        const self = this\n\n        return new Promise((resolve, reject) => {\n          \n          self._zipReader.getEntries((entries) => {\n            self._entries.clear()\n            for (let entry of entries) {\n              self._entries.set(entry.filename, entry)\n            }\n            resolve()\n          }, (error) => {\n            reject(error)\n          })\n        })  \n      },\n\n      async readAsText(entry) {\n        const e = this._entries.get(entry)\n\n        if (!e) {\n          return\n        }\n\n        return new Promise((resolve, reject) => {\n          e.getData(new zip.TextWriter(), (text) => {\n            resolve(text)\n          }, null, true)\n        })\n      },\n\n      async readAsBlob(entry) {\n        const e = this._entries.get(entry)\n\n        if (!e) {\n          return\n        }\n\n        return new Promise((resolve, reject) => {\n          e.getData(new zip.BlobWriter(), (blob) => {\n            resolve(blob)\n          }, null, true)\n        })\n      },\n\n      async readAsData64Uri(entry, cbProgress) {\n        const e = this._entries.get(entry)\n\n        if (!e) {\n          return\n        }\n\n        return new Promise((resolve, reject) => {\n          e.getData(new zip.Data64URIWriter(), (uri) => {\n            resolve(uri)\n          }, (current, total) => {\n            const progress = Math.floor(current/total*100)\n            if (cbProgress){\n              cbProgress(progress, entry)\n            }\n          }, true)\n        })\n      },\n\n      close() {\n        if (!this._zipReader) {\n          return\n        }\n\n        const self = this\n\n        return new Promise((resolve, reject) => {\n          self._zipReader.close(function() {\n            self._zipReader = null\n            self._entries.clear()\n            resolve()\n          }, reject)\n        })\n      }\n    }\n  }\n}"},"locks":[],"created":{"at":"2018-05-23T11:47:17+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2022-02-11T14:27:30+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1644589650803,"ct":1527068837182,"a_depth":5,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","64807bcd-1efa-4a43-a950-e10de2e0125c","8675fac2-1fb2-4704-bc87-de0345194e6a"],"a_forms":["folder","application-form","folder","folder","folder"],"inheritedLocks":[null,null,null,null,null,null],"stamps":[]},{"id":"d0db9ea4-c082-4e49-bba9-fd900016dedc","v":"72a3e1aedd45cc22","previous":{"v":"7e1ec00e4e5998e4"},"p":"3812ddba-238d-4795-af96-2cdc7203c08d","f":{"id":"layout-form","v":"dad1a77c49465e08","text":"Layout"},"data":{"name":"Markdown Help Layout","applies":"","packages":[],"template":"<div v-html=\"locals.html\"></div>","css":"._CSS {\n  padding: 1cm 1.5cm;\n  background: var(--ae-background);\n  line-height: 1.6;\n}\n\n\n._CSS .tabs > *:first-child+div {\n  display:flex;\n  flex-wrap: wrap;\n}\n\n._CSS .tab {\n  order: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n._CSS .tab.tab--active {\n  border-bottom: solid 1px black;\n}\n\n._CSS .tab+div {\n  order: 2;\n  width: 100%;\n  display: none;\n}\n\n._CSS .tab.tab--active+div {\n  display: block;\n}\n\n@media print {\n  ._CSS .tab {\n    order: initial;\n    flex-grow: 1;\n    text-align: center;\n    border-bottom: solid 1px black;\n  }\n  ._CSS .tab+div {\n    order: initial;\n    width: 100%;\n    display: block;\n  }\n}\n\n._CSS blockquote,\n._CSS .tip,\n._CSS .note,\n._CSS .note--warning,\n._CSS .kdb,\n._CSS .highlight {\n  display: block;\n  margin: 0;\n  padding: 0.5em;\n  border: 1px solid #e0e0e0;\n  border-radius: 2px;\n  background: white;\n}\n\n._CSS .tip {\n  background: #f0f7fb;\n}\n\n._CSS blockquote,\n._CSS .note {\n  background: #E7F6F0;\n}\n\n._CSS .note--warning {\n  background: #ff6f6f;\n}\n\n._CSS .kdb {\n  /* FIXME */\n  display: inline-block;\n  min-width: 1em;\n  padding: .5em .6em .4em .6em;\n  margin: 2px;\n  font-weight: normal;\n  font-size: 0.85rem;\n  font-family: 'Lato', 'appleLogo', sans-serif;\n  text-align: center;\n  text-decoration: none;\n  line-height: 0.6rem;\n  border-radius: .3em;\n  cursor: default;\n  user-select: none;\n  background: #ffffff;\n  border: 1px solid #ccc;\n}\n\n._CSS .highlight {\n  background: #FDF7E8;\n}\n\n._CSS img {\n  max-width: 100%;\n  padding-left: 20px;\n}\n\n._CSS .small img {\n  max-width: 25%;\n}\n\n._CSS .medium img {\n  max-width: 50%;\n}\n\n._CSS .big img {\n  max-width: 75%;\n}\n\n._CSS code {\n  padding: 0 1ch;\n  background: var(--ae-background-d1);\n  border-radius: 4px;\n}\n\n._CSS button {\n  border: 1px solid rgb(223, 223, 223);\n  border-radius: 2px;\n  padding: 1px 8px;\n  background: #FDF7E8;\n  color: var(--ae-foreground-l1);\n  margin: 0 1px;\n  font-size: 0.9em;\n}\n","controller":"class Controller {\n  init() {\n    this.form = this.getForm(params.markdown)\n    locals.html = this.renderHtml()\n\n    watchParam('markdown', (markdown) => {\n      console.log('markdown', markdown) \n      this.form = this.getForm(markdown)\n      locals.html = this.renderHtml()\n    })\n  }\n\n  getForm(markdown) {\n    return Aeppic.Parser.form(markdown)\n  }\n\n  renderHtml() {\n    let html = ''\n\n    const form = this.form\n    // html += this.renderSectionTitle(form, form.sections[0])\n    // html += this.renderParagraphs(form, form.sections[0])\n    html += this.renderSection(form, form.sections[0])\n    return html\n  }\n\n  renderParagraphs(form, section) {\n    let html = '<div>'\n\n    for (const paragraph of section.paragraphs) {\n      const renderOffset = paragraph.offset\n      const offsetExcludeDirectives = paragraph.offsetExcludeDirectives\n      const renderLength = paragraph.length\n\n      const cssClass = this.getStyle(paragraph, 'class')\n\n      if (cssClass) {\n        const definition = form.definition.slice(offsetExcludeDirectives, renderOffset + renderLength)\n\n        html += this.renderDefinitionWithAttribute(definition, 'class', cssClass)\n      } else {\n        const definition = form.definition.slice(offsetExcludeDirectives, offsetExcludeDirectives + renderLength)\n\n        html += Aeppic.Parser.markdown(definition)\n      }\n    }\n\n    for (const directSubsection of section.directSubsections) {\n      html += this.renderSection(form, directSubsection)\n      // html += this.renderSectionTitle(form, directSubsection)\n      // html += this.renderParagraphs(form, directSubsection)\n    }\n\n    html += '</div>'\n\n    return html\n  }\n\n  renderSection(form, section) {\n    let html = ''\n    const cssClass = this.getStyle(section, 'class')\n\n    if (cssClass && cssClass.indexOf('tabs') !== -1) {\n      return this.renderTabs(form, section, cssClass)\n    }\n\n    if (cssClass) {\n      html += `<div class=\"${cssClass}\">`\n    } else {\n      html += '<div>'\n    }\n\n    if (section.title) {\n      const titleOffset = section.offsetExcludeDirectives\n      const titleLength = section.offsetExcludeTitle - section.offsetExcludeDirectives\n\n      const definition = this.getDefinition(form, titleOffset, titleLength)\n\n      html += Aeppic.Parser.markdown(definition)\n\n      // if (cssClass) {\n      //   return this.renderDefinitionWithAttribute(definition, 'class', cssClass)\n      // }\n\n      // return Aeppic.Parser.markdown(definition)\n    }\n      html += this.renderParagraphs(form, section)\n\n      html += '</div>'\n\n    return html\n  }\n\n  renderTabs(form, section, cssClass) {\n    const parts = []\n\n    parts.push(`<div class=\"${cssClass}\">`)\n\n    parts.push(this.renderSectionTitle(form,section))\n    parts.push(this.renderDirectSubsections(form, section))\n    \n    parts.push(`</div>`)\n\n    return parts.join('')\n  }\n\n\n  renderDirectSubsections(form, section) {\n    const parts = []\n    for (const directSubsection of section.directSubsections) {\n      if (directSubsection.type === 'VIRTUAL') {\n        parts.push('<div>')\n        parts.push(this.renderDirectSubsections(form, directSubsection))\n        parts.push('</div>')\n      } else {\n        parts.push(this.renderSectionTitle(form, directSubsection))\n        parts.push(this.renderParagraphs(form, directSubsection))\n      }\n    }\n    return parts.join('')\n  }\n\n\n\n  renderSectionTitle(form, section) {\n    if (section.title) {\n      const titleOffset = section.offsetExcludeDirectives\n      const titleLength = section.offsetExcludeTitle - section.offsetExcludeDirectives\n\n      const definition = this.getDefinition(form, titleOffset, titleLength)\n      const cssClass = this.getStyle(section, 'class')\n\n      if (cssClass) {\n        return this.renderDefinitionWithAttribute(definition, 'class', cssClass)\n      }\n\n      return Aeppic.Parser.markdown(definition)\n    }\n\n    return ''\n  }\n\n  renderDefinitionWithAttribute(definition, attribute, attributeValue) {\n    const html = Aeppic.Parser.markdown(definition)\n    return `<div ${attribute}=\"${attributeValue}\">${html}</div>`\n  }\n\n  getDefinition(form, offset, length, section) {\n    return form.definition.slice(offset, offset + length)\n  }\n\n  getStyle(paragraphOrSection, name) {\n    return paragraphOrSection.style && paragraphOrSection.style[name] && paragraphOrSection.style[name].value\n  }\n}\n"},"locks":[],"created":{"at":"2018-04-18T15:40:54+02:00","by":"","from":"","client":"server"},"modified":{"at":"2020-05-08T08:52:51+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927971190,"ct":1524058854595,"a_depth":3,"a":["apps","9e7fd821-5bd9-4314-a542-34431752f51f","3812ddba-238d-4795-af96-2cdc7203c08d"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"7bdadf30-356e-43d7-9872-d4844404f7fe","v":"08ab10192d83f657","previous":{"v":"091d13dbe5a58545"},"p":"007eb0e3-8b9a-4516-bba4-41372ebd7c42","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Mass Edit Empfänger","applies":"","template":" \n<ae-list list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n          :documents=\"params.document.data.empfaenger.slice(0,50)\"\n          :params=\"{ tableStyle: true, selectionId: 'unterweisung', design: 'rd:tag', designParams: { readonly: true } }\"\n></ae-list>   ","css":"","controller":"","packages":[]},"locks":[],"created":{"at":"2024-06-18T12:19:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-06-18T12:38:38+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1718714318992,"ct":1718713172052,"a_depth":3,"a":["apps","f416e371-07cc-4987-a6de-5934ef5ff3e4","007eb0e3-8b9a-4516-bba4-41372ebd7c42"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"70cb4e5b-2cd4-4603-9fca-2857ac2e0045","v":"initial","p":"d3d08873-80a4-471b-b999-eadf1f28c038","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine Aufgaben","applies":"","packages":[],"template":"<ae-design name=\"page\" :document=\"locals.project\"></ae-design>","css":"","controller":"class Controller {\n  async init () {\n    locals.project = (await Aeppic.find(`p:${params.pageDocumentId} f.id:17c3a5d3-90ba-4592-961b-0800873ef9c1`))[0]\n  }\n}"},"locks":[],"created":{"at":"2018-11-30T14:19:41+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2018-11-30T14:19:41+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1543587581918,"ct":1543587581915,"a_depth":3,"a":["apps","43f84041-0fd7-4ccb-b7b5-7a38f89ada37","d3d08873-80a4-471b-b999-eadf1f28c038"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"ab3e332f-6d0a-490f-854f-7ecab81edf6c","v":"initial","p":"c3df0a76-ded1-4a65-92f0-8f78ecbde232","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine Aufgaben","applies":"","packages":[],"template":"<ae-layout  layout-id=\"9d6ba0de-4e22-4291-b1d8-4e73b55ed3b9\"\n            :param-company-id=\"params.companyId\"\n            :param-user-id=\"Aeppic.ProfilePage.id\"\n></ae-layout>","css":"","controller":""},"locks":[],"created":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1568969971512,"ct":1568969971512,"a_depth":3,"a":["apps","8fa52498-fa07-4bad-87b3-5c8df671aca4","c3df0a76-ded1-4a65-92f0-8f78ecbde232"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"d9256710-d5b1-4539-b99d-a2673f2082ea","v":"0e6182403a02f147","previous":{"v":"7ce1e56cef93993b"},"p":"d3d08873-80a4-471b-b999-eadf1f28c038","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine Aufgaben","applies":"","packages":[],"template":"<ae-layout  layout-id=\"9d6ba0de-4e22-4291-b1d8-4e73b55ed3b9\"\n            :param-company-id=\"params.companyId\"\n            :param-user-id=\"Aeppic.ProfilePage.id\"\n            @selected=\"Aeppic.drillInto($event)\"\n></ae-layout>","css":"","controller":""},"locks":[],"created":{"at":"2018-12-03T10:11:13+00:00","by":"c5ed555f-cc11-463b-960b-0a60b3118e69","from":"","client":"server"},"modified":{"at":"2020-06-18T12:37:47+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1592483867361,"ct":1543831873993,"a_depth":3,"a":["apps","43f84041-0fd7-4ccb-b7b5-7a38f89ada37","d3d08873-80a4-471b-b999-eadf1f28c038"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"5bc44c85-9419-4485-b71e-51a4f783b980","v":"81aeb3add7bae1af","cloneOf":{"id":"683d9180-5b53-432a-bb31-674569cb922c","v":"cbb4f29bd32a722b","text":"Meine Aufgaben im Zeitraum"},"originalCloneOf":{"id":"683d9180-5b53-432a-bb31-674569cb922c","v":"cbb4f29bd32a722b","text":"Meine Aufgaben im Zeitraum"},"previous":{"v":"ad2a900b41fa3068"},"p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine Aufgaben & Termine im Zeitraum","applies":"","packages":[{"id":"9fbc0645-b97a-4b98-8520-02670f21ac0b","v":"8c5eaad78929f3bc","text":"Aeppic Search Helpers"}],"template":"<div class=\"_CSS-body\">\n  <ae-list  list-id=\"e1fa173e-1c1e-4e12-a572-8353b3b65548\"\n            :documents=\"locals.documents\"\n            @selected=\"Aeppic.drillInto($event, arguments[1])\"\n            :params=\"{ date: params.date }\"\n  ></ae-list>\n</div>\n","css":"\n._CSS-body {\n  display: flex;\n  flex-flow: column;\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  background: var(--ae-ui-background);\n\n  padding: var(--ae-size-2);\n}\n","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Aufgabe: '3d456c38-6282-416e-8c5e-7d20b0517a6e',\n      AufgabeCore: '0deb4864-cbb6-420c-99ee-337c7444ab24',\n      LeistungsAufgabe: '88b1f60e-71f6-46f5-94ea-3d7bbe972950',\n      MeineAufgabeArc: '90877d25-bbae-421e-9ea7-0631dcbf11c2',\n      MeineAufgabeBizpin: '544d11b1-a156-4568-aeb3-2a60b2b57807',\n\n      Termin: 'e6b7aced-aaa0-49a4-b573-cfa307595402',\n      Wiedervorlage: '53eecc66-c1a1-47da-b9df-67cc2b8b60f5',\n      Aktivitaet: '84ede5f8-c5af-4113-8235-4b7fa528e265',\n    }\n\n    locals.documents = []\n\n    const [ followups, tasks, appointments ] = await Promise.all([\n        this.getFollowups(),\n        this.getTasks(),\n        this.getAppointments()\n    ])\n    locals.documents = [...followups, ...tasks, ...appointments] \n\n    watchParam('date', async () => {\n      const [ followups, tasks, appointments ] = await Promise.all([\n          this.getFollowups(),\n          this.getTasks(),\n          this.getAppointments()\n      ])\n      locals.documents = [...followups, ...tasks, ...appointments] \n    })\n  }\n\n  async getTasks() {\n    // TODO: once SearchHelpers.findInterval can handle multiple fields, use that\n    const { start, end, startMinus1Day, endPlus1Day } = this.getStartAndEnd(params.date.start, params.date.end)\n\n    const dateQueryStringPart = `[${startMinus1Day.toISODate()}/d TO ${endPlus1Day.toISODate()}/d]`\n\n    const queryStringParts = []\n    const subQueries = []\n    const findOptions = {\n      sort: [{\n        field: 'data.bisStart',\n        descending: false,\n      }, {\n        field: 'data.bis',\n        descending: false,\n      }]\n    }\n\n    if (params.dashboardType === 'BIZPIN_CORE') {\n      findOptions.sort.field = 'data.bisStart'\n\n      subQueries.push(`(a:${Aeppic.Account.a[0]} f.id:${this.FORMS.AufgabeCore} data.erledigt:false data.verantwortlich:${Aeppic.ProfilePage.id} (data.bisStart:${dateQueryStringPart} OR data.bisEnde:${dateQueryStringPart}))`)\n      subQueries.push(`(a:${Aeppic.Account.id} f.id:${this.FORMS.MeineAufgabeBizpin} data.erledigt:false (data.bisStart:${dateQueryStringPart} OR data.bisEnde:${dateQueryStringPart}))`)\n    } else if (params.dashboardType === 'ENERGIE') {\n      subQueries.push(`(a:${Aeppic.Account.a[0]} (f.id:${this.FORMS.Aufgabe} OR f.id:${this.FORMS.LeistungsAufgabe}) data.erledigt:false data.verantwortlich:${Aeppic.ProfilePage.id} data.bis:${dateQueryStringPart})`)\n      subQueries.push(`(a:${Aeppic.Account.id} f.id:${this.FORMS.MeineAufgabeArc} data.erledigt:false data.bis:${dateQueryStringPart})`)\n    } else {\n      // params.dashboardType === 'BIZPIN'\n      subQueries.push(`(a:${Aeppic.Account.a[0]} f.id:${this.FORMS.Aufgabe} data.erledigt:false data.verantwortlich:${Aeppic.ProfilePage.id} data.bis:${dateQueryStringPart})`)\n      subQueries.push(`(a:${Aeppic.Account.id} f.id:${this.FORMS.MeineAufgabeBizpin} data.erledigt:false (data.bisStart:${dateQueryStringPart} OR data.bisEnde:${dateQueryStringPart}))`)\n    }\n\n    const queryStrings = subQueries.map(subQuery => `${queryStringParts.join(' ')} ${subQuery}`)\n    const tasksOfQueries = await Promise.all(queryStrings.map(query => Aeppic.find(query, findOptions)))\n    const tasks = [] \n    for (const x of tasksOfQueries) {\n      tasks.push(...x)\n    }\n\n    params.debug && console.log(queryStrings, findOptions, tasks)\n  \n    const intervalOfStartToEnd = Aeppic.DateTimeInterval.fromDateTimes(start, end)\n\n    return tasks.filter(t => {\n      if (t.f.id === this.FORMS.AufgabeCore || t.f.id === this.FORMS.MeineAufgabeBizpin) {\n        if (t.data.bisStart && intervalOfStartToEnd.contains(Aeppic.DateTime.fromISO(t.data.bisStart))) {\n          return true\n        }\n\n        if (t.data.bisEnde && intervalOfStartToEnd.contains(Aeppic.DateTime.fromISO(t.data.bisEnde))) {\n          return true\n        }\n\n        return false\n      }\n\n      return intervalOfStartToEnd.contains(Aeppic.DateTime.fromISO(t.data.bis))\n    })\n  }\n\n  getStartAndEnd(startValue, endValue) {\n    const start = startValue ? Aeppic.DateTime.fromISO(startValue) : null\n    const end = endValue ? Aeppic.DateTime.fromISO(endValue) : null\n    \n    const dayStart = start.startOf('day')\n    const dayEnd = end ? end.endOf('day') : start.endOf('day')\n\n    // FIXME: this -/+ days stuff is nescessary because the server's find() does not know the local timezone. \n    const startMinus1Day = dayStart.plus({ days: -1 })\n    const endPlus1Day = dayEnd.plus({ days: 1 })\n\n    return {\n      start: dayStart,\n      end: dayEnd,\n      startMinus1Day,\n      endPlus1Day,\n    }\n  }\n\n  async getAppointments() {\n    const queryString = `a:${Aeppic.Account.a[0]} f.id:${this.FORMS.Termin} data.attendees:${Aeppic.ProfilePage.id}`\n    const findOptions = {\n      sort: [{\n          field: 'data.start',\n          descending: false\n        }, {\n          field: 'data.end',\n          descending: false\n        }] \n    }\n\n    const intervalOptions = {\n      start: params.date.start,\n      end: params.date.end,\n      fieldName: 'data.start',\n      fullDays: true,\n    }\n\n    params.debug && console.log('getAppointments', queryString, findOptions, intervalOptions)\n\n    return packages.SearchHelpers.findInterval(Aeppic, intervalOptions, queryString, findOptions)\n  }\n\n\n  async getActivities() {\n    const queryString = `a:${Aeppic.Account.a[0]} f.id:${this.FORMS.Aktivitaet} data.typ:RUECKRUF data.erledigt:false data.verantwortlich:${Aeppic.ProfilePage.id}`\n    const findOptions = {\n      sort: {\n        field: 'data.wann',\n        descending: false\n      }\n    }\n\n    const intervalOptions = {\n      start: params.date.start,\n      end: params.date.end,\n      fieldName: 'data.wann',\n      fullDays: true,\n    }\n\n    params.debug && console.log('getActivities', queryString, findOptions, intervalOptions)\n\n    return packages.SearchHelpers.findInterval(Aeppic, intervalOptions, queryString, findOptions)\n  }\n\n  async getFollowups() {\n    const queryString = `p:${Aeppic.Account.id} f.id:${this.FORMS.Wiedervorlage}`\n \n    const findOptions = {\n      sort: {\n        field: 'data.date',\n        descending: false\n      }\n    }\n\n    const intervalOptions = {\n      start: params.date.start,\n      end: params.date.end,\n      fieldName: 'data.date',\n      fullDays: true,\n    }\n\n    params.debug && console.log('getFollowups', queryString, findOptions, intervalOptions)\n\n    return packages.SearchHelpers.findInterval(Aeppic, intervalOptions, queryString, findOptions)\n  }\n} "},"locks":[],"created":{"at":"2021-10-11T09:57:57+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2024-05-13T07:37:06+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1715585826275,"ct":1633946277235,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"683d9180-5b53-432a-bb31-674569cb922c","v":"49a0bb7835ff9e13","previous":{"v":"09f300d99bd5f53b"},"p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine Aufgaben im Zeitraum","applies":"","packages":[],"template":"<div class=\"_CSS-body\">\n  <ae-list  list-id=\"560bc0a7-c08f-4cde-959b-87878878f453\"\n            :documents=\"locals.tasks\"\n            :param-disable-filters=\"true\"\n            @selected=\"Aeppic.drillInto($event)\"\n  ></ae-list>\n</div>","css":"\n._CSS-body {\n  display: flex;\n  flex-flow: column;\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  background: var(--ae-ui-background);\n\n  padding: var(--ae-size-2);\n}\n","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Aufgabe: '3d456c38-6282-416e-8c5e-7d20b0517a6e',\n      AufgabeCore: '0deb4864-cbb6-420c-99ee-337c7444ab24',\n      LeistungsAufgabe: '88b1f60e-71f6-46f5-94ea-3d7bbe972950',\n      MeineAufgabeArc: '90877d25-bbae-421e-9ea7-0631dcbf11c2',\n      MeineAufgabeBizpin: '544d11b1-a156-4568-aeb3-2a60b2b57807',\n      TodoListe: 'e66eae7c-a9d5-4a59-a2f0-d1fa6eb90ea5',\n    }\n\n    locals.tasks = []\n\n    locals.tasks = await this.getTasks()\n\n    watchParam('date', async () => {\n      locals.tasks = await this.getTasks()\n    })\n  }\n\n  async getTasks() {\n    const { start, end } = this.getStartAndEnd(params.date.start, params.date.end)\n\n    // FIXME: this -/+ days stuff is nescessary because the server's find() does not know the local timezone. \n    const startMinus1Day = start.plus({ days: -1 })\n    const endPlus1Day = end.plus({ days: 1 })\n\n    const dateQueryStringPart = `[${startMinus1Day.toISODate()}/d TO ${endPlus1Day.toISODate()}/d]`\n\n    const queryStringParts = [`a:${Aeppic.Account.a[0]}`]\n    const subQueries = []\n    const findOptions = {\n      sort: [{\n        field: 'data.bisStart',\n        descending: false,\n      }, {\n        field: 'data.bis',\n        descending: false,\n      }]\n    }\n\n    if (params.dashboardType === 'BIZPIN_CORE') {\n      findOptions.sort.field = 'data.bisStart'\n\n      subQueries.push(`(f.id:${this.FORMS.AufgabeCore} data.erledigt:false data.verantwortlich:${Aeppic.ProfilePage.id} (data.bisStart:${dateQueryStringPart} OR data.bisEnde:${dateQueryStringPart}))`)\n      subQueries.push(`(a:${Aeppic.Account.id} f.id:${this.FORMS.MeineAufgabeBizpin} data.erledigt:false (data.bisStart:${dateQueryStringPart} OR data.bisEnde:${dateQueryStringPart}))`)\n    } else if (params.dashboardType === 'ENERGIE') {\n      subQueries.push(`((f.id:${this.FORMS.Aufgabe} OR f.id:${this.FORMS.LeistungsAufgabe}) data.erledigt:false data.verantwortlich:${Aeppic.ProfilePage.id} data.bis:${dateQueryStringPart})`)\n      subQueries.push(`(f.id:${this.FORMS.TodoListe} data.erledigt:false data.verantwortlich:${Aeppic.ProfilePage.id} data.bis:${dateQueryStringPart})`)\n      subQueries.push(`(a:${Aeppic.Account.id} f.id:${this.FORMS.MeineAufgabeArc} data.erledigt:false data.bis:${dateQueryStringPart})`)\n    } else {\n      // params.dashboardType === 'BIZPIN'\n      subQueries.push(`(f.id:${this.FORMS.Aufgabe} data.erledigt:false data.verantwortlich:${Aeppic.ProfilePage.id} data.bis:${dateQueryStringPart})`)\n      subQueries.push(`(a:${Aeppic.Account.id} f.id:${this.FORMS.MeineAufgabeBizpin} data.erledigt:false (data.bisStart:${dateQueryStringPart} OR data.bisEnde:${dateQueryStringPart}))`)\n    }\n\n    const queryStrings = subQueries.map(subQuery => `${queryStringParts.join(' ')} ${subQuery}`)\n    const tasksOfQueries = await Promise.all(queryStrings.map(query => Aeppic.find(query, findOptions)))\n    const tasks = [] \n    for (const x of tasksOfQueries) {\n      tasks.push(...x)\n    }\n \n    params.debug && console.log(queryString, findOptions, tasks)\n  \n    const intervalOfStartToEnd = Aeppic.DateTimeInterval.fromDateTimes(start, end)\n\n    return tasks.filter(t => {\n      if (t.f.id === this.FORMS.AufgabeCore || t.f.id === this.FORMS.MeineAufgabeBizpin) {\n        if (t.data.bisStart && intervalOfStartToEnd.contains(Aeppic.DateTime.fromISO(t.data.bisStart))) {\n          return true\n        }\n\n        if (t.data.bisEnde && intervalOfStartToEnd.contains(Aeppic.DateTime.fromISO(t.data.bisEnde))) {\n          return true\n        }\n\n        return false\n      }\n\n      return intervalOfStartToEnd.contains(Aeppic.DateTime.fromISO(t.data.bis))\n    })\n  }\n\n  getStartAndEnd(startValue, endValue) {\n    const start = startValue ? Aeppic.DateTime.fromISO(startValue) : null\n    const end = endValue ? Aeppic.DateTime.fromISO(endValue) : null\n    \n    const dayStart = start.startOf('day')\n    const dayEnd = end ? end.endOf('day') : start.endOf('day')\n\n    return {\n      start: dayStart,\n      end: dayEnd,\n    }\n  }\n\n  // queryFilter(forDayIndex) {\n  //   const index = forDayIndex != null ? forDayIndex : locals.activeDayIndex\n\n  //   const dayStart = locals.days[index].toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n  //   const dayEnd = locals.days[index].endOf('day').toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n\n  //   // FIXME: query-parser cannot handle date with time\n  //   return `data.verantwortlich:${params.userId} data.bis:[${dayStart}/d TO ${dayEnd}]`\n  // }\n\n} "},"locks":[],"created":{"at":"2020-05-08T08:51:34+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2022-10-19T08:25:50+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1666167950439,"ct":1588927894456,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"978892c9-4757-4f01-926a-697961a1ce1e","v":"0c99d9ba1592c3df","previous":{"v":"efd77b6df5724e37"},"p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine Benachrichtigungen im Zeitraum","applies":"","packages":[],"template":"<section v-if=\"locals.notifications.length\" class=\"_CSS-body\">\n  <div class=\"_CSS-label\">\n    {{ params.label || 'Benachrichtigungen' }}\n  </div>\n  <ae-list\n        :documents=\"locals.notifications\"\n        list-id=\"81287566-326b-4161-a9be-705ad96fcaf0\"\n        param-mode=\"dialog\"\n        class=\"_CSS-list\"\n  ></ae-list>\n</section>\n<!-- <section v-else class=\"_CSS--empty\">\n  <ae-icon class=\"fa fa-stars\" style=\"font-size: var(--ae-font-size-7;\"></ae-icon>\n  Keine Benachrichtigungen\n</section> -->\n","css":"._CSS-body {\n  display: flex;\n  flex-flow: column;\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  background: var(--ae-ui-background);\n\n  padding: var(--ae-size-2);\n}\n\n._CSS-label {\n  margin: var(--ae-size-2) 0 var(--ae-size-2) var(--ae-size-2);\n  color: var(--ae-background-700);\n}\n\n._CSS--empty {\n  display: flex;\n  justify-content: center;\n  align-items: baseline;\n}\n","controller":"\nclass Controller {\n  async init() {\n    this.FORMS = {\n      Benachrichtigung: '6d164aff-df9b-470d-9632-cfb6f5892509',\n    }\n\n    locals.notifications = []\n\n    locals.notifications = await this.getNotifications()\n\n    watchParam('date', async () => {\n      locals.notifications = await this.getNotifications()\n    })\n  }\n\n  async getNotifications() {\n    const { start, end } = this.getStartAndEnd(params.date.start, params.date.end)\n\n    const endPlus1Day = end.plus({ days: 1})\n\n    const dateQueryStringPart = `[${start.toISODate()} TO ${endPlus1Day.toISODate()}]`\n    const queryStringParts = [\n      `p:${Aeppic.Account.id} f.id:${this.FORMS.Benachrichtigung}`,\n      params.filter,\n      `created.at:${dateQueryStringPart}`\n    ]\n    const queryString = queryStringParts.filter(p => !!p).join(' ')\n    \n    const findOptions = {\n      sort: [{\n        field: 'created.at',\n        descending: true\n      },\n      {\n        field: 'data.document.text',\n        descending: false\n      }]\n    }\n    \n    const notifications = await Aeppic.find(queryString, findOptions)\n\n    params.debug && console.log(queryString, findOptions, notifications)\n  \n    const intervalOfStartToEnd = Aeppic.DateTimeInterval.fromDateTimes(start, end)\n\n    const notificationsInTime = notifications.filter(t => intervalOfStartToEnd.contains(Aeppic.DateTime.fromISO(t.created.at)))\n\n    const notificationTargets = await Aeppic.getAll(notificationsInTime.map(e => e.data.document.id))\n\n    const noDeletedNotifications = notificationsInTime.filter((notification, index) => {\n      return !!notificationTargets[index]\n    })\n\n    return noDeletedNotifications\n  }\n\n  getStartAndEnd(startValue, endValue) {\n    const start = startValue ? Aeppic.DateTime.fromISO(startValue) : null\n    const end = endValue ? Aeppic.DateTime.fromISO(endValue) : null\n    \n    const dayStart = start.startOf('day')\n    const dayEnd = end ? end.endOf('day') : start.endOf('day')\n\n    const interval = Aeppic.DateTimeInterval.fromDateTimes(dayStart, dayEnd)\n\n    return {\n      start: dayStart,\n      end: dayEnd,\n    }\n  }\n} "},"locks":[],"created":{"at":"2020-05-08T08:51:34+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2024-01-15T14:17:08+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1705328228406,"ct":1588927894535,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"8d9140eb-97ca-472a-8efa-0e78c3eb5c7e","v":"38b35a659e4b228e","previous":{"v":"initial"},"p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine Notizen","applies":"","packages":[],"template":"<div class=\"_CSS-card\">\n  <div class=\"_CSS-toolbar\">\n    <ae-design  name=\"page-toolbar\"\n                :document=\"locals.project\"\n                :param-hide-delete=\"true\"\n                :param-hide-send-notifications=\"true\"\n                :param-hide-exports=\"true\"\n                :param-hide-security=\"true\"\n                @toolbar=\"controller.toolbarEvent($event)\"\n    ></ae-design>\n  </div>\n\n  <template v-if=\"locals.project\">\n    <ae-form  xlayout-id=\"b05e50a2-7479-469a-997d-0db4ea99fbd3\"\n              :document=\"locals.project\"\n              ref=\"project\"\n    ></ae-form>\n  </template>\n</div>\n\n","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n}\n\n._CSS-card {\n  background: var(--ae-ui-card-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-card__title {\n  padding: 10px;\n  font-size: 1.2em;\n}\n\n._CSS-card__list {\n  background: var(--ae-background-100);\n  padding: 5px;\n  overflow: auto;\n\n  border-radius: 0 0 var(--ae-border-radius) var(--ae-border-radius);\n}","controller":"class Controller {\n  async init() {\n    if (!params.options || !params.options.Forms || !params.options.Forms.Aufgaben) {\n      console.error('insuffient parameters')\n      return\n    }\n\n    this.FORMS = {\n      Aufgaben: params.options.Forms.Aufgaben\n    }\n\n    locals.project = null\n\n    if (!Aeppic.Account) {\n      return\n    }\n\n    locals.project = await this.getProject()\n  }\n\n  async getProject() {\n    const existingProject = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.Aufgaben}`)\n\n    if (existingProject) {\n      return existingProject\n    }\n\n    const newProject = await Aeppic.new(this.FORMS.Aufgaben, Aeppic.Account.id)\n\n    Aeppic.save(newProject)\n\n    return Aeppic.get(newProject)\n  }\n\n  toolbarEvent(eventType) {\n    if (eventType === 'save') {\n      $refs.project.save()\n      return\n    }\n    if (eventType === 'reset') {\n      $refs.project.resetEdits()\n      return\n    }\n  }\n}\n"},"locks":[],"created":{"at":"2020-05-08T08:51:34+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2020-08-25T11:40:39+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1598355639763,"ct":1588927894605,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"359068dc-5f66-4bea-978b-d84612613925","v":"526d8d58f7599deb","previous":{"v":"58769a8d2256921b"},"p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine Notizen Dialog","applies":"","packages":[],"template":" <ae-dialog v-if=\"locals.visible\" ref=\"dialog\" title=\"Meine Notizen\" @close=\"controller.close()\"  :backdrop-close=\"false\" :dialog-size=\"{ height: 'var(--ae-dialog__height--big)' }\">\n  <div slot=\"header\" slot-scope=\"scope\" style=\"display: flex; justify-content: space-between;\">\n    <div>Meine Notizen</div>\n    <button class=\"ae-button\" @click=\"scope.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div class=\"_CSS-body\" slot=\"body\">\n    <ae-layout layout-id=\"8d9140eb-97ca-472a-8efa-0e78c3eb5c7e\" :param-options=\"params.options\"></ae-layout>\n  </div>\n</ae-dialog>\n","css":"","controller":"class Controller {\n  init() {\n    locals.visible = false\n\n    $on('show', () => this.show())\n  }\n\n  async show() {\n    locals.visible = true\n\n    await Aeppic.waitForNextAnimationFrame()\n    await Aeppic.waitForNextAnimationFrame()\n\n    $refs.dialog.show()\n  }\n\n  close() {\n    locals.visible = false\n  }\n}"},"locks":[],"created":{"at":"2020-05-08T08:51:34+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2020-10-29T10:22:28+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1603966948764,"ct":1588927894824,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"hidden":false,"readonly":false},{"id":"d3dff547-443b-4aa5-a270-2ceb6828eeb6","v":"3f4ffd7129be7873","previous":{"v":"65ee974e13de2bb7"},"p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"Meine Notizen Dialog (Bizpin)","applies":"","packages":[],"template":"<ae-layout  layout-id=\"359068dc-5f66-4bea-978b-d84612613925\"\n            :param-options=\"locals.options\"\n            ref=\"dialog\"\n></ae-layout>","css":"","controller":"init() {\n  this.FORMS = {\n    Aufgaben: '65abdd36-c20f-4742-8744-3995211cdd2f',\n  }\n\n  $on('show', async (value) => {\n    const project = await this.getProject()\n\n    Aeppic.drillInto(project)\n  })\n}\n\n\nasync getProject() {\n  const existingProject = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.Aufgaben}`)\n\n  if (existingProject) {\n    return existingProject\n  }\n\n  const newProject = await Aeppic.new(this.FORMS.Aufgaben, Aeppic.Account.id)\n\n  Aeppic.save(newProject)\n\n  return Aeppic.get(newProject)\n}\n"},"locks":[],"created":{"at":"2020-05-08T08:51:34+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2021-01-14T15:06:35+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1610636795251,"ct":1588927894907,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"22b80283-c6fc-4237-abc1-05fa2a8b29f4","v":"initial","p":"c3df0a76-ded1-4a65-92f0-8f78ecbde232","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine persönlichen Aufgaben","applies":"","packages":[],"template":"<div class=\"_CSS-card\">\n  <div class=\"_CSS-card__title\">\n    Meine persönlichen Aufgaben\n  </div>\n  <!-- <ae-list  list-id=\"058195c7-9ba4-4f79-ab01-4a50ef2347fe\"\n            :documents=\"locals.tasksWithoutDue\"\n            param-design=\"ref-card\"\n            :param-design-params=\"{ readonly: true }\"\n            param-min-column-width=\"300px\"\n            class=\"_CSS-card__list\"\n            @selected=\"Aeppic.navigateTo($event)\"\n  ></ae-list> -->\n  <div class=\"_CSS-toolbar\">\n    <ae-design  name=\"page-toolbar\"\n                :document=\"locals.project\"\n                :param-hide-delete=\"true\"\n                @toolbar=\"controller.toolbarEvent($event)\"\n    ></ae-design>\n  </div>\n\n  <template v-if=\"locals.project\">\n    <ae-form xlayout-id=\"b05e50a2-7479-469a-997d-0db4ea99fbd3\"\n            :document=\"locals.project\"\n            ref=\"project\"\n    ></ae-form>\n  </template>\n</div>\n\n","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n}\n\n._CSS-card {\n  background: var(--ae-ui-card-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-card__title {\n  padding: 10px;\n  font-size: 1.2em;\n}\n\n._CSS-card__list {\n  background: var(--ae-background-100);\n  padding: 5px;\n  overflow: auto;\n\n  border-radius: 0 0 var(--ae-border-radius) var(--ae-border-radius);\n}","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Aufgaben: '4e338459-2110-4799-8f04-1ead4cc647d0'\n    }\n\n    locals.project = null\n\n    if (!Aeppic.Account) {\n      return\n    }\n\n    locals.project = await this.getProject()\n  }\n\n  async getProject() {\n    const existingProject = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.Aufgaben}`)\n\n    if (existingProject) {\n      return existingProject\n    }\n\n    const newProject = await Aeppic.new(this.FORMS.Aufgaben, Aeppic.Account.id)\n\n    Aeppic.save(newProject)\n\n    return Aeppic.get(newProject)\n  }\n\n  toolbarEvent(eventType) {\n    if (eventType === 'save') {\n      $refs.project.save()\n      return\n    }\n    if (eventType === 'reset') {\n      $refs.project.resetEdits()\n      return\n    }\n  }\n}\n"},"locks":[],"created":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1568969971517,"ct":1568969971517,"a_depth":3,"a":["apps","8fa52498-fa07-4bad-87b3-5c8df671aca4","c3df0a76-ded1-4a65-92f0-8f78ecbde232"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"0d7c3b73-67d2-431f-b7a7-290e61223fae","v":"initial","p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine persönlichen Aufgaben (Bizpin): Autosaved creation","applies":"","packages":[],"template":" <ae-dialog v-if=\"locals.visible\" ref=\"dialog\" title=\"Meine persönlichen Aufgaben\" :full-screen=\"Aeppic.Device !== 'Desktop'\" @close=\"controller.onClose()\" :backdrop-close=\"false\">\n  <div slot=\"header\" slot-scope=\"scope\" style=\"display: flex; justify-content: space-between;\">\n    <div>Meine persönlichen Aufgaben erstellen</div>\n    <button class=\"ae-button\" @click=\"scope.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div class=\"_CSS-body\" slot=\"body\">\n    <ae-layout layout-id=\"6c101d1d-d688-49f6-b819-3001fb5603c3\" :param-document=\"locals.project\" @saved=\"controller.saveProjectAndCloseDialog()\"></ae-layout>\n  </div>\n</ae-dialog>\n\n","css":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Aufgaben: '65abdd36-c20f-4742-8744-3995211cdd2f'\n    }\n\n    locals.visible = false\n    locals.project = null\n\n    if (!Aeppic.Account) {\n      return\n    }\n\n    $on('show', () => this.show())\n  }\n\n  async getEditableProject() {\n    const existingProject = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.Aufgaben}`)\n\n    if (existingProject) {\n      return Aeppic.edit(existingProject)\n    }\n\n    const newProject = await Aeppic.new(this.FORMS.Aufgaben, Aeppic.Account.id)\n\n    Aeppic.save(newProject)\n\n    return newProject\n  }\n\n  async show() {\n    locals.project = await this.getEditableProject()\n\n    locals.visible = true\n\n    await Aeppic.waitForNextAnimationFrame()\n    await Aeppic.waitForNextAnimationFrame()\n\n    $refs.dialog.show()\n  }\n\n  onClose() {\n    locals.visible = false\n  }\n\n  saveProjectAndCloseDialog() {\n    Aeppic.save(locals.project)\n\n    locals.project = null\n\n    $refs.dialog && $refs.dialog.close()\n  }\n}\n"},"locks":[],"created":{"at":"2020-05-08T08:51:34+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:51:34+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927894677,"ct":1588927894677,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"34176a94-bc9e-463d-91f5-14f86095a67e","v":"initial","p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine persönlichen Aufgaben (Energieberater): Autosaved creation","applies":"","packages":[],"template":" <ae-dialog v-if=\"locals.visible\" ref=\"dialog\" title=\"Meine persönlichen Aufgaben\" :full-screen=\"Aeppic.Device !== 'Desktop'\" @close=\"controller.onClose()\" :backdrop-close=\"false\">\n  <div slot=\"header\" slot-scope=\"scope\" style=\"display: flex; justify-content: space-between;\">\n    <div>Meine persönlichen Aufgaben erstellen</div>\n    <button class=\"ae-button\" @click=\"scope.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div class=\"_CSS-body\" slot=\"body\">\n    <ae-layout layout-id=\"da1da77a-5796-47c9-abba-62bd952e0386\" :param-document=\"locals.project\" @saved=\"controller.saveProjectAndCloseDialog()\"></ae-layout>\n  </div>\n</ae-dialog>\n\n","css":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Aufgaben: '4e338459-2110-4799-8f04-1ead4cc647d0'\n    }\n\n    locals.visible = false\n    locals.project = null\n\n    if (!Aeppic.Account) {\n      return\n    }\n\n    $on('show', () => this.show())\n  }\n\n  async getEditableProject() {\n    const existingProject = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.Aufgaben}`)\n\n    if (existingProject) {\n      return Aeppic.edit(existingProject)\n    }\n\n    const newProject = await Aeppic.new(this.FORMS.Aufgaben, Aeppic.Account.id)\n\n    Aeppic.save(newProject)\n\n    return newProject\n  }\n\n  async show() {\n    locals.project = await this.getEditableProject()\n\n    locals.visible = true\n\n    await Aeppic.waitForNextAnimationFrame()\n    await Aeppic.waitForNextAnimationFrame()\n\n    $refs.dialog.show()\n  }\n\n  onClose() {\n    locals.visible = false\n  }\n\n  saveProjectAndCloseDialog() {\n    Aeppic.save(locals.project)\n\n    locals.project = null\n\n    $refs.dialog && $refs.dialog.close()\n  }\n}\n"},"locks":[],"created":{"at":"2020-05-08T08:51:34+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:51:34+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927894745,"ct":1588927894745,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"5fcfaa8c-07a2-4d9f-b3e3-9127f20a4877","v":"initial","p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"Meine persönlichen Aufgaben Dialog (Energieberater)","applies":"","packages":[],"template":"<ae-layout  layout-id=\"359068dc-5f66-4bea-978b-d84612613925\"\n            :param-options=\"locals.options\"\n            ref=\"dialog\"\n></ae-layout>","css":"","controller":"init() {\n  locals.options = {\n    Forms: {\n      Aufgaben: '4e338459-2110-4799-8f04-1ead4cc647d0',\n    },\n  }\n\n  $on('show', (value) => {\n    $refs.dialog && $refs.dialog.$emit('show', value)\n  })\n}"},"locks":[],"created":{"at":"2020-05-08T08:51:35+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:51:35+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927895022,"ct":1588927895022,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"54f86044-ce0f-4295-af1c-5bd7a5a2fbe2","v":"0617b006a0403c1a","cloneOf":{"id":"3675ffcc-f19a-4d72-907c-c0b09bf31da7","v":"d3fd1cdb26343d40","text":"Von mir erstellte, überfällige Aufgaben (andere Ve"},"originalCloneOf":{"id":"3675ffcc-f19a-4d72-907c-c0b09bf31da7","v":"d3fd1cdb26343d40","text":"Von mir erstellte, überfällige Aufgaben (andere Ve"},"previous":{"v":"588fe245b93c623d"},"p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine Rückrufe und Wiedervorlagen im Zeitraum (B/Core)","applies":"","packages":[{"id":"9fbc0645-b97a-4b98-8520-02670f21ac0b","v":"0f100c934c055d1e","text":"Aeppic Search Helpers"}],"template":"<div class=\"_CSS-body\" v-if=\"locals.appointments.length || locals.followups.length\">\n  <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n            @selected=\"Aeppic.drillInto($event)\"\n            :documents=\"locals.appointments.concat(locals.followups)\"\n            param-title=\"Meine Termine & Wiedervorlagen\"\n            param-min-column-width=\"100%\"\n            param-gap=\"small\"\n            param-design=\"ref-card,card\"\n  ></ae-list>\n</div>\n","css":"\n._CSS-body {\n  display: flex;\n  flex-flow: column;\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  background: var(--ae-ui-background);\n\n  padding: var(--ae-size-2);\n}\n","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Termin: 'e6b7aced-aaa0-49a4-b573-cfa307595402',\n      Wiedervorlage: '53eecc66-c1a1-47da-b9df-67cc2b8b60f5',\n      Aktivität: '84ede5f8-c5af-4113-8235-4b7fa528e265',\n    }\n\n    locals.appointments = []\n    locals.followups = []\n\n    const [ appointments, followups ] = await Promise.all([this.getAppointments(), this.getFollowups()])\n    locals.appointments = appointments\n    locals.followups = followups\n\n    watchParam('date', async () => {\n      locals.followups = await this.getFollowups()\n      locals.appointments = await this.getAppointments()\n    })\n  }\n\n  async getAppointments() {\n    const queryString = `a:${Aeppic.Account.a[0]} f.id:${this.FORMS.Aktivität} data.typ:RUECKRUF data.erledigt:false data.verantwortlich:${Aeppic.ProfilePage.id}`\n    const findOptions = {\n      sort: {\n        field: 'data.wann',\n        descending: false\n      }\n    }\n\n    const intervalOptions = {\n      start: params.date.start,\n      end: params.date.end,\n      fieldName: 'data.wann',\n    }\n\n    params.debug && console.log(queryString, findOptions, intervalOptions)\n\n    return packages.SearchHelpers.findInterval(Aeppic, intervalOptions, queryString, findOptions)\n  }\n\n  async getFollowups() {\n    const queryString = `p:${Aeppic.Account.id} f.id:${this.FORMS.Wiedervorlage}`\n \n    const findOptions = {\n      sort: {\n        field: 'data.date',\n        descending: false\n      }\n    }\n\n    const intervalOptions = {\n      start: params.date.start,\n      end: params.date.end,\n      fieldName: 'data.date',\n    }\n\n    params.debug && console.log(queryString, findOptions, intervalOptions)\n\n    return packages.SearchHelpers.findInterval(Aeppic, intervalOptions, queryString, findOptions)\n  }\n}\n\n"},"locks":[],"created":{"at":"2020-09-03T11:40:20+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-02-08T09:52:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1612777973203,"ct":1599133220687,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"99fdc15a-64b5-423f-90c6-449211bc4ca5","v":"d92fbd725a9f8002","previous":{"v":"61e653d1bd32af70"},"p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Meine überfälligen Aufgaben Dialog","applies":"","packages":[],"template":"<ae-dialog v-if=\"locals.visible\" ref=\"overduesDialog\" title=\"Überfällige Aufgaben\" :dialog-size=\"{ height: 'var(--ae-dialog__height--big)' }\">\n  <div slot=\"header\" slot-scope=\"scope\" style=\"display: flex; justify-content: space-between;\">\n    <div>Überfällige Aufgaben</div>\n    <button class=\"ae-button\" @click=\"scope.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div class=\"_CSS-body\" slot=\"body\" slot-scope=\"scope\">\n    <ae-layout  layout-id=\"3675ffcc-f19a-4d72-907c-c0b09bf31da7\"\n                :param-date=\"{ start: '*', end: '*' }\"\n                :param-debug=\"true\"\n                style=\"margin-bottom: var(--ae-size-6);\"\n                @selected=\"Aeppic.drillInto($event)\"\n    ></ae-layout> \n                <!-- @selected=\"scope.close();Aeppic.drillInto($event)\" -->\n    <ae-list  list-id=\"560bc0a7-c08f-4cde-959b-87878878f453\"\n              :documents=\"locals.overdueTasks\"\n              @selected=\"Aeppic.drillInto($event)\"\n              :param-disable-search-filter=\"true\"\n              :param-design-params=\"{ readonly: true }\"\n              param-filter-fields=\"data.bis\"\n              :param-containing-component-id=\"layout.id\"\n    ></ae-list>\n    <!-- @selected=\"scope.close();Aeppic.drillInto($event)\" -->\n  </div>\n</ae-dialog>\n","css":"","controller":"class Controller {\n  init() {\n    this.FORMS = {\n      Aufgabe: '3d456c38-6282-416e-8c5e-7d20b0517a6e',\n      LeistungsAufgabe: '88b1f60e-71f6-46f5-94ea-3d7bbe972950',\n      AufgabeCore: '0deb4864-cbb6-420c-99ee-337c7444ab24',\n      Projekt: '98c77209-1245-43d6-90b5-8625183f470c',\n      MeineAufgabeBizpin: '544d11b1-a156-4568-aeb3-2a60b2b57807',\n      MeineAufgabeEnergieberater: '90877d25-bbae-421e-9ea7-0631dcbf11c2',\n    }\n\n    locals.visible = false\n\n    locals.overdueTasks = []\n\n    $on('show', () => this.show())\n  }\n\n  async show() {\n    locals.visible = true\n\n    await Aeppic.waitForNextAnimationFrame()\n    await Aeppic.waitForNextAnimationFrame()\n\n    $refs.overduesDialog.show()\n\n    locals.overdueTasks = await this.getOverdueTasks()\n  }\n\n\n  close() {\n    locals.visible = fals\n    locals.overdueTasks = []\n  }\n\n  async getOverdueTasks() {\n    locals.overdueTasks = []\n    locals.tasks = []\n \n    const queryString = `a:${Aeppic.Account.a[0]} data.verantwortlich:${Aeppic.ProfilePage.id} data.erledigt:false ((f.id:${this.FORMS.Aufgabe} OR f.id:${this.FORMS.LeistungsAufgabe}) data.bis:[* TO now+3d/d]) OR (f.id:${this.FORMS.AufgabeCore} (data.bisStart:[* TO now+3d/d] OR data.bisEnde:[* TO now+3d/d]))` \n    console.log(queryString)\n    const queryOptions = {\n      sort: {\n        field: 'data.bis',\n        descending: true,\n      }\n    }\n\n    const tasks = await Aeppic.find(queryString, queryOptions)\n\n    return tasks\n\n    // return tasks.filter((task) => this.isTaskOverdue(task))\n  }\n\n  // isTaskOverdue(task) {\n  //   const data = task.data\n\n  //   if (!data.erledigt && data.bis) {\n  //     return Aeppic.DateTime.local().diff(Aeppic.DateTime.fromISO(data.bis)).as('days') > 0\n  //   }\n\n  //   return false\n  // }\n  \n}"},"locks":[],"created":{"at":"2020-05-08T08:51:35+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2021-10-26T09:23:52+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1635240232708,"ct":1588927895096,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","8fa52498-fa07-4bad-87b3-5c8df671aca4","c3df0a76-ded1-4a65-92f0-8f78ecbde232"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2019-09-20T08:59:31+00:00","backedBy":null,"by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":"","impersonatedBy":null},"ct":1568969971571,"data":{"applies":"","controller":"get filter() {\n  const FILE_FORM = '6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2'\n\n  return `f.id:${FILE_FORM} AND (created.by: ${params.accountId} OR modified.by: ${params.accountId})`\n}\n\nget searchOptions() {\n  return {\n    size: 5,\n    sort: {\n      field: 'modified.at'\n    }\n  }\n}\n\nget isGroupAccount() {\n  return Aeppic.Account && Aeppic.Account.data.isGroupAccount === true\n}","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n}\n\n._CSS-card {\n  background: var(--ae-ui-card-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-header {\n  padding: 10px;\n  font-size: 1.2em;\n}\n\n._CSS-list {\n  padding: 10px;\n  background: var(--ae-background-100);\n  border-radius: 0 0 var(--ae-border-radius) var(--ae-border-radius);\n}","name":"Meine zuletzt geänderten Dateien","packages":[],"template":"<div class=\"_CSS-card\" v-if=\"!controller.isGroupAccount\">\n  <div class=\"_CSS-header\">Zuletzt von mir geänderte Dateien</div>\n\n  <ae-list :root-document-id=\"params.companyId\"\n            class=\"_CSS-list\"\n            query-id=\"71d5633a-9dbd-4c96-b6e0-1c6ffc5ef0f1\"\n            list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n            :filter=\"controller.filter\"\n            :search-options=\"controller.searchOptions\"\n            param-design=\"ref-card,card\"\n            :param-design-params=\"{ showLocation: true, readonly: true }\"\n            param-min-column-width=\"100%\"\n            @selected=\"Aeppic.navigateTo($event)\"\n  ></ae-list>\n</div>\n "},"f":{"id":"layout-form","text":"Layout","v":"dc3356051e0928cf"},"id":"065453cb-caaa-4120-a658-7bfdbdde4b72","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-07-03T11:54:45+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"c3df0a76-ded1-4a65-92f0-8f78ecbde232","previous":{"v":"initial"},"stamps":[],"t":1751543685849,"v":"18ee1bc85fa96f28"},{"a":["apps","43f84041-0fd7-4ccb-b7b5-7a38f89ada37","d3d08873-80a4-471b-b999-eadf1f28c038"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2018-12-03T13:03:45+00:00","by":"c5ed555f-cc11-463b-960b-0a60b3118e69","client":"server","from":""},"ct":1543842225583,"data":{"applies":"","controller":"get filter() {\n  const FILE_FORM = '6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2'\n\n  return `f.id:${FILE_FORM} AND (created.by: ${params.accountId} OR modified.by: ${params.accountId})`\n}\n\nget searchOptions() {\n  return {\n    size: 5,\n    sort: {\n      field: 'modified.at'\n    }\n  }\n}\n\nget isGroupAccount() {\n  return Aeppic.Account && Aeppic.Account.data.isGroupAccount === true\n}","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n  width: 400px;\n}\n\n._CSS-card {\n  background: var(--ae-ui-card-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-header {\n  padding: 10px;\n  font-size: 1.2em;\n}\n\n._CSS-list {\n  padding: 10px;\n  background: var(--ae-background-100);\n  border-radius: 0 0 var(--ae-border-radius) var(--ae-border-radius);\n}","name":"Meine zuletzt geänderten Dateien","packages":[],"template":"<div class=\"_CSS-card\" v-if=\"!controller.isGroupAccount\">\n  <div class=\"_CSS-header\">Zuletzt von mir geänderte Dateien</div>\n\n  <ae-list :root-document-id=\"params.companyId\"\n            class=\"_CSS-list\"\n            query-id=\"71d5633a-9dbd-4c96-b6e0-1c6ffc5ef0f1\"\n            list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n            :filter=\"controller.filter\"\n            :search-options=\"controller.searchOptions\"\n            param-design=\"ref-card,card\"\n            :param-design-params=\"{ showLocation: true, readonly: true }\"\n            param-min-column-width=\"100%\"\n            @selected=\"Aeppic.navigateTo($event)\"\n  ></ae-list>\n</div>\n "},"f":{"id":"layout-form","text":"Layout","v":"dc3356051e0928cf"},"id":"b0d9c0f5-5398-4ab7-9d5a-0bbfdaecc668","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-07-03T11:54:33+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"d3d08873-80a4-471b-b999-eadf1f28c038","previous":{"v":"04f44b6c42035610"},"stamps":[],"t":1751543673061,"v":"fde7a442399ffc21"},{"id":"89d4a09b-9490-4c71-ad30-0c04c5fbf6d4","v":"cd96c7e269f47216","previous":{"v":"14173b255097c7e1"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Model Application File Upload Form Layout","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"99f15aba285bcf52","text":"Window"}],"template":"<div class=\"_CSS-uploading-bar\" v-show=\"Aeppic.Uploads.isUploading\">\n  <div>Dateien werden hochladen...</div>\n  <ae-icon style=\"margin: 20px;\" class=\"fa fa-spinner-third fa-spin\"></ae-icon>\n  <!-- <progress style=\"margin: 0 20px;\"></progress> -->\n  <!-- <ae-layout class=\"_CSS-spinner\"  layout-id=\"fefa8352-0e9a-4ba8-8349-c9402ac8aefa\" title=\"Uploading...\" param-color=\"rgb(42, 71, 171)\" :param-show-text=\"true\"></ae-layout> -->\n</div>\n\n<div class=\"_CSS-header\">\n  <ae-design class=\"_CSS-header__casting\" :document-id=\"locals.castingId\" name=\"logo-with-title\"></ae-design>\n  <ae-design class=\"_CSS-header__project\" :document-id=\"locals.projectId\" name=\"title\"></ae-design>\n  <ae-design class=\"_CSS-header__movie\" :document-id=\"locals.movieId\" name=\"title\"></ae-design>\n</div>\n\n<div class=\"_CSS-header\">\n  <ae-design :document-id=\"locals.movieId\" name=\"files\"></ae-design>\n</div>\n \n<section class=\"_CSS-upload\">\n  <h1>\n    Dateien hochladen\n  </h1>\n  <ae-layout\n            layout-id=\"f5a5c2a0-bf9c-4b44-b05b-8e545156df10\"\n            :param-document=\"params.document\"\n            :param-show-ui=\"true\"\n            param-field-to-add-to=\"files\"\n            param-file-form-id=\"aabed4ee-20ca-4df4-9a78-75a05e97dce9\"\n            param-file-form-field=\"datei\"\n            param-file-name-to-field=\"name\"\n            :param-save-new-documents=\"true\"\n            :param-flatten=\"true\"\n></ae-layout>\n\n  <!-- <ae-control   :key=\"locals.newFile && locals.newFile.id\"\n                name=\"file\"\n                field-name=\"datei\"\n                :document=\"locals.newFile\"\n                param-file-name-to-field=\"[name]\"\n                @added.native=\"controller.onFileAdded($event)\"\n    >\n  </ae-control> -->\n</section>\n\n<section v-if=\"params.document.data.files.length\" class=\"_CSS-files\">\n  \n  <h2>Hochgeladene Dateien</h2>\n\n  <ae-control name=\"ref\"\n              field-name=\"files\"\n              :document=\"params.document\"\n              :param-no-add=\"true\"\n              :param-list=\"true\"\n></ae-control>\n</section>\n\n<section class=\"_CSS-footer\">\n  <button class=\"_CSS-button-action\" :disabled=\"Aeppic.Uploads.isUploading\" @click.stop=\"locals.showDialog = true;$refs.dialog.show()\">\n    <template v-if=\"Aeppic.Uploads.isUploading\">\n      Bitte warte bis alle Uploads abgeschlossen sind!\n    </template>\n    <template v-else>\n      Bewerbung abschließen\n    </template>\n  </button>\n</section>\n\n<div class=\"dbps-bottom-spacer\"></div>\n\n\n<ae-dialog ref=\"dialog\" :full-screen=\"true\" :dialog-classes=\"{ '_CSS-dialog': true }\">\n  <div slot=\"header\" class=\"_CSS-popup__uploading-bar\" v-show=\"locals.showDialog && Aeppic.Uploads.isUploading\">\n    <div>Uploading</div>\n    <ae-layout class=\"_CSS-spinner\"  layout-id=\"fefa8352-0e9a-4ba8-8349-c9402ac8aefa\" title=\"Uploading...\" param-color=\"rgb(42, 71, 171)\" :param-show-text=\"true\"></ae-layout>\n  </div>\n  <div slot=\"body\" class=\"dbps-body\" v-if=\"locals.showDialog\">\n    <ae-design ref=\"dialogLogo\" name=\"logo-with-title\" :document-id=\"locals.castingId\"></ae-design>\n\n    <h2>\n      Vielen Dank für deine Bewerbung. \n    </h2>\n\n    <p v-if=\"Aeppic.Uploads.isUploading\" style=\"font-weight: strong; color: red;\">\n      Bitte warte bis alle Uploads abgeschlossen sind!\n      <ae-layout  layout-id=\"fefa8352-0e9a-4ba8-8349-c9402ac8aefa\" title=\"Uploading...\" param-color=\"rgb(42, 71, 171)\"></ae-layout>\n    </p>\n    <h3 v-else>\n      Du kannst die Seite nun schließen.\n    </h3>\n\n    <p>\n    Abschließend findest du hier nochmals eine Übersicht über deine Bewerbung.\n    </p>\n\n    <ae-layout v-if=\"locals.form\" layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\" :param-document=\"params.document\" :param-form=\"locals.form\" :param-readonly=\"true\" :param-hide-empty=\"true\"></ae-layout>\n\n    <h2>Hochgeladene Dateien</h2>\n\n    <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n              :documents=\"params.document.data.files\"\n              param-design=\"card\"\n              :watch-documents=\"true\"\n              param-min-column-width=\"var(--dbps-thumbnail-width)\"\n              param-max-column-width=\"var(--dbps-thumbnail-width)\"\n              param-gap=\"small\"\n    ></ae-list>\n  </div>\n</ae-dialog>","css":"._CSS {\n  --ae-theme-text-secondary-on-background: black;\n  padding: 0 16px;\n}\n\n._CSS-uploading-bar {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  position: sticky;\n  margin: 0 -16px;\n  top: 0;\n  background: rgba(255,255,255,1);\n  z-index: 1;\n\n  overflow: hidden;\n  font-size: var(--ae-font-size-5);\n}\n\n._CSS-dialog .ae-dialog__header {\n  padding: 0;\n}\n\n._CSS-popup__uploading-bar {\n  height: 24px;\n  display: flex;\n  justify-content: flex-end;\n  align-items: center;\n}\n\n._CSS-spinner {\n  width: 24px;\n  height: 24px;\n  display: flex;\n  align-items: center;  \n}\n\n._CSS-header {\n  display: flex;\n  flex-direction: column;\n  font-weight: bold;\n  margin-bottom: 1rem;\n}\n\n._CSS-footer {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-header__project {\n  font-size: 2rem;\n  white-space: normal;\n}\n\n._CSS-header__movie {\n  font-size: 1.5rem;\n  white-space: normal;\n}\n\n._CSS-upload {\n  background: rgba(255,255,255,0.7);\n  border-radius: 8px;\n  padding: 8px;\n  margin-bottom: 1rem;\n}\n\n._CSS-files {\n  background: rgba(255,255,255,0.7);\n  border-radius: 8px;\n  padding: 8px;\n  margin-bottom: 1rem;\n}\n\n._CSS-button-action {\n  background: gold;\n  padding: 1em 2em;\n  border: none;\n  flex: 1;\n  text-transform: uppercase;\n  font-size: 1.1rem;\n}","controller":"class Controller {\n  async init() {\n    locals.form = null\n\n    locals.castingId = params.document.a[params.document.a.length - 2]\n    locals.projectId = params.document.a[params.document.a.length - 3]\n    locals.movieId = params.document.data.movie.id\n\n    locals.form = await Aeppic.getFormForDocument(params.document)\n\n    this.addConfirmLeave()\n  }\n\n  handleWillNavigate(event) {\n    if (!Aeppic.Uploads.isUploading) {\n      return true\n    }\n\n    const leave = packages.window.confirm('Es werden noch Dateien hochgeladen. Seite trotzdem verlassen?')\n\n    if (leave) {\n      return true\n    }\n\n    if ('returnValue' in event) {\n      event.returnValue = ''\n    }\n\n    if ('preventDefault' in event) {\n      event.preventDefault()\n    }\n    if ('stopPropagation' in event) {\n      event.stopPropagation()\n    }\n  }\n\n  addConfirmLeave() {\n    this.willNavigateHandler = (event) => this.handleWillNavigate(event)\n\n    if ($refs.hiddenDomElement && $refs.hiddenDomElement.$root && $refs.hiddenDomElement.$root.$el) {\n      $refs.hiddenDomElement.$root.$el.addEventListener('ae-will-navigate', this.willNavigateHandler, { capture: true })\n    }\n\n    packages.window && packages.window.addEventListener('popstate', this.willNavigateHandler)\n    packages.window && packages.window.addEventListener('beforeunload', this.willNavigateHandler)\n  }\n\n  destroy() {\n    if ($refs.hiddenDomElement && $refs.hiddenDomElement.$root && $refs.hiddenDomElement.$root.$el) {\n      $refs.hiddenDomElement.$root.$el.removeEventListener('ae-will-navigate', this.willNavigateHandler, { capture: true })\n    }\n\n    packages.window && packages.window.removeEventListener('popstate', this.willNavigateHandler)\n    packages.window && packages.window.removeEventListener('beforeunload', this.willNavigateHandler)\n  }\n}\n"},"locks":[],"created":{"at":"2018-10-30T12:57:33+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583893998,"ct":1540904253832,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"65cc5e22-ba1c-4f75-a5fd-d71a391e558f","v":"initial","p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Model Filters Panel","applies":"","packages":[],"template":"<ae-dialog ref=\"dialog\" :dialog-classes=\"{ '_CSS-dialog': true }\" :full-screen=\"Aeppic.Device === 'Phone'\">\n  <div slot=\"body\" class=\"_CSS-dialog__body\" style=\"margin: 0\" slot-scope=\"scope\">\n    <div v-if=\"locals.show\" class=\"_CSS-sidebar\">\n\n      <div style=\"display:flex;\" @click=\"scope.close()\">\n        <ae-icon style=\"margin-left:auto;\" class=\"fal fa-times fa-2x\"></ae-icon>\n      </div>\n\n      <section class=\"_CSS-sidebar__item\">\n        <div class=\"_CSS-filter\" @click=\"controller.resetFilter()\">Reset</div>\n      </section>\n\n      <section class=\"_CSS-sidebar__item\">\n        <div class=\"_CSS-sidebar__header\">\n          Suche\n        </div>\n        <input type=\"text\" class=\"_CSS-search__input\"\n                v-model=\"locals.rawSearchValue\"\n                @input=\"controller.setSearchFilter($event.target.value)\"\n        >\n      </section>\n      <section class=\"_CSS-sidebar__item\">\n        <div class=\"_CSS-sidebar__header\">\n          Filme\n        </div>\n\n        <div class=\"_CSS-filter\" :class=\"{ '_CSS-filter--active': !locals.filters || locals.filters.movie == null }\" @click=\"controller.resetFilter('movie')\">Alle</div>\n        <template v-if=\"params.project.data.movies.length > 1\">\n          <ae-design class=\"_CSS-filter\" name=\"title\" v-for=\"movie in params.project.data.movies\" :document=\"movie\" @click.native=\"controller.setFilterString('movie', 'data.movie.id:' + movie.id)\" :class=\"{ '_CSS-filter--active': locals.filters && locals.filters.movie === 'data.movie.id:' + movie.id }\"></ae-design>\n        </template>\n      </section>\n      \n\n      <!-- <section class=\"_CSS-sidebar__item\">\n        <div class=\"_CSS-sidebar__header\">\n          Rollen\n        </div>\n\n        <div class=\"_CSS-filter\" :class=\"{ '_CSS-filter--active': !locals.filters || locals.filters.roles == null }\" @click=\"controller.resetFilter('roles')\">Alle</div>\n        <template v-for=\"movie in params.movies\" v-if=\"movie\">\n          <template v-if=\"movie.data.roles.length > 1\">\n            <ae-design class=\"_CSS-filter\" name=\"title\" v-for=\"role in movie.data.roles\" :document=\"role\" @click.native=\"controller.setFilterString('roles', 'data.roles:' + role.id)\" :class=\"{ '_CSS-filter--active': locals.filters && locals.filters.roles === 'data.roles:' + role.id }\"></ae-design>\n          </template>\n        </template>\n        </template>\n      </section>  -->\n\n      <section class=\"_CSS-sidebar__item\">\n        <div class=\"_CSS-sidebar__header\">\n          Bewertung\n        </div> \n\n        <div class=\"_CSS-filter\" :class=\"{ '_CSS-filter--active': !locals.filters || locals.filters.rating == null }\" @click=\"controller.resetFilter('rating')\">Alle</div>\n        <div v-for=\"rating in [1, 2, 3]\" class=\"_CSS-filter\" :class=\"{ '_CSS-filter--active': locals.filters && locals.filters.rating === 'data.rating:' + rating }\" @click=\"controller.setFilterString('rating', 'data.rating:' + rating)\">\n          <ae-icon class=\"fa fa-star\" v-for=\"i in rating\"></ae-icon>\n        </div> \n      </section>\n    </div>\n\n  </div>\n</ae-dialog>\n","css":"._CSS-dialog {\n  background-color: transparent !important;\n}\n\n._CSS-dialog > .ae-dialog__header {\n  display: none;\n}\n\n._CSS-dialog > .ae-dialog__body {\n  background: transparent !important;\n}\n\n/* SIDEBAR */\n\n._CSS-actions {\n  font-size: 2rem;\n  display: flex;\n  flex-flow: column;\n  align-items: center;\n}\n\n._CSS {\n  display: flex;\n  flex-flow: column;\n  width: 100%;\n}\n\n._CSS-container {\n  margin-top: 2rem;\n  display: flex;\n  width: 100%;\n  flex-direction: row;\n  flex: 1;\n  overflow: hidden;\n}\n\n._CSS-body {\n  flex: 1;\n  padding: 8px;\n}\n\n._CSS-actions-container {\n  display: flex;\n  width: 6rem;\n}\n\n._CSS-actions-container--expanded {\n  width: 320px;\n}\n\n._CSS-right-spacer {\n  width: 6rem;\n}\n\n._CSS-sidebar {\n  padding: 1em 1.5em 2em;;\n  background: rgba(74,74,74,0.9);\n  color: white;\n\n  display: flex;\n  flex-flow: column;\n  flex: 1;\n}\n\n._CSS-sidebar__item {\n  border-bottom: 1px solid #ddd;\n  margin: 0 0 1em;\n  padding: 0 0 1em;\n}\n\n._CSS-sidebar__header {\n  font-size: 1.2em;\n  letter-spacing: 0.05em;\n  margin: 0 0 1em;\n  text-transform: uppercase;\n}\n\n._CSS-filter {\n  margin: 0 0.5em 0.5em 0;\n  user-select: none;\n  border: 1px solid #232323;\n  border-radius: 0.2em;\n  cursor: pointer;\n  display: inline-block;\n  letter-spacing: 0.05em;\n  padding: 0.1em 0.8em;\n  text-transform: uppercase;\n  overflow: hidden;\n  /* white-space: normal !important; */\n}\n\n._CSS-filter--active {\n  background: rgba(43,179,148,0.6);\n  color: #fff;\n  border-color: #2BB394\n}\n\n\n._CSS-search__input {\n    background: #fff;\n    border: 1px solid #fff;\n    border-radius: 0.2em;\n    color: #232323;\n    font-size: 16px;\n    padding: 0.1em 2em 0.1em 0.8em;\n    width: 100%;\n}\n","controller":"class Controller {\n  init() {\n    locals.show = false\n\n    locals.rawSearchValue = ''\n    locals.filters = {}\n\n    this.show = async (eventData) => {\n      locals.show = true\n\n      $refs.dialog.show(eventData)\n\n      await Aeppic.nextRenderPass()\n    }\n\n    this.close = () => {\n      $refs.dialog.close()\n      locals.show = false\n    }\n\n    $on('show', this.show)\n    $on('close', this.close)\n  }\n\n  async resetFilter(key) {\n    if (key === 'search') {\n      locals.rawSearchValue = ''      \n    }\n\n    if (key) {\n      locals.filters[key] = null\n    } else {\n      locals.rawSearchValue = ''      \n      locals.filters = {}\n    }\n\n    $emit('reset', {\n      key: key\n    })\n  }\n\n  selectedStarFilter(value) {\n    if (value === 'Alle') {\n      this.resetFilter()\n      return\n    }\n\n    this.setFilterString('rating', `data.rating: ${value}`)\n  }\n\n  setSearchFilter(value) {\n    if (value == null || value === '') {\n      this.resetFilter('search')\n      return\n    }\n\n    this.setFilterString('search', 'data.name:' + value + '*')\n  }\n\n  async setFilterString(key, value) {\n    locals.filters = Object.assign({}, locals.filters, { [key]: value })\n\n    $emit('filter', locals.filters)\n  }\n\n}\n  "},"locks":[],"created":{"at":"2019-04-12T14:13:55+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-04-12T14:13:55+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1555078435054,"ct":1555078435054,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"a50ca908-1eae-4531-9768-60fda0ecc210","v":"4a7a401d12f45ec2","previous":{"v":"a2cb330cb483104c"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Model Preselection/Shortlist Download Button","applies":"","packages":[],"template":"<div class=\"dbps-button _CSS-container\" ref=\"listDownload\" @click.stop=\"$refs.popupDownload.$emit('show', { target: $refs.listDownload })\">\n  <ae-icon class=\"fa fa-list\"></ae-icon>\n  <ae-icon class=\"fa fa-download\"></ae-icon>\n</div>\n\n<ae-layout  layout-id=\"066b41f7-036f-422c-9afc-4c3015ddc4b4\"\n            param-list-id=\"a5bd8a6b-01d2-4d20-ba70-de4c67e587e3\"\n            :param-documents=\"['casting sheet', 'optionsliste']\"\n            ref=\"popupDownload\"\n            @selected=\"controller.downloadList($event)\"\n></ae-layout>\n","css":"._CSS-container {\n  display: inline-flex;\n  flex-flow: column;\n}","controller":"downloadList(e){\nconsole.log('download list', e)\n}\n"},"locks":[],"created":{"at":"2018-06-20T16:59:43+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2018-10-30T12:52:21+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1540903941849,"ct":1529513983402,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"56533270-2bac-44c0-a4bc-f91c0ec0279a","v":"f4932baf999f4a29","previous":{"v":"6553a6704a926cb7"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Model Star Rating Button","applies":"","packages":[],"template":"<div class=\"ae-noselect _CSS-container\" @click.stop=\"$refs.popup.$emit('show', $event)\" title=\"Bewertung ändern\">\n  <ae-icon class=\"fa fa-star\" style=\"margin-top: 0.1em;\"></ae-icon>\n</div>\n\n<ae-layout  layout-id=\"066b41f7-036f-422c-9afc-4c3015ddc4b4\"\n            param-list-id=\"bbdc944e-2695-43cf-9068-c7fad4884e1d\"\n            :param-documents=\"['-', 1, 2, 3]\"\n            ref=\"popup\"\n            @selected=\"controller.announceValue($event)\"\n></ae-layout>\n","css":"._CSS-container {\n  display: inline-flex;\n  flex-flow: column;\n}","controller":"announceValue(value) {\n  if (value === '-') {\n    $emit('rate', 0)\n  } else {\n    $emit('rate', value)\n  }\n\n  $refs.popup.$emit('close')\n}"},"locks":[],"created":{"at":"2018-06-21T12:29:37+00:00","by":"791dde52-ff31-42ab-98e3-734ba2f75e24","from":"","client":"server"},"modified":{"at":"2018-10-30T12:52:23+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1540903943367,"ct":1529584177149,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"5e83dff9-c5cc-4e02-aa8f-4d8760d5189c","v":"b79431bb3f9ad710","previous":{"v":"7ff8a54a30d515c8"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Model Stars Download Button","applies":"","packages":[],"template":"<div class=\"dbps-button _CSS-container\" ref=\"listDownload\" @click.stop=\"$refs.popupDownload.$emit('show', { target: $refs.listDownload })\">\n  <ae-icon class=\"fa fa-star\"></ae-icon>\n  <ae-icon class=\"fa fa-download\"></ae-icon>\n</div>\n\n<ae-layout  layout-id=\"066b41f7-036f-422c-9afc-4c3015ddc4b4\"\n            param-list-id=\"bbdc944e-2695-43cf-9068-c7fad4884e1d\"\n            :param-documents=\"[1, 2, 3]\"\n            ref=\"popupDownload\"\n            @selected=\"controller.downloadModels($event)\"\n></ae-layout>\n\n<ae-dialog ref=\"dialog\">\n  <template #header=\"scope\">\n    <div class=\"_CSS-header\">\n      <div class=\"dbps-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </div>\n    </div>\n  </template>\n  <div slot=\"body\" class=\"_CSS-dialog__body\">\n    <h1>\n      Der Download startet in Kürze.\n    </h1>\n\n    <div style=\"margin-top: 2rem\">\n      <div class=\"ae-progress ae-progress--indeterminate\"></div>\n    </div>\n\n    <div style=\"margin-top: 2rem; font-size:var(--ae-font-size-2)\">\n      Sollte der Download nicht automatisch starten klicken Sie hier:\n        <a :href=\"locals.downloadLink\" download>Download</a>\n    </div>\n  </div>\n</ae-dialog>\n","css":"._CSS-container {\n  display: inline-flex;\n  flex-flow: column;\n}\n\n._CSS-dialog__body {\n  padding: 8px;\n}\n\n._CSS-header {\n  display: flex;\n  justify-content: flex-end;\n}","controller":"class Controller {\n  init() {\n    locals.filter = ''\n  }\n\n  async downloadModels(rating) {\n    console.log('download the models with stars', rating)\n\n\n    locals.downloadLink = await this.calculateDownloadLink(rating)\n\n    $refs.dialog && $refs.dialog.show()\n\n    await Aeppic.nextRenderPass()\n\n    $refs.downloadLink.click()\n  }\n\n  async calculateDownloadLink(rating) {\n    const name = await this._zipName(rating)\n\n    return `api/services/18047369-674f-4ba5-bf5d-bba493f4f9bb/zip/${name}?applicationFolderId=${params.applicationFolderId}&projectId=${params.projectId}${this._filter(rating)}`\n  }\n\n  async _zipName(rating) {\n    const parts = []\n\n    if (params.projectId) {\n      const project = await Aeppic.get(params.projectId)\n      parts.push(project.data.name)\n    }\n\n    const today = Aeppic.DateTime.local().toFormat('yyyy-MM-dd')\n    parts.push(today)\n\n    if (rating) {\n      parts.push(`Rating ${rating} stars`)\n    }\n\n    return encodeURIComponent(parts.join('_'))\n  }\n\n  _filter(value) {\n    if (!value) {\n      return ''\n    }\n\n    const encodedValue = encodeURIComponent(`data.rating:${value}`)\n\n    return `&filter=${encodedValue}`\n  }\n}"},"locks":[],"created":{"at":"2018-06-20T17:39:46+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894004,"ct":1529516386477,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"7be86ea7-1897-4343-8dd3-56ba86e8f14e","v":"638237fa6bb7c269","previous":{"v":"2d572e13dba9db61"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Model Zip Download Button","applies":"","packages":[],"template":"<div class=\"ae-noselect dbps-button _CSS-button\" @click.stop=\"controller.download()\" title=\"Als ZIP Datei herunterladen\">\n  <!-- <ae-icon class=\"fa fa-file-download\"></ae-icon> -->\n  <span v-if=\"params.buttonText\">{{ params.buttonText }}</span>\n  <ae-icon class=\"fa fa-download\"></ae-icon>\n</div>\n\n<!-- <div class=\"ae-noselect _CSS-container\" @click.stop=\"controller.download()\" title=\"Als ZIP Datei herunterladen\">\n  <ae-icon class=\"_CSS-icon--background fal fa-file-archive\"></ae-icon>\n  <ae-icon class=\"_CSS-icon--foreground fa fa-download\"></ae-icon>\n</div> -->\n\n<ae-dialog ref=\"dialog\">\n  <template #header=\"scope\">\n    <div class=\"_CSS-header\">\n      <div class=\"dbps-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </div>\n    </div>\n  </template>\n  <div slot=\"body\" class=\"_CSS-dialog__body\">\n    <h1>\n      Der Download startet in Kürze.\n    </h1>\n\n    <div style=\"margin-top: 2rem\">\n      <div class=\"ae-progress ae-progress--indeterminate\"></div>\n    </div>\n\n    <div style=\"margin-top: 2rem; font-size:var(--ae-font-size-2)\">\n      Sollte der Download nicht automatisch starten klicken Sie hier:\n        <a :href=\"locals.downloadLink\" download>Download</a>\n    </div>\n    <!-- <div style=\"margin-top: 2rem\">\n    </div> -->\n  </div>\n</ae-dialog>\n\n<a style=\"display: none;\" ref=\"downloadLink\" :href=\"locals.downloadLink\" download @click.stop>Download</a>\n","css":"._CSS {\n  position: relative;\n}\n\n._CSS-container {\n  position: relative;\n  display: inline-block;\n  height: 1em;\n  width: 1em;\n}\n\n._CSS-dialog__body {\n  padding: 8px;\n}\n\n._CSS-icon--background {\n  position: absolute;\n  bottom: 0;\n  top: 0;\n  right: 0;\n  left: 0;\n}\n\n._CSS-icon--foreground {\n  display: inline-block;\n  position: absolute;\n  /* color: rgb(245, 245, 245); */\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n}\n\n._CSS-icon--foreground use {\n  transform: scale(0.5) translateX(100%) translateY(100%);\n}\n\n._CSS-button {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-header {\n  display: flex;\n  justify-content: flex-end;\n}","controller":"class Controller {\n  init() {\n    $on('download', () => this.download())\n  }\n\n  async download() {\n    locals.downloadLink = await this.calculateDownloadLink()\n\n    if (!params.hideDialog) {\n      $refs.dialog && $refs.dialog.show()\n\n      await Aeppic.nextRenderPass()\n    }\n\n    $refs.downloadLink.click()\n  }\n\n  async calculateDownloadLink() {\n    const name = await this._zipName()\n\n    const parts = []\n\n    if (this._modelId) {\n      parts.push(this._modelId)\n    }\n\n    if (this._applicationFolderId) {\n      parts.push(this._applicationFolderId)\n    }\n\n    if (this._projectId) {\n      parts.push(this._projectId)\n    }\n\n    if (this._filter(params.filter)) {\n      parts.push(this._filter(params.filter))\n    }\n\n    if (parts.length) {\n      return `api/services/18047369-674f-4ba5-bf5d-bba493f4f9bb/zip/${name}?${parts.join('&')}` \n    }\n\n    return `api/services/18047369-674f-4ba5-bf5d-bba493f4f9bb/zip/${name}`\n  }\n\n  async _zipName() {\n    const parts = []\n\n    if (params.projectId) {\n      const project = await Aeppic.get(params.projectId)\n      parts.push(project.data.name)\n    }\n\n    const today = Aeppic.DateTime.local().toFormat('yyyy-MM-dd')\n    parts.push(today)\n\n    if (params.modelId) {\n      const model = await Aeppic.get(params.modelId)\n      parts.push(model.data.name)\n    }\n\n    return encodeURIComponent(parts.join('_'))\n  }\n\n  get _projectId() {\n    if (!params.projectId) {\n      return ''\n    }\n\n    return `projectId=${params.projectId}`\n  }\n\n  get _applicationFolderId() {\n    if (!params.applicationFolderId) {\n      return ''\n    }\n\n    return `applicationFolderId=${params.applicationFolderId}`\n  }\n\n  get _modelId() {\n    if (!params.modelId) {\n      return ''\n    }\n\n    return `modelId=${params.modelId}`\n  }\n\n  _filter(value) {\n    if (!value) {\n      return ''\n    }\n\n    const encodedValue = encodeURIComponent(value)\n\n    return `filter=${encodedValue}`\n  }\n\n  log(e){console.log(e)}\n}"},"locks":[],"created":{"at":"2018-06-21T12:24:22+00:00","by":"791dde52-ff31-42ab-98e3-734ba2f75e24","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894009,"ct":1529583862140,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"6de540a9-0130-4fa6-839b-647b8bd33dc5","v":"22ff55b359be2294","previous":{"v":"eaa15263e2cb5579"},"p":"6eaf1c4f-8acb-4f9a-9b4b-fbcb34fd719d","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Move Dialog","applies":"","packages":[],"template":"<ae-dialog ref=\"dialog\" :full-screen=\"Aeppic.Device === 'Phone'\" :dialog-size=\"{ height: 'var(--ae-dialog__height--big)', width: 'var(--ae-dialog__width--big' }\">\n  <div slot=\"header\" class=\"_CSS-header\">\n    <span>Verschieben</span>\n    <button class=\"ae-button\" @click=\"controller.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div slot=\"body\" v-if=\"locals.config && locals.documents.length\">\n    <ae-layout layout-id=\"4240b02b-8628-47e0-96e9-4661de5d37b4\"\n               :param-target-form-ids=\"locals.config.formIds\"\n               :param-target-navigatable-forms-by-form-id=\"locals.config.navigatableFormsById\"\n               :param-locations=\"locals.config.locations\"\n               :param-documents=\"locals.documents\"\n               @cancel=\"controller.close()\"\n               @move=\"controller.move($event)\"\n    ></ae-layout>\n  </div>\n</ae-dialog>","css":"._CSS-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}","controller":"class Controller {\n  async init() {\n    locals.config = {}\n    locals.documents = []\n\n    this.SETTINGS_FORM = 'f55ad852-a338-4c03-97aa-5f172a68d437'\n    this.COMPANY_FORM = 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df'\n\n    // const d = await Aeppic.get('60a6847c-5ac4-4e2b-a163-43beab3a21a3')\n    // this.show(d)\n\n    $on('show', (event) => this.show(event))\n  }\n\n  async show(documentsOrDocument) {\n    const documents = Array.isArray(documentsOrDocument) ? documentsOrDocument : [documentsOrDocument]\n    const existingDocuments = (await Aeppic.getAll(documents)).filter(d => d != null)\n\n    const config = await this.calculateConfig(existingDocuments)\n\n    locals.documents = existingDocuments\n    locals.config = config\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $refs.dialog.show()\n  }\n\n  async calculateConfig(documents) {\n    const firstDocument = documents[0]\n    const firstDocumentFormId = documents[0].f.id\n\n    const formIdsOfDocuments = []\n\n    for (const doc of documents) {\n      if (!doc) {\n        continue\n      }\n\n      if (!formIdsOfDocuments.includes(doc.f.id)) {\n        formIdsOfDocuments.push(doc.f.id)\n      }\n    }\n\n    console.log(formIdsOfDocuments)\n\n    const formIdsCollector = {}\n    const navigatableFormIdsCollector = {}\n    const navigatableFormsByFormId = {}\n\n    for (const formId of formIdsOfDocuments) {\n      console.log(formId)\n      const config = await this.getConfig(formId)\n      console.log(config)\n\n      for (const fId of config.forms) {\n        formIdsCollector[fId] = formIdsCollector[fId] ? formIdsCollector[fId] += 1 : 1\n        \n        if (!config.navigatableFormsById[fId]) {\n          continue\n        }\n\n        navigatableFormsByFormId[fId] = config.navigatableFormsById[formId]\n\n        for (const navigatableForm of config.navigatableFormsById[fId]) {\n          navigatableFormIdsCollector[navigatableForm.id] = navigatableFormIdsCollector[navigatableForm.id] ? navigatableFormIdsCollector[navigatableForm.id] += 1 : 1\n        }\n      }\n    }\n\n    const formIds = Object.keys(formIdsCollector).filter(key => formIdsCollector[key] === 0 || formIdsCollector[key] === formIdsOfDocuments.length)\n    const navigatableFormIds = Object.keys(navigatableFormIdsCollector).filter(key => navigatableFormIdsCollector[key] === 0 || navigatableFormIdsCollector[key] === formIdsOfDocuments.length)\n\n    const locationsFormIdQuery = [...formIds.map(formId => `f.id:${formId}`), ...navigatableFormIds.map(navigatableFormId => `f.id:${navigatableFormId}`)].join(' OR ')\n    const locationsQuery = `p:${firstDocument.a[0]} a_forms:${this.COMPANY_FORM} AND (${locationsFormIdQuery})`\n\n    const locationDocuments = !locationsFormIdQuery ? [] : await Aeppic.find(locationsQuery, { size: 1000, sort: 'data.name' })\n \n    const locations = new Set(locationDocuments.map(d => d.id))\n\n    console.log('locations', locations)\n\n    const moveConfig = { navigatableFormsByFormId, formIds, locations: [...locations] }\n\n    return moveConfig\n  }\n\n  async getConfig(formId) {\n    const settings = await Aeppic.find(`p:${formId} f.id:${this.SETTINGS_FORM}`)\n\n    const forms = []\n    const navigatableFormsById = {}\n    // const placesSet = new Set()\n\n    for (const setting of settings) {\n      // placesSet.add(setting.a[0])\n      const formId = setting.data.form.id\n\n      forms.push(formId)\n\n      if (setting.data.navigatableForms.length) {\n        if (!navigatableFormsById[formId]) {\n          navigatableFormsById[formId] = []\n        }\n\n        navigatableFormsById[formId].push(...setting.data.navigatableForms)\n      }\n    }\n\n    // const places = [...placesSet]\n\n    return { forms,\n            navigatableFormsById,\n            // places\n            }\n  }\n\n  async move(targetDocument) {\n    const targetFormId = targetDocument.f.id\n\n    const documentsByForms = new Map()\n    for (const document of locals.documents) {\n      if (!documentsByForms[document.f.id]) {\n        documentsByForms[document.f.id] = []\n      }\n\n      documentsByForms[document.f.id].push(document)\n    }\n\n    for (const formId in documentsByForms) {\n      const documents = documentsByForms[formId]\n      const sourceSetting = await this._getSetting(formId, targetFormId)\n\n      if (sourceSetting.data.inCommand.id) {\n        const commandResult = await Aeppic.Commands.execute(sourceSetting.data.inCommand.id, targetDocument, { documents })\n\n        if (!commandResult.ok) {\n          throw new Error('Error executing moveIn command')\n        }\n        \n      }\n\n      if (sourceSetting.data.outCommand.id) {\n        const commandResult = await Aeppic.Commands.execute(sourceSetting.data.outCommand.id, targetDocument, { documents })\n\n        if (!commandResult.ok) {\n          throw new Error('Error executing moveOut command')\n        }\n      }\n\n      const moveAllResult = await Aeppic.Commands.execute('f8062e84-bf45-4c9e-8a36-99afca431052', targetDocument, { documents })\n\n      if (!moveAllResult.ok) {\n        throw new Error('Error executing moveAll command')\n      }\n    }\n\n\n    this.close()\n\n    $emit('moved')\n\n    Aeppic.drillInto(targetDocument)\n  }\n\n  async _getSetting(sourceFormId, targetFormId) {\n    const setting = await Aeppic.findOne(`p:${sourceFormId} f.id:${this.SETTINGS_FORM} data.form.id:${targetFormId}`)\n    \n    if (!setting) {\n      throw new Error('Could not get move setting')\n    }\n\n    return setting\n  }\n\n  close() {\n    locals.config = {}\n    locals.documents = []\n\n    $refs.dialog && $refs.dialog.close()\n  }\n}\n"},"locks":[],"created":{"at":"2019-08-13T12:22:57+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-11-15T12:59:56+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1636981196709,"ct":1565698977535,"a_depth":3,"a":["apps","a031e940-b5a5-4d46-a6dd-c8dcbb57cac1","6eaf1c4f-8acb-4f9a-9b4b-fbcb34fd719d"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"4240b02b-8628-47e0-96e9-4661de5d37b4","v":"fad35cd57cbbb817","previous":{"v":"f74b10ca4fcce6d5"},"p":"6eaf1c4f-8acb-4f9a-9b4b-fbcb34fd719d","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Move Layout","applies":"","packages":[],"template":"<div :class=\"[ '_CSS-container', { '_CSS-container--with-places': locals.places.length } ]\">\n  <div class=\"_CSS-header\">\n    <template v-if=\"locals.documentsToChange.length === 1\">\n      <ae-design name=\"title\" class=\"_CSS-header__title\" :document=\"locals.documentsToChange[0]\"></ae-design> \n    </template>\n    <template v-else>\n      {{ locals.documentsToChange.length }} \n      Dokumente\n    </template>\n    <span>\n      verschieben nach ...\n    </span>\n  </div>\n  <div class=\"_CSS-places\" v-if=\"locals.places.length && locals.current\">\n    <div class=\"_CSS-places__title\">Orte</div>\n    <div class=\"_CSS-places__list\">\n      <button :class=\"['ae-button', '_CSS-place', { 'xae-button--active': place.id !== Aeppic.Root.params.pageDocumentId && (locals.current.a.includes(place.id) || locals.current.id === place.id) }]\" v-for=\"place of locals.places\" @click.stop=\"controller.updateCurrent(place)\">\n        <ae-design :document=\"place\" name=\"icon\"></ae-design>\n        <ae-design :document=\"place\" name=\"title\" style=\"margin: 0 var(--ae-size-1)\"></ae-design>\n      </button>\n    </div>\n  </div>\n  <div class=\"_CSS-actions\">\n    <button class=\"ae-button\" @click=\"$emit('cancel')\">\n      Abbrechen\n    </button>\n    <button class=\"ae-button ae-button--primary\" @click=\"$emit('move', locals.current)\" :disabled=\"!locals.canMoveToCurrent\">\n      Verschieben\n    </button>\n  </div>\n\n  <div class=\"_CSS-body\">\n    <template v-if=\"locals.current\">\n      <div class=\"_CSS-body__path\">\n\n        <button class=\"ae-button ae-button--secondary\" :disabled=\"!controller.canGoUp()\" @click=\"controller.goUp()\">\n          <ae-icon class=\"fa fa-level-up\"></ae-icon>\n        </button>\n        <template v-if=\"locals.current.a.length > 1\">\n          <ae-design name=\"path\" :document=\"locals.current\"></ae-design> <span style=\"margin: 0 var(--ae-size-1);\">/</span>\n        </template>\n        <ae-design name=\"title\" :document=\"locals.current\"></ae-design>\n      </div> \n\n      <ae-list  list-id=\"e2fc1f9a-e3e6-4294-99f8-7f40c52c50e9\"\n                class=\"_CSS-body__list\"\n                :root-document-id=\"locals.current.id\"\n                query-id=\"f812861f-68c8-4818-9972-be7b5474c9b1\"\n                sort=\"data.name\"\n                param-design=\"move-card,search-card\"\n                :param-config=\"locals.listConfig\"\n                @selected=\"controller.updateCurrent($event)\"\n                @move=\"$emit('move', $event)\"\n                :param-enable-search=\"true\"\n                :search-options=\"{ size: 50 }\"\n      ></ae-list> \n    </template>\n  </div>\n  \n</div>\n","css":"._CSS {\n  height: 100%;\n}\n\n._CSS-container {\n  height: 100%;\n\n  display: grid;\n  grid-template-columns: 250px auto;\n  grid-template-rows: max-content auto max-content;\n  grid-template-areas: \"header header\"\n                       \"body body\"\n                       \"actions actions\";\n  --padding: var(--ae-size-3);\n}\n\n._CSS-container--with-places {\n  grid-template-areas: \"header header\"\n                       \"tree body\"\n                       \"tree actions\";\n}\n\n._CSS-header {\n  grid-area: header;\n  font-size: var(--ae-font-size-5);\n  border-bottom: var(--ae-border-width) solid var(--ae-border-color);\n  padding: var(--padding);\n  overflow: hidden;\n}\n\n._CSS-header__title {\n  display: inline;\n}\n\n._CSS-places {\n  grid-area: tree;\n  border-right: var(--ae-border-width) solid var(--ae-border-color);\n  padding: var(--padding);\n  background: var(--ae-ui-background);\n}\n\n._CSS-places__list {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-place {\n  display: flex;\n}\n\n._CSS-actions {\n  grid-area: actions;\n  display: flex;\n  justify-content: flex-end;\n  border-top: var(--ae-border-width) solid var(--ae-border-color);\n  background: var(--ae-ui-background);\n  padding: var(--padding);\n}\n\n._CSS-body {\n  grid-area: body;\n  padding: var(--padding);\n\n  height: 100%;\n  overflow: hidden;\n\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-body__list {\n  flex: 1;\n  overflow-y: scroll;\n  margin: var(--ae-space-2) 0;\n  padding: var(--ae-space-1);\n  background: var(--ae-ui-background);\n  border-radius: var(--ae-border-radius);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n}\n\n._CSS-body__path {\n  display: flex;\n  align-items: center;\n}","controller":"class Controller {\n  async init() {\n    locals.places = []\n    locals.documentsToChange = []\n    locals.current = null\n    locals.currentParent = null\n    locals.canMoveToCurrent = false\n\n    locals.listConfig = this.getListConfig()\n\n    locals.documentsToChange = await this.ensureDocumentsToChange()\n    locals.places = await this.getPlaces()\n    locals.current = await this.getInitialCurrent()\n    locals.currentParent = await Aeppic.get(locals.current.p)\n\n    // params.targetForms\n    // params.targetAncestors\n    // params.targetLocations\n  }\n\n  getListConfig() {\n    const result = {\n      formIds: [],\n      useHighestAncestor: false,\n      navigatableFormsByFormId: [],\n    }\n\n    if (params.targetFormIds) {\n      result.formIds = params.targetFormIds\n    }\n\n    if (params.targetUseHighestAncestor) {\n      result.useHighestAncestor = true\n    }\n\n    if (params.targetNavigatableFormsByFormId) {\n      result.navigatableFormsByFormId = params.targetNavigatableFormsByFormId\n    }\n\n    return result\n  }\n\n  async ensureDocumentsToChange() {\n    return (await Aeppic.getAll(params.documents)).filter(d => d != null)\n  }\n\n  async getInitialCurrent() {\n    if (params.initial) {\n      return Aeppic.get(params.initial)\n    }\n\n    if (locals.places.length) {\n      return locals.places[0]\n    }\n\n    return Aeppic.get(Aeppic.HomePage)\n  }\n\n  async getPlaces() {\n    const places = []\n\n    if (Aeppic.Root.params.pageDocumentId) {\n      places.push(Aeppic.Root.params.pageDocumentId)\n    }\n\n    if (params.locations) {\n      places.push(...params.locations)\n    }\n\n    const existingPlaces = (await Aeppic.getAll(places)).filter(p => p != null)\n\n    return existingPlaces\n  }\n\n  async updateCurrent(doc) {\n    await this._updateCurrent(doc)\n  }\n\n  canGoUp() {\n    if (!locals.currentParent) {\n      return false\n    }\n\n    const parentIsAPlace = locals.places.find(p => p.id === locals.currentParent.id)\n\n    if (parentIsAPlace) {\n      return true\n    }\n\n    const { formIds, navigatableFormsByFormId } = locals.listConfig\n\n    if (formIds.includes(locals.currentParent.f.id)) {\n      return true\n    } \n\n    if (navigatableFormsByFormId[locals.current.f.id]) {\n      return navigatableFormsByFormId[locals.current.f.id].find(f => f.id === locals.currentParent.f.id)\n    }\n\n    return false\n  }\n\n  async goUp() {\n    await this._updateCurrent(locals.currentParent)\n  }\n\n  async _updateCurrent(doc) {\n    const newCurrent = await Aeppic.get(doc)\n\n    if (!newCurrent) {\n      throw new Error('new current is not existing')\n      return\n    }\n\n    locals.current = newCurrent\n    locals.canMoveToCurrent = this._updateCanMoveToCurrent()\n    locals.currentParent = await Aeppic.get(newCurrent.p)\n  }\n\n  async _updateCanMoveToCurrent() {\n    if (!locals.current || !locals.listConfig) {\n      return false\n    }\n\n    if (await Aeppic.canEdit(locals.current) === false) {\n      return false\n    }\n\n    const { formIds } = locals.listConfig\n\n    return formIds.includes(locals.current.f.id)\n  }\n}\n\n"},"locks":[],"created":{"at":"2019-08-12T14:01:36+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-11-15T13:03:35+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1636981415150,"ct":1565618496189,"a_depth":3,"a":["apps","a031e940-b5a5-4d46-a6dd-c8dcbb57cac1","6eaf1c4f-8acb-4f9a-9b4b-fbcb34fd719d"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"52c03528-281a-41b3-8575-1c0eb20a6da9","v":"a776f4b991aa3bdd","previous":{"v":"initial"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Move to waste basket Button","applies":"","packages":[],"template":"<div title=\"Löschen\" @click.stop=\"$refs.deleteDialog.show()\" class=\"dbps-button ae-noselect\" ref=\"button\">\n  <ae-icon class=\"fa fa-trash\"></ae-icon>\n</div>\n\n<ae-dialog ref=\"deleteDialog\" title=\"Dokument löschen\" :backdrop-close=\"false\" :full-screen=\"Aeppic.Device === 'Phone'\">\n  <div slot=\"header\" slot-scope=\"scope\" class=\"_CSS-dialog__header\">\n    <span>Dokument löschen</span>\n    <button class=\"ae-button\" @click.stop=\"scope.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div slot=\"body\" class=\"_CSS-dialog__body\">\n    Möchten Sie <b>{{ params.document.data.name || 'dieses Dokument' }}</b> löschen?\n    <p>\n      Das Dokument wird in den Papierkorb verschoben.\n    </p>\n  </div>\n  <div slot=\"commands\" slot-scope=\"scope\" class=\"_CSS-dialog__commands\">\n    <div class=\"ae-button\" @click.stop=\"scope.close()\">Abbrechen</div>\n    <div class=\"ae-button ae-button--primary\" @click.stop=\"controller.moveToTrash()\">Löschen</div>\n  </div>\n</ae-dialog>\n","css":"._CSS-commands {\n  display: grid;\n  grid-gap: 2px;\n  grid-auto-columns: auto;\n  grid-auto-flow:column;\n}\n\n._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n}\n\n._CSS-dialog__commands {\n  flex: 1;\n  display: flex;\n  justify-content: flex-end;\n}","controller":"moveToTrash() {\n  Aeppic.Commands.execute('2ccf81f4-a87a-4d9a-9c05-b6ac7e3ebf23', params.document)\n  Aeppic.navigateTo(params.document.p)\n}"},"locks":[],"created":{"at":"2019-04-12T14:13:55+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894015,"ct":1555078435070,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"acebfbf8-e284-44b0-8ecd-3456ed4fb440","v":"2e57272c73c3e8a1","previous":{"v":"4a85d57da1391488"},"p":"7fd7c5cc-1eed-440b-8ce2-d6183cdb421b","f":{"id":"layout-form","v":"dad1a77c49465e08","text":"Layout"},"data":{"name":"nav-tree","applies":"","packages":[],"template":"<ae-list  style=\"flex:1;overflow:auto;padding:4px\"\n          class=\"ae-col\"\n          @selected=\"id => controller.select(id)\"\n          list-id=\"tree-list\"\n          :param-root-id=\"locals.rootId\"\n          :param-show-forms=\"locals.showForms\"\n          :param-show-form-icons=\"locals.showFormIcons\"\n          :param-selected=\"locals.selected\"\n          :param-query-children-existence=\"locals.queryChildrenExistence\"\n          @toggle-show-forms=\"locals.showForms = !locals.showForms\"\n          @toggle-show-form-icons=\"locals.showFormIcons = !locals.showFormIcons\"\n          @toggle-query-children-existence=\"locals.queryChildrenExistence = !locals.queryChildrenExistence\"\n></ae-list>\n\n<!-- {{locals.selected}} -->","css":"","controller":"class Controller {\n  init(){\n    locals.rootId = 'root'\n    locals.selected = null\n    locals.showForms = false\n    locals.showFormIcons = true\n    locals.queryChildrenExistence = false\n\n\n    $on('onDocumentSelected', async (event) => {\n      console.log(event)\n      const id = event.id\n\n      locals.selectedId = id\n      locals.selected = await Aeppic.get(id)\n    })\n\n    this.select('root')\n  }\n\n  async select(id) {\n    console.log(id)\n    locals.selectedId = id\n    locals.selected = await Aeppic.get(id)\n    $emit('selected', id)\n  }\n}"},"locks":[],"created":{"at":"2018-04-18T15:37:55+02:00","by":"","from":"","client":"server"},"modified":{"at":"2022-11-22T12:57:10+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1669121830461,"ct":1524058675721,"a_depth":5,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","427e6b73-968a-4747-be77-c6bb820a3190","7fd7c5cc-1eed-440b-8ce2-d6183cdb421b"],"a_forms":["folder","application-form","folder","folder","folder"],"inheritedLocks":[null,null,null,null,null,null],"stamps":[]},{"id":"c1b33446-cc5a-47dd-9985-3124c4a561bc","v":"16811690ad4d8d76","p":"177b1d7c-255c-4d16-b367-e9622b4db575","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"New Dialog Layout","applies":"","template":"<ae-dialog  ref=\"executionDialog\"\n            :backdrop-close=\"false\"\n            :dialog-size=\"controller.dialogSize\"\n\n>\n  <div v-if=\"locals.dialog\" slot=\"header\" slot-scope=\"scope\" class=\"_CSS-dialog__header\">\n    {{ locals.dialog.data.title || locals.dialog.data.name }} \n    <!-- <ae-icon class=\"_CSS-button fal fa-times\" @click.native=\"controller.closeExecutionDialog()\"></ae-icon> -->\n  </div>\n\n  <div slot=\"body\" @ae-drill-into.stop.prevent @ae-will-navigate.stop.prevent >\n    <ae-design  v-if=\"locals.dialog && locals.dialog.data.design && locals.targetDocument\"\n                :name=\"locals.dialog.data.design\"\n                :document=\"locals.targetDocument\"\n                :edit=\"locals.dialog.data.editable\"\n                :watch=\"false\"\n                :params=\"{ executionError: locals.executionError }\"\n    ></ae-design>\n\n    <p v-if=\"locals.dialog && locals.dialog.data.message\"\n      style=\"white-space:pre-line;\"\n      v-html=\"Aeppic.Parser.markdown(locals.dialog.data.message)\"\n    >\n      <!-- {{ Aeppic.Parser.markdown(locals.dialog.data.message) }} -->\n    </p>\n \n    <div class=\"_CSS-error\" v-if=\"locals.executionError\">\n      <ae-icon class=\"far fa-exclamation-triangle\"></ae-icon>\n      {{ Aeppic.translate(locals.executionError) }}\n    </div>\n  </div>\n\n\t<div v-if=\"locals.dialog\" slot=\"commands\" slot-scope=\"scope\" class=\"_CSS-dialog__commands\">\n    <template v-for=\"(command, index) of controller.commands\">\n      <button :class=\"['ae-button', { 'ae-button--primary': index === controller.commands.length - 1 } ]\"\n              @click.stop=\"controller.executeDialogCommand(command.id)\"\n      >\n      <ae-design name=\"title\" :document=\"command\"></ae-design>\n      </button>\n    </template>\n\t</div>\n</ae-dialog> \n","css":"._CSS-commands {\n  display: grid;\n  grid-gap: 2px;\n  grid-auto-columns: auto;\n  grid-auto-flow:column;\n}\n\n/* DIALOG */\n\n._CSS-dialog__header {\n  flex: 1;\n  display: flex;\n}\n\n._CSS-dialog__commands {\n  flex: 1;\n  display: flex;\n  justify-content: flex-end;\n}\n\n._CSS-button {\n  cursor: pointer;\n}\n\n._CSS-button:hover {\n  background: var(--ae-theme-text-secondary-on-light);\n  color:var(--ae-theme-text-hint-on-dark);\n}\n\n._CSS-error {\n  margin: var(--ae-size-2);\n  color: var(--ae-accent-red-600);\n}\n","controller":"class Controller {\n  init() {\n    locals.dialog = null\n    locals.executionError = null\n    locals.targetDocument = null\n\n    $on('show', (options) => this._show(options))\n\n    $emit('ready')\n  } \n\n  async _show(options) {\n    locals.dialog = options.dialog && await Aeppic.get(options.dialog)\n    const command = options.command && await Aeppic.get(options.command)\n    console.log('NEW', options.document, command)\n\n    const targetDocument = options.document || await this._executeCommand(command.id, params.document)\n    if (Aeppic.isEditableDocument(targetDocument)) {\n      locals.targetDocument = targetDocument\n    } else {\n      locals.targetDocument = await Aeppic.edit(targetDocument)\n    }\n\n    if ('hidden' in locals.targetDocument) {\n      locals.targetDocument.hidden = true\n    }\n       \n    locals.executionError = null\n    \n    $refs.executionDialog.show()\n  }\n\n  async _form() {\n    if (!params.document) {\n      return null\n    }\n\n    return Aeppic.getForm(params.document.f.id)\n  }\n\n  closeExecutionDialog() {\n    $refs.executionDialog && $refs.executionDialog.close()\n\n    locals.targetDocument = null\n    locals.executionError = null\n\n    $emit('close')\n  }\n\n  get commands() {\n    if (!locals.dialog) {\n      return []\n    }\n\n    return Array.from(locals.dialog.data.commands).reverse()\n  }\n\n  async executeDialogCommand(commandId) {\n    const commandResult = await this._executeCommand(commandId, locals.targetDocument)\n\n    if (!commandResult) {\n      return\n    }\n\n    this.closeExecutionDialog()\n  }\n\n  async _executeCommand(commandId, doc, commandParams) {\n    console.log(commandId, doc)\n\n    const command = await Aeppic.get(commandId)\n\n    // FIXME: if the import code following the commandExecution would not be needed, one could use the Command's options { navigation: true } to execute potential navigation\n    const commandResult = await Aeppic.Commands.execute(command, doc, commandParams)\n\n    if (!commandResult.ok || (commandResult.value && 'ok' in commandResult.value && !commandResult.value.ok)) {\n      const message = commandResult.value && commandResult.value.message || 'error:execution'\n\n      locals.executionError = message\n      console.error(commandResult)\n      \n      return false\n    }\n\n    let result = commandResult.value\n\n    if (commandResult.value != null) {\n      if ('value' in commandResult.value) {\n        result = commandResult.value.value\n      } else {\n        result = commandResult.value\n      }\n    }\n\n    if (result) {\n      const resultAlreadyImported = await Aeppic.get(result)\n\n      if (!resultAlreadyImported) {\n        await Aeppic.import(result)\n      }\n\n      if (!Aeppic.isEditableDocument(result)) {\n        result = await Aeppic.edit(result)\n      }\n    }\n\n    switch (command.data.navigation) {\n      case 'drillInto': \n        Aeppic.drillInto(result)\n        break\n      case 'navigate': \n        Aeppic.navigateTo(result)\n        break\n      case 'back': \n        Aeppic.navigateBack()\n        break\n      case 'dialog':\n        console.error('Dialog command navigation not implemented yet')\n        break\n      case 'no':\n      default:\n    }\n\n    return result || true\n  }\n\n  get dialogSize() {\n    const size = {\n      height: null,\n      width: null,\n    }\n\n    if (Aeppic.Device !== 'Desktop') {\n      return size\n    }\n\n    size.height = (locals.dialog && locals.dialog.data.dialogHeight) || '90vh'\n    size.width = (locals.dialog && locals.dialog.data.dialogWidth) || '60vw'\n\n    return size\n  }\n\n  destroy() {\n    this.closeExecutionDialog()\n  }\n} ","packages":[]},"locks":[],"created":{"at":"2019-05-08T09:11:04+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2023-11-27T10:32:36+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1719319447736,"ct":1719319447736,"a_depth":2,"a":["system","177b1d7c-255c-4d16-b367-e9622b4db575"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"48c49667d4da1982","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"}},"meta":{"modified":{"at":"2024-06-25T14:44:07+02:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"id":"6994a9c9-df8c-43b9-be69-b959f286a549","v":"initial","p":"c3df0a76-ded1-4a65-92f0-8f78ecbde232","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"News","applies":"","packages":[],"template":"<ae-list :documents=\"locals.news\" \n        list-id=\"f94fac30-56a6-4aac-bd7c-1881bd752b13\"\n></ae-list>\n","css":"._CSS {\n  overflow-y: scroll;\n}","controller":"class Controller {\n  async init() {\n    if (params.companyId) {\n      const recents = (await Aeppic.find(`p:${params.companyId} f.id:6786b72e-276f-4c82-b7c5-ca5758689118`))[0]\n      \n      locals.news = recents && recents.data.news\n    }\n  }\n}\n"},"locks":[],"created":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1568969971610,"ct":1568969971609,"a_depth":3,"a":["apps","8fa52498-fa07-4bad-87b3-5c8df671aca4","c3df0a76-ded1-4a65-92f0-8f78ecbde232"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9"],"a_depth":4,"a_forms":["system-folder-form","folder","form","folder"],"created":{"at":"2025-10-07T13:55:17+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759845317172,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.news = [\n      {\n        title: 'Unwetter am Mittelrhein',\n        article: 'Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.',\n        icon: 'far fa-edit',\n        author: 'Florian Zahn',\n        date: '05.08.2025'\n\n      },\n      {\n        title: 'Unwetter am Mittelrhein',\n        article: 'Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.',\n        icon: 'far fa-edit',\n        author: 'Florian Zahn',\n        date: '05.08.2025'\n\n      },\n      {\n        title: 'Unwetter am Mittelrhein',\n        article: 'Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.',\n        icon: 'far fa-edit',\n        author: 'Florian Zahn',\n        date: '05.08.2025'\n\n      },\n      {\n        title: 'Unwetter am Mittelrhein',\n        article: 'Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.',\n        icon: 'far fa-edit',\n        author: 'Florian Zahn',\n        date: '05.08.2025'\n\n      },\n      {\n        title: 'Unwetter am Mittelrhein',\n        article: 'Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.Ein Unwetter erschüttert die Bewoher am Mittelrhein. Das ganze Tal ist geflutet und viele Menschen haben ihr zu Hause verloren. Die Fähren freut es aber; Denn ohne sie geht hier ab sofort nichts mehr.',\n        icon: 'far fa-edit',\n        author: 'Florian Zahn',\n        date: '05.08.2025'\n\n      }\n    ]\n  }\n}","css":"","name":"News","packages":[],"template":"<section\n    class=\"bg-surface text-on-surface rounded-2xl p-4 \"\n  >\n  <h1 class=\"\">News</h1>\n  <section\n    class=\"\"\n  >\n    <div class=\"w-1/2 mx-auto grid grid-cols-3 gap-4\">\n      <ae-layout\n        v-for=\"newsItem in locals.news\"\n        layout-id=\"06eba173-63d7-45d6-84a8-1b603008194b\"\n        :param-title=\"newsItem.title\"\n        :param-article=\"newsItem.article\"\n        :param-icon=\"newsItem.icon\"\n        :param-user-name=\"newsItem.userName\"\n        :param-date=\"newsItem.date\"\n        :param-author=\"newsItem.author\"\n      ></ae-layout>\n    </div>  \n  </section>\n</section>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"cc50ceda-c259-4f93-95e2-83aff7d0c595","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-07T13:55:47+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"6ad6f21b-b086-4e9c-aa38-4893fd343fb9","previous":{"v":"initial"},"stamps":[],"t":1759845347563,"v":"dad4da6a1cdbb6ee"},{"id":"f7d1f439-edf6-4544-a656-6b0af4afe4e1","v":"455645941f2a85ea","previous":{"v":"1b288623eabdc6b1"},"p":"d3d08873-80a4-471b-b999-eadf1f28c038","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"News","applies":"","packages":[],"template":"<ae-list :documents=\"locals.news\" \n        list-id=\"f94fac30-56a6-4aac-bd7c-1881bd752b13\"\n></ae-list>\n","css":"._CSS {\n  overflow-y: scroll;\n}","controller":"class Controller {\n  async init() {\n    if (params.companyId) {\n      const recents = (await Aeppic.find(`p:${params.companyId} f.id:6786b72e-276f-4c82-b7c5-ca5758689118`))[0]\n      \n      locals.news = recents && recents.data.news\n    }\n  }\n}\n"},"locks":[],"created":{"at":"2018-11-29T16:02:45+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2018-11-30T16:07:16+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1543594036690,"ct":1543507365408,"a_depth":3,"a":["apps","43f84041-0fd7-4ccb-b7b5-7a38f89ada37","d3d08873-80a4-471b-b999-eadf1f28c038"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2026-07-06T12:31:13+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"ct":1783341073078,"data":{"applies":"","controller":"","css":"","name":"No Company Layout","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<div class=\"absolute top-0 left-0 right-0 bottom-0 flex items-center justify-center bg-slate-100 dark:bg-slate-900\"\n     :data-test=\"'layout' + '_' + layout.id\"\n>\n  <div class=\"bg-white dark:bg-slate-800 rounded-lg shadow-md px-8 py-6 text-center max-w-md space-y-4\">\n    <p class=\"text-lg font-semibold text-slate-800 dark:text-slate-100\">\n      You are logged in as {{ Aeppic.Account && (Aeppic.Account.data.displayName || Aeppic.Account.data.name) }}\n    </p>\n    <p class=\"text-slate-600 dark:text-slate-300\">\n      Your account does not belong to any company.\n    </p>\n    <button\n      type=\"button\"\n      data-test=\"logout\"\n      class=\"inline-flex items-center justify-center px-4 py-2 rounded-md bg-slate-700 text-white text-sm font-medium hover:bg-slate-600\"\n      @click=\"Aeppic.logout()\"\n    >\n      Log out\n    </button>\n  </div>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"ea6a9313-0978-4ebe-9b65-546d65f5ba68","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-07-06T12:38:19+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"b7b55e12b96412af"},"stamps":[],"t":1783341499442,"v":"8f13308ea031e6b9"},{"id":"2eaa0d5f-36ed-4e10-9834-03613633b55f","v":"76e49cefba4b2596","previous":{"v":"e812534884d6f86a"},"p":"2d46771e-84af-45f3-bc70-2c1793b412a9","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"},"data":{"name":"Notification Panel","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"150e1aeee6052825","text":"Window"}],"template":"<div class=\"_CSS-body\" :class=\"Aeppic.Device === 'Phone'? '_CSS-body--mobile' : ''\">\n  <template v-if=\"!locals.detailsDocument\">\n    <div v-if=\"Aeppic.Device !== 'Phone'\" class=\"_CSS-header\">\n      <div>\n        Benachrichtigungen\n        <span v-if=\"locals.showDone\" title=\"Es werden nur die 100 neusten gelesenen Benachrichtigungen angezeigt\"><ae-icon class=\"fa fa-info-circle\"></ae-icon></span>\n        <span v-if=\"!locals.showDone && locals.noDeletedReferences.length\">({{locals.noDeletedReferences.length}}) </span>\n      </div>\n      <div class=\"_CSS-header__actions\">\n        <button v-if=\"!locals.showDone && locals.noDeletedReferences.length\" class=\"ae-button\" title=\"Alle gelesen markieren\" @click.stop=\"controller.markAllRead()\">\n          <ae-icon class=\"fad fa-mail-bulk\"></ae-icon>\n        </button>\n        <button v-if=\"locals.showDone && locals.noDeletedReferences.length\" class=\"ae-button\" title=\"Alle gelesenen Benachrichtigungen löschen\" @click.stop=\"controller.deleteAllRead()\">\n          <ae-icon class=\"far fa-trash\"></ae-icon>\n        </button>\n        <button class=\"ae-button\" @click.stop=\"controller.toggleDone()\" title=\"Gelesene anzeigen\" style=\"font-size: var(--ae-size-4);\">\n          <ae-icon v-show=\"!locals.showDone\" class=\"fa fa-toggle-off\"></ae-icon>\n          <ae-icon v-show=\"locals.showDone\" class=\"fa fa-toggle-on\"></ae-icon>\n        </button>\n      </div>\n    </div>\n    <div v-else class=\"_CSS-header\">\n        <div class=\"_CSS-header__actions\" style=\"display:flex; justify-content: space-between; width:100%;\">\n        <button v-if=\"!locals.showDone && locals.noDeletedReferences.length\" class=\"ae-button\" title=\"Alle gelesen markieren\" @click.stop=\"controller.markAllRead()\">\n          <ae-icon class=\"fad fa-mail-bulk\"></ae-icon>\n        </button>\n        <button v-if=\"locals.showDone && locals.noDeletedReferences.length\" class=\"ae-button\" title=\"Alle gelesenen Benachrichtigungen löschen\" @click.stop=\"controller.deleteAllRead()\">\n          <ae-icon class=\"far fa-trash\"></ae-icon>\n        </button>\n        <span style=\"flex:1\"></span>\n          <div v-show=\"!locals.showDone\">\n            <button class=\"ae-button\" @click.stop=\"controller.toggleDone()\" title=\"Gelesene anzeigen\" style=\"font-size: var(--ae-size-4);\">\n              gelesene anzeigen\n              <ae-icon class=\"fa fa-toggle-off\"></ae-icon>\n            </button>\n          </div>\n          <div v-show=\"locals.showDone\">\n            <button class=\"ae-button\" @click.stop=\"controller.toggleDone()\" title=\"Gelesene anzeigen\" style=\"font-size: var(--ae-size-4);\">\n               ungelesene anzeigen\n              <ae-icon class=\"fa fa-toggle-on\"></ae-icon>\n            </button>\n          </div>\n      </div>\n    </div>\n    <div v-if=\"locals.noDeletedReferences.length === 0\" class=\"_CSS-notifications--empty\">\n      <ae-icon class=\"fa fa-badge-check fa-2x\"></ae-icon>\n      <p v-if=\"locals.showDone\">\n        Keine gelesenen Benachrichtigungen.\n      </p>\n      <p v-else>\n        Keine ungelesenen Benachrichtigungen.\n      </p>\n    </div>\n    <div v-else class=\"_CSS-list-container\"> \n      <div v-for=\"group of locals.notificationGroups\">\n        <div v-if=\"group.notifications.length !== 0\" class=\"_CSS-list-header\">\n          <button class=\"ae-button _CSS-list-subprojects__button\" style=\"\" @click.stop=\"group.show = !group.show\">\n            {{group.label}} ({{group.notifications.length}}) \n            <span style=\"flex:1\"></span>\n            <ae-icon v-show=\"!group.show\" class=\"fa fa-chevron-down\" style=\"align-self: center\"></ae-icon>\n            <ae-icon v-show=\"group.show\" class=\"fa fa-chevron-up\" style=\"align-self: center\"></ae-icon>\n          </button>\n          <div v-show=\"group.show === true\" style=\"margin-top: var(--ae-size-2)\">\n            <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n              param-min-column-width=\"100%\"\n              @selected=\"controller.showDetails($event)\"\n              param-design=\"small-card,card\"\n              param-gap=\"small\"\n              :documents=\"group.notifications\"\n            ></ae-list>\n          </div>\n        </div>\n      </div>\n    </div>\n  </template>\n  <template v-else>\n    <div class=\"_CSS-header\">\n      <button class=\"ae-button\" @click.stop=\"locals.detailsDocument = null\">\n        <!-- TODO: fix ae-icon and remove key here -->\n        <ae-icon :key=\"locals.detailsDocument.id\" class=\"fa fa-chevron-left\"></ae-icon> zurück\n      </button>\n    </div>\n    <ae-design name=\"card--interactive,card\" :document-id=\"locals.detailsDocument.id\" @navigate=\"controller.markReadAndNavigateTo($event)\"></ae-design>\n  </template> \n</div>","css":"._CSS {\n   overflow: auto;\n}\n._CSS-body {\n  display: flex;\n  flex-flow: column;\n  border: var(--ae-border-width) solid var(--ae-ui-element-border-color);\n  border-radius: var(--ae-border-radius);\n  background: var(--ae-ui-background);\n}\n\n._CSS-body--mobile {\n  display: flex;\n  flex-flow: column;\n  height: 100%;\n  border: none;\n  background: none;\n}\n\n._CSS-header {\n  height: var(--ae-size-7);\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: var(--ae-size-3);\n}\n\n._CSS-header__actions {\n  display: flex;\n  align-items: center; \n}\n\n._CSS-notifications--empty {\n  display: flex;\n  flex-flow: column;\n  align-items: center;\n}\n\n._CSS-header {\n  padding: 10px;\n  font-size: 1.2em;\n  display: flex;\n  justify-content: space-between;\n}\n\n._CSS-list-container {\n  overflow: auto;\n}\n\n._CSS-list-header {\n  width: 100%;\n}\n\n._CSS-list-subprojects__button {\n  width: 99%;\n  display: flex;\n  justify-content: center;\n}","controller":"class Controller {\n  init() {\n    this.FORMS = {\n      Comment: 'cf155969-ede1-43a4-9b10-3a697b19db91',\n      Ping: '42cf6e7a-e304-49a6-86e1-c94d84f1d0d9',\n    }\n\n    locals.sort = {\n      field: 'created.at',\n      descending: true\n    }\n\n    locals.groupsByCategoryId  = {\n      '97902782-7315-4837-94fc-8e080c6cfbf3' : 'ping',\n      '42cf6e7a-e304-49a6-86e1-c94d84f1d0d9' : 'ping',\n      'cf155969-ede1-43a4-9b10-3a697b19db91' : 'comment',\n      '3d456c38-6282-416e-8c5e-7d20b0517a6e' : 'task',\n      '0deb4864-cbb6-420c-99ee-337c7444ab24' : 'task',\n      'c6349b48-9561-4c06-9200-fe9df9b6fb3e' : 'customer',\n      '8d8f6fdb-6f78-4e2a-b585-bd80f4dbaa1d' : 'customer',\n      '5152f88f-3006-46f9-959a-423139accf79' : 'customer',\n      '6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2' : 'release' \n    }\n\n    locals.notificationGroups = {\n      ping: { \n        label: 'Pings', \n        show: false, \n        notifications: [] },\n      comment: { \n        label: 'Kommentare', \n        show: false, \n        notifications: [] },\n      task: { \n        label: 'Aufgaben', \n        show: false, \n        notifications: [] },\n      customer: { \n        label: 'Kunden Interaktion', \n        show: false, \n        notifications: [] },\n      release: {\n        label: 'Freigabe', \n        show: false, \n        notifications: []\n      },        \n      other: { \n        label: 'Sonstige', \n        show: false, \n        notifications: [] }\n    }\n    \n    locals.showDone = false\n    locals.notifications = []\n    locals.allNotifications = []\n    locals.notificationsDisplayed = 100\n    \n    locals.noDeletedReferences = []\n\n    if (!Aeppic.Account || !Aeppic.Account.id) {\n      return\n    }\n \n    this.updateNotificationsSubscription()\n  }\n\n  updateNotificationsSubscription() {\n    if (this._subscription) {\n      this._subscription.cancel()\n    }\n\n    const sort = {\n      sort: [\n        {\n          field: 'created.at',\n          descending: true,\n        }, {\n        field: 'id',\n        descending: true\n      }],\n      size: 9999\n    }\n\n    const queryString = `f.id:6d164aff-df9b-470d-9632-cfb6f5892509 p:${Aeppic.Account.id} ${this.filter || ''}` \n    \n    this._subscription = Aeppic.subscribe(queryString, sort, async (notifications) => {\n      const sortedById = Aeppic.sort(notifications, {\n        field: 'id',\n        descending: true\n      }) \n      const sortedByCreatedAndId = Aeppic.sort(sortedById, {\n        field: 'created.at',\n        descending: true\n      }) \n       \n      const notificationTargets = await Aeppic.getAll(sortedByCreatedAndId.map(e => e.data.document.id))\n\n      const noDeletedNotifications = sortedByCreatedAndId.filter((notification, index) => {\n        return !!notificationTargets[index]\n      })\n\n      if(locals.showDone) {\n        locals.noDeletedReferences = noDeletedNotifications.slice(0, locals.notificationsDisplayed)\n      } else {\n        locals.noDeletedReferences = noDeletedNotifications\n      }\n\n      this.allNotifications = noDeletedNotifications\n\n      this.categorizeNotifications(locals.noDeletedReferences)\n    })\n  }\n  \n  async markReadAndNavigateTo(event) {\n    const notification = await Aeppic.edit(event)\n\n    notification.data.read = true\n    notification.data.readAt = Aeppic.DateTime.local().toFormat(\"yyyy-MM-dd'T'T\")\n\n    Aeppic.save(notification)\n\n    const document = await Aeppic.get(notification.data.document)\n    console.log('navigateto', { document })\n    if (document) {\n      if (document.f.id === this.FORMS.Comment) {\n        Aeppic.drillInto(document.p)\n      } else if (document.f.id === this.FORMS.Ping) {\n        Aeppic.drillInto(document.data.document)\n      } else {\n        Aeppic.drillInto(document)\n      }\n    }\n\n    $emit('close')\n  }\n\n  async showDetails(event) {\n    if (!(await event.data.document)) {\n      return\n    }\n\n    locals.detailsDocument = event\n  }\n\n  toggleDone() {\n    locals.showDone = !locals.showDone\n\n    for (const categoryName in locals.notificationGroups) {\n      locals.notificationGroups[categoryName].show = false\n    }\n\n    this.updateNotificationsSubscription()\n  }\n\n  get filter() {\n    return locals.showDone === false ? 'data.read:false' : 'data.read:true'\n  }\n\n  async markAllRead() {\n    const ok = packages.window.confirm('Alle Benachrichtigungen als gelesen markieren?')\n\n    if (!ok) {\n      return\n    }\n\n    const notifications = await Aeppic.editAll(locals.noDeletedReferences)\n\n    for (const notification of notifications) {\n      notification.data.read = true\n      notification.data.readAt = Aeppic.DateTime.local().toFormat(\"yyyy-MM-dd'T'T\")\n    }\n\n    Aeppic.saveAll(notifications)\n  }\n\n  async deleteAllRead() {\n    const ok = packages.window.confirm('Alle gelesenen Benachrichtigungen löschen?')\n\n    if (!ok) {\n      return\n    }\n\n    const allReadNotifications = this.allNotifications.filter(n => n.data.read === true)\n    \n    for (const notification of allReadNotifications) {\n      Aeppic.delete(notification)\n    }\n    // const notifications = await Aeppic.editAll(locals.noDeletedReferences)\n\n    // for (const notification of notifications) {\n    //   notification.data.read = true\n    //   notification.data.readAt = Aeppic.DateTime.local().toFormat(\"yyyy-MM-dd'T'T\")\n    // }\n\n    // Aeppic.saveAll(notifications)\n  }\n\n\n  categorizeNotifications(notifications) {\n    for (const categoryName in locals.notificationGroups) {\n      locals.notificationGroups[categoryName].notifications = []\n    }\n    \n    notifications.forEach(notification => {\n      const category = notification.data.category\n      const groupName = locals.groupsByCategoryId[category]\n\n      if(!groupName) {\n        locals.notificationGroups.other.notifications.push(notification)\n        return\n      }\n\n      const group = locals.notificationGroups[groupName]\n      group.notifications.push(notification)\n    })\n  }\n}\n\n\n\n"},"locks":[],"created":{"at":"2019-03-25T15:25:44+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2023-01-10T11:28:38+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1673350118971,"ct":1595506340166,"a_depth":3,"a":["apps","c9b12874-99d0-40e8-86cc-c3fe0477a15a","2d46771e-84af-45f3-bc70-2c1793b412a9"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","c9b12874-99d0-40e8-86cc-c3fe0477a15a","2d46771e-84af-45f3-bc70-2c1793b412a9"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"16deac1a-84bd-4fd3-8950-d87e152742d9","text":"Notifications Button","v":"34d2cfcee055ed1a"},"created":{"at":"2019-03-14T15:03:49+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1552575829678,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.unreadNotifications = []\n\n    if (!Aeppic.Account || !Aeppic.Account.id) {\n      return\n    }\n \n    this.subscribeNewNotifications()\n    this.notificationsAllowed = await this.requestNotificationPermission()\n  }\n\n  subscribeNewNotifications() {\n    let subscribeRanOnce = false\n\n    Aeppic.subscribeQuery('767577b3-0461-4a8e-a3ee-3d7c4fba5787', Aeppic.Account.id, async (unread) => {\n      if (!subscribeRanOnce && unread.length === 0) {\n        // NOTE: skip this because nothing happend yet \n        return\n      }\n\n      const oldLength = locals.unreadNotifications.length\n\n      const availableNotifications = await this._filterDeleted(unread)\n      const newLength = availableNotifications.length\n\n      locals.unreadNotifications = availableNotifications\n\n      if (!subscribeRanOnce) {\n        subscribeRanOnce = true\n        return\n      }\n\n      if (!this.notificationsAllowed) {\n        return\n      }\n\n      const difference = newLength - oldLength\n\n      if (difference <= 0) {\n        return\n      }\n\n      if (difference === 1) {\n        this.newNotification(availableNotifications[0])\n        return\n      }\n\n      this.newNotification()\n    })  \n  }\n\n  async _filterDeleted(notifications) {\n    const allNotifications = await Aeppic.getAll(notifications.map(n => n.data.document.id))\n\n    return notifications.filter((_, i) => allNotifications[i] !== null)\n  }\n\n  async requestNotificationPermission() {\n    if (typeof Notification === 'undefined') {\n      return false\n    }\n\n    const result = await Notification.requestPermission()\n    return result === 'granted'\n  }\n\n  async newNotification(notification) {\n    console.log('noti', notification)\n    const name = notification ? Aeppic.translate(notification.data.name) : 'Neue Benachrichtigung'\n\n    const targetDocument = notification ? await Aeppic.get(notification.data.document) : null\n    const body = targetDocument && targetDocument.data.name ? `${targetDocument.data.name}` : ''\n\n    const n = new Notification(name, {\n      body,\n      icon: 'manifest/pwa-192x192.png'\n    })\n  }\n\n  onClose() {\n    locals.detailsDocument = null\n    locals.showDone = false\n  }\n\n  destroy() {\n    $refs.popup && $refs.popup.close()\n  }\n\n  open() {\n    if(Aeppic.Device !== 'Phone') {\n      $refs.popup.show({ target: $refs.bell.children[0] })\n    } else {\n      $refs.dialog.show()\n    }\n  }\n}\n","css":"._CSS {\n  display: flex;\n  justify-content: flex-end;\n}\n\n\n._CSS ._CSS-action-button--overlay {\n  color: var(--ae-ui-background);\n  filter: drop-shadow( 0px 0px 1px rgba(0,0,0,1) ) drop-shadow( 0px 0px 10px rgba(0,0,0,0.8));\n}\n\n/* https://codepen.io/Mrshcom/pen/bqmFg */\n._CSS ._CSS-bell--has-notifications {\n  color: var(--ae-accent-red) !important;\n  -webkit-animation: _CSS-ring 4s .7s ease-in-out 1;\n  -webkit-transform-origin: 50% 4px;\n  -moz-animation: _CSS-ring 4s .7s ease-in-out 1;\n  -moz-transform-origin: 50% 4px;\n  animation: _CSS-ring 4s .7s ease-in-out 1;\n  transform-origin: 50% 4px;\n}\n\n/* popup */\n\n._CSS-popup {\n  xmin-width: 500px;\n  xmax-width: 500px;\n  width: 340px;\n\n  max-height: 90vh;\n  box-shadow: var(--ae-shadow-2);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n","name":"Notifications Bell","packages":[],"template":"<button ref=\"bell\" class=\"ae-button\" :class=\"{ '_CSS-action-button--overlay': params.overlay }\" @click.capture.stop=\"controller.open()\">\n  <!-- FIXME: use fa-bell-on with Fontawesome 5.12+ -->\n  <ae-icon v-if=\"locals.unreadNotifications.length > 0\" class=\"fad fa-bell _CSS-bell--has-notifications\"></ae-icon>\n  <ae-icon v-else class=\"fad fa-bell\"></ae-icon>\n</button>\n\n<ae-popup ref=\"popup\" @close=\"() => controller.onClose()\" v-if=\"Aeppic.Device !== 'Phone'\" xplacement=\"bottom\">  \n  <template #default=\"scope\">\n    <ae-layout class=\"_CSS-popup\" layout-id=\"2eaa0d5f-36ed-4e10-9834-03613633b55f\" @close=\"scope.close()\"></ae-layout>\n  </template>\n</ae-popup>\n<ae-dialog ref=\"dialog\" v-else> \n  <template #header=\"scope\">\n    <div class=\"_CSS-dialog__header\">\n      Benachrichtigungen\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n  <template #body=\"scope\">\n    <ae-layout layout-id=\"2eaa0d5f-36ed-4e10-9834-03613633b55f\" @close=\"scope.close()\"></ae-layout>\n  </template>\n</ae-dialog>\n"},"f":{"id":"layout-form","text":"Layout","v":"dc3356051e0928cf"},"id":"e4e9f138-103a-4b54-8f9a-2442ba138f8f","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-07-03T12:49:47+00:00","backedBy":null,"by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"16deac1a-84bd-4fd3-8950-d87e152742d9","text":"Notifications Button","v":"34d2cfcee055ed1a"},"p":"2d46771e-84af-45f3-bc70-2c1793b412a9","previous":{"v":"3556f3f9b36062bb"},"stamps":[],"t":1751546987504,"v":"a07398ecd4abf49a"},{"id":"16deac1a-84bd-4fd3-8950-d87e152742d9","v":"34d2cfcee055ed1a","previous":{"v":"9ddb6633fa73df9f"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Notifications Button","applies":"","packages":[],"template":"<div v-if=\"Aeppic.Account && Aeppic.Account.id\">\n  <button class=\"_CSS-action-button bp-button-icon\" @click=\"$refs.popup.show($event)\">\n    <ae-icon class=\"fa fa-bell\" :class=\"{ '_CSS-bell--has-notifications': locals.notificationsCount > 0 }\"></ae-icon>\n  </button>\n</div>\n\n<!-- <span class=\"fa-layers fa-fw\">\n      <ae-icon class=\"fas fa-bell\"></ae-icon>\n      <span class=\"fa-layers-counter\" style=\"background:Tomato;\">1,419</span>\n    </span> -->\n\n\n<ae-popup ref=\"popup\" title=\"Meine Benachrichtigungen\" placement=\"bottom\">\n  <div class=\"_CSS-body\" slot=\"popup\">\n    <div class=\"_CSS-body__header\">\n      <div>Benachrichtigungen</div>\n    </div>\n\n    <div v-if=\"locals.notificationsCount === 0\" class=\"_CSS-notifications--empty\">\n      <ae-icon class=\"fa fa-badge-check fa-3x\" style=\"margin: 10px 0;\"></ae-icon>\n      <p>\n        Sie haben keine Benachrichtigungen.\n      </p>\n    </div>\n    <ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n              v-else\n              class=\"_CSS-list\"\n              :root-document-id=\"Aeppic.Account.id\"\n              query-id=\"767577b3-0461-4a8e-a3ee-3d7c4fba5787\"\n              param-min-column-width=\"100%\"\n              @selected=\"controller.markReadAndNavigateTo($event)\"\n    ></ae-list>\n  </div>\n</ae-popup>","css":"._CSS {\n  display: flex;\n  justify-content: flex-end;\n}\n\n._CSS-search--expanded {\n  display: flex;\n  justify-content: flex-end;\n  flex: 1;\n}\n\n._CSS-search__input {\n  /* flex: 1; */\n  margin-right: 6px;\n  border-radius: 5px;\n}\n\n._CSS-action-button {\n  margin-left: 1em;\n}\n\n/* https://codepen.io/Mrshcom/pen/bqmFg */\n._CSS ._CSS-bell--has-notifications {\n  color: #ff5a4e !important;\n  -webkit-animation: _CSS-ring 4s .7s ease-in-out 1;\n  -webkit-transform-origin: 50% 4px;\n  -moz-animation: _CSS-ring 4s .7s ease-in-out 1;\n  -moz-transform-origin: 50% 4px;\n  animation: _CSS-ring 4s .7s ease-in-out 1;\n  transform-origin: 50% 4px;\n}\n\n@-webkit-keyframes _CSS-ring {\n  0% { -webkit-transform: rotateZ(0); }\n  1% { -webkit-transform: rotateZ(30deg); }\n  3% { -webkit-transform: rotateZ(-28deg); }\n  5% { -webkit-transform: rotateZ(34deg); }\n  7% { -webkit-transform: rotateZ(-32deg); }\n  9% { -webkit-transform: rotateZ(30deg); }\n  11% { -webkit-transform: rotateZ(-28deg); }\n  13% { -webkit-transform: rotateZ(26deg); }\n  15% { -webkit-transform: rotateZ(-24deg); }\n  17% { -webkit-transform: rotateZ(22deg); }\n  19% { -webkit-transform: rotateZ(-20deg); }\n  21% { -webkit-transform: rotateZ(18deg); }\n  23% { -webkit-transform: rotateZ(-16deg); }\n  25% { -webkit-transform: rotateZ(14deg); }\n  27% { -webkit-transform: rotateZ(-12deg); }\n  29% { -webkit-transform: rotateZ(10deg); }\n  31% { -webkit-transform: rotateZ(-8deg); }\n  33% { -webkit-transform: rotateZ(6deg); }\n  35% { -webkit-transform: rotateZ(-4deg); }\n  37% { -webkit-transform: rotateZ(2deg); }\n  39% { -webkit-transform: rotateZ(-1deg); }\n  41% { -webkit-transform: rotateZ(1deg); }\n\n  43% { -webkit-transform: rotateZ(0); }\n  100% { -webkit-transform: rotateZ(0); }\n}\n\n@-moz-keyframes _CSS-ring {\n  0% { -moz-transform: rotate(0); }\n  1% { -moz-transform: rotate(30deg); }\n  3% { -moz-transform: rotate(-28deg); }\n  5% { -moz-transform: rotate(34deg); }\n  7% { -moz-transform: rotate(-32deg); }\n  9% { -moz-transform: rotate(30deg); }\n  11% { -moz-transform: rotate(-28deg); }\n  13% { -moz-transform: rotate(26deg); }\n  15% { -moz-transform: rotate(-24deg); }\n  17% { -moz-transform: rotate(22deg); }\n  19% { -moz-transform: rotate(-20deg); }\n  21% { -moz-transform: rotate(18deg); }\n  23% { -moz-transform: rotate(-16deg); }\n  25% { -moz-transform: rotate(14deg); }\n  27% { -moz-transform: rotate(-12deg); }\n  29% { -moz-transform: rotate(10deg); }\n  31% { -moz-transform: rotate(-8deg); }\n  33% { -moz-transform: rotate(6deg); }\n  35% { -moz-transform: rotate(-4deg); }\n  37% { -moz-transform: rotate(2deg); }\n  39% { -moz-transform: rotate(-1deg); }\n  41% { -moz-transform: rotate(1deg); }\n\n  43% { -moz-transform: rotate(0); }\n  100% { -moz-transform: rotate(0); }\n}\n\n@keyframes _CSS-ring {\n  0% { transform: rotate(0); }\n  1% { transform: rotate(30deg); }\n  3% { transform: rotate(-28deg); }\n  5% { transform: rotate(34deg); }\n  7% { transform: rotate(-32deg); }\n  9% { transform: rotate(30deg); }\n  11% { transform: rotate(-28deg); }\n  13% { transform: rotate(26deg); }\n  15% { transform: rotate(-24deg); }\n  17% { transform: rotate(22deg); }\n  19% { transform: rotate(-20deg); }\n  21% { transform: rotate(18deg); }\n  23% { transform: rotate(-16deg); }\n  25% { transform: rotate(14deg); }\n  27% { transform: rotate(-12deg); }\n  29% { transform: rotate(10deg); }\n  31% { transform: rotate(-8deg); }\n  33% { transform: rotate(6deg); }\n  35% { transform: rotate(-4deg); }\n  37% { transform: rotate(2deg); }\n  39% { transform: rotate(-1deg); }\n  41% { transform: rotate(1deg); }\n\n  43% { transform: rotate(0); }\n  100% { transform: rotate(0); }\n}\n\n/* popup */\n\n._CSS-body {\n  display: flex;\n  flex-flow: column;\n  padding: 2px 10px;\n  background: var(--ae-background-d1);\n  border: 1px solid var(--ae-ui-element-border-color);\n  box-shadow: 4px 2px 16px 3px #00000012;\n}\n\n._CSS-body__header {\n  font-weight: 700;\n}\n\n._CSS-notifications--empty {\n  display: flex;\n  flex-flow: column;\n  align-items: center;\n}","controller":"class Controller {\n  async init() {\n    locals.notificationsCount = 0\n\n    if (!Aeppic.Account || !Aeppic.Account.id) {\n      return\n    }\n\n    this._subscribeRanOnce = false\n\n    Aeppic.subscribeQuery('767577b3-0461-4a8e-a3ee-3d7c4fba5787', Aeppic.Account.id, (notifications) => {\n      locals.notificationsCount = notifications.length\n\n      if (!this._subscribeRanOnce) {\n        this._subscribeRanOnce = true\n        return\n      }\n\n      if (notifications.length) {\n        // this.newNotification()\n      }\n    })\n \n    this.notificationsAllowed = await this.requestNotificationPermission()\n  }\n\n  async markReadAndNavigateTo(event) {\n    $refs.popup && $refs.popup.close()\n\n    const notification = await Aeppic.edit(event)\n\n    notification.data.read = true\n    notification.data.readAt = Aeppic.DateTime.local().toFormat(\"yyyy-MM-dd'T'T\")\n\n    Aeppic.save(notification)\n\n    Aeppic.navigateTo(notification.data.document)\n  }\n\n  async requestNotificationPermission() {\n    if (typeof Notification === 'undefined') {\n      return false\n    }\n\n    const result = await Notification.requestPermission()\n    return result === 'granted'\n  }\n\n  async newNotification() {\n    if (this.notificationsAllowed) {\n      const n = new Notification('Neue Benachrichtigung', {\n        icon: 'manifest/pwa-192x192.png'\n      })\n    }\n  }\n\n  destroy() {\n    $refs.popup && $refs.popup.close()\n  }\n}\n"},"locks":[],"created":{"at":"2019-01-28T15:52:08+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2019-03-14T11:32:58+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1552563178967,"ct":1548690728366,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2024-11-06T08:53:49+00:00","backedBy":null,"by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","client":"server","from":"","impersonatedBy":null},"ct":1730883229506,"data":{"applies":"","controller":"init() {\n  packages.window.\n}","css":"","name":"OAuth Callback","packages":[],"template":"You are logged in. You can close this window now."},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"0617f4ef-7842-49b6-a60b-db4e72b91079","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2024-11-06T20:43:50+00:00","backedBy":null,"by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","client":"server","from":"","impersonatedBy":null},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"d07984e6455dcc66"},"stamps":[],"t":1730925830895,"v":"c50a575cc4a4792a"},{"id":"86377372-a6b4-4bff-ae9b-eca744787c98","v":"db1cf84bfe4f806c","previous":{"v":"de34e9e5f8c57549"},"p":"7fd7c5cc-1eed-440b-8ce2-d6183cdb421b","f":{"id":"layout-form","v":"dad1a77c49465e08","text":"Layout"},"data":{"name":"open-documents","applies":"","packages":[],"template":"<div v-if=\"locals.documents.length===0\">\n  No recently edited Documents.\n</div>\n<div v-else>\n  <div style=\"display:flex; justify-content:flex-end; margin-bottom:5px\">\n    <button v-show=\"controller.hasUnsavedDocuments\" @click=controller.saveAll() style=\"margin-left:10px\"><ae-icon class=\"fas fa-save\"></ae-icon> save all</button>\n    <button v-show=\"locals.documents.length\" @click=controller.removeAll() style=\"margin-left:10px\"><ae-icon class=\"fas fa-times\"></ae-icon> close all</button>\n  </div>\n  <div v-for=\"doc of controller.sortedDocuments()\" class=\"_CSS-item-row\" style=\"width:100%\">\n    \n    <!-- doc title -->\n    <div class=\"_CSS-item-row\" style=\"overflow:hidden;\">\n      <ae-design name=\"dev-title\" :document=\"doc\" @selected=\"(d)=>$emit('selected', d)\" @form-selected=\"(f)=>$emit('selected', f)\" :param-show-form=\"true\" :class=\"{'_CSS-has-revisions': doc.hasRevisions}\"></ae-design>\n      <div v-if=\"doc.hasRevisions\">*</div>\n    </div>\n    \n    <!-- action icon -->\n    <div v-if=\"doc.hasRevisions\" @click.stop=\"controller.save(doc)\">\n      <ae-icon class=\"fas fa-save _CSS-action-icon\" key=\"fas fa-save\"></ae-icon>\n    </div>\n    <div v-else @click.stop=\"controller.remove(doc)\">\n      <ae-icon class=\"fas fa-times _CSS-action-icon\" key=\"fas fa-times\"></ae-icon>\n    </div>\n\n  </div>\n</div>\n","css":"._CSS-item-row{\n  cursor:pointer;\n  display:flex;\n  justify-content:space-between;\n  align-items: center;\n}\n\n._CSS-action-icon{\n  display:none;\n}\n\n._CSS-item-row:hover ._CSS-action-icon{\n  display: block;\n  margin-left: 5px;\n} \n\n._CSS-has-revisions{\n  font-weight: bold;\n}\n\n","controller":"\nclass Controller{\n  init(){\n    locals.Developer = params.Developer\n\n    if(params.documentsToRestore){\n      locals.documents = params.documentsToRestore.slice(0)\n    }\n    else{\n      locals.documents = []\n    } \n\n    if(params.documents){\n      this.updateDocumentList(params.documents)\n    }\n\n    watchParam('documents', (docs)=>this.updateDocumentList(docs), {deep:true})\n\n    watchParam('documentsToRestore', (docs) => {\n      console.log('documentsToRestore', { docs })\n    }, { deep: true })\n\n    console.log(params)  \n  }\n\n  updateDocumentList(docs){\n    console.log('updateDocumentList', {docs})\n    \n    // locals.documents.splice(0,locals.documents.length)\n    \n    for(let doc of docs){\n      // check if an existing doc of the list needs to be replaced\n      for(let i=0; i<locals.documents.length; i++) {\n        const d = locals.documents[i]\n\n        if( (d.id === doc.id) && (d !== doc)){\n          // replace existing doc with new incomming version (revert)\n          locals.documents.splice(i,1,doc)\n        }\n      }\n\n      // check if doc needs to be added to list\n      if(doc.hasRevisions){\n        if(!locals.documents.some((d)=>d.id ===doc.id)){\n          // add a new unsaved doc to front of list\n          locals.documents.unshift(doc)\n        }\n      }\n\n      // trim to max size\n      const max = locals.Developer.preferences.maxRecentDocuments\n      const docsToCheck = locals.documents.slice(0)\n      \n      for(let i=docsToCheck.length-1; i>=0; i--){\n        if(locals.documents.length <= max){\n          break\n        }\n        else if(!docsToCheck[i].hasRevisions){\n          const idx = locals.documents.indexOf(docsToCheck[i])\n          locals.documents.splice(idx,1)\n        }\n      }\n    }\n\n    this.updateStoredSettings()\n  }\n\n  sortedDocuments(){\n    \n    const sortBy = locals.Developer.preferences.recentDocumentsSortOrder\n    if(sortBy === 'form'){\n      console.log('form sort')\n      const sorted = locals.documents.slice(0)\n      return sorted.sort((a,b)=>a.f.text.localeCompare(b.f.text))\n    }\n    else if(sortBy === 'name'){\n      console.log('name sort')\n      const sorted = locals.documents.slice(0)\n      return sorted.sort((a,b)=>(a.data.name || 'zzzzz').localeCompare(b.data.name || 'zzzzz'))\n    }\n    else {\n      return locals.documents\n    }\n  }\n\n  get hasUnsavedDocuments(){\n    return locals.documents.some((d) => d.hasRevisions)\n  }\n\n  saveAll(){\n    for(let doc of locals.documents){\n      if(doc.hasRevisions){\n        $emit('save', doc)\n      }\n    }\n  }\n\n  save(doc){\n    $emit('save', doc)\n  }\n\n  removeAll(){\n    // const docsToRemove = locals.documents.slice(0)\n    // for(let doc of docsToRemove){\n    //   this.remove(doc)\n    // }\n    locals.documents.splice(0,locals.documents.length)\n    $emit('close-all')\n  }\n\n  remove(doc){\n    const idx = locals.documents.indexOf(doc)\n    if (idx >= 0){\n      locals.documents.splice(idx,1)\n      this.updateStoredSettings()\n      $emit('close', doc)\n    }\n  }\n\n  updateStoredSettings(){\n    const max = locals.Developer.preferences.maxRecentDocuments\n    locals.Developer.storedSettings.recentlyEditedDocuments = locals.documents.map(d=>d.id).slice(0,max)\n    locals.Developer.saveSettings()\n  }\n\n  select(id){\n    $emit('selected', id)\n  } \n}"},"locks":[],"created":{"at":"2018-04-18T15:37:55+02:00","by":"","from":"","client":"server"},"modified":{"at":"2023-02-14T16:41:39+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1676392899584,"ct":1524058675642,"a_depth":5,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","427e6b73-968a-4747-be77-c6bb820a3190","7fd7c5cc-1eed-440b-8ce2-d6183cdb421b"],"a_forms":["folder","application-form","folder","folder","folder"],"inheritedLocks":[null,null,null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2023-05-12T15:26:52+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","client":"server","from":""},"ct":1683905212253,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.sections = []\n    locals.debug = []\n    locals.renderKey = 0\n    locals.subSections = {}\n\n    const form = params.form\n\n    if (!form) {\n      return\n    }\n\n    for (const section of form.info.sections) {\n      if (section.type === 'ROOT') continue\n\n      const allFields = Array.from(form.enumerateAllFieldsInSection(section.index))\n      const hasFields = allFields.length > 0\n\n      if (hasFields) {\n        locals.sections.push({\n          index: section.index,\n          title: section.title,      \n          level: section.level,\n          isOptional: form.isTaggedSection(params.document, ['optional'], section.index),\n          // info: Object.keys(section)\n        })\n      } else {\n        locals.debug.push({\n          section,\n          isUndefined: form.isUndefinedSection(params.document, section.index)\n        })\n      }\n    }\n  }\n\n  classesForSection(section) {\n    const selected = ['bg-gray-600', 'text-white', 'hover:bg-gray-400', 'hover:text-gray-100' ]\n    const deselected = ['bg-gray-100', 'hover:bg-gray-300','hover:text-gray-600']\n\n    return this.isSectionVisible(section) ? selected : deselected \n  }\n\n  isSectionVisible(section) {\n    return !params.form.isUndefinedSection(params.document, section.index)\n  }\n\n  toggle(section) {\n    console.log(section)\n\n    if (this.isSectionVisible(section)) {\n      params.document.setSectionToUndefined(section.index)\n    } else {\n      params.document.resetSectionToDefaults(section.index)\n    }\n\n    locals.renderKey++\n  }\n}","css":"","name":"Optional Sections Sidebar","packages":[],"template":"<div class=\"flex flex-col whitespace-nowrap p-2 overflow-auto\" :key=\"locals.renderKey\">\n  <label\n    v-for=\"section in locals.sections\" \n    v-if=\"section.isOptional\"\n    class=\"p-2 mb-2 rounded cursor-pointer transition-colors duration-150\"\n    :title=\"'Include or exclude section (' + section.title + ')'\"\n    :style=\"{ 'margin-left': section.level * 14 + 'px' }\"\n    :class=\"controller.classesForSection(section)\">\n      <input\n        type=\"checkbox\"\n        class=\"sr-only\"\n        :checked=\"controller.isSectionVisible(section)\"\n        @click=\"controller.toggle(section)\" />\n      <span>{{ section.title }}</span>\n      \n  </label>\n</div>\n\n<!-- <pre class=\"overflow-auto\">\n{{locals.debug}} \n</pre>   -->"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"0faa83f8-3ed7-4303-b645-d729a8230057","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2024-01-16T12:23:40+01:00","backedBy":null,"by":"4ea61995-5b03-4bae-b1fa-f5dd380d056f","client":"server","from":"","impersonatedBy":null},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"fe37e8998a8f6386"},"stamps":[],"t":1705404220875,"v":"4579a8909438066f"},{"id":"6688c89f-f299-4ec6-89d4-74f5c25afde9","v":"dde0e48ee8de317d","previous":{"v":"initial"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Optionlist Dialog (Optionsliste)","applies":"","packages":[],"template":"<ae-dialog ref=\"dialog\" :backdrop-close=\"false\">\n  <div slot=\"header\" class=\"_CSS-dialog__header\" slot-scope=\"scope\">\n    <span v-if=\"params.title\">{{params.title}}</span>\n    <div>Optionsliste</div>\n    <button class=\"dbps-button\" @click.stop=\"scope.close()\">\n      <ae-icon class=\"fa fa-window-close\"></ae-icon>\n    </button>\n  </div>\n  <div slot=\"body\">\n    <div class=\"dbps-body-with-actions\">\n      <div>\n        <ae-layout layout-id=\"6273d6a2-0cf0-47da-9e45-18460c50d101\" @edit=\"controller.setEditing(true)\" @reset=\"controller.setEditing(false)\"></ae-layout>\n      </div>\n  \n      <div>\n      <ae-form :document-id=\"params.document.data.fieldsToShowOnOptionlist.id\" :auto-save=\"true\" :readonly=\"!locals.edit\"></ae-form>\n      \n      <a class=\"dbps-button\" :href=\"'/api/docs/' + params.document.id + '/_print?landscape=true&additionalQueryParams=' + encodeURIComponent('printLayoutId=23a839e2-6cfd-4edd-893d-5a9b92ebbb87')\" target=\"_blank\">\n        <ae-icon class=\"fa fa-file-pdf\"></ae-icon>\n        <span style=\"margin-left: 1ch;\">Optionsliste PDF</span>\n      </a>\n      <a class=\"dbps-button\" :href=\"'/' + params.document.id + '?print&printLayoutId=23a839e2-6cfd-4edd-893d-5a9b92ebbb87'\" target=\"_blank\">\n        <ae-icon class=\"fa fa-print-search\"></ae-icon>\n        <span style=\"margin-left: 1ch;\">Optionsliste Druckansicht</span>\n      </a>\n      </div>\n      <div></div>\n    </div>\n  </div>\n</ae-dialog>\n","css":"._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  overflow: hidden;\n}\n","controller":"class Controller {\n  async init() {\n    locals.edit = false\n\n    this.show = (eventData) => {\n      $refs.dialog.show(eventData)\n    }\n    this.close = () => $refs.dialog.close()\n\n    $on('show', (event) => this.show(event))\n    $on('close', (event) => this.close(event))\n  }\n\n\n  setEditing(value) {\n    $refs.form && $refs.form.save()\n\n    locals.edit = value\n  }\n}"},"locks":[],"created":{"at":"2019-04-12T14:13:55+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894023,"ct":1555078435274,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2025-12-05T16:57:55+00:00","backedBy":null,"by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","client":"server","from":"","impersonatedBy":null},"ct":1764953875146,"data":{"applies":"","controller":"class Controller { \n  init() {\n    locals.isNavHovered = false\n    locals.isNavOpen = false\n    locals.isNameHovered = false\n  }\n\n  get title() { \n    return params.title ?? 'Document'\n  }\n\n  get label() {\n    return params.label \n  }\n\n  get parentFolderName() {\n    return params.parentFolderName \n  }\n\n  get prevDocName() {\n    return params.prevDocName\n  }\n\n  get nextDocName() {\n    return params.nextDocName\n  }\n\n  get isNavActive() {\n    return locals.isNavHovered || locals.isNavOpen\n  }\n\n  setHover(hovered) {\n    locals.isNavHovered = hovered\n  }\n  \n}","css":"._CSS {\n  height: auto;\n}","name":"Page Navigation ","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<div class=\"flex items-center relative\">\n  <!-- Navigation zone -->\n  <div\n    ref=\"navRef\"\n    class=\"flex items-center\"\n    @mouseenter=\"controller.setHover(true)\"\n    @mouseleave=\"controller.setHover(false)\"\n  >\n\n    <!-- Back arrow – perfect hover -->\n    <div :class=\"[\n      'transition-all duration-200 ease-out',\n      controller.isNavActive ? 'opacity-100 translate-x-0' : 'opacity-0 -translate-x-2 pointer-events-none'\n    ]\">\n      <button\n        @click=\"$emit('navigate-back')\"\n        class=\"p-2 rounded-md transition-colors hover:bg-on-surface/8 hover:text-on-surface focus-visible:bg-on-surface/12 focus-visible:outline-none\"\n        aria-label=\"Zurück\"\n      >\n        <ae-icon class=\"fa fa-chevron-left h-4 w-4\" />\n      </button>\n    </div>\n\n    <!-- Document type box -->\n    <div class=\"relative flex items-center\">\n      <button\n        @click=\"locals.isNavOpen = !locals.isNavOpen\"\n        :class=\"[\n          'px-3 py-1.5 rounded-md text-sm font-medium transition-all duration-200',\n          'surface-container border border-border',\n          controller.isNavActive ? 'ring-2 ring-primary/30' : ''\n        ]\"\n      >\n        {{ controller.title }}\n      </button>\n\n        <!-- Inside the trigger button – this now works for hover AND click -->\n        <div\n          xv-show=\"controller.isNavActive\"\n          class=\"pointer-events-none w-2 min-w-2 h-2 min-h-2 bg-red-500\"\n          aria-hidden=\"true\"\n        ></div>\n\n      <!-- Extended panel – NOW WITH REAL HOVER STATES -->\n      <div\n        v-if=\"controller.parentFolderName?.length > 0 || !!controller.prevDocName || !!controller.nextDocName\"\n        :class=\"[\n        'absolute left-full flex items-center transition-all duration-200 ease-out z-10',\n        'surface-container-high border border-border rounded-md shadow-lg',\n        controller.isNavActive\n          ? 'opacity-100 translate-x-0'\n          : 'opacity-0 -translate-x-2 pointer-events-none'\n      ]\">\n        <div class=\"flex items-center gap-2 px-2 py-1\">\n\n          <!-- Up to folder -->\n          <template \n            v-if=\"controller.parentFolderName?.length > 0\"> \n            <button\n              @click=\"$emit('navigate-up')\"\n              :title=\"'Zu \\\\'' + controller.parentFolderName + '\\\\' wechseln'\"\n              class=\"flex items-center gap-2 px-2 py-1 rounded-md text-sm font-medium transition-colors hover:bg-on-surface/8 hover:text-on-surface focus-visible:bg-on-surface/12 focus-visible:outline-none\"\n            >\n              <ae-icon class=\"fa fa-chevron-up h-3.5 w-3.5\" />\n              <span>{{controller.parentFolderName}}</span>\n            </button>\n\n            <div class=\"w-px h-6 bg-border/60\" />\n          </template>\n\n          <template v-if=\"!!controller.prevDocName || !!controller.nextDocName\">\n            <!-- Previous -->\n            <button\n              :disabled=\"!controller.prevDocName\"\n              @click=\"$emit('navigate-prev')\"\n              :title=\"controller.prevDocName\"\n              class=\"p-2.5 rounded-md transition-colors \n                    disabled:opacity-30 disabled:cursor-not-allowed \n                    hover:bg-on-surface/8 hover:text-on-surface \n                    focus-visible:bg-on-surface/12 focus-visible:outline-none\"\n            >\n              <ae-icon class=\"fa fa-chevron-left h-4 w-4\" />\n            </button>\n\n            <!-- Next -->\n            <button \n              :disabled=\"!controller.nextDocName\"\n              @click=\"$emit('navigate-next')\"\n              :title=\"controller.nextDocName\"\n              class=\"p-2.5 rounded-md transition-colors \n                    disabled:opacity-30 disabled:cursor-not-allowed \n                    hover:bg-on-surface/8 hover:text-on-surface \n                    focus-visible:bg-on-surface/12 focus-visible:outline-none\"\n            >\n              <ae-icon class=\"fa fa-chevron-right h-4 w-4\" />\n            </button>\n          </template>\n        </div> \n      </div>\n    </div>\n  </div>\n\n  <!-- Document name + edit (unchanged – already perfect) -->\n  <div v-if=\"controller.label != null\"\n      :class=\"['relative transition-all duration-200', controller.isNavActive ? 'opacity-50' : '']\"\n       @mouseenter=\"locals.isNameHovered = true\"\n       @mouseleave=\"locals.isNameHovered = false\">\n    <div :class=\"[\n      'px-2 py-1 rounded-md text-sm transition-all duration-150 flex items-center gap-2',\n      locals.isNameHovered ? 'border border-border bg-surface-container-low' : 'border border-transparent'\n    ]\">\n      <span class=\"text-foreground\">{{ controller.label }}</span>\n      <ae-icon :class=\"[\n        'fa fa-pencil h-3 w-3 text-muted-foreground transition-opacity duration-150',\n        locals.isNameHovered ? 'opacity-100' : 'opacity-0'\n      ]\" />\n    </div>\n    <button v-if=\"locals.isNameHovered\"\n            @click=\"$emit('edit-name')\"\n            class=\"absolute inset-0 cursor-text\"\n            title=\"Dokumentname bearbeiten\" />\n  </div>\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"2d13ac82-4b14-41b2-ba1b-91e9b42c9ce0","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-12-05T16:58:18+00:00","backedBy":null,"by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","client":"server","from":"","impersonatedBy":null},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"initial"},"stamps":[],"t":1764953898910,"v":"d8afe18ccd995ba6"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2018-02-06T09:34:59+01:00","by":"","client":"server","from":""},"ct":1621428481255,"data":{"applies":"","controller":"class Controller {\n  async init () {\n    // TODO: remove forceTabIndex once we can render each section on our own\n    // This is because params.fieldsToDisplay is a key feature of this layout but it does not work with no tabs enabled\n    // With this fixed, one could pass params.noTabs and still use params.fieldsToDisplay\n\n    this.vue = null\n\n    locals.form = null\n    locals.form = await this.getForm()\n\n    locals.tabIndex = params.forceTabIndex != null ? params.forceTabIndex : 0\n\n    if (params.fieldConditions) {\n      locals.fieldConditions = params.fieldConditions\n    } else if (params.document) {\n      locals.fieldConditions = locals.form.evaluateConditions(params.document.data)\n\n      // FIXME: this is a badly implemented helper to react to params.document.data changes and thus re-evaluating some values\n      this.vue = new Vue({\n        data: {\n          document: params.document\n        },\n        watch: {\n          'document.data': {\n            handler: function() {\n              Aeppic.commit(params.document)\n              locals.fieldConditions = locals.form.evaluateConditions(params.document.data)\n            },\n            deep: true\n          } \n        }\n      })\n    } else {\n      throw new Error('Provide params.fieldConditions (by using <ae-form>? or params.document if using this layout with <ae-layout>')\n    }\n\n    locals.hasOwnParagraphs = await this._hasOwnParagraphs()\n    locals.showOwnParagraphs = locals.hasOwnParagraphs\n  }\n\n  destroy() {\n    if (this.vue) {\n      this.vue.$destroy()\n      this.vue = null\n    }\n  }\n\n  async getForm() {\n    return params.form || Aeppic.getFormForDocument(params.document)\n  }\n\n  async _hasOwnParagraphs() {\n    const ownParagraphs = locals.form.info.sections[0].paragraphs\n    if (!ownParagraphs || !ownParagraphs.length) {\n      return false\n    }\n    return ownParagraphs.some((paragraph) => {\n      return paragraph.placeholders.some((placeholder) => {\n        return !(placeholder.style && placeholder.style.hidden && placeholder.style.hidden.value === 'true')\n      })\n    })\n  }\n\n  get showTabs() {\n    return params.forceTabIndex == null && this.subsections && this.subsections.length\n  }\n\n  async setTabIndex(toIndex) {\n    locals.showOwnParagraphs = false\n    locals.tabIndex = toIndex\n  }\n\n  get subsections() {\n    if (locals.form && locals.form.info && locals.form.info.sections && locals.form.info.sections[0]) {\n      return locals.form.info.sections[0].directSubsections\n    }\n    return []\n  }\n\n  get displayedDirectSubsection() {\n    return this.subsections[locals.tabIndex]\n  }\n\n  controlNameForPlaceholder(placeholder) {\n    if (!placeholder || !placeholder.control) {\n      return ''\n    }\n\n    const hasName = !!placeholder.control.name\n\n    if (placeholder.control && placeholder.control.namespace && hasName) {\n      return placeholder.control.namespace + ':' + placeholder.control.name\n    }\n\n    if (hasName) {\n      return placeholder.control.name\n    }\n\n    return ''\n  }\n\n  get sectionsOfSubsection() {\n    return this.displayedDirectSubsection.placeholders.map((placeholder) => {\n      return placeholder\n    })\n  }\n\n  placeholderIsHidden(placeholder) {\n    if ((params.fieldsToDisplay && !placeholder.field)) {\n      return true\n    }\n \n\n    const fieldShouldBeShown = params.fieldsToDisplay ? !!params.fieldsToDisplay.includes(placeholder.field.name) : true\n    if (!fieldShouldBeShown) { \n      return true\n    }\n\n    const fieldIgnoresHidden = params.fieldsIgnoreHidden ? params.fieldsIgnoreHidden.includes(placeholder.field.name) : false\n    if (fieldIgnoresHidden) {\n      return false\n    }\n\n    if (params.hideEmpty) {\n      if (this.fieldOfPlaceholderIsEmpty(placeholder)) {\n        return true\n      }\n    }\n\n    const hiddenStyle = placeholder.style.hidden\n\n    if (hiddenStyle) {\n      if (hiddenStyle.condition) {\n        return locals.fieldConditions[hiddenStyle.condition.id]\n      }\n\n      if (hiddenStyle.value === 'true') {\n        return true\n      }\n    }\n\n    return false\n  }\n\n  placeholderIsReadonly(placeholder) {\n    if (params.readonly) {\n      return true\n    }\n\n    const readonlyStyle = placeholder.style.readonly\n    if (!readonlyStyle) {\n      return false\n    }\n\n    if (readonlyStyle.condition) {\n      return locals.fieldConditions[readonlyStyle.condition.id]\n    }\n\n    return readonlyStyle.value === 'true'\n  }\n\n  fieldOfPlaceholderIsEmpty(placeholder) {\n    const fieldInfo = placeholder.field \n    const value = params.document.data[placeholder.field.name]\n\n    switch (fieldInfo.type) {\n      case 'number':\n      case 'string':\n        // TODO: handle subType select with option \"NONE: \" ?\n        return !value\n      case 'boolean':\n        return false\n      case 'object':\n        if (Array.isArray(value)) {\n          return value.length === 0\n        }\n\n        if (fieldInfo.subType === 'file') {\n          return !value.dataUrl\n        }\n        return Object.values(value).filter(objectValue => !!objectValue).length === 0\n    }\n\n    throw new Error('') \n  }\n\n  _placeholderReferenceInfo(sectionPlaceholder) {\n    const fieldName = sectionPlaceholder.field && sectionPlaceholder.field.name\n    if (!fieldName) {\n      return {\n        isRef: false\n      }\n    }\n    const field = params.document.data[fieldName]\n    if (!field || typeof field !== 'object') {\n      return {\n        isRef: false\n      }\n    }\n    if (Array.isArray(field)) {\n      return {\n        cardinality: true,\n        isRef: true\n      }\n    }\n\n    return {\n      cardinality: false,\n      isRef: 'text' in field && 'id' in field && 'v' in field && 'client' in field\n    }\n  }\n\n  getPlaceholderWidth(placeholder) {\n    if (!placeholder.style || !placeholder.style.width) {\n      return ''\n    }\n\n    if (/^\\d+$/.test(placeholder.style.width.value)) {\n      return `flex:${placeholder.style.width.value / 100.0}`\n    }\n\n    if (/^\\d+\\.?\\d*\\s*(px|em|rem|\\%)$/.test(placeholder.style.width.value) ) {\n      // width in px or em only, for now...\n      return `max-width:${placeholder.style.width.value}`\n    }\n    \n    return ''\n  }\n}","css":"._CSS {\n  display: flex;\n  flex-flow: column;\n  width: 100%;\n}\n\n._CSS-labels {\n  xflex: 1;\n  display: flex;\n  flex-flow: row;\n  justify-content: space-between;\n  background: var(--ae-primary);\n  color: var(--ae-theme-text-primary-on-primary);\n  overflow-x: auto;\n}\n\n._CSS-tab-label {\n  flex: 1;\n  padding: 1rem;\n  text-align: center;\n}\n\n._CSS-tab-label--active {\n  /* background-color: rgba(0,0,0,0.2); */\n  border-bottom: 5px solid var(--ae-secondary);\n}\n\n._CSS-tab-content {\n  padding: var(--bp-page-content-padding);\n}\n\n._CSS-tab-content > * {\n  padding: 0 0 1rem;\n}","name":"Phone Tabbed Form Layout","packages":[],"template":"<template v-if=\"locals.form\">\n  <div class=\"_CSS-labels\">\n    <div v-if=\"locals.hasOwnParagraphs && controller.subsections.length\" class=\"_CSS-tab-label\" :class=\"{ '_CSS-tab-label--active': locals.showOwnParagraphs }\" @click=\"locals.showOwnParagraphs = true\">\n      {{locals.form.name}}\n    </div>\n\n    <template v-if=\"controller.showTabs\">\n        <div class=\"_CSS-tab-label\" :class=\"{ '_CSS-tab-label--active': !locals.showOwnParagraphs && locals.tabIndex === sectionIndex }\" v-for=\"(subSection, sectionIndex) in controller.subsections\"\n        @click=\"controller.setTabIndex(sectionIndex)\">\n          {{subSection.title}}\n        </div>\n    </template>\n  </div>\n\n  <div class=\"_CSS-tab-content\">\n    <div v-if=\"locals.hasOwnParagraphs\" class=\"_CSS-own-paragraphs\">\n      <div v-show=\"locals.showOwnParagraphs\" v-for=\"paragraph in locals.form._info.sections[0].paragraphs\" class=\"ae-row\">\n        <div  v-for=\"placeholder in paragraph.placeholders\" \n              v-show=\"!controller.placeholderIsHidden(placeholder)\"\n              class=\"ae-col ae-control-container ae-form-cell\"\n              :class=\"[controller.placeholderIsReadonly(placeholder) ? 'ae-form-cell--readonly' : 'ae-form-cell--edit', { 'ae-form-cell--hidden': controller.placeholderIsHidden(placeholder) }]\"\n              :style=\"controller.getPlaceholderWidth(placeholder)\"\n        >\n\n        <!-- {{placeholder.style}} -->\n          <!-- {{controller.placerholderFieldChanged(placeholder) }} -->\n          <!-- {{placeholder.field.defaultValue}}        -->\n          <span class=\"ae-form-cell__label\">{{ Aeppic.translate(placeholder.label) }}</span>\n          <ae-control\n            v-if=\"placeholder.field\"\n            class=\"ae-form-cell\"\n            :name=\"placeholder.control && placeholder.control.name || ''\"\n            :params=\"locals.form.getFieldControlParams(placeholder.field.name)\"\n            :label=\"placeholder.label\"\n            :document=\"params.document\"\n            :field-name=\"placeholder.field.name\"\n            :key=\"placeholder.field.name\"\n            :readonly=\"controller.placeholderIsReadonly(placeholder)\"\n            ></ae-control>\n            <!-- standalone control -->\n            <ae-control\n              v-else \n              class=\"ae-form-cell\"\n              :name=\"placeholder.control && placeholder.control.name || ''\"\n              :label=\"placeholder.label\"\n              :document=\"params.document\"\n              :key=\"id(placeholder.control.name)\"\n              :readonly=\"controller.placeholderIsReadonly(placeholder)\"\n              :params=\"locals.form.getPlaceholderControlParams(placeholder.index)\"\n              ></ae-control>\n        </div>\n      </div>\n    </div>\n    <template v-if=\"controller.subsections && controller.subsections.length\">\n      <div  v-for=\"(placeholder, index) of controller.sectionsOfSubsection\"\n            v-if=\"placeholder.field\"\n            v-show=\"!locals.showOwnParagraphs && !controller.placeholderIsHidden(placeholder)\"\n            class=\"ae-col ae-control-container ae-form-cell\"\n            :class=\"[controller.placeholderIsReadonly(placeholder) ? 'ae-form-cell--readonly' : 'ae-form-cell--edit', { 'ae-form-cell--hidden': controller.placeholderIsHidden(placeholder) }]\"\n            :style=\"controller.getPlaceholderWidth(placeholder)\"\n      >\n          <span class=\"ae-form-cell__label\">{{ placeholder.label }}</span>\n               <ae-control\n            v-if=\"placeholder.field\"\n            class=\"ae-form-cell\"\n            :name=\"controller.controlNameForPlaceholder(placeholder)\"\n            :label=\"placeholder.label\"\n            :params=\"locals.form.getFieldControlParams(placeholder.field.name)\"\n            :document=\"params.document\"\n            :field-name=\"placeholder.field.name\"\n            :key=\"placeholder.field.name\"\n            :readonly=\"controller.placeholderIsReadonly(placeholder)\"\n          ></ae-control>\n            <!-- standalone control -->\n            <ae-control\n              v-else \n              class=\"ae-form-cell\"\n              :name=\"placeholder.control && placeholder.control.name || ''\"\n              :label=\"placeholder.label\"\n              :document=\"params.document\"\n              :key=\"id(placeholder.control.name)\"\n              :readonly=\"controller.placeholderIsReadonly(placeholder)\"\n              :params=\"locals.form.getPlaceholderControlParams(placeholder.index)\"\n              ></ae-control>\n      </div>\n\n      <div class=\"_CSS-direct-subsection\" v-for=\"subsection in controller.displayedDirectSubsection.directSubsections\">\n        <ae-form-section :render-title=\"false\" :form=\"locals.form\" :document=\"params.document\" :section=\"subsection\" :readonly=\"params.readonly\" :include-subsections=\"true\" :field-conditions=\"locals.fieldConditions\"></ae-form-section>\n      </div>\n    </template>\n  </div>\n\n</template>\n"},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"acd83791-970f-4b6e-bebd-d7f3bca52014","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-05-12T09:19:52+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"b16da5be63ccbf7a"},"stamps":[],"t":1778577592525,"v":"8bf7334a79313444"},{"id":"c9438122-73f2-41aa-b414-a0ea0491ef21","v":"3780a1af855d05ce","previous":{"v":"6dda89c7e11b1171"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"Phone Tabbed Form Layout (hide empty if readonly)","applies":"","packages":[],"template":"<ae-layout  layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\"\n            :params=\"params\"\n            :param-hide-empty=\"params.readonly\"\n></ae-layout>\n","css":"","controller":""},"locks":[],"created":{"at":"2021-10-27T12:06:58+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-10-27T12:12:29+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1635336749888,"ct":1635336418723,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"14712072-2797-4fbd-935f-141af6acd287","v":"0b59a9e98baa822e","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Plain Form Layout​","applies":"","packages":[],"template":"<ae-form-section :form=\"params.form\" :document=\"params.document\" :readonly=\"params.readonly\"></ae-form-section>","css":"","controller":""},"locks":[],"created":{"at":"2017-09-25T13:35:35+02:00","by":"","from":"","client":"0b09ce2b-728f-4187-bfc4-ac908c4124a4"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481255,"ct":1621428481255,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"095cbe11cf739da1","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"75662fa7-5240-4613-be3b-4aa0226753d0","v":"4eb57c67969874d3","previous":{"v":"dbdb690edccd2c9d"},"p":"676a196c-72c0-44e3-bdcc-9ac195273e80","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Plan to a Board's Column","applies":"","packages":[],"template":"<button class=\"ae-button ae-button--secondary\" ref=\"button\" @click.stop=\"controller.showBoards($event)\" v-if=\"locals.boards.length\">\n  <template v-if=\"locals.activeBoardStamp && locals.activeBoardStamp.workflowUid\">\n  In <ae-design  style=\"display:inline;font-style:italic;\" name=\"title\" :document-id=\"locals.activeBoardStamp.workflowUid\"></ae-design> geplant\n  </template>\n  <template v-else>In einem Board planen</template>\n</button>\n\n<ae-popup ref=\"boards\">\n  <template #default=\"scope\">\n    <div style=\"relative;padding:var(--ae-space-2)\">\n      <ae-list list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n              :documents=\"locals.boards\"\n              @selected=\"controller.selectedBoard($event)\"\n              param-design=\"card\"\n      ></ae-list>\n      <div v-if=\"locals.working\" style=\"position: absolute;top:0;left:0;right:0;bottom:0;background:rgb(0 0 0 / 28%);display:flex;justify-content:center;align-items:center;\">\n        <ae-icon class=\"fa fa-spinner-third fa-spin\"></ae-icon>\n      </div>\n    </div>\n  </template> \n</ae-popup>\n\n<ae-popup ref=\"columns\">\n  <template #default=\"scope\">\n    <div style=\"relative;padding:var(--ae-space-2)\">\n      <ae-design name=\"title\" :document=\"locals.selectedBoard\"></ae-design>\n      <ae-list list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n              :documents=\"locals.columns\"\n              @selected=\"controller.selectedColumn($event)\"\n              param-design=\"card\"\n      ></ae-list>\n      <div v-if=\"locals.working\" style=\"position: absolute;top:0;left:0;right:0;bottom:0;background:rgb(0 0 0 / 28%);display:flex;justify-content:center;align-items:center;\">\n        <ae-icon class=\"fa fa-spinner-third fa-spin\"></ae-icon>\n      </div>\n    </div>\n  </template>\n</ae-popup>","css":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Board: '43420696-8097-4fc1-88e5-c69df9821470',\n      Column: '3d7dcbe3-3d0e-4224-893f-36d33fd86385',\n    }\n\n    this.IDS = {\n      BoardStamp: 'ab50baf4-e0fb-42ba-ba24-1ed6a3c90509'\n    }\n\n    locals.working = false\n    locals.boards = []\n    locals.columns = []\n    locals.activeBoardStamp = null\n\n    Aeppic.watch(params.document.id, (doc) => {\n      locals.activeBoardStamp = doc.stamps?.find(stamp => stamp.type?.id === this.IDS.BoardStamp)\n    })\n\n    locals.activeBoardStamp = params.document.stamps?.find(stamp => stamp.type?.id === this.IDS.BoardStamp)\n\n    const ancestorsAsLocations = params.document.a.map(a => `data.locations:${a}`).join(' OR ')\n    const query = `p:${params.document.a[0]} f.id:${this.FORMS.Board} data.form:${params.document.f.id} (${ancestorsAsLocations})`\n\n    console.log(query)  \n    locals.boards = await Aeppic.find(query)\n  }  \n\n  showBoards() {\n    if (locals.boards.length === 1) {\n      this.selectedBoard(locals.boards[0])\n      return\n    }\n\n    $refs.boards.toggle({ target: $refs.button })\n  }\n\n  async selectedBoard(board) {\n    if (locals.working) {\n      return\n    }\n\n    locals.working = true\n    \n    locals.selectedBoard = board\n    locals.columns = await Aeppic.find(`p:${board.id} f.id:${this.FORMS.Column}`)\n\n    $refs.columns.toggle({ target: $refs.button })\n\n    locals.working = false\n  }\n\n  async selectedColumn(column) {\n    locals.working = true\n    \n    const stamp = await Aeppic.get(this.IDS.BoardStamp)\n    \n    await Aeppic.stamp(params.document, stamp, { workflow: locals.selectedBoard, workflowUid: column.id })\n\n\n    $refs.columns.close()\n\n    locals.working = false\n  }\n} "},"locks":[],"created":{"at":"2022-09-02T08:11:13+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-09-02T08:47:22+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1662108442220,"ct":1662106273400,"a_depth":3,"a":["apps","089481c4-a42f-4a98-9bc9-12e9f1131f4b","676a196c-72c0-44e3-bdcc-9ac195273e80"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"af5121f9-0618-45de-98fd-046a6df5a9a8","v":"e215d64ec48cd247","previous":{"v":"822ebf82b3489b5b"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Playback Dialog","applies":"","packages":[],"template":"<ae-dialog ref=\"dialog\" :full-screen=\"Aeppic.Device === 'Phone'\" :dialog-classes=\"{ '_CSS-dialog--desktop': Aeppic.Device !== 'Phone' }\" >\n  <div class=\"_CSS-dialog__header\" slot=\"header\" slot-scope=\"scope\">\n    <button class=\"_CSS-playback-control\" @click=\"scope.close()\">\n      <ae-icon class=\"far fa-arrow-left\"></ae-icon>\n    </button>\n    <ae-design name=\"title\" :document=\"locals.document\"></ae-design>\n    <a v-if=\"locals.document\" title=\"Download Casting Sheet\" :href=\"locals.castingSheetUrl\" target=\"_blank\">\n      <button class=\"dbps-button\">\n        <ae-icon class=\"fa fa-file-pdf fa-2x\"></ae-icon>\n        <!-- USEME: with newer fontawesome -->\n        <!-- <ae-icon class=\"fa fa-file-user fa-2x\"></ae-icon> -->\n      </button>\n    </a>\n  </div>\n  <div  class=\"_CSS-dialog__body\"\n        ref=\"dialogBody\"\n        slot=\"body\"\n        slot-scope=\"scope\"\n        @keydown.esc.capture=\"scope.close()\"\n        tabindex=\"0\">\n        <ae-layout layout-id=\"273516ed-deb4-43ce-9fa8-ca00aae0ae6c\"\n                    v-if=\"$refs.dialog && $refs.dialog.isOpen\"\n                   :param-document=\"locals.document\"\n                   :param-field-name=\"params.fieldName\"\n                   :param-highlight-starting-date=\"params.highlightStartingDate\"\n                   :param-project-id=\"params.projectId\"\n        ></ae-layout>\n  </div>\n</ae-dialog>\n ","css":"._CSS-dialog--desktop {\n  min-height: 88% !important;\n  min-width: 50% !important;\n}\n\n._CSS-dialog--phone {\n  height: 100% !important;\n  width: 100% !important;\n}\n\n._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n._CSS-dialog__body {\n  flex: 1;\n  display: flex;\n  flex-flow: column;\n\n  outline: none;\n  position: relative;\n}\n\n._CSS-playback-control {\n  font-size: 2rem;\n  width: 3rem;\n  height: 3rem;\n  user-select: none;\n  border: 3px solid #fff;\n  border-radius: 50%;\n  background: rgba(0,0,0,0.5);\n  color: white;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  opacity: 0.5;\n  cursor: pointer;\n}\n\n._CSS-playback-control:enabled:hover {\n  opacity: 1;\n}\n\n","controller":"class Controller {\n  async init() {\n    this.show = () => {\n      this.showDialog()\n    }\n\n    this.close = () => $refs.dialog.close()\n\n    $on('show', this.show)\n    $on('close', this.close)\n\n    if (params.pageDocumentId) {\n      // when in print mode\n      this._document = await Aeppic.get(params.pageDocumentId)\n    } else {\n      this._document = params.document || await Aeppic.get(params.documentId)\n    }\n\n    locals.document = this._document\n\n    locals.castingSheetUrl = this.buildCastingSheetUrl()\n  }\n\n  buildCastingSheetUrl() {\n    // const pageParams = {\n    //   showProjectRelatedModelData: params.showProjectRelatedModelData\n    // }\n\n    // const stringifiedPageParams = Object.keys(pageParams).map(key => `${key}=${pageParams[key]}`).join('&')\n\n    return  '/api/docs/' +\n            locals.document.id +\n            '/_print?additionalQueryParams=' +\n            encodeURIComponent('printLayoutId=273516ed-deb4-43ce-9fa8-ca00aae0ae6c')\n  }\n  \n\n  showDialog() {\n    locals.playbackFileIndex = 0\n\n    $refs.dialog.show()\n\n    Aeppic.nextRenderPass(() => {\n      $refs.dialogBody && $refs.dialogBody.focus()\n    })\n\n    // TODO: start playback if video\n  }\n}"},"locks":[],"created":{"at":"2018-06-21T12:49:19+00:00","by":"791dde52-ff31-42ab-98e3-734ba2f75e24","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894027,"ct":1529585359702,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"7d034c07-fde6-4f39-93c0-4caffc058bc8","v":"43d348d44efc8700","previous":{"v":"5f60f0b4d26f3027"},"p":"9bad9050-10a9-42d2-9ac6-64c532dd4198","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Printlayout Mangelmeldung QR Codes ","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"d4ce6dec568c3dc1","text":"Window"}],"template":"<div class=\"text-2xl text-red-500 my-6 print:hidden\">\n  Bitte Bilder laden lassen und dann <button class=\"ae-button ae-button--primary\" @click.stop=\"controller.print()\">drucken</button>\n</div>   \n\n<ae-list list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n          :root-document-id=\"params.pageDocument.id\"\n          query-id=\"f812861f-68c8-4818-9972-be7b5474c9b1\"\n          :filter=\"'f.id:' + locals.FORMS.Einheit\"\n          :search-options=\"{ size: 99999 }\"\n          param-design=\"printable-code\"\n          sort=\"data.name\"\n          @selected=\"Aeppic.drillInto($event, arguments[1])\"\n></ae-list>","css":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Einheit: '7105a939-989c-4154-96e8-44f17f556b2a'\n    }\n    locals.FORMS = this.FORMS\n  }\n\n  print() {\n    packages.window.print()\n  }\n}"},"locks":[],"created":{"at":"2022-05-04T09:23:31+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-05-16T08:33:54+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1652690034258,"ct":1651656211487,"a_depth":3,"a":["apps","86189c5a-b9f4-445a-879f-d94574960df0","9bad9050-10a9-42d2-9ac6-64c532dd4198"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"b05e50a2-7479-469a-997d-0db4ea99fbd3","v":"initial","p":"fc4370f2-e352-47da-97b3-4d737252796c","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Projekt Aufgaben Form Layout","applies":"","packages":[],"template":"<ae-layout layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\"\n          :param-document=\"params.document\"\n          param-fields-to-display=\"aufgaben\"\n></ae-layout>\n","css":"","controller":""},"locks":[],"created":{"at":"2019-09-09T09:30:33+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-09-09T09:30:33+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1568021433799,"ct":1568021433799,"a_depth":3,"a":["apps","18da93c8-dfa2-4c21-b0fe-7e09b2b6d6c4","fc4370f2-e352-47da-97b3-4d737252796c"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"5305772d-2a41-4524-a38e-91ccec4deefa","v":"52ec59b37dc82866","previous":{"v":"0bcdc372cd0e598a"},"p":"686d22ba-414e-452f-9795-f6f7bcab37d5","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Projekt Form Layout","applies":"","packages":[],"template":"<div class=\"_CSS-header\">\n  <div>\n    <div class=\"_CSS-movies\">\n      <div  class=\"_CSS-header__title\">\n        <ae-design v-if=\"params.readonly\" name=\"title\" :document=\"params.document\"></ae-design>\n        <ae-control v-else field-name=\"name\" :document=\"params.document\"></ae-control>\n      </div>\n      <div class=\"_CSS-castings\">\n        <div class=\"_CSS-header__title\">\n          {{ Aeppic.translate(params.form.getPlaceholder('movies').label) }}\n        </div>\n\n        <ae-control class=\"_CSS-list\"\n                    name=\"children\"\n                    :document=\"params.document\"\n                    field-name=\"movies\"\n                    :readonly=\"params.readonly\"\n                    :params=\"params.form.getFieldControlParams('movies')\"\n                    :param-confirm-remove=\"true\"\n                    :param-template-parent-id=\"params.document.id\"\n                    :param-handle-selected=\"false\"\n                    :param-no-add=\"true\"\n                    :param-delete-on-remove=\"true\"\n        ></ae-control>\n        <div v-if=\"!params.document.data.movies.length\">Keine Filme angelegt</div>\n      </div> \n\n      <div class=\"_CSS-castings\">\n        <div class=\"_CSS-header__title\">\n          {{ Aeppic.translate(params.form.getPlaceholder('castings').label) }}\n        </div>\n\n        <ae-control class=\"_CSS-list\"\n                    name=\"children\"\n                    :document=\"params.document\"\n                    field-name=\"castings\"\n                    :readonly=\"params.readonly\"\n                    :params=\"params.form.getFieldControlParams('castings')\"\n                    :param-confirm-remove=\"true\"\n                    :param-template-parent-id=\"params.document.id\"\n                    param-design=\"card--wide,card\"\n                    :param-handle-selected=\"false\"\n                    :param-no-add=\"true\"\n        ></ae-control>\n        <div v-if=\"!params.document.data.castings.length\">Keine Castings angelegt</div>\n      </div>\n    </div>\n  \n  </div>\n  <div class=\"_CSS-details\">\n    <div class=\"_CSS-subtitle\">Details</div>\n    <div class=\"_CSS-deadline\">\n      <h3>{{ Aeppic.translate(params.form.getPlaceholder('deadline').label) }}</h3>\n      <div class=\"_CSS-description\" v-if=\"params.readonly \"> {{ params.document.data.deadline ? DateTime.fromISO(params.document.data.deadline).toLocaleString(DateTime.DATE_MED) : 'Keine Deadline'}} </div>\n      <ae-control v-if=\"!params.readonly\" field-name=\"deadline\" :document=\"params.document\"></ae-control>\n    </div>\n\n    <h3>Status</h3>\n    <div class=\"_CSS-description\" style=\"display: flex; justify-content: space-between;\">\n      <div>{{ params.document.data.closed ? 'Keine Bewerbungen möglich' : 'Bewerbungen möglich' }}</div>\n      <button class=\"dbps-button\" style=\"margin-left: 1rem;\" @click=\"controller.toggleClosed()\" :title=\"!params.document.data.close ? 'Projekt abschließen' : 'Projekt entsperren'\" :disabled=\"params.readonly\">\n        <ae-icon v-show=\"!params.document.data.closed\" class=\"fa fa-lock-open fa-2x\"></ae-icon>\n        <ae-icon v-show=\"params.document.data.closed\" class=\"fa fa-lock fa-2x\"></ae-icon>\n      </button>\n    </div>\n\n    <h3>{{ Aeppic.translate(params.form.getPlaceholder('description').label) }}</h3>\n    <div v-if=\"params.readonly\" class=\"_CSS-description\">{{ params.document.data.description || 'Keine Beschreibung' }}</div>\n    <ae-control :name=\"params.form.getPlaceholder('description').control.name\" v-else :document=\"params.document\" field-name=\"description\"></ae-control>\n\n    <h3>{{ Aeppic.translate(params.form.getPlaceholder('fee').label) }}</h3>\n    <div v-if=\"params.readonly\" class=\"_CSS-description\">{{ params.document.data.fee || 'Keine Beschreibung' }}</div>\n    <ae-control :name=\"params.form.getPlaceholder('fee').control.name\" v-else :document=\"params.document\" field-name=\"fee\"></ae-control>\n\n    <h3>{{ Aeppic.translate(params.form.getPlaceholder('shootingDates').label) }}</h3>\n    <div v-if=\"params.readonly\" class=\"_CSS-description\">{{ params.document.data.shootingDates || 'Keine Beschreibung' }}</div>\n    <ae-control :name=\"params.form.getPlaceholder('shootingDates').control.name\" v-else :document=\"params.document\" field-name=\"shootingDates\"></ae-control>\n\n    \n    <h3>{{ Aeppic.translate(params.form.getPlaceholder('files').label) }}</h3>\n    <ae-control name=\"children\" :document=\"params.document\" field-name=\"files\" param-design=\"card--small,card\" :params=\"params.form.getFieldControlParams('files')\" :readonly=\"params.readonly\"></ae-control>\n  </div>\n</div>\n  ","css":"._CSS {\n  padding: 8px;\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-header {\n  display: grid;\n  grid-template-columns: 3fr 1fr;\n  grid-column-gap: 2rem;\n}\n\n._CSS-movies {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-header__title {\n  font-weight: bold;\n  font-size: 2rem;\n  margin-bottom: 2rem;\n}\n\n._CSS-details {\n  background: rgba(255, 255, 255, 0.7);\n  padding: 8px;\n}\n\n._CSS-description {\n  padding: 8px;\n  background: white;\n  margin-bottom: 1rem;\n  white-space: pre-wrap;\n}\n\n._CSS-deadline {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-subtitle {\n  text-transform: uppercase;\n  font-weight: bold;\n}\n\n._CSS-castings {\n  background: rgba(255,255,255,0.7);\n  padding: 1rem;\n}\n\n._CSS-castings__header {\n  font-size: 1.3rem;\n  font-weight: bold;\n  text-transform: uppercase;\n}","controller":"toggleClosed() {\n  if (params.readonly) {\n    return\n  }\n\n  params.document.data.closed = !params.document.data.closed\n}"},"locks":[],"created":{"at":"2018-06-20T08:26:24+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583893307,"ct":1529483184186,"a_depth":4,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","e89b29a9-6ab9-47dc-a6fe-91ebda92871d","686d22ba-414e-452f-9795-f6f7bcab37d5"],"a_forms":["folder","application-form","folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"a":["apps","3fbe0efd-713a-457a-a34c-3a12aa19d6bb","999c58bb-af30-4eb9-aece-b07fbdbb080c"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2020-12-10T13:06:54+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1728472068180,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.theme = 'ae-light'\n    locals.ready = false\n    locals.loadedTranslations = false\n\n    try {\n      if (typeof tailwind !== 'undefined') {\n        if (Aeppic.LocalStorage.getValue('redesign-allow-darkmode')) {\n          tailwind.config = {\n            darkMode: 'media',\n            theme: { extend: {} },\n          }\n        } else {\n          tailwind.config = {\n            darkMode: 'selector',\n            theme: { extend: {} },\n          }\n        }\n\n        // https://tailwindcss.com/docs/screens\n        tailwind.config.theme.extend.screens = {\n          '3xl': '2000px',\n        }\n\n        tailwind.config.theme.extend.colors = {\n          primary: tailwind.colors.blue,\n          secondary: tailwind.colors.slate,\n          'brand-accent': tailwind.colors.lime,\n          'brand-accent-secondary': tailwind.colors.fuchsia,\n          info: tailwind.colors.indigo,\n          warn: tailwind.colors.amber,\n          error: tailwind.colors.rose,\n        }\n      }\n    } catch (e) {\n      console.error('Error config tailwind', e)\n    }\n\n    const appId = layout.a[1]\n\n    const preloadIds = [\n      '6ed5d418-ec5c-4baf-97ff-9474cac8f53b',\n      'cfb24716-00f2-4597-be43-11a975793bdf',\n      'cdeab632-622e-4fe4-9446-772266ba91fc',\n      'f5a5c2a0-bf9c-4b44-b05b-8e545156df10',\n      'acd83791-970f-4b6e-bebd-d7f3bca52014',\n      '9a40ffd1-4595-4263-b39e-1f00fc55ee36',\n      'd338debc-06a4-481e-9e81-9a79dbe26e4d',\n      '7f9e5f1f-33bc-4cf7-826e-8232175f1ec2',\n      'e19b1580-aabc-49b4-9281-3a7546bd813a',\n      'edb9c29e-b796-4dcc-bdfd-4037db29f9f7',\n      'cfb24716-00f2-4597-be43-11a975793bdf',\n      '091749f0-f2cc-4d28-a175-1e8ab60317b4',\n      'bbd6d99f-571d-422f-a2bc-15d3f8ecfae8',\n      '062ef57e-6140-4c55-951e-341a226e5457',\n      '8ebd91bd-9110-4ee5-b3d8-4248d2dc696d',\n      'ed2cc4c2-d2a0-4969-8da7-49fb3d539cc9',\n      '6ee77ae8-b2f6-4fce-8fbc-788a55d5f7da',\n      '2dab232c-2c8a-4aa4-b3f9-6023a7116161',\n      '32dbb3b6-f883-4647-8d21-6f1e0fb83b90',\n    ]\n\n    // preload app\n    const preloadLocations = [\n      `a:${appId}`,\n      'p:91f205bc-9989-4fbe-8966-bd4ba9777c26 f.id:control-form',\n      'p:controls-folder f.id:control-form',\n    ]\n\n    const [, ids] = await Promise.all([\n      Aeppic.find(preloadLocations.join(' OR '), { size: 9999 }),\n      Aeppic.getAll(preloadIds),\n    ])\n\n    if (Aeppic.Account && Aeppic.Account.data.name === 'service') {\n      console.log('preloaded these documents')\n\n      const loggingArray = ids.map((id) => (id ? [id.data.name, id.a.join(' > ')] : []))\n      loggingArray.push(['Aeppic.find( ... )', preloadLocations.join(' OR ')])\n      console.table(loggingArray)\n    }\n\n    locals.ready = true\n  }\n}\n","css":"","name":"Projekt-Share: root layout","packages":[],"template":"<div  class=\"w-full h-full flex flex-col\"\n      tabindex=\"0\" \n      @drop.prevent\n      @dragover.prevent\n      :class=\"['ae-expand-region', 'ae-theme', locals.theme, { 'ae-phone': Aeppic.Device === 'Phone' }]\"\n>\n\n  <div class=\"w-full h-full ae-dialog-region ae-stacking-context ae-app\" \n    v-responsive\n  >\n    <!-- Load translations! They will be there before any content loading I hope 😬  -->\n    <ae-layout style=\"display:none;\"\n              layout-id=\"7a66c0bd-aaa4-406d-80da-0b0d5a6ee330\"\n              @loaded=\"locals.loadedTranslations = true\"\n    ></ae-layout>\n\n    <ae-layout  layout-id=\"1c2649f8-6406-486e-9f17-fee4b30c1204\"\n                :param-page-document-id=\"params.pageDocumentId\"\n                :param-query-params=\"params.queryParams\"\n                class=\"w-full h-full overflow-hidden relative\"\n                v-if=\"locals.ready && locals.loadedTranslations\"\n    ></ae-layout>\n    <div class=\"h-full w-full flex justify-center items-center\" v-else>\n      <div>\n        <ae-icon class=\"fa fa-circle-notch fa-pulse fa-2x\"></ae-icon>\n      </div>\n    </div>\n  </div>\n</div>\n "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"ca46e5a0-8e8a-4929-9c00-3dfa4085b87c","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-12-11T12:26:37+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"999c58bb-af30-4eb9-aece-b07fbdbb080c","previous":{"v":"f8fee111750e3497"},"stamps":[],"t":1765455997597,"v":"6308687190c05e52"},{"id":"3eb256f4-2b7e-49c3-b299-55475f419f59","v":"1a655e5cf68d546d","previous":{"v":"3055dc1c62ba0819"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"PWA Manifest Generator","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"d4ce6dec568c3dc1","text":"Window"}],"template":"<div ref=\"element\"></div>","css":"","controller":"class Controller {\n  async init() {\n    this.manifestObjectUrl = null\n\n    watchParam('pageDocument', (document) => {\n      this.updatePWA(document)\n    })\n\n\n    await Aeppic.nextRenderPass()\n\n    this.updatePWA(params.pageDocument)\n  }\n  updatePWA(document) {\n    if (this.manifestObjectUrl) {\n      URL.revokeObjectURL(this.manifestObjectUrl)\n    }\n\n    const baseUrl = packages.window.location.origin\n\n    if (!document || !baseUrl?.startsWith('https:')) {\n      return\n    } \n\n    const display = Aeppic.Device === 'Desktop' ? 'minimal-ui' : 'standalone'\n\n    const name = document.data.name\n\n    const manifest = {\n      \"name\": `bizpin ${name}`,\n      \"short_name\": `bizpin - ${name}`,\n      \"icons\": [\n        {\n        \"src\": `${baseUrl}/manifest/android-36x36.png`,\n        \"sizes\": \"36x36\",\n        \"type\": \"image/png\"\n        },\n        {\n        \"src\": `${baseUrl}/manifest/android-48x48.png`,\n        \"sizes\": \"48x48\",\n        \"type\": \"image/png\"\n        },\n        {\n        \"src\": `${baseUrl}/manifest/android-72x72.png`,\n        \"sizes\": \"72x72\",\n        \"type\": \"image/png\"\n        },\n        {\n        \"src\": `${baseUrl}/manifest/android-96x96.png`,\n        \"sizes\": \"96x96\",\n        \"type\": \"image/png\"\n        },\n        {\n        \"src\": `${baseUrl}/manifest/android-144x144.png`,\n        \"sizes\": \"144x144\",\n        \"type\": \"image/png\"\n        },\n        {\n        \"src\": `${baseUrl}/manifest/android-192x192.png`,\n        \"sizes\": \"192x192\",\n        \"type\": \"image/png\"\n        },\n        {\n        \"src\": `${baseUrl}/manifest/pwa-512x512.png`,\n        \"sizes\": \"512x512\",\n        \"type\": \"image/png\"\n        }\n      ],\n      \"start_url\": `${packages.window.location.href}`,\n      \"id\": `${packages.window.location.href}`,\n      \"background_color\": \"#fafafa\",\n      \"display\": display,\n      \"theme_color\": \"#007acc\"\n    }\n\n    const manifestElement = $refs.element.ownerDocument.querySelector(\"link[rel='manifest'\")\n  \n    if (!manifestElement) {\n      return\n    }\n    \n    manifestElement.setAttribute('href', '')\n\n    // await Aeppic.nextRenderPass()\n    // await Aeppic.nextRenderPass()\n\n    this.manifestObjectUrl = URL.createObjectURL(new Blob([JSON.stringify(manifest)], { type: 'application/json'}))\n\n    manifestElement.setAttribute('href', this.manifestObjectUrl)\n  }\n}"},"locks":[],"created":{"at":"2021-12-01T11:49:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2024-12-16T09:15:49+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1734340549847,"ct":1638359361592,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2"],"a_depth":2,"a_forms":["folder","application-form"],"created":{"at":"2025-12-01T12:31:09+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1764592269913,"data":{"applies":"","controller":"class Controller {\n  init() {\n    if (!Aeppic.Account?.data.allowDevMode) {\n      return\n    }\n\n    locals.active = false\n    locals.collapsed = false\n\n    locals.totalInspections = 0\n\n    locals.inspections = []\n  }\n\n  selectedInspection(inspection) {\n    console.log(JSON.parse(JSON.stringify(inspection)))\n  }\n\n  clear() {\n    locals.inspections = []\n  }\n\n  activate() {\n    if (locals.active) {\n      return\n    }\n\n    locals.active = true\n\n    this._overwrite()\n  }\n\n  async _overwrite() {\n    console.warn('MONKEYPATCHING Aeppic._serverAdapter.fetch')\n    this._originalFunc = Aeppic._serverAdapter.fetch\n\n    Aeppic._serverAdapter.fetch = async (...args) => {\n      const fetch = await this._originalFunc(...args)\n\n      if (args[0] !== '/api/_search?') {\n        return fetch\n      }\n\n      try {\n        const body = await fetch.clone().json()\n        const took = body.took\n\n        const ancestorConditions = []\n        const parentConditions = []\n        const sizes = []\n        const causes = []\n        const tags = []\n\n        body.results.forEach((result) => {\n          const resultTook = result.took\n          \n          const size = result.options?.size ?? null\n          if (size !== null) {\n            sizes.push(size)\n          }\n          \n          const { cause, tag } = result.options\n          if (cause) {\n            causes.push(cause)\n          }\n          if (tag) {\n            tags.push(tag)\n          }\n\n          const { a, p } =\n            result.query?.graph?.conditions.reduce(\n              (res, current) => {\n                if (current.field === 'p') {\n                  res.p.push({ cause, tag, size, took: resultTook, result })\n                }\n                if (current.field === 'a') {\n                  res.a.push({ cause, tag, size, took: resultTook, result })\n                }\n\n                return res\n              },\n              { a: [], p: [] }\n            ) ?? {}\n\n          ancestorConditions.push(...a)\n          parentConditions.push(...p)\n        })\n\n\n        locals.inspections.unshift({ sizes, took, ancestorConditions, parentConditions, body, causes, tags })\n\n        locals.totalInspections += 1\n\n        locals.inspections = locals.inspections.slice(0, 500)\n        // console.log(took, ancestorConditions, parentConditions)\n      } catch (error) {\n        console.error('MONKEYPATCHING failed:', error)\n      }\n\n      return fetch\n    }\n  }\n\n  _restore() {\n    if (!this._originalFunc) {\n      return\n    }\n\n    console.warn('MONKEYPATCHING restoring _originalFunc')\n    Aeppic._serverAdapter.fetch = this._originalFunc\n  }\n  destroy() {\n    this._restore()\n  }\n}\n","css":"","name":"Query Live Analyser","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<div @click.stop=\"controller.activate()\" :class=\"{ 'text-red-500': locals.active }\">\n  <ae-icon class=\"fal fa-binoculars\"></ae-icon>\n</div>\n\n<div\n  v-if=\"locals.active\"\n  class=\"font-normal text-lg fixed right-0 top-0 w-[300px] max-h-[90vh] overflow-hidden bg-white overflow-y-scroll\"\n>\n  <div class=\"flex gap-2\">\n    <div @click.stop=\"locals.collapsed = !locals.collapsed\">\n      <ae-icon :class=\"locals.collapsed ? 'fa fa-arrow-down' : 'fa fa-arrow-up'\"></ae-icon> Collapse\n    </div>\n\n    <div @click.stop=\"controller.clear()\"><ae-icon class=\"far fa-trash\"></ae-icon> Clear</div>\n    <div>{{ locals.totalInspections }}</div>\n  </div>\n\n  <div v-show=\"!locals.collapsed\">\n    <div\n      v-for=\"(inspection, index) of locals.inspections\"\n      class=\"cursor-pointer hover:bg-slate-200 grid grid-cols-[140px_1fr_1fr] border-l-8 border-b-2 border-b-neutral-500\"\n      :class=\"[\n      inspection.took < 10\n    ? 'text-green-700 bg-green-100'\n    : inspection.took < 50\n    ? 'text-yellow-800 bg-yellow-100'\n    : inspection.took < 100\n    ? 'text-amber-800 bg-amber-100'\n    : 'text-red-800 bg-red-100',\n    inspection.parentConditions.length && 'border-l-lime-500',   inspection.ancestorConditions.length && 'border-l-fuchsia-500', (!inspection.parentConditions.length && !inspection.ancestorConditions.length) &&  'border-l-gray-500'\n    ]\"\n      @click.stop=\"controller.selectedInspection(inspection)\"\n    >\n      <div class=\"truncate\">{{ inspection.took }}</div>\n      <div v-if=\"inspection.ancestorConditions.length\" class=\"truncate\">\n        a{{ inspection.ancestorConditions.length }}\n      </div>\n      <div v-if=\"inspection.parentConditions.length\" class=\"truncate\">p{{ inspection.parentConditions.length }}</div>\n\n      <template v-if=\"inspection.sizes.length\">\n        <!-- newline -->\n        <div class=\"truncate col-span-3\">s{{ inspection.sizes }}</div>\n        <div></div>\n        <div></div>\n      </template>\n      <template v-if=\"inspection.causes.length\">\n        <!-- newline -->\n        <div class=\"col-span-3\">\n          <div class=\"flex flex-col \">\n            <div v-for=\"cause in inspection.causes\" class=\"truncate\" >{{ cause.source }}</div>\n          </div>\n        </div>\n        <div></div>\n        <div></div>\n      </template>\n    </div>\n  </div>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"9c7df82b-b5fc-47c9-9237-5f337390551a","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-12-08T15:17:15+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"e4a62254-c6ab-4d0d-a9ae-81934093f6e2","previous":{"v":"e15572ba16da4b9a"},"stamps":[],"t":1765207035070,"v":"b1515f6dc2f82644"},{"id":"1a4a9a3c-bf9d-4e8f-8932-c18ac2ac0825","v":"245319e8597217ff","previous":{"v":"6de34e98ae4fc4fe"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Quick Login Layout","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"5f748569e59edddc","text":"Window"}],"template":"<div v-if=\"!locals.showReset\" class=\"_CSS-login-dialog_body\">\r\n  <header class=\"_CSS-backdrop\">\r\n  </header>\r\n  <form class=\"_CSS-login-form\"  @submit.prevent=\"controller.login()\" :class=\"{ '_CSS-login-form--running': locals.loginRunning }\">\r\n    <input  type=\"text\" autofocus v-model=\"locals.username\" required placeholder=\"Benutzername\" @input=\"locals.error = null\"/>\r\n    <input ref=\"password\" type=\"password\" v-model=\"locals.password\" placeholder=\"Passwort / PIN\" @input=\"locals.error = null\"/>\r\n    <label><input type=\"checkbox\" v-model=\"locals.remember\"/>Angemeldet bleiben</label>\r\n    <button type=\"submit\" style=\"\">\r\n      <div class=\"_CSS-error\" v-if=\"!!locals.error && !locals.loginRunning\">\r\n        Unbekannter Benutzername oder Passwort\r\n      </div>\r\n      <span>Anmelden</span>\r\n      <svg style=\"fill:white\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M13.025 1l-2.847 2.828 6.176 6.176h-16.354v3.992h16.354l-6.176 6.176 2.847 2.828 10.975-11z\"/></svg>\r\n    </button>\r\n  </form>\r\n  <div class=\"ae-progress ae-progress--indeterminate\" v-show=\"locals.loginRunning\"></div>\r\n  <footer>\r\n      <button class=\"_CSS-login-dialog_footer-button\" @click=\"controller.goResetView()\">Passwort vergessen ?</button>\r\n  </footer>\r\n</div>\r\n<div v-else class=\"_CSS-login-dialog_body\">\r\n  <header class=\"_CSS-backdrop\">\r\n  </header>\r\n      <form v-if=\"locals.hasToken\" class=\"_CSS-login-form\" @submit.prevent=\"controller.resetPassword()\" :class=\"{ '_CSS-login-form--running': locals.loginRunning }\">\r\n        <input  type=\"text\" v-model=\"locals.username\" required placeholder=\"Benutzername\" @input=\"locals.error = null\"/>\r\n\r\n        <label style=\"margin: 0px 16px 0px 16px;;\"><span>Ihnen wurde ein Anmeldecode per SMS oder E-Mail zugesendet.</span></label>\r\n        \r\n        <input type=\"text\" v-model=\"locals.token\" required autocomplete=\"off\" placeholder=\"Anmeldecode\" @input=\"locals.error = null\"/>\r\n        <input type=\"password\" v-model=\"locals.password\" required placeholder=\"Neues Passwort / PIN\" @input=\"locals.error = null\"/>\r\n        <!-- <label><input type=\"checkbox\" v-model=\"locals.remember\"/>Angemeldet bleiben</label> -->\r\n        <button v-if=\"!locals.result\" type=\"submit\">\r\n          <div class=\"_CSS-error\" v-if=\"!!locals.error && !locals.loginRunning\">\r\n            Unbekannter Benutzername oder Anmeldecode.\r\n          </div>\r\n          <span>Passwort ändern</span>\r\n          <svg style=\"fill:white\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M13.025 1l-2.847 2.828 6.176 6.176h-16.354v3.992h16.354l-6.176 6.176 2.847 2.828 10.975-11z\"/></svg>\r\n        </button>\r\n        <button class=\"_CSS-button--success\" disabled v-else>\r\n          <span>Geändert!</span>\r\n        </button>\r\n      </form>\r\n      <form v-else class=\"_CSS-login-form\" @submit.prevent=\"controller.requestResetToken()\" :class=\"{ '_CSS-login-form--running': locals.loginRunning }\">\r\n        <input  type=\"text\" v-model=\"locals.username\" required placeholder=\"Benutzername\" @input=\"locals.error = null\"/>\r\n\r\n        <button :disabled=\"locals.requestTokenRunning\" type=\"submit\">\r\n          <div class=\"_CSS-error\" v-if=\"!!locals.error && !locals.requestTokenRunning\">\r\n            <template v-if=\"locals.error.requestTokenInvalidUser\">\r\n              Unbekannter Benutzername.\r\n            </template>\r\n            <template v-if=\"locals.error.requestTokenNoContact\">\r\n              Keine Telefonnummer oder E-Mail hinterlegt.\r\n            </template>\r\n          </div>\r\n          <span>Anmeldecode anfordern</span>\r\n          <svg style=\"fill:white\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M13.025 1l-2.847 2.828 6.176 6.176h-16.354v3.992h16.354l-6.176 6.176 2.847 2.828 10.975-11z\"/></svg>\r\n        </button>\r\n      </form>\r\n\r\n       <div class=\"ae-progress ae-progress--indeterminate\" v-show=\"locals.resetRunning\"></div>\r\n      <footer>\r\n        <button class=\"_CSS-login-dialog_footer-button\" @click=\"controller.goLoginView()\">Zurück zur Anmeldung</button>\r\n      </footer>\r\n    </div>","css":"._CSS {\r\n  display:flex;\r\n  flex-direction:column;\r\n  background:white;\r\n\r\n  width: 300px;\r\n}\r\n\r\n._CSS-login-form {\r\n  display:grid;\r\n  grid-gap: 16px;\r\n  min-height: 260px;\r\n  padding-top: 16px;\r\n  grid-template-rows: auto auto 1fr auto;\r\n  flex:1;\r\n}\r\n\r\n._CSS-login-form--running {\r\n  opacity: 0.5;\r\n}\r\n\r\n._CSS-login-form {\r\n  align-items:start;\r\n  grid-template-rows: auto auto auto auto 1fr;\r\n}\r\n._CSS-login-form input {\r\n  line-height: 1.8em;\r\n  margin: 16px 16px 0px 16px;\r\n  border:none;\r\n  border-bottom: 1px solid lightgray;\r\n}\r\n\r\n._CSS-login-dialog_body footer {\r\n  display:flex;\r\n  justify-content:center;\r\n  padding:2em;\r\n}\r\n\r\n._CSS-login-dialog_footer-button {\r\n  border:none;\r\n  background:none;\r\n  color: #999;\r\n  font-size: 0.7em;\r\n}\r\n\r\n._CSS-login-form input[type=text],input[type=password]:focus {\r\n  border-bottom: 1px solid #2d9cf4;\r\n  outline:none;\r\n}\r\n\r\n._CSS-login-form label {\r\n  color:gray;\r\n  font-size:0.8em;\r\n  vertical-align:middle;\r\n  line-height:2em;\r\n}\r\n._CSS-show-password {\r\n  position:absolute;\r\n  right:0;\r\n}\r\n\r\n._CSS-login-form button[type=submit] {\r\n  background:lightblue;\r\n  border:none;\r\n  color:white;\r\n  text-transform:uppercase;\r\n  /* height: 48px; */\r\n  transition: all 0.1s ease-in;\r\n  padding:16px;display:flex;align-items:center;justify-content:space-between;position:relative;\r\n}\r\n\r\n._CSS-login-form button[type=submit]:focus {\r\n  background: #3fbbe4;\r\n}\r\n\r\n._CSS-login-form button[type=submit]:hover {\r\n  background: #3fbbe4;\r\n}\r\n\r\n._CSS-login-form:invalid button[type=submit] {\r\n  opacity:0.4;\r\n}\r\n\r\n.ae-phone ._CSS-login-form:invalid button[type=submit] {\r\n  opacity:1;  \r\n  background:#3fbbe4;\r\n}\r\n\r\n._CSS-login-form input::placeholder,input::-webkit-input-placeholder {\r\n  color: #AAA;\r\n  font-size: 0.75em;\r\n}\r\n\r\n._CSS-login-form ._CSS-button--success {\r\n  margin: 16px; \r\n  background:lightblue;\r\n  border:none;\r\n  color:white;\r\n  text-transform:uppercase;\r\n  /* height: 48px; */\r\n  transition: all 0.1s ease-in;\r\n  /* margin-top:auto; */\r\n  padding:16px;\r\n  \r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:space-between;\r\n  position:relative;\r\n}\r\n\r\n._CSS-backdrop::before {\r\n  content:'';\r\n  position:absolute;\r\n  left:0;right:0;top:0;bottom:0;\r\n  background: url('https://source.unsplash.com/300x80/daily/?dogs,cats');\r\n  background-size:contain;\r\n  background-position:left center;\r\n}\r\n\r\n._CSS-backdrop {\r\n\r\n  /* z-index: -1; */\r\n  overflow: hidden;\r\n  position: relative;\r\n  height: 80px;\r\n}\r\n\r\n._CSS-backdrop::after {\r\n  content:'';\r\n  opacity:0.5;\r\n  position:absolute;\r\n  left:0;right:0;top:0;bottom:0;\r\n  background-color: #2d9cf4;\r\n  background-image: radial-gradient(ellipse farthest-corner at center center, rgb(66, 165, 245) 0%, rgb(33, 150, 243) 75.6%, rgb(33, 150, 243) 100%);\r\n  background-image: -ms-radial-gradient(center center, ellipse farthest-corner, rgb(66, 165, 245) 0%, rgb(33, 150, 243) 75.6%, rgb(33, 150, 243) 100%);\r\n}\r\n\r\n._CSS-attribution {\r\n  z-index: 1;\r\n  position:absolute;\r\n  right:10px;bottom:10px;\r\n  background:black;\r\n  color:white;\r\n  xmin-width:100px;\r\n  xmin-height:20px;\r\n}\r\n\r\n._CSS-login-dialog {\r\n  z-index:2;\r\n  display:flex;\r\n  flex-direction:column;\r\n  min-width: 300px;\r\n}\r\n\r\n.ae-small ._CSS-login-dialog {\r\n  min-width:100%;\r\n  height:100%;\r\n  /* background:red; */\r\n}\r\n\r\n._CSS_login {\r\n\r\n}\r\n\r\n._CSS-error {\r\n  position:absolute;\r\n  top:0;left:0;right:0;\r\n  background: rgba(255,0,0,0.8);\r\n  color:white;\r\n  text-align:center;\r\n  font-size: 0.8em;\r\n}\r\n/* \r\n.ae-small ._CSS-backdrop::before {\r\n  display:none;\r\n}\r\n.ae-small ._CSS-backdrop {\r\n  background:lightblue;\r\n}\r\n\r\n.ae-small ._CSS-login-dialog_lead {\r\n  padding: 16px 16px;\r\n  margin:0;\r\n} */\r\n","controller":"class Controller {\r\n  async init() {\r\n    locals.showReset = false\r\n    locals.hasToken = false\r\n    //locals.company = await Aeppic.get('b61adbaf-b51b-46b5-9358-587ef518075b')\r\n    locals.companyName = /*locals.company.data.name ||*/ 'Exapris GmbH'\r\n\r\n    locals.username = ''\r\n    locals.password = ''\r\n    locals.remember = false\r\n\r\n    locals.loginPending = false\r\n    locals.loginRunning = false\r\n\r\n    locals.error = null\r\n    //await Aeppic.nextRenderPass()\r\n    //$refs.menu.show() \r\n\r\n    locals.resetRunning = false\r\n    locals.result = null\r\n  }\r\n\r\n  async login() {\r\n    console.log('login', locals.username)\r\n\r\n    if (locals.loginRunning) {\r\n      locals.loginPending = true\r\n      return\r\n    }\r\n\r\n    locals.loginPending = false\r\n    locals.loginRunning = true\r\n    locals.error = null\r\n\r\n    await Aeppic.nextRenderPass()\r\n    await Aeppic.nextRenderPass()\r\n    \r\n    try {\r\n      const loginResult = await Aeppic.login(locals.username.trim(), locals.password.trim(), locals.remember)\r\n\r\n      if (loginResult.ok) {\r\n        locals.error = null\r\n\r\n        // FIXME: reload to ensure update of Aeppic.Account\r\n\r\n        Aeppic.reload()\r\n        return\r\n\r\n        if (params.navigateToProfile) {\r\n          Aeppic.navigateToProfile()\r\n        } else {\r\n          // FIXME:  TypeError: this._dynamic.router.navigateToUrl is not a function\r\n          //  Aeppic.navigateHome()\r\n          Aeppic.navigateTo(Aeppic.HomePage)\r\n        }\r\n\r\n        $emit('close')\r\n      } else {\r\n        if (loginResult.status === 404) {\r\n          locals.error = {\r\n            unkownUser: true\r\n          }\r\n        } else {\r\n          locals.error = {\r\n            wrongPassword: true\r\n          }\r\n        }\r\n      }\r\n\r\n    } catch (error) {\r\n    }\r\n\r\n    // FIXME: It must be called or Aeppic.Account will not update correctly it's watching template bindings\r\n    await Aeppic._updateAuthInfo()\r\n\r\n    await Aeppic.nextRenderPass()\r\n    locals.loginRunning = false\r\n\r\n    if (locals.loginPending) {\r\n      this.login()\r\n    }\r\n  }\r\n\r\n  async resetPassword() {\r\n    if (locals.resetRunning) {\r\n      return\r\n    }\r\n\r\n    locals.resetRunning = true\r\n    locals.result = null\r\n\r\n    const account = (await Aeppic.find(`f.id:account AND data.name:${locals.username}`))[0]\r\n\r\n    try {\r\n      const result = await Aeppic.Commands.execute('5b8a9204-29f0-4ad1-9bbb-8c61b05249bb', account, {\r\n        token: locals.token,\r\n        password: locals.password\r\n      })\r\n\r\n      if (result.value && result.value.ok) {\r\n        locals.result = {\r\n          resetPassword: true\r\n        }\r\n      } else {\r\n        locals.error = {\r\n          resetPassword: true\r\n        }\r\n\r\n        const currentAccount = await Aeppic.asReference(Aeppic.Account)\r\n        const targetAccount = await Aeppic.asReference(account)\r\n\r\n        const log = {\r\n          currentAccount,\r\n          targetAccount,\r\n          username: locals.username,\r\n          token: locals.token,\r\n        }\r\n\r\n        const createLogResult = await Aeppic.Commands.execute('ca7dca31-ed07-4f9a-82f5-13420a71868c', '5b8a9204-29f0-4ad1-9bbb-8c61b05249bb', {\r\n          result: result.value,\r\n          log\r\n        })\r\n       \r\n        if (!createLogResult.ok) {\r\n          console.log('Error while creating Log', log)\r\n        }\r\n      }\r\n    } catch (e) {\r\n      console.error('reset password error', e)\r\n    }\r\n\r\n    locals.resetRunning = false\r\n  }\r\n\r\n async requestResetToken() {\r\n    if (locals.requestTokenRunning) {\r\n      return\r\n    }\r\n\r\n    locals.requestTokenRunning = true\r\n    locals.result = null\r\n\r\n    const account = (await Aeppic.find(`f.id:account AND data.name:${locals.username}`))[0]\r\n\r\n    try {\r\n      const baseUrl = packages.window && packages.window.location && packages.window.location.origin\r\n\r\n      const result = await Aeppic.Commands.execute('5c82f673-65be-4e39-8bfd-f4d10745daf0', account, { baseUrl })\r\n\r\n      if (!result.value || !result.value.ok) {\r\n        locals.error = {\r\n          requestTokenNoContact: true\r\n        }\r\n      }\r\n    } catch (e) {\r\n      locals.error = {\r\n        requestTokenInvalidUser: true\r\n      }\r\n    }\r\n\r\n    locals.requestTokenRunning = false\r\n\r\n    if (!locals.error) {\r\n      locals.hasToken = true\r\n    }\r\n  }\r\n\r\n  goResetView() {\r\n    locals.hasToken = false\r\n\r\n    locals.password = ''\r\n    locals.token = ''\r\n\r\n    locals.error = null\r\n    locals.result = null\r\n\r\n    locals.showReset = true\r\n  }\r\n\r\n  goLoginView() {\r\n    locals.hasToken = false\r\n\r\n    locals.password = ''\r\n    locals.token = ''\r\n\r\n    locals.error = null\r\n    locals.result = null\r\n\r\n    locals.showReset = false\r\n  }\r\n\r\n\r\n  addDevice() {\r\n  }\r\n\r\n  impersonate() {\r\n  }\r\n} "},"locks":[],"created":{"at":"2018-05-23T16:20:12+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2020-12-04T14:59:07+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1607093947256,"ct":1527085212176,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"89397cdf-630b-485d-a7c1-3e3e07d258f4","v":"initial","p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"Quick Task Add","applies":"","packages":[],"template":"<div class=\"_CSS-list\">\n  <div v-for=\"(line, index) of locals.lines\" class=\"_CSS-line\">\n    <div class=\"_CSS-line__input-container\">\n      <input type=\"text\" v-model=\"line.task.data.name\" class=\"_CSS-line__input\" ref=\"lineInputs\" @keydown.enter=\"controller.newLineIfNotEmpty()\" @keydown.delete=\"controller.removeLastLineIfEmpty($event)\" placeholder=\"Titel der Aufgabe\">\n      <button class=\"ae-button _CSS-line__input__content\" @click=\"controller.showDateSelector(index, $event)\">\n        <ae-icon class=\"fal fa-calendar\"></ae-icon>\n        <div style=\"margin-left: var(--ae-size-2);\" v-if=\"line.task.data.bis\">\n          {{ Aeppic.DateTime.fromISO(line.task.data.bis).toRelativeCalendar() }}\n        </div>\n      </button>\n\n      <div class=\"_CSS-line__input__content\">\n        <ae-layout  layout-id=\"36649f27-5869-49e6-9b49-3b5c3b9c795d\"\n                    :param-settings=\"locals.projectRefSettings\"\n                    param-icon=\"fal fa-tasks\"\n                    @selected=\"line.project = $event\"\n                    :param-show-selected=\"true\"\n                     :param-hide-path=\"true\"\n        ></ae-layout>\n        <!-- <ae-design v-if=\"line.project.id\"\n                    :document-id=\"line.project.id\"\n                    name=\"title\"></ae-design> -->\n      </div>\n      <div class=\"_CSS-line__input__content\">\n        <ae-layout  layout-id=\"36649f27-5869-49e6-9b49-3b5c3b9c795d\"\n                    :param-settings=\"locals.assigneeRefSettings\"\n                    param-icon=\"fal fa-user\"\n                    @selected=\"line.assignee = $event\"\n                    :param-show-selected=\"true\"\n                    param-design=\"avatar--tiny,title\"\n                    :param-hide-path=\"true\"\n          ></ae-layout>\n        <!-- <ae-design v-if=\"line.assignee.id\" :document-id=\"line.assignee.id\" name=\"avatar--tiny\"></ae-design> -->\n      </div>\n    </div>\n    <button class=\"ae-button\" v-if=\"locals.lines.length -1 === index\" @click=\"controller.newLine()\">\n      <ae-icon class=\"fa fa-plus\"></ae-icon>\n    </button>\n    <button class=\"ae-button\" v-else @click=\"controller.removeLine(index)\">\n      <ae-icon class=\"fa fa-minus\"></ae-icon>\n    </button>\n  </div>\n</div>\n\n\n<button class=\"ae-button ae-button--primary\" @click=\"controller.save()\" :disabled=\"!locals.lines || !locals.lines.length || !locals.lines[0].task.data.name\">\n  Aufgaben erstellen\n</button>\n\n<ae-popup ref=\"datePopup\" placement=\"bottom-start\" @close=\"locals.popupDocument = null\">\n  <template v-slot=\"scope\">\n    <div class=\"_CSS-popup\" v-if=\"locals.popupDocument\">\n      <div style=\"padding: var(--ae-size-1); display: flex; justify-content: flex-end;\">\n        <button class=\"ae-button\" @click.stop=\"() => { locals.popupDocument.data.bis = ''; scope.close() }\">\n          <ae-icon class=\"fa fa-times\"></ae-icon>\n        </button>\n      </div>\n      <div style=\"padding: var(--ae-size-1);\">\n        <ae-control name=\"date\" field-name=\"bis\" :document=\"locals.popupDocument\" :param-inline=\"true\" @input=\"scope.close()\"></ae-control>\n      </div>\n    </div>\n  </template>\n</ae-popup>\n","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n}\n\n._CSS-list {\n  display: grid;\n  grid-row-gap: var(--ae-size-2);\n\n  margin-bottom: var(--ae-size-4);\n}\n\n._CSS-line {\n  display: grid;\n  grid-row-gap: var(--ae-size-2);\n  grid-template-columns: auto 50px;\n}\n\n._CSS-line__input-container {\n  display: flex;\n  align-items: center;\n\n  background: var(--ae-ui-background);\n  border: var(--ae-border-color) solid var(--ae-border-width);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-line__input__content {\n  display: flex;\n  align-items: center;\n  min-width: 0;\n  max-width: var(--ae-size-10);\n  overflow: hidden;\n}\n\n._CSS-line__input {\n  background: transparent !important;\n  border: none !important;\n  outline: none !important;\n  flex: 3;\n  margin-left: var(--ae-size-1);\n}\n\n._CSS-popup {\n  xpadding: var(--ae-size-2) 0;\n  padding: 0;\n  background-color: white;\n  box-shadow: var(--ae-shadow-2);\n  transition: opacity .15s, visibility 1s;\n  border-radius: var(--ae-border-radius);\n  overflow: hidden;\n\n  display: flex;\n  flex-flow: column;\n}\n","controller":"class Controller {\n  async init() {\n\n    if (!params.options || !params.options.Forms || !params.options.Forms.Aufgabe || !params.options.Forms.Projekt || !params.options.Commands ||  !params.options.Commands.CreateRegularTask) {\n      console.error('Insufficient parameters')\n      return\n    }\n\n    this.FORMS = {\n      Aufgabe: params.options.Forms.Aufgabe,\n      Projekt: params.options.Forms.Projekt,\n      Mitarbeiter: 'd2ac3563-3c3f-4f02-b923-9b67abf98d10',\n      Unternehmen: 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df',\n    }\n\n    this.COMMANDS = {\n      CreateRegularTask: params.options.Commands.CreateRegularTask,\n    }\n\n    locals.projectRefSettings = {\n      filter: {\n        targetDocument: await Aeppic.get(params.document),\n        formIds: this.FORMS.Projekt,\n        ancestorForm: this.FORMS.Unternehmen,\n      },\n      search: {\n        size: 40,\n        sort: {\n          field: 'data.name',\n          descending: true\n        },\n        searchAllFields: true\n      },\n    }\n\n    locals.assigneeRefSettings = {\n      filter: {\n        targetDocument: await Aeppic.get(params.document),\n        formIds: this.FORMS.Mitarbeiter,\n        ancestorForm: this.FORMS.Unternehmen,\n      },\n      search: {\n        size: 40,\n        sort: {\n          field: 'data.name',\n          descending: true\n        },\n        searchAllFields: true\n      },\n    }\n\n    locals.popupDocument = null\n    \n    locals.lines = []\n\n    await this.newLine()\n  }\n\n  async newLine() {\n    const line = {\n      task: await Aeppic.new(this.FORMS.Aufgabe, params.document),\n      project: { id: '' },\n      assignee: { id: '' },\n    }\n\n    locals.lines.push(line)\n\n    await Aeppic.nextRenderPass()\n\n    this.focusLastLine()    \n  }\n\n  async newLineIfNotEmpty() {\n    if (!this.lastLine.task.data.name.trim()) {\n      return\n    }\n\n    this.newLine()\n  }\n\n  async removeLastLineIfEmpty(event) {\n    const lineIsNotEmpty = !!this.lastLine.task.data.name.trim()\n\n    if (lineIsNotEmpty || locals.lines.length <= 1) {\n      return\n    }\n\n    event.preventDefault()\n\n    locals.lines.pop()\n\n    await Aeppic.nextRenderPass()\n\n    this.focusLastLine()    \n  }\n\n  async save() {\n\n    for (const line of locals.lines) {\n      if (line.project.id) {\n        await this.createProjectTask(line.project, line.task, line.assignee)\n      } else {\n        Aeppic.save(line.task)\n        params.document.addReference('aufgaben', line.task)\n      }\n    }\n\n    locals.lines = []\n\n    $emit('saved')\n  }\n\n  async createProjectTask(project, task, assignee) {\n    const assigneeData = {\n      verantwortlich: assignee && assignee.id ? [await Aeppic.asReference(assignee)] : []\n    }\n\n    const params = {\n      data: {\n        ...task.data,\n        ...assigneeData\n      }\n    }\n\n    const commandResult = await Aeppic.Commands.execute(this.COMMANDS.CreateRegularTask, project, params)\n\n    if (!commandResult.ok) {\n      throw new Error('Could not create project task')\n    }\n  }\n\n  get lastLine() {\n    return locals.lines.slice(-1)[0]\n  }\n\n  removeLine(index) {\n    locals.lines.splice(index, 1)\n  }\n\n  focusLastLine() {\n    $refs.lineInputs.slice(-1)[0] && $refs.lineInputs.slice(-1)[0].focus()\n  }\n\n  showDateSelector(lineIndex, clickEvent) {\n    locals.popupDocument = locals.lines[lineIndex].task\n\n    $refs.datePopup.show(clickEvent)\n  }\n}"},"locks":[],"created":{"at":"2020-05-08T08:51:35+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:51:35+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927895171,"ct":1588927895170,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"6c101d1d-d688-49f6-b819-3001fb5603c3","v":"initial","p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Quick Task Add (Bizpin)","applies":"","packages":[],"template":"<ae-layout  layout-id=\"89397cdf-630b-485d-a7c1-3e3e07d258f4\"\n            :param-options=\"locals.options\"\n            :param-document=\"params.document\"\n            @saved=\"$emit('saved', $event)\"\n></ae-layout>","css":"","controller":"init() {\n  locals.options = {\n    Forms: {\n      Aufgabe: '544d11b1-a156-4568-aeb3-2a60b2b57807',\n      Projekt: '17c3a5d3-90ba-4592-961b-0800873ef9c1',\n    },\n    Commands: {\n      CreateRegularTask: '25455cd3-d9e1-40dd-b7f5-b1c980407ac2',\n    }\n  }\n}"},"locks":[],"created":{"at":"2020-05-08T08:51:35+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:51:35+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927895241,"ct":1588927895241,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"da1da77a-5796-47c9-abba-62bd952e0386","v":"initial","p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Quick Task Add (Energieberater)","applies":"","packages":[],"template":"<ae-layout  layout-id=\"89397cdf-630b-485d-a7c1-3e3e07d258f4\"\n            :param-options=\"locals.options\"\n            :param-document=\"params.document\"\n></ae-layout>","css":"","controller":"init() {\n  locals.options = {\n    Forms: {\n      Aufgabe: '90877d25-bbae-421e-9ea7-0631dcbf11c2',\n      Projekt: '98c77209-1245-43d6-90b5-8625183f470c',\n    },\n    Commands: {\n      CreateRegularTask: '25455cd3-d9e1-40dd-b7f5-b1c980407ac2',\n    }\n  }\n}"},"locks":[],"created":{"at":"2020-05-08T08:51:35+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:51:35+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927895333,"ct":1588927895332,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"238d8927-fc51-4cf5-922f-0830fccc3292","v":"4bde7281fd16ad38","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Quill Completion Layout","applies":"","packages":[],"template":"<div class=\"_CSS-container\" style=\"\" ref=\"container\">\n\t<div class=\"_CSS-header\" >\n    <div>\n        Suche\n    </div>\n    <button class=\"ae-button\" @click=\"controller.cancel()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n\t</div>\n\t<ae-list \n    list-id=\"23c237c4-dedf-40eb-9f02-31dc318445b5\"\n    :documents=\"locals.searchResults\"\n    @selected=\"(documentId) => controller.sendResult(documentId)\"\n    param-design=\"search-title,title\"\n    :param-design-params=\"{ minimizedInfo: true, hidePath: true }\"\n    :param-hide-path=\"params.hidePath\"\n    ></ae-list>\n</div>\n","css":"._CSS-container {\n  border: solid var(--ae-border-width) var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  padding: var(--ae-size-2);\n  background-color:var(--ae-ui-background);\n  min-width:300px;\n}\n\n._CSS-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}","controller":"class Controller {\n  init() {\n    locals.searchResults = []\n\n    $on('searchstring', (searchstring) => {\n      console.log('searchstring', searchstring)\n      this.searchDocuments(searchstring)\n    })\n  }\n\n  async sendResult(documentId) {\n    console.log('sendResult')\n    $refs.container.dispatchEvent(new CustomEvent('result', {\n      detail: {\n        name: 'ae-design',\n        props: {\n          documentId,\n          name: 'quill-embed,embed,title'\n        }\n      }\n    }))\n\n    // TODO:\n    // add referenced document to document\n    // const referencedDocument = await Aeppic.get(documentId)\n    // params.parentEditableDocument.addReference('references', referencedDocument)\n  }\n\n  cancel() {\n    $refs.container.dispatchEvent(new Event('cancel'))\n  }\n\n  async searchDocuments(rawFilter) {\n    if (!rawFilter) {\n      locals.searchResults = []\n      return\n    }\n\n    const searchParts = [`a:${params.parentEditableDocument.a[0]}`]\n\n    const queryLimiting = this.queryLimit\n    if (queryLimiting) {\n      searchParts.push(queryLimiting)\n    }\n\n    if (rawFilter !== '') {\n      const filter = rawFilter.trim()\n\n      // if (!this.keyAsQueryString) {\n      //   filter.split(/\\s/).map(part => searchParts.push(part + '*') )\n      // } else {\n      //   searchParts.push(this.keyAsQueryString + filter)\n      // }\n\n      searchParts.push(this.combineRawFilterWithPressedKey(filter))\n    }\n\n\n    const fullSearch = searchParts.join(' AND ')\n    console.log(`${layout.data.name} [search]:`, fullSearch)\n\n    locals.searchResults = await Aeppic.find(fullSearch, {\n      size: 5,\n      searchAllFields: true\n    })\n  }\n\n  combineRawFilterWithPressedKey(rawFilter) {\n    if (params.key === '@') {\n      return `(f.id:d2ac3563-3c3f-4f02-b923-9b67abf98d10 OR f.id:f8fd3176-4995-455f-a8a8-d2742a836816) data.name:*${rawFilter}*`\n    }\n\n    if (params.key === '/') {\n      return `id:${rawFilter}`\n    }\n\n    return rawFilter\n  }\n\n  // get keyAsQueryString() {\n  //   switch(params.key) {\n  //     case '@':\n  //       return 'f.id:d2ac3563-3c3f-4f02-b923-9b67abf98d10 data.name:'\n  //     case '/':\n  //       return 'id:'\n  //   }\n  //   return ''\n  // }\n\n  get queryLimit() {\n    const limitParts = []\n\n    if (params.ancestorSearchLimit) {\n      if (params.parentEditableDocument.a.length < params.ancestorSearchLimit) {\n        console.error('ancestorSearchLimit is out of bounds: limit is greater than params.parentEditableDocument ancestors')\n      } else {\n        limitParts.push(`a:${params.parentEditableDocument.a[params.parentEditableDocument.a.length - params.ancestorSearchLimit]}`)\n      }\n    }\n\n    if (params.searchFormId) {\n      limitParts.push(`f.id:${params.searchFormId}`)\n    }\n\n    return limitParts.join(' AND ')\n  }\n}"},"locks":[],"created":{"at":"2017-10-26T15:55:20+02:00","by":"","from":"","client":"3f45d2c1-8a22-4885-a94f-9aa8f8cba827"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481255,"ct":1621428481255,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"88ba7695ea6666fa","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2022-08-24T12:20:17+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1754993565253,"data":{"applies":"","controller":"class FileControl {\n  async init() {\n    this.fileExtToMimeTypeMap = {\n      md: 'text/markdown',\n      markdown: 'text/markdown',\n      mp4: 'video/mp4',\n      mp3: 'audio/mp3',\n      svg: 'image/svg+xml',\n      jpg: 'image/jpeg',\n      png: 'image/png',\n      gif: 'image/gif',\n      yaml: 'text/yaml',\n      yml: 'text/yaml',\n      csv: 'text/csv',\n      avi: 'video/x-msvideo',\n      mks: 'video/x-matroska',\n      mkv: 'video/x-matroska',\n      mov: 'video/quicktime',\n      doc: 'application/msword',\n      docm: 'application/vnd.ms-word.document.macroenabled.12',\n      docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n      dot: 'application/msword',\n      dotm: 'application/vnd.ms-word.template.macroenabled.12',\n      dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n      xla: 'application/vnd.ms-excel',\n      xlam: 'application/vnd.ms-excel.addin.macroenabled.12',\n      xlc: 'application/vnd.ms-excel',\n      xlf: 'application/x-xliff+xml',\n      xlm: 'application/vnd.ms-excel',\n      xls: 'application/vnd.ms-excel',\n      xlsb: 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n      xlsm: 'application/vnd.ms-excel.sheet.macroenabled.12',\n      xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n      xlt: 'application/vnd.ms-excel',\n      xltm: 'application/vnd.ms-excel.template.macroenabled.12',\n      xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n      xlw: 'application/vnd.ms-excel',\n      odc: 'application/vnd.oasis.opendocument.chart',\n      otc: 'application/vnd.oasis.opendocument.chart-template',\n      odb: 'application/vnd.oasis.opendocument.database',\n      odf: 'application/vnd.oasis.opendocument.formula',\n      odft: 'application/vnd.oasis.opendocument.formula-template',\n      odg: 'application/vnd.oasis.opendocument.graphics',\n      otg: 'application/vnd.oasis.opendocument.graphics-template',\n      odi: 'application/vnd.oasis.opendocument.image',\n      oti: 'application/vnd.oasis.opendocument.image-template',\n      odp: 'application/vnd.oasis.opendocument.presentation',\n      otp: 'application/vnd.oasis.opendocument.presentation-template',\n      ods: 'application/vnd.oasis.opendocument.spreadsheet',\n      ots: 'application/vnd.oasis.opendocument.spreadsheet-template',\n      odt: 'application/vnd.oasis.opendocument.text',\n      otm: 'application/vnd.oasis.opendocument.text-master',\n      ott: 'application/vnd.oasis.opendocument.text-template',\n      oth: 'application/vnd.oasis.opendocument.text-web',\n      ppt: 'application/mspowerpoint',\n      pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n      pot: 'application/mspowerpoint',\n      potx: 'application/vnd.openxmlformats-officedocument.presentationml.template',\n      pps: 'application/mspowerpoint',\n      ppsx: 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n      ppa: 'application/mspowerpoint',\n      ppam: 'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n      pptm: 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n      ppsm: 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',\n      potm: 'application/vnd.ms-powerpoint.template.macroEnabled.12',\n      pdf: 'application/pdf',\n      heic: 'image/heic',\n    }\n\n    locals.dragHover = false\n\n    this.dropHandler = (event) => this.drop(event)\n    this.selectedHandler = (event) => this.selected(event)\n    this.pasteHandler = (event) => this.paste(event)\n\n    $on('drop', this.dropHandler)\n    $on('input', this.selectedHandler)\n    $on('paste', this.pasteHandler)\n\n    if (params.document && params.document.v === 'initial') {\n      this.canEdit = true\n    } else {\n      const canEdit = await Aeppic.canEdit(params.document)\n      this.canEdit = Aeppic.Account && Aeppic.Account.data.isGroupAccount === false && canEdit === true\n    }\n\n    locals.canEdit = this.canEdit\n  }\n\n  onDragOver(e) {\n    locals.dragHover = true\n\n    const dataTransfer = e.dataTransfer\n    dataTransfer.dropEffect = 'copy'\n  }\n\n  announceNewDocuments(documents, directories) {\n    const documentIds = Array.isArray(documents) ? documents : [documents]\n    const directoryIds = Array.isArray(directories) ? directories : [directories]\n\n    const added = {}\n\n    if (documentIds && documentIds[0]) {\n      added.documentIds = documentIds\n    }\n\n    if (directoryIds && directoryIds[0]) {\n      added.directoryIds = directoryIds\n    }\n\n    $emit('added', added)\n  }\n\n  get documentToAddTo() {\n    if (!params.document) {\n      console.error('need param document')\n      return null\n    }\n\n    return params.document\n  }\n\n  newDocumentsParent(overwrittenParentId) {\n    return overwrittenParentId || params.parentId || this.documentToAddTo.id\n  }\n\n  async newFileDocument(overwrittenParent) {\n    if (!params.fieldToAddTo) {\n      if (!params.fileFormId || !params.fileFormField) {\n        console.error('no fieldToAddTo requires fileFormId and fileFormField: trying to add a new child of a parent')\n        return {}\n      }\n\n      const doc = await Aeppic.new(params.fileFormId, this.newDocumentsParent(overwrittenParent))\n      const formOfFileDocument = await Aeppic.getFormForDocument(doc)\n      const fieldInfo = formOfFileDocument.getField(params.fileFormField)\n\n      return {\n        fileDocument: doc,\n        fieldInfo,\n      }\n    }\n\n    const form = await Aeppic.getFormForDocument(this.documentToAddTo)\n\n    const fieldInfo = form.getField(params.fieldToAddTo)\n\n    if (fieldInfo.subType === 'ref') {\n      if (!params.fileFormId || !params.fileFormField) {\n        console.error(\n          'fieldToAddTo field requires fileFormId and fileFormField: trying to add new document of some parent as reference'\n        )\n        return {}\n      }\n\n      // case: params.fieldToAddTo given and is a ref field -> add as ref\n      const doc = await Aeppic.new(params.fileFormId, this.newDocumentsParent(overwrittenParent))\n      const docForm = await Aeppic.getFormForDocument(doc)\n      const newDocumentFieldInfo = docForm.getField(params.fileFormField)\n\n      this.documentToAddTo.addReference(params.fieldToAddTo, doc)\n\n      return {\n        fileDocument: doc,\n        fieldInfo: newDocumentFieldInfo,\n      }\n    }\n\n    return {\n      fileDocument: this.documentToAddTo,\n      fieldInfo,\n    }\n  }\n\n  async newDirectoryDocument(overwrittenParent) {\n    return Aeppic.new(params.directoryFormId, this.newDocumentsParent(overwrittenParent))\n  }\n\n  async selected(event) {\n    this.resetErrorMessage()\n\n    if (!this.canEdit) {\n      return\n    }\n\n    const fileList = event.target.files\n\n    if (!fileList.length) {\n      return\n    }\n\n    const files = []\n    const useGetFile = fileList instanceof DataTransferItemList\n\n    for (let i = 0; i < fileList.length; i++) {\n      if (useGetFile) {\n        files.push(fileList[i].getAsFile())\n      } else {\n        files.push(fileList.item(i))\n      }\n    }\n    // OLD:\n    // files.push(fileList[0].getAsFile())\n    // files.push(fileList.item(0))\n\n    const filePromises = []\n    \n    // if 'image/*' is allowed, allow all images. else allow only 'image/png'\n    const fileTypesToEnforece = (params.enforceTypes && params.types) ? params.types.split(',').map(type => type.replace('/*', '').split('/', 1)).flat().filter(Boolean) : []\n\n    for (const file of files) {\n      const filePromise = new Promise(async (resolve) => {\n        if (fileTypesToEnforece.length && file.type) {\n          if (fileTypesToEnforece.some(type => file.type.startsWith(type)) === false) {\n            console.error('Invalid file type', file, fileTypesToEnforece)\n\n            this.feedbackUserInvalidFile(file)\n\n            resolve(null)\n            return\n          }\n        }\n\n        const { fileDocument, fieldInfo } = await this.newFileDocument()\n\n        const field = Object.assign({}, fieldInfo.defaultValue)\n        field.name = file.name\n        field.type = file.type\n        field.size = file.size\n        const dateString = Aeppic.DateTime.fromMillis(file.lastModified).toJSON()\n        field.fileInfo.created = dateString\n        field.fileInfo.modified = dateString\n\n        this._setFileDocumentName(fileDocument, file.name)\n\n        fileDocument.data[fieldInfo.name] = field\n\n        fileDocument.setFile(fieldInfo.name, file)\n\n        await this._saveOrCommitNewDocument(fieldInfo, fileDocument)\n\n        resolve(fileDocument)\n      })\n\n      filePromises.push(filePromise)\n    }\n\n    const createdFiles = (await Promise.all(filePromises)).filter(Boolean)\n    const createdFileIds = createdFiles.map((d) => d.id)\n\n    this.announceNewDocuments(createdFileIds)\n\n    if ($refs.input) {\n      $refs.input.value = ''\n    }\n  }\n\n  async _saveOrCommitNewDocument(fieldInfo, newDocument) {\n    params.debug &&\n      console.log('_saveOrCommitNewDocument', 'fieldInfo', fieldInfo, 'newDocument', newDocument, 'params', params)\n\n    const documentToAddToForm = await Aeppic.getFormForDocument(this.documentToAddTo)\n\n    const documentToAddToFieldInfo =\n      documentToAddToForm.hasField(params.fieldToAddTo) && documentToAddToForm.getField(params.fieldToAddTo)\n\n    if (documentToAddToFieldInfo.subType === 'ref' || params.saveNewDocuments) {\n      params.debug && console.log('_saveOrCommitNewDocument', 'save')\n      Aeppic.save(newDocument)\n    } else {\n      params.debug && console.log('_saveOrCommitNewDocument', 'commit')\n      Aeppic.commit(newDocument)\n    }\n  }\n\n  async drop(event) {\n    this.resetErrorMessage()\n\n    locals.dragHover = false\n\n    if (!this.canEdit) {\n      return\n    }\n\n    const fileList = event.dataTransfer.items\n\n    if (!fileList.length) {\n      return\n    }\n\n    const supportsWebkitGetAsEntry = fileList.length && fileList[0].webkitGetAsEntry\n    const files = []\n    const directories = []\n\n    for (const fileListItem of fileList) {\n      if (supportsWebkitGetAsEntry) {\n        const fileSystemEntry = fileListItem.webkitGetAsEntry()\n        fileSystemEntry.type = fileListItem.type\n\n        if (fileSystemEntry.isFile) {\n          files.push(fileSystemEntry)\n        } else {\n          directories.push(fileSystemEntry)\n        }\n      } else {\n        // TODO\n        // files.push(fileListItem.item(0))\n      }\n    }\n\n    params.debug && console.log('drop', files, directories)\n    const addedDocumentIds = await this.addFiles(files)\n    const addedDirectoriesAndTheirFiles = await this.addDirectories(directories)\n\n    const allFileIds = addedDocumentIds.concat(addedDirectoriesAndTheirFiles.fileIds)\n    const allDirectoryIds = addedDirectoriesAndTheirFiles.directoryIds\n\n    this.announceNewDocuments(allFileIds, allDirectoryIds)\n  }\n\n  async pasteFromClipboard() {\n    if (!this.canEdit) {\n      return\n    }\n\n    const clipboardContents = await packages.window.navigator.clipboard.read()\n    console.log(clipboardContents)\n\n    const files = []\n\n\n    for (const item of clipboardContents) {\n      // only add the most valuable file type and only that one item\n\n      const hasImageIndex = item.types.findIndex(type => type.startsWith('image/'))\n      const hasApplicationIndex = item.types.findIndex(type => type.startsWith('application/'))\n      const hasTextIndex = item.types.findIndex(type => type === 'text/plain')\n      \n      const fileInfo = {\n        fileName: '',\n        type: null,\n      }\n\n      if (hasImageIndex >= 0) {\n        fileInfo.type = item.types[hasImageIndex]\n        fileInfo.fileName = `Bild ${Aeppic.DateTime.local().toLocaleString(Aeppic.DateTime.DATETIME_FULL)}.${fileInfo.type.split('/')[1]}`\n      } else if (hasApplicationIndex >= 0) {\n        fileInfo.type = item.types[hasApplicationIndex]\n        fileInfo.fileName = `Datei ${Aeppic.DateTime.local().toLocaleString(Aeppic.DateTime.DATETIME_FULL)}.${fileInfo.type.split('/')[1]}`\n      } else if (hasTextIndex >= 0) {\n        fileInfo.type = item.types[hasTextIndex]\n        fileInfo.fileName = `Text ${Aeppic.DateTime.local().toLocaleString(Aeppic.DateTime.DATETIME_FULL)}.txt`\n      }\n\n      if (fileInfo.type !== null) {\n        const blob = await item.getType(fileInfo.type)\n        // Create a File from Blob if possible, otherwise fallback to Blob\n        const file = new File([blob], fileInfo.fileName, { type: blob.type })\n        files.push(file)\n      }\n    }\n\n    if (!files.length) {\n      return\n    }\n\n    const addedDocumentIds = await this.addFiles(files, null, { useGetFile: false })\n\n    this.announceNewDocuments(addedDocumentIds)\n  }\n\n  async paste(event) {\n    this.resetErrorMessage()\n    \n    if (!this.canEdit) {\n      return\n    }\n\n    const fileList = event.clipboardData.items\n    if (!fileList.length) {\n      return\n    }\n\n    const files = []\n    for (const fileListItem of fileList) {\n      if (fileListItem.kind === 'file') {\n        files.push(fileListItem)\n      }\n    }\n\n    if (!files.length) {\n      return\n    }\n\n    event.preventDefault()\n\n    const addedDocumentIds = await this.addFiles(files, null, { useGetFile: true })\n\n    this.announceNewDocuments(addedDocumentIds)\n  }\n\n  async addFiles(files, overwriteParentId, options) {\n    const optionsWithDefault = options || {}\n\n    const promises = []\n    for (const file of files) {\n      const promise = new Promise(async (resolve) => {\n        const fileBinary = await this.readFile(file, { useGetFile: optionsWithDefault.useGetFile })\n\n        const { fileDocument, fieldInfo } = await this.newFileDocument(overwriteParentId)\n\n        this._setFileDocumentName(fileDocument, fileBinary.name)\n        // fileDocument.data.name = fileBinary.name\n\n        const fileType = fileBinary.type || file.type || this._guessFileType(fileBinary.name)\n\n        params.debug && console.log('addFiles (file, fileType)', file, fileType)\n\n        // const dateString = Aeppic.DateTime.fromMillis(fileObject.lastModified).toJSON()\n        // fileDocument.data.datei.fileInfo.created = dateString\n        // fileDocument.data.datei.fileInfo.modified = dateString\n\n        fileDocument.setFile(fieldInfo.name, fileBinary, {\n          type: fileType,\n        })\n\n        await this._saveOrCommitNewDocument(fieldInfo, fileDocument)\n\n        params.debug && console.log('addFiles', fileDocument)\n        resolve(fileDocument.id)\n      })\n\n      promises.push(promise)\n    }\n    return Promise.all(promises)\n  }\n\n  async readFile(fileListItem, options) {\n    const { useGetFile } = options\n\n    // FIXME: File not exposed\n    if (fileListItem instanceof File) {\n    // if (!('getAsFile' in fileListItem) && !('file' in fileListItem)) {\n      return fileListItem\n    }\n\n    if (useGetFile) {\n      return fileListItem.getAsFile()\n    }\n\n    // if (useGetType) {\n    //   // useGetType expectes 'text/plain', 'image/png', etc\n    //   const blob = fileListItem.getType()\n    //   // Create a File from Blob if possible, otherwise fallback to Blob\n    //   const fileName = `clipboard-${Date.now()}.${fileListItem.split('/')[1]}`\n    //   return new File([blob], fileName, { type: fileListItem.type })\n    // }\n\n    const promise = new Promise((resolve) => {\n      fileListItem.file((fileObject) => {\n        resolve(fileObject)\n      })\n    })\n\n    return promise\n  }\n\n  _setFileDocumentName(fileDocument, newName) {\n    // const documentIsDocumentToAddTo = this.documentToAddTo.id === fileDocument.id\n\n    // if (documentIsDocumentToAddTo || !params.fileNameToField) {\n    if (!params.fileNameToField) {\n      return fileDocument\n    }\n\n    fileDocument.data[params.fileNameToField.replace(/\\[|\\]/g, '')] = newName\n\n    return fileDocument\n  }\n\n  _guessFileType(fileBinaryName) {\n    if (!fileBinaryName) {\n      return ''\n    }\n\n    const parts = fileBinaryName.split('.')\n    if (parts.length < 2) {\n      return ''\n    }\n\n    const ext = parts.slice(-1)[0]\n\n    return this.fileExtToMimeTypeMap[ext] || ''\n  }\n\n  async addDirectories(directories, overwriteParentId) {\n    const promises = []\n\n    for (const directory of directories) {\n      let directoryDocument\n\n      if (!params.flatten) {\n        directoryDocument = await this.newDirectoryDocument(overwriteParentId)\n        directoryDocument.data.name = directory.name\n\n        // FIXME: once children of committed parents can be added, use the saveOrCommit function\n        // this._saveOrCommitNewDocument(fieldInfo, fileDocument)\n        Aeppic.save(directoryDocument)\n      }\n\n      params.debug && console.log('addDir', directoryDocument)\n\n      const dirReader = directory.createReader()\n\n      const readBatchFn = async () => {\n        const promise = new Promise((resolve) => {\n          dirReader.readEntries(\n            async (entries) => {\n              const files = []\n              const directories = []\n\n              for (const entry of entries) {\n                if (entry.isFile) {\n                  files.push(entry)\n                } else {\n                  directories.push(entry)\n                }\n              }\n\n              const overwrittenParentId = params.flatten ? null : directoryDocument.id\n\n              const fileIdsInDirectory = await this.addFiles(files, overwrittenParentId)\n\n              const { directoryIds, fileIds } = await this.addDirectories(directories, overwrittenParentId)\n\n              const fileIdsAndLowerIds = fileIdsInDirectory.concat(fileIds)\n\n              if (directoryDocument) {\n                directoryIds.unshift(directoryDocument.id)\n              }\n\n              resolve({\n                fileIds: fileIdsAndLowerIds,\n                directoryIds: directoryIds,\n              })\n            },\n            (error) => console.error(error)\n          )\n        })\n\n        promises.push(promise)\n\n        return promise\n      }\n\n      let readNextBatch = true\n\n      while (readNextBatch) {\n        const { fileIds, directoryIds } = await readBatchFn()\n\n        if (fileIds.length < 100 && directoryIds.length < 100) {\n          readNextBatch = false\n        }\n      }\n    }\n\n    const promisesResult = await Promise.all(promises)\n\n    const result = {\n      directoryIds: [],\n      fileIds: [],\n    }\n\n    for (const promise of promisesResult) {\n      result.directoryIds = result.directoryIds.concat(promise.directoryIds)\n      result.fileIds = result.fileIds.concat(promise.fileIds)\n    }\n\n    return result\n  }\n\n  feedbackUserInvalidFile(file) {\n    locals.error = `Datei-Typ nicht kompatibel: ${file?.name}`\n  }\n\n  resetErrorMessage() {\n    locals.error = ''\n  }\n\n  // imageLoaded() {\n  //   const height = $refs.hiddenImage && $refs.hiddenImage.naturalHeight\n  //   const width = $refs.hiddenImage && $refs.hiddenImage.naturalWidth\n  //   if (!$refs.hiddenImage || !height || !width) {\n  //     return\n  //   }\n\n  //   const field = getField()\n  //   if (field.mediaInfo) {\n  //     field.mediaInfo.height = height\n  //     field.mediaInfo.width = width\n  //     setField(field)\n  //   }\n  // }\n}\n","css":"._CSS-file__input-container {\n  padding: 8px;\n  display: flex;\n  align-items: center;\n}\n\n._CSS-file__input-link {\n  cursor: pointer;\n  color: var(--ae-foreground-l1);\n  font-weight: bold;\n}\n\n._CSS-file__input-link:hover,_CSS-file__input-link:focus {\n  text-decoration: underline;\n}\n\n._CSS-file__description {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  flex: 1;\n}\n\n._CSS-file__drop-area {\n  border: var(--ae-border-width-2) dashed var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  /*padding: 2em 1em;*/\n  color: var(--ae-foreground-l2);\n}\n._CSS-file__drop-area._CSS-file__drop-area--readonly {\n  border: var(--ae-border-width-1) solid var(--ae-border-color);\n}\n\n@keyframes _CSS-pulse {\n  0% {\n    background-color: var(--ae-primary-100);\n  }\n  50% {\n    background-color: var(--ae-primary-200);\n  }\n  100% {\n    background-color: var(--ae-primary-100);\n  }\n}\n._CSS-file__drop-area--hover {\n  animation: _CSS-pulse 2s infinite;\n  background-color: var(--ae-primary-100);\n}\n\n._CSS-file--no-thumbnail {\n  color: var(--ae-background-500);\n  margin-right: var(--ae-size-2);\n}\n\n._CSS-preview-header {\n  display: flex;\n  justify-content: space-between;\n}\n\n._CSS-preview-header__entry {\n  display: flex;\n  align-items: center;\n  flex: 1;\n}\n\n._CSS-file-thumbnail {\n  height: 4rem;\n  width: 4rem;\n  background-size: cover;\n  background-repeat: no-repeat;\n  background-position-x: center;\n  background-color: #e2e2e2;\n  cursor: pointer;\n}\n\n\n._CSS-file__phone {\n  display: flex;\n  justify-content: center;\n}","name":"rd: ae-drop-layout","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"589885a745fec99a"}],"template":"<template v-if=\"params.showUi && locals.canEdit\">\n  <div v-if=\"params.readonly\" class=\"_CSS-file\" ref=\"container\">\n    <div class=\"_CSS-file__drop-area _CSS-file__drop-area--readonly _CSS-file__input-container bg-white dark:bg-slate-700\" @drop.prevent.stop @dragenter.prevent.stop @dragleave.prevent.stop @dragover.prevent.stop>\n      <ae-icon class=\"fa fa-file _CSS-file--no-thumbnail\"></ae-icon>\n      Keine Datei vorhanden\n    </div> \n  </div>\n  <div v-else class=\"_CSS-file @container\" ref=\"container\">\n    <ae-layout v-if=\"params.fileInputLayoutId\"\n              :layout-id=\"params.fileInputLayoutId\"\n              @selected=\"$refs.input.click()\"\n              @drop=\"controller.drop($event)\"\n    ></ae-layout>\n    <div  v-else-if=\"Aeppic.Device === 'Desktop'\"\n          class=\"w-full items-center gap-4 rounded-md\"\n          :class=\"{ 'animate-pulse ': locals.dragHover }\"\n          @drop.prevent.stop=\"controller.drop($event)\"\n          @dragenter.prevent.stop=\"locals.dragHover = true\"\n          @dragleave.prevent.stop=\"locals.dragHover = false\"\n          @dragover.prevent.stop=\"controller.onDragOver($event)\"\n    >\n      <div class=\"flex items-center gap-4\">\n        <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  @selected=\"$refs.input.click()\"\n                  ref=\"button\"\n                  param-text=\"Dateien auswählen\"\n                  param-border=\"border border-secondary-300\"\n                  :param-disabled=\"locals.dragHover\"\n        ></ae-layout> \n\n        <div class=\"flex-1 flex gap-2 items-center text-neutral-600\">\n          <ae-icon class=\"far fa-cloud-upload\" :class=\"{ 'animate-bounce': locals.dragHover }\"></ae-icon>\n          <span v-if=\"locals.dragHover\" class=\"text-sky-800\">Dateien jetzt hochladen</span>\n          <span v-else>Dateien hier ablegen </span>\n        </div>\n\n        <ae-layout class=\"@lg:hidden\"\n                    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    @selected=\"controller.pasteFromClipboard()\"\n                    ref=\"button\"\n                    param-icon=\"far fa-paste\"\n                    param-border=\"border border-secondary-300\"\n                    :param-disabled=\"locals.dragHover\"\n                    param-title=\"Zwischenablage anhängen. Aktuell werden nur Bilder und (Rein-)Text unterstützt.\"\n        ></ae-layout> \n        <ae-layout class=\"hidden @lg:block\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            @selected=\"controller.pasteFromClipboard()\"\n            ref=\"button\"\n            param-icon=\"far fa-paste\"\n            param-text=\"Aus Zwischenablage\"\n            param-border=\"border border-secondary-300\"\n            :param-disabled=\"locals.dragHover\"\n            param-title=\"Zwischenablage anhängen. Aktuell werden nur Bilder und (Rein-)Text unterstützt.\"\n          ></ae-layout> \n\n          <!-- oder -->\n          <!-- <a v-if=\"!params.autoOpen\" class=\"_CSS-file__input-link\" @click.stop=\"$refs.input.click()\">\n            <span>auswählen</span>\n          </a>\n          <a v-else class=\"_CSS-file__input-link\" @click.stop=\"$refs.input.click()\" @focus=\"$refs.input.click()\" tabindex=\"-1\">\n            <span>auswählen</span>\n          </a> -->\n        <!-- </span> -->\n      </div>\n    </div> \n    <div v-else class=\"w-full\">\n        <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  @selected=\"$refs.input.click()\"\n                  ref=\"button\"\n                  param-icon=\"far fa-cloud-upload\"\n                  param-text=\"Dateien auswählen\"\n                  param-classes=\"w-full\"\n                  param-border=\"border border-secondary-300\"\n                  :param-disabled=\"locals.dragHover\"\n                  class=\"w-full\"\n        ></ae-layout> \n    </div>\n\n    <div v-if=\"locals.error\" class=\"text-red-500 p-4\">\n      {{ locals.error }}\n    </div>\n  </div>\n  <!-- <input @change=\"controller.selected($event)\" ref=\"input\" type=\"file\" style=\"display: none;\"> -->\n  <input @change=\"controller.selected($event)\" ref=\"input\" type=\"file\" style=\"display: none;\" multiple :accept=\"params.types || ''\" :data-test=\"params.fieldName + '_input'\">\n  <!-- <img ref=\"hiddenImage\" :src=\"field.dataUrl\" @load=\"controller.imageLoaded()\" style=\"display: none;\"> -->\n</template>\n\n\n<!-- TODO: add param unzip -->\n<!-- <ae-layout layout-id=\"e5ef33a8-2f47-44b0-8cda-6e12be801e28\"></ae-layout> -->"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"8ae0359f-4d25-4d17-baf0-f69c006bd4ad","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-12-12T15:08:09+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"8ee6c8ce27dee64a"},"stamps":[],"t":1765552089517,"v":"d2453d49dba73131"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2022-05-09T14:56:58+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1697463145314,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      CommandGroup: 'command-group-form',\n      Command: 'command-form'\n    }\n\n    locals.forms = this.FORMS\n\n    locals.executionError = null\n    locals.executionDocument = null\n    locals.executionDialog = null\n    locals.done = false\n\n    locals.document = null\n    locals.commands = []\n    locals.activeCommandGroup = null\n    locals.activeCommandGroupCommands = []\n    locals.possiblyVisibleCommands = []\n\n    const showHandler = async (event) => {\n      let commandRef = event\n\n      if (typeof event === 'object' ) {\n        await this.initialize(event.document, [event.command])\n\n        commandRef = event.command\n      }\n\n      this.showExecutionDialog({ command: commandRef })\n    }\n\n    $on('force-show', showHandler)\n    $on('show', showHandler)\n\n    watchParam('document', async (newDocument) => await this.initialize(newDocument, params.commands))\n    watchParam('commands', async (newCommands) => await this.initialize(params.document, newCommands))\n\n    await this.initialize(params.document, params.commands)\n  }\n\n  updateVisibility() {\n    if (!locals.done) {\n      showComponent()\n      return\n    }\n\n    const hasCommands = locals.commands && locals.commands.length > 0\n    const hasVisibleCommands = locals.possiblyVisibleCommands && locals.possiblyVisibleCommands.length > 0\n\n    if (hasCommands && hasVisibleCommands) {\n      showComponent()\n    } else {\n      hideComponent()\n    }\n  }\n\n  async initialize(document, commands) {\n    // console.log('initialize', document.data.name, document.id)\n    locals.document = document\n\n    this.deletionWatcher?.stop()\n\n    this.deletionWatcher = Aeppic.watch(document, (doc, reason) => {\n      if (reason.deleted) {\n        Aeppic.navigateTo(document.p)\n      }\n    })\n\n    locals.commands = await this._getCommands(document, commands)\n\n    const commandsWithoutGroups = await Aeppic.getAll(\n      locals.commands.flatMap(commandResult => {\n        const { command } = commandResult\n\n        if (command.f.id === this.FORMS.CommandGroup) {\n          return command.data.commands\n        }\n\n        return [command.id]\n      })\n    )\n\n    locals.possiblyVisibleCommands = (\n      await this._filterVisibleCommands(commandsWithoutGroups, locals.document)\n    ).filter(c => c && c.disabled !== true)\n\n    locals.done = true\n    this.updateVisibility()\n  }\n\n  async _form() {\n    if (!locals.document) {\n      return null\n    }\n\n    return Aeppic.getForm(locals.document.f.id)\n  }\n\n  async _getCommands(document, commandsParam) {\n    const commands = []\n\n    if (!document) {\n      return commands\n    }\n    \n    if (commandsParam) {\n      commands.push(...commandsParam)\n    } else {\n      const form = await this._form()\n\n      if (form && form.data.commands && form.data.commands.length) {\n        commands.push(...form.data.commands)\n      }\n    }\n\n    const ensuredCommands = await Aeppic.getAll(commands)\n\n    return this._filterVisibleCommands(ensuredCommands, document)\n  }\n\n  async _filterVisibleCommands(commands, document) {\n    const visibleCommands = await Promise.all(\n      commands.map(async (command) => {\n        if (command.f.id === this.FORMS.CommandGroup) {\n          if (!command.data.commands.length) {\n            return null\n          }\n\n          if (!command.data.name.startsWith('rd:')) {\n            return null\n          }\n \n          return { command }\n        }\n\n        if (!command.a_forms.includes(this.FORMS.CommandGroup)) {\n          if (!command.data.name.startsWith('rd:')) {\n            return null\n          }\n        }\n\n        if (!(await Aeppic.Commands.isVisible(command, document))) {\n          return null\n        }\n\n        // hasRight check\n\n        const hasRight = await Aeppic.Commands.hasRightToExecute(command, document) \n        // console.log(command.data.name, { hasRight, command })\n\n        if (!hasRight) {\n          console.warn(`Current account does not have rights to execute ${command.data.name}`, { command, document })\n          return { command, disabled: true }\n        }\n\n        return { command }\n      })\n    )\n\n    // console.log({visibleCommands}) \n\n    return visibleCommands.filter(c => c != null)\n  }\n\n  \n\n  async showGroup(group) {\n    locals.activeCommandGroup = group\n\n    const commands = await Aeppic.getAll(locals.activeCommandGroup.data.commands)\n    locals.activeCommandGroupCommands = await this._filterVisibleCommands(commands, locals.document)\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $emit('show')\n\n    const fakeEvent = {\n      target: $refs['commandGroup_' + group.id][0].$el\n    }\n\n    $refs.commands.show(fakeEvent)\n  }\n\n  close() {\n    // console.log('close')\n    locals.activeGroupId = null\n\n    $emit('close')\n \n    $refs.commands?.close()\n\n    $refs.commandsPopup && $refs.commandsPopup.$emit('close')\n  }\n\n  async executeCommand(args) {\n    locals.executionError = null\n    \n    const { command: commandRef, index, ref } = args\n\n    // TODO: support non-dialog mode\n    const command = await Aeppic.get(commandRef)\n\n    if (!command) { \n      throw new Error('Cannot resolve command')\n    }\n\n    if (!locals.document) {\n      throw new Error('Cannot resolve document')\n    }\n\n    const commandResult = await Aeppic.Commands.execute(command, locals.document, { Account: Aeppic.Account, ProfilePage: Aeppic.ProfilePage })\n\n    if (!commandResult.ok) {\n      console.error(`Error executing command`, { command, commandResult })\n      this._showError(commandResult.error, ref)\n\n      return\n    }\n    \n    const document = commandResult.value \n    const showResultInDialog = command.data.navigation === 'dialog'\n    \n    const targetIsDocument = locals.document.id === document.id\n\n    if (command.data.navigation === 'no') {\n      this.close()\n\n      return\n    }\n\n    if (!showResultInDialog && !targetIsDocument) {\n      this.close()\n\n      Aeppic.drillInto(document, { focus: true })\n\n      return\n    }\n\n    this.showExecutionDialog({ command })\n  }\n\n\n  async showExecutionDialog(args) { \n    const { command: commandRef, index, ref } = args\n\n    // console.log('showExecutionDialog', {commandRef, alreadyGeneratedDocument: locals.alreadyGeneratedDocument })\n\n    let document = locals.alreadyGeneratedDocument || null\n\n    // TODO: support non-dialog mode\n    const command = await Aeppic.get(commandRef)\n\n    if (!command) {\n      return\n    } \n\n    if (!document) {\n      if (!locals.document) {\n        throw new Error('Cannot resolve document')\n      }\n\n      const commandResult = await Aeppic.Commands.execute(command, locals.document, { Account: Aeppic.Account, ProfilePage: Aeppic.ProfilePage })\n\n      if (!commandResult.ok) {\n        console.error(`Error executing command`, { command, commandResult })\n        this._showError(commandResult.error, ref)\n\n        return\n      }\n      \n      document = commandResult.value\n    }\n\n    if (command.data.navigation !== 'dialog') {\n      // console.log('not a navigation')\n      document.hidden = false\n\n      Aeppic.save(document)\n      Aeppic.drillInto(document, { focus: true })\n\n      this.close()\n      \n      return\n    }\n\n    const dialog = await Aeppic.get(command.data.navigationTarget)\n\n    if (!dialog) {\n      console.error('could not find dialog', dialog)\n      return\n    }\n\n    $refs.commands?.close()\n\n    $refs.executionDialog.$emit('show', { dialog, command, document })\n  }\n\n  _showError(errorMessage, ref) {\n    locals.executionError = errorMessage\n\n    $refs.error.show({\n      target: ref\n    })\n  }\n\n  destroy() {\n    this.close()\n  }\n} ","css":"._CSS-commands {\n  display: grid;\n  grid-gap: 2px;\n  grid-auto-columns: auto;\n  grid-auto-flow:column;\n}\n\n/* DIALOG */\n\n._CSS-dialog__header {\n  flex: 1;\n  display: flex;\n  justify-content: center;\n}\n\n._CSS-dialog__commands {\n  flex: 1;\n  display: flex;\n  justify-content: flex-end;\n}\n\n\n._CSS ._CSS-button {\n  display: flex;\n}","name":"rd: Command Buttons with Dialog","packages":[],"template":"<div class=\"flex gap-2\" v-if=\"locals.commands.length && locals.possiblyVisibleCommands.length > 0\">\n  <div v-for=\"(entry , index) of locals.commands\" ref=\"buttons\">\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              :param-icon=\"entry.command.data.namedIcon || 'far fa-terminal'\"\n              :param-text=\"entry.command.data.label || entry.command.data.name\"\n              @selected=\"entry.command.f.id === locals.forms.Command ?  controller.showExecutionDialog({ command: entry.command, ref: $refs.buttons[index] }) :  controller.showGroup(entry.command)\" \n              :param-disabled=\"entry.disabled\"\n              :param-primary=\"true\"\n              :ref=\"'commandGroup_' + entry.command.id\"\n              :data-test=\"'command-' + entry.command.id\"\n      ></ae-layout> \n  </div>\n</div>\n<ae-layout  v-else-if=\"!locals.done\"\n              layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              param-icon=\"far fa-terminal\"\n              :param-text=\"params.loadingText || '...'\"\n              :param-primary=\"true\"\n              :param-disabled=\"true\"\n              param-title=\"Lade verfügbare Aktionen...\" \n></ae-layout> \n\n<!-- {{locals.alreadyGeneratedDocument}}  -->\n<ae-popup ref=\"commands\" placement=\"bottom\" @xclose=\"locals.alreadyGeneratedDocument = null\">\n  <div class=\"flex flex-col\">\n    <div v-if=\"!locals.activeCommandGroupCommands.length\">\n      Keine Commands gefunden\n    </div> \n    <div v-for=\"(entry, index) of locals.activeCommandGroupCommands\" ref=\"commandBox\">\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                :param-icon-design-document-id=\"entry.command.id\"\n                :param-document-id=\"entry.command.id\"\n                class=\"w-full\"\n                param-classes=\"w-full rounded-none\"\n                @selected=\"controller.executeCommand({ command: entry.command, index, ref: $refs.commandBox[index] })\"\n                :param-disabled=\"entry.disabled\"\n                :param-title=\"entry.disabled && 'Keine Berechtigung'\"\n                :data-test=\"'command-' + locals.activeCommandGroup?.id + '_command-button-' + entry.command.id\"\n      ></ae-layout>\n    </div>\n  </div>\n</ae-popup>\n\n<ae-popup ref=\"error\">\n  <div v-if=\"locals.executionError\" class=\"flex gap-2 p-2\">\n    <ae-icon class=\"far fa-exclamation-circle text-red-500\"></ae-icon>\n    {{locals.executionError}}\n  </div>\n</ae-popup>\n\n<ae-layout  layout-id=\"066b41f7-036f-422c-9afc-4c3015ddc4b4\"\n            v-if=\"locals.activeCommandGroup\"\n            :param-documents=\"locals.activeCommandGroupCommands\"\n            ref=\"commandsPopup\"\n            param-list-id=\"71bdf479-64dd-474d-b6ce-44e65b4ce1d9\"\n            @selected=\"controller.showExecutionDialog({ command: $event, ref: $refs.commandsPopup.$el })\"\n></ae-layout>\n\n<!-- re-emit close to allow layout user to react to dialog completion -->\n<ae-layout  layout-id=\"82e47b0a-5a52-4480-97d1-6cf0318cc940\" \n            ref=\"executionDialog\"\n            @close=\"$emit('close')\"\n></ae-layout>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"262e95e6-f1f8-477c-834b-89d533027e1e","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-06-15T12:29:13+00:00","backedBy":"","by":"b7485498-f1f3-4ab1-87d1-9cb63ea890c8","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"c8374845a4e3d875"},"stamps":[],"t":1781526553169,"v":"4574138a55b7eefd"},{"id":"14753f85-5c12-42bb-b763-590b583f68cc","v":"022d58a8e35dcd55","previous":{"v":"fed3db57aed6c6b0"},"p":"dbee6e16-d63a-493c-bba6-505f79918f9f","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"rd: Datei as Button Form Layout","applies":"","packages":[],"template":"<ae-control name=\"file\" :document=\"params.document\" field-name=\"datei\" :params=\"locals.params\"></ae-control>","css":"","controller":"class Controller {\n  async init() {\n    locals.params = { ...params.form.getFieldControlParams('datei'), fileInputLayoutId: '4c961592-6309-4320-afa9-46ba4baa6c71' }\n  }\n}   "},"locks":[],"created":{"at":"2022-07-04T12:47:46+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2024-01-08T14:52:04+01:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1704721924595,"ct":1656938866182,"a_depth":4,"a":["apps","45ada186-e9fd-451d-9dbd-2defc0b4f86f","4ec6a0e5-cf2d-4095-9b70-2e31a64d5679","dbee6e16-d63a-493c-bba6-505f79918f9f"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"56a218a1-cac0-4566-92be-ba91a4569c11","v":"4da16bc49c890e22","cloneOf":{"id":"14753f85-5c12-42bb-b763-590b583f68cc","v":"022d58a8e35dcd55","text":"rd: Datei as Button Form Layout"},"originalCloneOf":{"id":"14753f85-5c12-42bb-b763-590b583f68cc","v":"022d58a8e35dcd55","text":"rd: Datei as Button Form Layout"},"previous":{"v":"initial"},"p":"3f5de83a-40e4-4662-b436-3ed4879edb10","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"rd: Datei as Button Form Layout","applies":"","packages":[],"template":"<ae-control name=\"file\" :document=\"params.document\" field-name=\"stallkarte\" :params=\"locals.params\"></ae-control>","css":"","controller":"class Controller {\n  async init() {\n    locals.params = { ...params.form.getFieldControlParams('datei'), fileInputLayoutId: '4c961592-6309-4320-afa9-46ba4baa6c71' }\n  }\n}   "},"locks":[],"created":{"at":"2024-01-08T14:52:21+01:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2024-01-08T14:52:28+01:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1704721948816,"ct":1704721941511,"a_depth":4,"a":["apps","5ec4fefb-1235-484e-8d6f-4fd645bae372","75920050-07b1-4e79-9742-54abcc235e91","3f5de83a-40e4-4662-b436-3ed4879edb10"],"a_forms":["folder","application-form","folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"f1600040-cfc6-445c-b61e-6dc68663a9d9","v":"a492eec3fb03bdcb","cloneOf":{"id":"14753f85-5c12-42bb-b763-590b583f68cc","v":"6b2bc369876178e7","text":"rd: Datei as Button Form Layout"},"originalCloneOf":{"id":"14753f85-5c12-42bb-b763-590b583f68cc","v":"6b2bc369876178e7","text":"rd: Datei as Button Form Layout"},"previous":{"v":"initial"},"p":"dbee6e16-d63a-493c-bba6-505f79918f9f","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"rd: Datei as Input Field Form Layout","applies":"","packages":[],"template":"<ae-control name=\"file\" :document=\"params.document\" field-name=\"datei\" :params=\"locals.params\"></ae-control>","css":"","controller":"class Controller {\n  async init() {\n    locals.params = { ...params.form.getFieldControlParams('datei'), xfileInputLayoutId: '4c961592-6309-4320-afa9-46ba4baa6c71' }\n  }\n}   "},"locks":[],"created":{"at":"2022-07-12T14:09:16+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-07-12T14:13:51+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1657635231980,"ct":1657634956065,"a_depth":4,"a":["apps","45ada186-e9fd-451d-9dbd-2defc0b4f86f","4ec6a0e5-cf2d-4095-9b70-2e31a64d5679","dbee6e16-d63a-493c-bba6-505f79918f9f"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"782e2e58-19cb-4648-a0ad-74bdf5bfef0e","v":"0452daf66a2e1590","cloneOf":{"id":"14753f85-5c12-42bb-b763-590b583f68cc","v":"022d58a8e35dcd55","text":"rd: Datei as Button Form Layout"},"originalCloneOf":{"id":"14753f85-5c12-42bb-b763-590b583f68cc","v":"022d58a8e35dcd55","text":"rd: Datei as Button Form Layout"},"previous":{"v":"41f3a30dff0a5ff5"},"p":"ce941088-6dfa-42c2-a967-1cb0693f1d75","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"rd: Docx Template as Button Form Layout","applies":"","packages":[],"template":"<ae-control name=\"file\" :document=\"params.document\" field-name=\"template\" :params=\"locals.params\"></ae-control>","css":"","controller":"class Controller {\n  async init() {\n    locals.params = { ...params.form.getFieldControlParams('template'), fileInputLayoutId: '4c961592-6309-4320-afa9-46ba4baa6c71' }\n  }\n}   "},"locks":[],"created":{"at":"2024-04-26T13:45:04+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-04-26T13:45:28+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1714139128855,"ct":1714139104178,"a_depth":3,"a":["apps","fb62ad28-07b0-4a99-91bd-43c297656f12","ce941088-6dfa-42c2-a967-1cb0693f1d75"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"8ebd91bd-9110-4ee5-b3d8-4248d2dc696d","text":"Ref Preview","v":"0de441cb3cb76944"},"created":{"at":"2023-10-30T15:32:41+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1698679961187,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.document = null\n\n    $on('show', (event) => this.handleShow(event))\n  }\n\n  async handleShow(event) {\n    const { element, document, selectedDocument, selectedOptions } = event\n    \n    const hasAbstractDesign = await Aeppic.findOne(`p:${selectedDocument.f.id} f.id:design-form data.name:\"rd:abstract\"`)\n    if (!hasAbstractDesign) {\n      console.log('selected: no abstract design')\n      $emit('selected', selectedDocument, selectedOptions)\n      return\n    }\n \n    const referenceIsSomeWhereElse = document.a[1] !== selectedDocument.a[1]\n    console.log('ref preview', event, referenceIsSomeWhereElse)\n\n    if (referenceIsSomeWhereElse) {\n      console.log('referenceIsSomeWhereElse')\n      this.show(event)\n    } else {\n      console.log('selected')\n      $emit('selected', selectedDocument, selectedOptions)\n    }\n  }\n\n  show(event) {\n    console.log('show popup')\n    const { selectedDocument, element } = event\n\n    locals.document = selectedDocument\n    $refs.popup.show({\n      target: element\n    })\n  }\n\n  destroy() {\n    this.tippy?.destroy()\n    this.tippy = null\n  }\n}","css":"._CSS-body {\n  width: 220px;\n  min-width: 220px;\n\n  box-shadow: var(--ae-shadow); \n  padding: 0;\n\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-body__image {\n  width: 100%;\n  height: 100px;\n}\n\n._CSS-body__title {\n  padding: var(--ae-size-1);\n  font-weight: 600;\n}\n\n._CSS-body__link {\n  padding: var(--ae-size-1) 0;\n}\n\n._CSS-body__abstract {\n  padding: var(--ae-size-1);\n  width: 100%;\n}","name":"rd: Ref Preview","packages":[],"template":"<ae-popup ref=\"popup\" >\n    <div v-if=\"locals.document\" class=\"p-4 flex flex-col gap-4\">\n      <div class=\"flex justify-center\"> \n        <ae-design class=\"rounded-md overflow-hidden shrink-0 border border-neutral-100 shadow\" name=\"thumbnail\" :document=\"locals.document\"></ae-design>\n      </div>\n      <ae-design  name=\"title\" :document=\"locals.document\" param-white-space=\"normal\"></ae-design>\n      <ae-design  name=\"rd:abstract\" :document=\"locals.document\"></ae-design>\n      <div> \n\n      <ae-layout class=\"w-full\"\n                  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  @selected=\"() => { $emit('selected', locals.document); $refs.popup.close() }\"\n                  param-text=\"Anzeigen\"\n                  param-icon=\"far fa-external-link-square\"\n                  param-classes=\"w-full \"\n      ></ae-layout>\n      </div>\n    </div>\n</ae-popup>\n\n    "},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"c649767f-9798-4980-8109-79eba242917e","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-09-18T09:54:20+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"8ebd91bd-9110-4ee5-b3d8-4248d2dc696d","text":"Ref Preview","v":"0de441cb3cb76944"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"62a92c1c7c76bc7a"},"stamps":[],"t":1758189260428,"v":"f952903c3164f357"},{"id":"4c961592-6309-4320-afa9-46ba4baa6c71","v":"4721d007491bccc2","previous":{"v":"07685fa058fc58c7"},"p":"dbee6e16-d63a-493c-bba6-505f79918f9f","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"rd: Upload Button","applies":"","packages":[],"template":"<ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-file-upload\"\n            @selected=\"$emit('selected', $event)\"\n            param-text=\"Datei ersetzen\"\n            param-title=\"Datei ersetzen\"\n></ae-layout>","css":"","controller":""},"locks":[],"created":{"at":"2022-07-04T13:37:49+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-12-11T15:34:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1702308873781,"ct":1656941869169,"a_depth":4,"a":["apps","45ada186-e9fd-451d-9dbd-2defc0b4f86f","4ec6a0e5-cf2d-4095-9b70-2e31a64d5679","dbee6e16-d63a-493c-bba6-505f79918f9f"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"0e40bb7a-7f76-425a-8b07-3dbb6208d277","text":"rd:Page Document Layout","v":"ed5f0e50371f0bc2"},"created":{"at":"2025-02-14T10:36:19+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1739529379078,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this.onResizeHandler = (windowWidth) => {\n      // const titleWidth = Math.floor(windowWidth / 4)\n      // const titleWidth = 360\n\n      if (windowWidth < 640) { // xs \n        locals.editableTitleWidth = `180px`\n      } else if (windowWidth < 768) { // sm\n        locals.editableTitleWidth = `260px`\n      } else if (windowWidth < 1280) { // xl\n        locals.editableTitleWidth = `180px`\n      } else if (windowWidth < 1536) { // 2xl\n        locals.editableTitleWidth = `360px`\n      } else {\n        locals.editableTitleWidth = `500px`\n      }\n\n      // console.log({  windowWidth, titleWidth, editableTitleWidth: locals.editableTitleWidth })   \n    }\n\n    locals.editableTitleWidth = '200px'\n\n    locals.showHeaderActions = false\n    locals.showHeaderActionsList = false\n\n    locals.tab = ''\n\n    this.onResizeHandler(params.windowWidth)\n    watchParam('windowWidth', (value) => this.onResizeHandler(value))\n\n    this.handler = (clickEvent) => {\n      if (!locals.showHeaderActions) {\n        return\n      }\n\n      const clickIsInContainer = clickEvent.composedPath().find(p => p === $refs.headerActionsContainer)\n\n      if (!clickIsInContainer) {\n        this.closeHeaderActions()\n      }\n    }\n  }\n\n  openHeaderActions() {\n    if (locals.showHeaderActions) {\n      return\n    }\n\n    this._setupClick()\n\n    locals.showHeaderActions = true\n\n    Aeppic.setTimeout(() => {\n      locals.showHeaderActionsList = true\n    }, 450)\n  }\n\n\n  _setupClick() {\n    packages.window.addEventListener('click', this.handler)\n  }\n\n  _tearDownClick() {\n    packages.window.removeEventListener('click', this.handler)\n  }\n\n\n  closeHeaderActions() {\n    this._tearDownClick()\n\n    locals.showHeaderActions = false\n    locals.showHeaderActionsList = false\n  }\n\n  showAncestorInPathSelector(ancestorId, index) {\n    const pageDocumentA = params.pageDocument.a.concat().reverse()\n    const pageDocumentAForms = params.pageDocument.a_forms.concat().reverse()\n    // console.log({index}, pageDocumentA.length)   \n\n    const show = pageDocumentA.length > 2 && // do not show for top-level folders because they will be in menu anyway\n      index < pageDocumentA.length - 2 && // do not show company and top-level folders\n      pageDocumentAForms[index] !== 'account' &&\n      !pageDocumentAForms.includes('643508ca-fc18-4d2e-bb13-b3c3f2ac053b') &&\n      !params.structuralForms?.find(form => form.id === pageDocumentAForms[index] || form.id === params.pageDocument.f.id)\n\n    // console.log('showAncestorInPathSelector', params.structuralForms[0].id, index, pageDocumentA[index], pageDocumentAForms[index],  !params.structuralForms.find(form => form.id === pageDocumentAForms[index] || form.id === params.pageDocument.f.id), show)\n    return show\n  }\n\n  widenTitleWidth() {\n    console.log($refs.titleContainer?.parentElement.clientWidth, params)\n    if (params.windowWidth >= 1024) {\n      // locals.editableTitleWidth = '65vw'\n      locals.editableTitleWidth = $refs.titleContainer?.parentElement.clientWidth + 'px'\n    }\n  }\n\n  resetTitleWidth() {\n    this.onResizeHandler(params.windowWidth)\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) {\n    if (!$refs[refName] || !$refs[refName].$el || !$refs[refName].$el.children) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n\n\n  destroy() {\n    this._tearDownClick()\n  }\n} ","css":"","name":"rd:(Not used currently) Page Document Layout [Redesign 1.0]","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"d4ce6dec568c3dc1"}],"template":"<section\n  v-if=\"!params.hide\"\n  class=\"w-full h-full flex flex-col overflow-hidden bg-neutral-50 dark:bg-slate-700 relative\"\n>\n  <header class=\"px-2 h-[52px] w-full flex items-center gap-2\">\n    <section class=\"relative\" v-if=\"params.showBurgerMenu\">\n      <ae-layout\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        param-icon=\"fa fa-bars\"\n        @selected=\"$emit('toggle-overlay-menu')\"\n        class=\"mr-2\"\n        :param-primary=\"true\"\n        param-border=\"border border-primary-200\"\n      ></ae-layout>\n\n      <div\n        v-if=\"locals.activitiesMenuEntry && locals.activitiesMenuEntry.unread != null && locals.activitiesMenuEntry.unread > 0\"\n        class=\"absolute right-0 top-0 pointer-events-none flex items-center justify-center rounded-full h-5 w-5 bg-red-200 border border-red-400 text-red-900 text-sm\"\n      >\n        {{ locals.activitiesMenuEntry.unread }}\n      </div>\n    </section>\n\n    <section class=\"h-full flex items-stretch w-full gap-2 overflow-visible xbasis-2/3 flex-1\">\n      <div class=\"w-full mx-auto flex gap-2\">\n        <ae-design\n          v-if=\"!params.noNavigation\"\n          name=\"rd:navigation\"\n          :document=\"params.pageDocument\"\n          :param-structural-forms=\"params.structuralForms\"\n        ></ae-design>\n\n        <div class=\"flex items-center gap-2\" ref=\"titleContainer\">\n          <ae-design\n            name=\"rd:title-action\"\n            :document=\"params.pageDocument\"\n            :param-readonly=\"params.readonly || params.pageDocument?.a?.length === 1\"\n          ></ae-design>\n\n          <ae-design\n            class=\"overflow-hidden font-semibold bg-white dark:bg-slate-800 rouded-md\"\n            name=\"rd:editable-title\"\n            :document=\"params.pageDocument\"\n            :param-border=\"true\"\n            :param-focus=\"params.pageParams?.focus\"\n            :param-readonly=\"params.readonly || params.pageDocument?.a?.length === 1\"\n            :style=\"{ width: locals.editableTitleWidth, 'max-width': locals.editableTitleWidth }\"\n            @start=\"controller.widenTitleWidth()\"\n            @end=\"controller.resetTitleWidth()\"\n            ref=\"editableTitle\"\n            :watch=\"false\"\n            :param-show-favorite-action=\"true\"\n          ></ae-design>\n        </div>\n\n        <div class=\"hidden lg:flex items-center gap-1\" v-if=\"params.isDrilled\">\n          <ae-layout\n            v-if=\"params.isDrilled\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            @selected=\"$emit('back')\"\n            param-icon=\"far fa-angle-left\"\n            :param-disabled=\"!params.canGoBack\"\n            param-border=\"border-slate-200\"\n          ></ae-layout>\n\n          <ae-layout\n            v-if=\"params.isDrilled\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            @selected=\"$emit('forward')\"\n            param-icon=\"far fa-angle-right\"\n            :param-disabled=\"!params.canGoForward\"\n            param-border=\"border-slate-200\"\n          ></ae-layout>\n        </div>\n\n        <ae-design\n          class=\"xhidden xlg:block\"\n          name=\"rd:tabs\"\n          :document=\"params.pageDocument\"\n          @selected=\"locals.tab = $event\"\n          :param-view=\"params.view\"\n          :param-window-width=\"params.windowWidth\"\n        ></ae-design>\n        <div class=\"flex-1\"></div>\n      </div>\n    </section>\n\n    <div class=\"lg:flex-1\"></div>\n\n    <!-- Only render on screens larger than Tailwind's lg breakpoint. Will be rendered in 'rd:page' instead -->\n    <!-- NOTE: it is NOT enough to hide div, remove it from DOM (designs here are using Aeppic.watch to show notifications in some cases) -->\n    <section v-if=\"params.windowWidth >= 1024\" class=\"items-stretch xbasis-1/3 overflow-hidden gap-2\">\n      <div\n        class=\"z-50 fixed bg-blue-50/50 top-10 pointer-events-none text-xs\"\n        v-if=\"Aeppic.LocalStorage.getItem('debug')\"\n      >\n        tab: {{locals.tab}} pageParams: {{ params.pageParams }} readonly: {{ params.readonly}}\n      </div>\n\n      <div class=\"flex-1\"></div>\n\n      <ae-design\n        class=\"h-full overflow-hidden max-w-full\"\n        name=\"rd:page-toolbar\"\n        :document=\"params.pageDocument\"\n        @toolbar=\"controller.dispatchEventChildren('page', 'toolbar', $event)\"\n        :params=\"{ ...params.toolbarParams, view: params.view, windowWidth: params.windowWidth }\"\n      ></ae-design>\n      <ae-design\n        name=\"rd:more-actions\"\n        :document=\"params.pageDocument\"\n        class=\"max-w-full\"\n        :params=\"params.pageParams\"\n        :param-window-width=\"params.windowWidth\"\n        :param-view=\"params.view\"\n        :param-tab=\"locals.tab\"\n      ></ae-design>\n    </section>\n\n    <ae-layout\n      layout-id=\"fc349b35-90c8-43c6-a13d-e4bf52dfc28a\"\n      :param-document=\"params.pageDocument\"\n      :param-disable-delete=\"params.pageParams?.disableDelete\"\n      :param-view=\"params.view\"\n      :param-tab=\"locals.tab\"\n    ></ae-layout>\n  </header>\n\n  <section class=\"flex-1 overflow-hidden\">\n    <ae-design\n      ref=\"page\"\n      class=\"w-full h-full overflow-hidden\"\n      name=\"rd:page\"\n      :document=\"params.pageDocument\"\n      :params=\"{ ...params.pageParams, tab: locals.tab, view: params.view, windowWidth: params.windowWidth }\"\n    ></ae-design>\n  </section>\n\n  <ae-design name=\"rd:save-watcher\" :document=\"params.pageDocument\" :watch=\"false\"></ae-design>\n</section>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"93cb00de-3c1e-4248-9776-cafa1efd3c85","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-07-28T10:04:45+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"0e40bb7a-7f76-425a-8b07-3dbb6208d277","text":"rd:Page Document Layout","v":"ed5f0e50371f0bc2"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"189d4cfea6e6308e"},"stamps":[],"t":1785233085708,"v":"acb95065ddcc0f04"},{"a":["apps","45ada186-e9fd-451d-9dbd-2defc0b4f86f","2357fbdc-50bd-43c1-a046-d73c71d3835e"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"13c8ebdc-bc39-4a7c-86d8-a228e4f87328","text":"rd:[Shared Layout] Foto Upload","v":"058690d7d78aea83"},"created":{"at":"2025-09-25T15:18:32+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1758813512417,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      File: 'dbee6e16-d63a-493c-bba6-505f79918f9f',\n    }\n\n    locals.uploads = []\n    locals.targetFolder = null\n    locals.targetFolder = await Aeppic.get(params.pageDocumentId)\n\n    locals.search = `p:${locals.targetFolder.id} f.id:${this.FORMS.File}`\n  }\n\n  async uploadedDocuments(event) {\n    const documents = await Aeppic.getAll(event.documentIds)\n    locals.uploads.push(...documents)\n  }\n\n  async deleteUpload(document) {\n    const indexOfDocumentToDelete = locals.uploads.findIndex(d => d.id === document.id)\n\n    if (indexOfDocumentToDelete !== -1) {\n      Aeppic.delete(document)\n      locals.uploads.splice(indexOfDocumentToDelete, 1)\n    }\n  }\n}","css":"._CSS-explainer {\n  margin: var(--ae-space-3) 0;\n  white-space: pre-line;\n}","name":"rd:[Shared Layout] Files Download","packages":[],"template":"<div v-if=\"locals.targetFolder\" class=\"bg-white rounded-md p-1 flex flex-col gap-4\">\n  <h1 class=\"truncate\"><ae-design class=\"inline-flex\" name=\"title\" :document=\"locals.targetFolder\"></ae-design></h1>\n\n  <ae-list list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n          :search=\"locals.search\"\n          param-design=\"rd:card\"\n          :param-design-params=\"{ readonly: true, showDownload: true, }\"\n          class=\"max-w-5xl mx-auto\"\n  ></ae-list>\n  <!-- <div class=\"whitespace-pre-line\">Laden Sie hier Bilder und Videos hoch. Diese werden automatisch gespeichert.\nNach dem Hochladen können Sie die Dateien bis zum Beenden der Sitzung wieder löschen.\n(Die Sitzung wird automatisch mit dem Schließen der Seite beendet)\n  </div>\n\n  <ae-layout  layout-id=\"8ae0359f-4d25-4d17-baf0-f69c006bd4ad\"\n              :param-document=\"locals.targetFolder\"\n              :param-show-ui=\"true\"\n              param-file-form-id=\"dbee6e16-d63a-493c-bba6-505f79918f9f\"\n              param-file-form-field=\"datei\"\n              param-file-name-to-field=\"name\"\n              :param-save-new-documents=\"true\"\n              ref=\"dropHandler\"\n              @added=\"controller.uploadedDocuments($event)\"\n              param-types=\"image/*,video/*\"\n  ></ae-layout> \n\n\n  <div v-if=\"locals.uploads.length\" class=\"flex flex-col gap-2\">\n    <h3>Hochgeladene Dateien</h3>\n    <ae-list list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n              :documents=\"locals.uploads\"\n              :params=\"{ design: 'rd:ref-card', divide: true, horizontal: true, wrap: true, designParams: { square: true } }\" \n              @remove=\"controller.deleteUpload($event)\"\n    ></ae-list>\n\n    <div class=\"flex mt-10\">\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" param-icon=\"far fa-sync-alt\" param-text=\"Sitzung beenden\" \n      :param-disabled=\"Aeppic.Uploads.isUploading\" @selected=\"Aeppic.reload()\" :param-primary=\"true\"></ae-layout>\n    </div>\n\n  </div> -->\n  \n\n  <!-- Allow this site to be added as PWA -->\n  <!-- <ae-layout layout-id=\"de0e49dc-2e18-474a-b1cb-6aa548602d16\"></ae-layout>\n  <ae-layout layout-id=\"3eb256f4-2b7e-49c3-b299-55475f419f59\"\n            :param-page-document=\"locals.targetFolder\"\n  ></ae-layout> -->\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"acf01337-d4f0-4b9d-8c7c-3e2616a6b237","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-09-25T15:27:03+00:00","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"13c8ebdc-bc39-4a7c-86d8-a228e4f87328","text":"rd:[Shared Layout] Foto Upload","v":"058690d7d78aea83"},"p":"2357fbdc-50bd-43c1-a046-d73c71d3835e","previous":{"v":"91371dabb4ff8af5"},"stamps":[],"t":1758814023639,"v":"6c574277fbb78eed"},{"id":"13c8ebdc-bc39-4a7c-86d8-a228e4f87328","v":"058690d7d78aea83","previous":{"v":"8dadd810c50600de"},"p":"2357fbdc-50bd-43c1-a046-d73c71d3835e","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:[Shared Layout] Foto Upload","applies":"","template":"<div v-if=\"locals.targetFolder\" class=\"bg-white rounded-md p-1 flex flex-col gap-4\">\n  <h1 class=\"truncate\"><ae-design class=\"inline-flex\" name=\"title\" :document=\"locals.targetFolder\"></ae-design></h1>\n  <!-- <div v-if=\"locals.targetFolder.data.beschreibung.trim().length\" class=\"bp-card bp-card--bordered _CSS-explainer\">{{locals.targetFolder.data.beschreibung}}</div> -->\n\n  <div class=\"whitespace-pre-line\">Laden Sie hier Bilder und Videos hoch. Diese werden automatisch gespeichert.\nNach dem Hochladen können Sie die Dateien bis zum Beenden der Sitzung wieder löschen.\n(Die Sitzung wird automatisch mit dem Schließen der Seite beendet)\n  </div>\n\n  <ae-layout  layout-id=\"8ae0359f-4d25-4d17-baf0-f69c006bd4ad\"\n              :param-document=\"locals.targetFolder\"\n              :param-show-ui=\"true\"\n              param-file-form-id=\"dbee6e16-d63a-493c-bba6-505f79918f9f\"\n              param-file-form-field=\"datei\"\n              param-file-name-to-field=\"name\"\n              :param-save-new-documents=\"true\"\n              ref=\"dropHandler\"\n              @added=\"controller.uploadedDocuments($event)\"\n              param-types=\"image/*,video/*\"\n  ></ae-layout> \n\n\n  <div v-if=\"locals.uploads.length\" class=\"flex flex-col gap-2\">\n    <h3>Hochgeladene Dateien</h3>\n    <ae-list list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n              :documents=\"locals.uploads\"\n              :params=\"{ design: 'rd:ref-card', divide: true, horizontal: true, wrap: true, designParams: { square: true } }\" \n              @remove=\"controller.deleteUpload($event)\"\n    ></ae-list>\n\n    <div class=\"flex mt-10\">\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" param-icon=\"far fa-sync-alt\" param-text=\"Sitzung beenden\" \n      :param-disabled=\"Aeppic.Uploads.isUploading\" @selected=\"Aeppic.reload()\" :param-primary=\"true\"></ae-layout>\n    </div>\n\n  </div>\n  \n\n  <!-- Allow this site to be added as PWA -->\n  <ae-layout layout-id=\"de0e49dc-2e18-474a-b1cb-6aa548602d16\"></ae-layout>\n  <ae-layout layout-id=\"3eb256f4-2b7e-49c3-b299-55475f419f59\"\n            :param-page-document=\"locals.targetFolder\"\n  ></ae-layout>\n</div>\n","css":"._CSS-explainer {\n  margin: var(--ae-space-3) 0;\n  white-space: pre-line;\n}","controller":"class Controller {\n  async init() {\n    locals.uploads = []\n    locals.targetFolder = null\n    locals.targetFolder = await Aeppic.get(params.pageDocumentId)\n  }\n\n  async uploadedDocuments(event) {\n    const documents = await Aeppic.getAll(event.documentIds)\n    locals.uploads.push(...documents)\n  }\n\n  async deleteUpload(document) {\n    const indexOfDocumentToDelete = locals.uploads.findIndex(d => d.id === document.id)\n\n    if (indexOfDocumentToDelete !== -1) {\n      Aeppic.delete(document)\n      locals.uploads.splice(indexOfDocumentToDelete, 1)\n    }\n  }\n}","packages":[]},"locks":[],"created":{"at":"2025-01-24T11:18:00+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2025-01-24T12:54:00+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1737723240505,"ct":1737717494141,"a_depth":3,"a":["apps","45ada186-e9fd-451d-9dbd-2defc0b4f86f","2357fbdc-50bd-43c1-a046-d73c71d3835e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","441fb0bd-959b-446d-9aee-82f1c8ede628","792667bf-0eff-419d-b051-f1b1a574503e"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"4bee8e2b-7373-4a26-ab7a-d3197e3c1177","text":"Activity Subscription Button","v":"07c5dddbfba57e65"},"created":{"at":"2022-09-09T14:50:58+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1662735058584,"data":{"applies":"","controller":"class Controll {\n  async init() {\n    this.FORMS = {\n      ActivitySubscription: '1daa73c2-8f35-4b05-956a-4870f7d2a5ef'\n    }\n\n    const document = await Aeppic.get(this.documentId)\n    const activitiesEnabled = await Aeppic.findOne(`p:${document.a[0]} f.id:eadfef5b-1856-40d2-9ed2-6a78e02ad497`)\n    locals.canSubscribe = activitiesEnabled && this.documentId && Aeppic.Account?.data.isGroupAccount === false\n\n    if (!locals.canSubscribe) {\n      $emit('disabled')\n      return\n    }\n\n    locals.activitySubscription = null\n    \n    if (this.documentId) {\n      Aeppic.subscribe(`p:${this.documentId} f.id:${this.FORMS.ActivitySubscription} created.by:${Aeppic.Account.id}`, { size: 1 }, (docs) => {\n        locals.activitySubscription = docs[0]\n      })\n    }\n\n    $on('show', () => this.showSubscribeDialog())\n  }\n\n  get documentId() {\n    return params.document?.id || params.documentId\n  }\n\n  showSubscribeDialog() {\n    $emit('open')\n    $refs.subscribeDialog.show()\n  }\n\n  async toggleActivitySubscriptions() {\n    if (locals.activitySubscription) {\n      Aeppic.delete(locals.activitySubscription)\n      locals.activitySubscription = null\n    } else {\n      const sub = await Aeppic.new(this.FORMS.ActivitySubscription, this.documentId)\n      Aeppic.save(sub)\n      locals.activitySubscription = sub\n    }\n  }\n}\n ","css":"._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}","name":"rd:Activity Subscription Button","packages":[],"template":"\n<ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-bells\"\n            @selected=\"controller.showSubscribeDialog()\"\n            :param-disabled=\"!locals.canSubscribe\"\n            param-text=\"Ereignisse benachrichtigen\"\n></ae-layout> \n\n<ae-dialog ref=\"subscribeDialog\">\n  <template #header=\"scope\">\n    <div class=\"_CSS-dialog__header\">\n      <div>\n        Benachrichtigungen für Aktivitäten\n      </div>\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n  <template #body>\n    <div class=\"_CSS-dialog__body\">\n      <div v-if=\"locals.activitySubscription\">\n        Sie erhalten aktuell Benachrichtigungen für in \"<ae-design name=\"title\" :document-id=\"controller.documentId\" style=\"display:inline-flex;\"></ae-design>\" erstellte Aktivitäten.\n        <br>\n        (Aktiv seit: {{ Aeppic.DateTime.fromISO(locals.activitySubscription.created.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}})\n      </div> \n      <div v-else>\n        Sie können Benachrichtigungen für in \"<ae-design name=\"title\" :document-id=\"controller.documentId\" style=\"display:inline-flex;\"></ae-design>\" erstellte Aktivitäten aktivieren.\n      </div> \n    </div>\n  </template>\n  <template #commands=\"scope\">\n    <button class=\"ae-button\" @click.stop=\"scope.close()\">\n      Abbrechen\n    </button>\n    <button  class=\"ae-button ae-button--primary\" @click.stop=\"controller.toggleActivitySubscriptions()\">\n      <template v-if=\"locals.activitySubscription\">\n        Deaktivieren\n      </template>\n      <template v-else>\n        Aktivieren\n      </template>\n    </button> \n  </template>\n</ae-dialog> "},"f":{"id":"layout-form","text":"Layout","v":"4bad04bdaa666934"},"id":"693c1015-8129-4d2a-b781-1ae6cf8ada73","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-02-17T12:06:00+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"4bee8e2b-7373-4a26-ab7a-d3197e3c1177","text":"Activity Subscription Button","v":"07c5dddbfba57e65"},"p":"792667bf-0eff-419d-b051-f1b1a574503e","previous":{"v":"3120dfb8530d310f"},"stamps":[],"t":1771329960640,"v":"9c0d681f3ace0b11"},{"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2023-09-11T09:52:20+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1694425940186,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Employee: 'd2ac3563-3c3f-4f02-b923-9b67abf98d10',\n      CoreAufgabe: '0deb4864-cbb6-420c-99ee-337c7444ab24',\n      Appointment: 'e6b7aced-aaa0-49a4-b573-cfa307595402',\n      Activity: '84ede5f8-c5af-4113-8235-4b7fa528e265',\n      AufgabeEnergyLeistung: '88b1f60e-71f6-46f5-94ea-3d7bbe972950',\n    }\n\n    this.today = Aeppic.DateTime.local()\n    this.baseDate = Aeppic.DateTime.local()\n    locals.rerenderKey = 0\n\n    this.calendarBaseAttributes = [\n      {\n        key: 'today',\n        highlight: {\n          style: {\n            'background-color': null,\n            color: null,\n          },\n          class: 'bg-sky-300 rounded-full border-sky-500',\n        },\n        dates: new Date(),\n      },\n    ]\n\n    locals.calendar = {\n      minDate: this.today.minus({ weeks: 6 }).toISO(),\n      maxDate: this.today.plus({ weeks: 6 }).toISO(),\n      date: {\n        value: this.today.toJSDate(),\n      },\n      selectAttribute: {\n        highlight: {\n          style: {\n            'background-color': null,\n          },\n          class: 'bg-slate-50 ring-1 m-2 ring-sky-500 ring-inset ring-offset-4',\n        },\n      },\n      attributes: [...this.calendarBaseAttributes],\n    }\n\n    locals.selectors = []\n    locals.activeSelector = null\n    locals.workWeekSelector = null\n    locals.buttons = [\n      {\n        key: 'total',\n        text: 'Alle Aufgaben',\n        color: 'bg-sky-300',\n      },\n      {\n        key: 'inProgress',\n        text: 'In Bearbeitung',\n        color: 'bg-orange-300',\n      },\n      {\n        key: 'closed',\n        text: 'Erledigt',\n        color: 'bg-green-300',\n      },\n    ]\n\n    locals.stats = {\n      total: 0,\n      totalPercent: 0,\n      closed: 0,\n      closedPercent: 0,\n      inProgress: 0,\n      inProgressPercent: 0,\n    }\n\n    locals.tasks = []\n    locals.activities = []\n    locals.appointments = []\n\n    locals.selectedOption = this.transformOptions(Aeppic.ProfilePage)\n\n    this.updateSelectors()\n\n    $on('toolbar', async (type) => {\n      if (type.startsWith('employee-')) {\n        const employee = await Aeppic.get(type.replace('employee-', ''))\n\n        console.log({ employee })\n\n        locals.selectedOption = this.transformOptions(employee)\n      }\n    })\n\n    await Promise.all([this._updateTasks(), this._updateAppointments(), this._updateActivities()])\n  }\n\n  transformOptions(employee) {\n    return {\n      display: employee.data.name,\n      iconDesign: true,\n      documentId: employee.id,\n    }\n  }\n\n  updateSelectors() {\n    const today = Aeppic.DateTime.local()\n    const todayWeekDay = today.weekday\n\n    const monday = this.baseDate.startOf('week')\n    const isCurrentWorkWeek = today.weekNumber === monday.weekNumber\n\n    const selectors = []\n\n    for (let i = 0; i <= 6; i += 1) {\n      selectors.push(\n        this.buildSelector({\n          label: isCurrentWorkWeek && i === todayWeekDay - 1 ? 'Heute' : monday.plus({ days: i }).weekdayLong,\n          start: monday.plus({ days: i }),\n          end: monday.plus({ days: i }),\n          isToday: isCurrentWorkWeek && i === todayWeekDay - 1,\n        })\n      )\n    }\n\n    const workWeekSelector = {\n      label: `KW ${monday.weekNumber}`,\n      start: monday,\n      end: monday.endOf('week'),\n    }\n\n    selectors.push(workWeekSelector)\n\n    locals.workWeekSelector = workWeekSelector\n\n    locals.selectors = selectors\n    locals.activeSelector = isCurrentWorkWeek ? locals.selectors[today.weekday - 1] : workWeekSelector\n  }\n\n  buildSelector(options) {\n    const { label, icon, start, end, isToday } = options\n\n    const selector = {\n      key: Aeppic.uuid(),\n      label: label || '',\n      icon: icon || '',\n      start: start || null,\n      end: end || null,\n      isToday,\n    }\n\n    return selector\n  }\n\n  isWeeklySelector(selector) {\n    return selector.end && selector.end.valueOf() !== selector.start.valueOf()\n  }\n\n  changeBaseDateBy(duration) {\n    this.baseDate = this.baseDate.plus(duration)\n\n    this.updateSelectors()\n    this._updateTasks()\n    this._updateAppointments()\n    this._updateActivities()\n  }\n\n  updateOnPossibleNewAppointment() {\n    this._updateAppointments()\n  }\n\n  async _updateAppointments() {\n    const start = this.baseDate.startOf('week').minus({ weeks: 6 }).endOf('day').toFormat('yyyy-MM-dd')\n    const end = this.baseDate.plus({ weeks: 6 }).toFormat('yyyy-MM-dd')\n\n    // FIXME: re-add `OR data.end:[${start} TO ${end}])`\n    const query = `a:${params.document.a[0]} f.id:${this.FORMS.Appointment} data.attendees:${Aeppic.ProfilePage.id} data.start:[${start} TO ${end}] `\n\n    const appointments = await Aeppic.find(query, { size: 999 })\n\n    this._updateAppointmentStats(appointments)\n\n    locals.appointments = appointments\n\n    // this.appointmentsSubscription = Aeppic.updateSubscription(this.appointmentsSubscription, query, { size: 999 }, (appointments) => {\n    //   this._updateAppointmentStats(appointments)\n    //   locals.rerenderKey += 1\n    // })\n  }\n\n  _getUniqueByDay(array) {\n    return Object.values(\n      array.reduce((result, current) => {\n        result[Aeppic.DateTime.fromJSDate(current.dates).toFormat('yyyy-MM-dd')] = current\n        return result\n      }, {})\n    )\n  }\n\n  _updateAppointmentStats(appointments) {\n    const attributes = []\n\n    for (const appointment of appointments) {\n      const entry = {\n        type: 'appointment',\n        key: appointment.id,\n        dot: {\n          style: {\n            'background-color': null,\n          },\n          class: 'bg-blue-600',\n        },\n        dates: Aeppic.DateTime.fromISO(appointment.data.start).toJSDate(),\n        // popover: true,\n      }\n\n      attributes.push(entry)\n    }\n\n    const attributesWithoutAppointments = locals.calendar.attributes.filter((a) => a.type !== 'appointment')\n\n    locals.calendar.attributes = [...attributesWithoutAppointments, ...this._getUniqueByDay(attributes)]\n  }\n\n  async _updateActivities() {\n    const start = this.baseDate.startOf('week').minus({ weeks: 6 }).endOf('day').toFormat('yyyy-MM-dd')\n    const end = this.baseDate.plus({ weeks: 6 }).toFormat('yyyy-MM-dd')\n\n    // FIXME: re-add 'OR data.ende:[${start} TO ${end}]'\n\n    const query = `a:${params.document.a[0]} f.id:${this.FORMS.Activity} data.verantwortlich.id:${Aeppic.ProfilePage.id} data.wann:[${start} TO ${end}]`\n\n    const activities = await Aeppic.find(query, { size: 999 })\n\n    this._updateActivitiesStats(activities)\n\n    locals.activities = activities\n\n    // this.activitiesSubscription = Aeppic.updateSubscription(this.activitiesSubscription, query, { size: 999 }, (activities) => {\n    //   this._updateActivitiesStats(activities)\n    //   locals.rerenderKey += 1\n    // })\n  }\n\n  _updateActivitiesStats(activities) {\n    const attributes = []\n\n    for (const activity of activities) {\n      const entry = {\n        key: activity.id,\n        type: 'activity',\n        dot: {\n          style: {\n            'background-color': null,\n          },\n          class: 'bg-yellow-400 border-yellow-300',\n        },\n        dates: Aeppic.DateTime.fromISO(activity.data.wann).toJSDate(),\n        // popover: true,\n      }\n\n      attributes.push(entry)\n    }\n\n    const attributesWithoutActivities = locals.calendar.attributes.filter((a) => a.type !== 'activity')\n\n    locals.calendar.attributes = [...attributesWithoutActivities, ...this._getUniqueByDay(attributes)]\n  }\n\n  async _updateTasks() {\n    const start = this.baseDate.startOf('week').minus({ weeks: 6 }).endOf('day').toFormat('yyyy-MM-dd')\n    const end = this.baseDate.plus({ weeks: 6 }).toFormat('yyyy-MM-dd')\n\n    // FIXME: it would be more correct to also include `data.bisEnde:[${start} TO ${end}])`\n    // const query = `a:${params.document.a[0]} (f.id:${this.FORMS.CoreAufgabe} OR f.id:${this.FORMS.AufgabeEnergyLeistung}) data.verantwortlich.id:${Aeppic.ProfilePage.id} (data.bisStart:[${start} TO ${end}] OR data.bisEnde:[${start} TO ${end}])`\n    const queries = [\n      `a:${params.document.a[0]} f.id:${this.FORMS.CoreAufgabe} data.verantwortlich.id:${Aeppic.ProfilePage.id} data.bisStart:[${start} TO ${end}]`,\n      `a:${params.document.a[0]} f.id:${this.FORMS.AufgabeEnergyLeistung} data.verantwortlich.id:${Aeppic.ProfilePage.id} data.bisStart:[${start} TO ${end}]`,\n    ]\n\n    const tasks = (await Promise.all(queries.map((query) => Aeppic.find(query, { size: 999 })))).flat()\n\n    this._updateTasksStats(tasks)\n\n    locals.tasks = tasks\n\n    // this.tasksSubscription = Aeppic.updateSubscription(this.tasksSubscription, query, { size: 999 }, (tasks) => {\n    //   this._updateTasksStats(tasks)\n    //   locals.rerenderKey += 1\n    // })\n  }\n\n  _updateTasksStats(tasks) {\n    const stats = {\n      total: tasks.length,\n      totalPercent: 100,\n      closed: 0,\n      closedPercent: 0,\n      inProgress: 0,\n      inProgressPercent: 0,\n      open: 0,\n    }\n\n    for (const task of tasks) {\n      if (task.data.erledigt) {\n        stats.closed += 1\n      } else if (task.data.inBearbeitung) {\n        stats.inProgress += 1\n      } else {\n        stats.open += 1\n      }\n    }\n\n    const percentilePerTask = 100 / stats.total\n    stats.closedPercent = percentilePerTask * stats.closed\n    stats.inProgressPercent = percentilePerTask * stats.inProgress\n\n    locals.stats = stats\n\n    const attributes = [...this.calendarBaseAttributes]\n\n    const attributesByDate = {\n      // 'isostring': {\n      //   inBearbeitung: false,\n      //   erledigt: false,\n      //   open: false,\n      // }\n    }\n\n    for (const task of tasks) {\n      const taskDate = Aeppic.DateTime.fromISO(task.data.bisStart, { setZone: true, zone: 'de-DE' }).startOf('day')\n      const taskDateString = taskDate.toISO()\n\n      if (!attributesByDate[taskDateString]) {\n        attributesByDate[taskDateString] = {\n          jsDate: taskDate.toJSDate(),\n          inBearbeitung: false,\n          erledigt: false,\n          initial: false,\n        }\n      }\n\n      if (task.data.erledigt) {\n        attributesByDate[taskDateString].erledigt = true\n      } else if (task.data.inBearbeitung) {\n        attributesByDate[taskDateString].inBearbeitung = true\n      } else {\n        attributesByDate[taskDateString].initial = true\n      }\n\n      // const entry = {\n      //   key: task.id,\n      //   dot: {\n      //     style: {\n      //       'background-color': null\n      //     },\n      //     class: task.data.erledigt ? 'bg-green-600 border-green-700' : (task.data.inBearbeitung ? 'bg-lime-300 border-lime-500' : 'bg-black border-neutral-600'),\n      //   },\n      //   dates: Aeppic.DateTime.fromISO(task.data.bisStart, { setZone: true, zone: 'de-DE' }).startOf('day').toJSDate(),\n      //   // popover: true,\n      // }\n\n      // attributes.push(entry)\n    }\n\n    console.log(attributesByDate)\n\n    for (const date in attributesByDate) {\n      const attributeDefinition = attributesByDate[date]\n      const attrs = []\n\n      if (attributeDefinition.initial) {\n        attrs.push({\n          key: date + '_initial',\n          type: 'task',\n          dot: {\n            style: {\n              'background-color': null,\n            },\n            class: 'bg-orange-600 border-orange-500',\n          },\n          dates: attributeDefinition.jsDate,\n        })\n      }\n\n      if (attributeDefinition.inBearbeitung) {\n        attrs.push({\n          key: date + '_inBearbeitung',\n          type: 'task',\n          dot: {\n            style: {\n              'background-color': null,\n            },\n            class: 'bg-slate-500 border-slate-400',\n          },\n          dates: attributeDefinition.jsDate,\n        })\n      }\n\n      if (attributeDefinition.erledigt) {\n        attrs.push({\n          key: date + '_erledigt',\n          type: 'task',\n          dot: {\n            style: {\n              'background-color': null,\n            },\n            class: 'bg-emerald-500 border-emerald-400',\n          },\n          dates: attributeDefinition.jsDate,\n        })\n      }\n\n      attributes.push(...attrs)\n    }\n\n    const attributesWithoutTasks = locals.calendar.attributes.filter((a) => a.type !== 'task')\n    locals.calendar.attributes = [...attributesWithoutTasks, ...attributes]\n  }\n\n  attributesToDocuments(attributes) {\n    return attributes.map((a) => ({ id: a.key }))\n  }\n\n  destroy() {\n    this._chart?.destroy()\n  }\n}\n","css":"","name":"rd:Agenda","packages":[{"id":"7fd60096-e527-4f12-95db-90959b630b75","text":"V-Calendar","v":"495544bdab5b839d"}],"template":"<div class=\"h-full flex flex-col p-4 gap-4 overflow-x-hidden overflow-y-scroll bg-white\">\n  <date-picker\n    v-model=\"locals.calendar.date.value\"\n    :attributes=\"locals.calendar.attributes\"\n    :select-attribute=\"locals.calendar.selectAttribute\"\n    :popover=\"{ visibility: params.readonly ? 'hidden' : 'hover', positionFixed: true }\"\n    locale=\"de\"\n    style=\"width: 100%; border: none\"\n    mode=\"date\"\n    is24hr\n    :minute-increment=\"5\"\n    :min-date=\"locals.calendar.minDate\"\n    :max-date=\"locals.calendar.maxDate\"\n    :is-required=\"true\"\n  >\n    <!-- :is-dark=\"Aeppic.LocalStorage.getValue('redesign-allow-darkmode')\" -->\n    <template #day-popover=\"{ day, format, masks, attributes }\">\n      <div class=\"px-1 select-none min-w-[200px] max-w-[40vw]\">\n        <div :key=\"format(day.date, masks.dayPopover)\" class=\"text-xs text-gray-700 font-semibold text-center\">\n          <div class=\"border-b mb-1\">{{ format(day.date, masks.dayPopover) }}</div>\n\n          <ae-list\n            list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n            :documents=\"controller.attributesToDocuments(attributes)\"\n            param-design=\"rd:card\"\n            @selected=\"Aeppic.drillInto($event)\"\n          ></ae-list>\n        </div>\n      </div>\n    </template>\n  </date-picker>\n\n  <div class=\"border-t\"></div>\n\n  <section class=\"flex flex-col\">\n    <div class=\"font-bold flex gap-2 items-center\">\n      <!-- Heute -->\n      <span v-if=\"locals.calendar.date.value\">\n        {{ Aeppic.DateTime.fromJSDate(locals.calendar.date.value).toRelativeCalendar() }}\n      </span>\n\n      <div class=\"flex-1\"></div>\n\n      <ae-layout\n        layout-id=\"262e95e6-f1f8-477c-834b-89d533027e1e\"\n        :param-document=\"params.document\"\n        :param-commands=\"['231960fe-2bf1-46f5-9802-b1b5d478aff3']\"\n        @close=\"controller?.updateOnPossibleNewAppointment()\"\n      ></ae-layout>\n    </div>\n\n    <ae-layout\n      v-if=\"locals.calendar.date.value\"\n      :key=\"Aeppic.DateTime.fromJSDate(locals.calendar.date.value).toISO() + locals.rerenderKey\"\n      layout-id=\"9f48b6a6-ded4-4543-b70a-4bd21a58f117\"\n      :param-date=\"{ start: Aeppic.DateTime.fromJSDate(locals.calendar.date.value), end: Aeppic.DateTime.fromJSDate(locals.calendar.date.value) }\"\n      :param-appointments=\"locals.appointments\"\n      :param-activities=\"locals.activities\"\n      :param-tasks=\"locals.tasks\"\n      :param-dashboard-type=\"params.document.data.type\"\n      :param-profile-page-id=\"locals.selectedOption?.documentId\"\n      param-empty-text=\"Keine Aufgaben oder Termine\"\n      :param-debug=\"false\"\n    ></ae-layout>\n\n    <!-- <ae-layout  v-if=\"locals.activeSelector\"\n                  layout-id=\"9f48b6a6-ded4-4543-b70a-4bd21a58f117\"\n                  :param-date=\"{ start: locals.activeSelector.start, end: locals.activeSelector.end }\"\n                  :param-dashboard-type=\"params.document.data.type\"\n                  :param-debug=\"true\"\n                  :key=\"'mytasksCore' + locals.activeSelector.key\"\n                  :param-profile-page-id=\"locals.selectedOption?.documentId\"\n      ></ae-layout> -->\n\n    <!-- <ae-layout layout-id=\"f8cc7d89-6bdc-4099-9d33-b384996bbbcc\"\n                  :param-user-id=\"locals.selectedOption?.documentId\"\n                  :param-company-id=\"document.a[0]\"\n      ></ae-layout> -->\n  </section>\n\n  <div class=\"flex-1\"></div>\n\n  <section>\n    <ae-design name=\"rd:pins\" :document=\"params.document\"></ae-design>\n  </section>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"e86fc805-7f28-49f1-a13a-f4faa7b71adc","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-01-09T14:02:02+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"0d2ed632-691b-479a-8003-008b4a6d815e","previous":{"v":"508b7486c63104e0"},"stamps":[],"t":1767967322427,"v":"f71978913eb0def3"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2022-05-13T09:05:13+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1770306658060,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.notificationskey = 'bizpin:timetracking:enableWorkingTimeNotifications'\n\n    this.FORMS = {\n      ArbeitszeitTimer: '9345c72f-a8f6-4fb1-aac5-847ef33d2552',\n      Arbeitszeit: '32db2e83-2e88-4162-b680-698423aef2c3'\n    }\n    locals.FORMS = this.FORMS\n\n    locals.visible = false\n    locals.running = false\n    locals.started = ''\n    locals.timer = null\n    locals.notificationsActive = Aeppic.LocalStorage.getValue(this.notificationskey) ?? Aeppic.ProfilePage.data.externerMitarbeiter === false\n    \n    \n    const trackingIsEnabled = await Aeppic.Preferences.getSettingForDocument('bizpin:timetracking:enableWorkingTime', params.document || Aeppic.ProfilePage)\n    \n    if (!trackingIsEnabled) {\n      return\n    }\n \n\n    this.shallTrackNotificationInterval = Aeppic.setInterval(() => {\n      if (locals.running) {\n        if (locals.timer && Aeppic.DateTime.fromISO(locals.timer.data.started).startOf('day').diffNow('days').days <= -1) {\n          this.notify({\n            title: 'Arbeitszeit',\n            text: 'Der Arbeitszeit Timer ist bereits seit gestern aktiv.',\n            timeout: 10000\n          }) \n        }\n      } else {\n        this.notify({\n          title: 'Arbeitszeit',\n          text: 'Bitte Arbeitszeit Timer starten.',\n          timeout: 10000\n        })  \n      } \n    }, 1000 * 60 * 5) \n\n    locals.timer = await this.getTimer()  \n\n    this.subscribeTimer()\n\n    locals.visible = true  \n  }\n\n  toggleNotifications() {\n    locals.notificationsActive = !locals.notificationsActive\n\n    Aeppic.LocalStorage.setValue(this.notificationskey, locals.notificationsActive)\n  }\n\n  notify(opts) {\n    if (locals.notificationsActive) {\n      Aeppic._emitter.emit('bizpin:show-toast', opts) \n    }\n  }\n  \n  async subscribeTimer() {\n    Aeppic.subscribe(`p:${Aeppic.Account.id} f.id:${this.FORMS.ArbeitszeitTimer}`, { size: 1}, (documents) => {\n      const timer = documents[0] \n\n      locals.running = !!(timer && timer.data.running)\n    })\n  }\n\n  async getTimer() { \n    let timer = null\n\n    const existingTimer = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.ArbeitszeitTimer}`)\n\n    if (existingTimer) {\n      console.log('existing')\n      timer = await Aeppic.edit(existingTimer)\n    } else {\n      console.log('new')\n      timer = await Aeppic.new(this.FORMS.ArbeitszeitTimer, Aeppic.Account.id)\n    }\n\n    locals.running = !!(timer && timer.data.running)\n\n    return timer\n  }\n\n  async start() {\n    locals.timer = await this.getTimer()\n\n    locals.timer.data.started = Aeppic.DateTime.local().toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n\n    Aeppic.save(locals.timer)\n\n    $refs.timer.close()\n    $emit('close')\n  }\n\n  get startedDateTime() {\n    if (!locals.timer?.data.started) {\n      return\n    }\n\n    return Aeppic.DateTime.fromISO(locals.timer.data.started)\n  }\n\n  async stopAndSave() {\n    await this.stop()\n    await this.save()\n  }\n\n  async save() {\n    Aeppic.save(locals.timer)\n\n    $refs.timer.close()\n    $emit('close')\n  }\n\n  async stop() {\n    console.log('stop', locals.timer)\n\n    locals.timer.data.ended = Aeppic.DateTime.local().toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n\n    Aeppic.save(locals.timer)\n    Aeppic.delete(locals.timer)\n\n\n    const trackedTimeResult = await Aeppic.Commands.execute('89779d40-1c98-4202-94bd-68905e8b2088', Aeppic.Account.id, { Account: Aeppic.Account })\n\n    if (!trackedTimeResult.ok) {\n      console.error(trackedTimeResult.error)\n      return\n    }\n    \n    const trackedTime = trackedTimeResult.value\n\n    trackedTime.data = { ...trackedTime.data, ...{\n      name: locals.timer.data.name,\n      dauer: locals.timer.data.dauer,\n      von: locals.timer.data.started,\n      bis: locals.timer.data.ended,\n    }}\n\n    Aeppic.save(trackedTime)\n\n    locals.timer = trackedTime\n  }\n\n  async showTimer() {\n    locals.timer = await this.getTimer()  \n    $refs.timer.show()\n  }\n\n}","css":"","name":"rd:Arbeitszeit","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<div class=\"flex flex items-center gap-4 bg-white dark:bg-slate-800 pr-1 border-y\" v-if=\"locals.visible\">\n\n  <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-clock\"\n            @selected=\"$refs.timer.show()\"\n            class=\"bg-white dark:bg-slate-800 border rounded-r-full -m-1\"\n            param-title=\"Timer bearbeiten\"\n            :class=\"{ 'text-error-600': locals.running }\"\n            @contextmenu=\"$refs.settings.show($event)\"\n  ></ae-layout>\n\n  <ae-popup ref=\"settings\">\n    <div class=\"p-2\">\n        <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  param-icon=\"far fa-bells\"\n                  :param-text=\"locals.notificationsActive ? 'Benachrichtigungen deaktivieren' : 'Benachrichtigungen aktivieren'\"\n                  @selected=\"controller.toggleNotifications()\"\n        ></ae-layout>\n\n    </div>\n  </ae-popup>\n  <!-- <div class=\"bg-white dark:bg-slate-800 px-4 py-2 rounded-r-full border\" :class=\"{ 'text-rose-500': locals.running }\"> \n    <ae-icon class=\"far fa-clock\"\n    ></ae-icon>\n  </div> -->\n  \n  <ae-layout  v-if=\"!locals.running\" \n              layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              param-icon=\"far fa-sign-in\"\n              @selected=\"controller.start()\"\n              param-text=\"Kommen\"\n              class=\"flex-1\"\n              param-classes=\"w-full\"\n              param-border=\"border-slate-200\"\n  ></ae-layout>\n\n  <section v-if=\"locals.running && controller.startedDateTime\" class=\"py-1 px-2 flex-1 flex justify-center\">\n    <div class=\"text-sm\">\n    {{ controller.startedDateTime.toLocaleString(Aeppic.DateTime.TIME_24_SIMPLE )}}\n    </div> \n  </section>\n\n  <ae-layout  v-if=\"locals.running\" \n              layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              param-icon=\"fal fa-sign-out\"\n              @selected=\"controller.stop()\"\n              class=\"bg-white dark:bg-slate-800 border rounded-l-full -m-1\"\n              param-title=\"Gehen\"\n  ></ae-layout>\n\n  <ae-dialog ref=\"timer\" :backdrop-close=\"false\" :dialog-size=\"{ height: 'var(--ae-dialog__height--medium)' }\">\n    <template #header=\"scope\"> \n      <div class=\"flex items-center\">\n        <div>Arbeitszeit Timer</div>\n        <div style=\"flex:1\"></div>\n        <button   class=\"ae-button\"\n                  @click.stop=\"scope.close()\"\n                  :disabled=\"locals.timer && locals.timer.f.id === locals.FORMS.Arbeitszeit\"\n        >\n          <ae-icon class=\"fa fa-times\"></ae-icon>\n        </button>\n      </div>\n    </template>\n    <template #body>\n      <div class=\"_CSS-timer\" v-if=\"$refs.timer && $refs.timer.isOpen && locals.timer\"> \n        <ae-form :document=\"locals.timer\" layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\" @data-changed=\"Aeppic.commit(locals.timer)\"></ae-form>\n\n        <div style=\"flex: 1\"></div>\n\n      </div>\n    </template>\n    <template #commands>\n        <div class=\"_CSS-actions\" v-if=\"locals.timer\">\n          <button v-if=\"!locals.timer.data.running && locals.timer.f.id === locals.FORMS.Arbeitszeit\" class=\"ae-button ae-button--primary\" @click=\"controller.save()\">\n            Speichern\n          </button>\n          <button v-else-if=\"!locals.timer.data.running\" class=\"ae-button ae-button--primary\" @click=\"controller.start()\">\n            Start\n          </button>\n          <template v-else>\n            <button class=\"ae-button\" @click=\"controller.save()\">\n              Änderungen speichern\n            </button>\n            <button class=\"ae-button ae-button--secondary\" @click=\"controller.stop()\">\n              Stoppen & Bearbeiten\n            </button>\n            <button class=\"ae-button ae-button--primary\" @click=\"controller.stopAndSave()\">\n              Stoppen & Speichern\n            </button>\n          </template>\n        </div> \n    </template>\n  </ae-dialog>\n\n</div>  \n\n"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"2b86de0f-13e1-4ac7-81d1-b0c5d8cd4fe3","inheritedLocks":[null,null,null,null],"locks":[],"meta":{},"modified":{"at":"2026-04-14T10:01:59+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"ac325b88dc51b0cb"},"stamps":[],"t":1776160919552,"v":"3347d0ca3ab77231"},{"a":["apps","59edbdbc-2cab-426a-bb42-6e57c5158e4f","185dd4c1-0fb4-43f9-8e8e-ab5cdfb82b4f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2023-02-22T15:12:18+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1677078738706,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      AufgabeCore: '0deb4864-cbb6-420c-99ee-337c7444ab24',\n      MeineAufgabeBizpin: '544d11b1-a156-4568-aeb3-2a60b2b57807',\n      MeineAufgabeEnergy: '90877d25-bbae-421e-9ea7-0631dcbf11c2',\n      AufgabeEnergyLeistung: '88b1f60e-71f6-46f5-94ea-3d7bbe972950',\n    }\n\n    const now = Aeppic.DateTime.local()\n\n    locals.modes = [\n      { \n        identifier: 'today',\n        label: 'Heute',\n        listId: '922e8251-6e60-45a4-9df6-3d434363ac01',\n        interval: {\n          start: now.toISO(),\n          end: now.toISO(),\n          fieldName: 'data.bisStart',\n          fullDays: true,\n        },\n        filter: 'data.bisStart:[* TO *]',\n        expanded: false,\n        documents: [],\n      },\n      { \n        identifier: 'this-week',\n        label: 'Diese Woche',\n        listId: '922e8251-6e60-45a4-9df6-3d434363ac01',\n        interval: {\n          start: now.startOf('week').toISO(),\n          end: now.endOf('week').toISO(),\n          fieldName: 'data.bisStart',\n          fullDays: true,\n        },\n        filter: 'data.bisStart:[* TO *]',\n        expanded: false, \n        documents: [], \n      },\n      { \n        identifier: 'later',\n        label: 'Später',\n        listId: '922e8251-6e60-45a4-9df6-3d434363ac01',\n        interval: {\n          start: now.plus({ days: 8 }).toISO(),\n          end: '*',\n          fieldName: 'data.bisStart',\n          fullDays: true,\n        },\n        filter: 'data.bisStart:[* TO *]',\n        expanded: false, \n        documents: [], \n      },\n      { \n        identifier: 'overdue',\n        label: 'Überfällig',\n        listId: '922e8251-6e60-45a4-9df6-3d434363ac01',\n        interval: {\n          start: '*',\n          end: now.minus({ days: 1 }).toISO(),\n          fieldName: 'data.bisStart',\n          fullDays: true,\n        },\n        filter: 'data.bisStart:[* TO *]',\n        expanded: false, \n        documents: [], \n      },\n      { \n        identifier: 'without-due',\n        label: 'Ohne Fälligkeit',\n        withoutDue: true,\n        listId: '922e8251-6e60-45a4-9df6-3d434363ac01',\n        expanded: false, \n        documents: [], \n      },\n      {\n        identifier: 'overdue-other-assignees',\n        label: 'Von mir erstellte Aufgaben (andere Verantwortliche)',\n        notExpandedText: 'Diese Liste muss manuell geöffnet werden zum Laden der Ergebnisse.',\n        listId: '922e8251-6e60-45a4-9df6-3d434363ac01',\n        expanded: false,\n        documents: [],\n        iconExpanded: '',\n        icon: 'far fa-pause-circle text-primary-500',\n        searchOnExpand: {\n            query: `a:${params.realm || Aeppic.Account.a[0]} f.id:${this.FORMS.AufgabeCore} created.by:\"${Aeppic.Account.id}\" data.erledigt:false AND NOT data.verantwortlich.id:${Aeppic.ProfilePage.id}`,\n            searchOptions: {\n              size: 999,\n              sort: [\n                { field: 'data.bisStart', descending: true },\n                { field: 'data.name', descending: false },\n                { field: 'data.prioritaet', descending: true },\n                'id' \n              ]\n          }\n        }\n      }\n    ]\n \n    locals.baseFilter = `(a:${params.realm || Aeppic.Account.a[0]} ((f.id:${this.FORMS.AufgabeCore} data.erledigt:false) OR (f.id:${this.FORMS.AufgabeEnergyLeistung} data.erledigt:false data.inaktiv:false)) data.verantwortlich.id:${Aeppic.ProfilePage.id})`\n\n    this.expand(locals.modes[0])\n\n    // when params.documents is given, just those to fillout modes since to re-fetched are required\n    if ('documents' in params) {\n      for (const mode of locals.modes) {\n        this._updateDocumentsForMode(mode, params.documents)\n      }\n    }\n\n    watchParam('documents', (docs) => {\n      for (const mode of locals.modes) {\n        this._updateDocumentsForMode(mode, docs)\n      }\n    })\n  }\n\n  async expand(mode){\n    mode.expanded = !mode.expanded\n\n    if (!mode.expanded) {\n      return\n    }\n\n\n    // when no documents provided, only fetch them when mode expanded to prevent to many calls\n    if (('documents' in params) === false || mode.searchOnExpand) {\n      this._updateDocumentsForMode(mode, null, true)\n    }\n  }\n\n  async _updateDocumentsForMode(mode, documents, isExpandCall) {\n    const filter = [\n      locals.baseFilter,\n      mode.filter\n    ].filter(p => !!p).join(' AND ')\n\n    const searchOptions = { \n      size: 9999,\n      sort: [\n        mode.interval && { field: mode.interval.fieldName, descending: true },\n        { field: 'modified.at', descending: true },\n        'id'\n      ]\n    }\n\n    if (mode.searchOnExpand) {\n      if (isExpandCall) {\n        mode.documents = await Aeppic.find(mode.searchOnExpand.query, mode.searchOnExpand.searchOptions)\n      }\n\n      return\n    }\n\n    // act like a ae-list\n    if (documents) {\n      if (mode.interval) {\n        const intervalDocuments = await packages.SearchHelpers.filterDocumentsToInterval(Aeppic, mode.interval, documents)\n        mode.documents = Aeppic.sort(intervalDocuments, searchOptions.sort)\n      } else if (mode.withoutDue) {\n        const documentsWithoutDue = documents.filter(d => {\n          const hasDate = d.data.bis ||\n                          d.data.bisStart ||\n                          d.data.bisEnde \n          return !hasDate\n        })\n\n        mode.documents = Aeppic.sort(documentsWithoutDue, searchOptions.sort)\n      } else {\n        mode.documents = []\n      }\n\n      return\n    }\n    \n    // no params.documents provided. Search on our own\n    if (mode.interval) {\n      mode.documents = await packages.SearchHelpers.findInterval(Aeppic, mode.interval, filter, searchOptions)\n      } else if (mode.withoutDue) { \n      const documents = (await Aeppic.find(filter, searchOptions)).filter(d => {\n        const hasDate = d.data.bis ||\n                d.data.bisStart ||\n                d.data.bisEnde \n        return !hasDate\n      })\n\n      mode.documents = documents\n    }\n  }\n\n  // async tasksWithoutDue() {\n  //   const queryString = [\n  //     `(a:${Aeppic.Account.a[0]} (f.id:${this.FORMS.Aufgabe} OR f.id:${this.FORMS.AufgabeCore}) data.verantwortlich:${params.userId} data.erledigt:false)`,\n  //     `(a:${Aeppic.Account.id} (f.id:${this.FORMS.MeineAufgabeBizpin} f.id:${this.FORMS.MeineAufgabeEnergy}) data.erledigt:false)`\n  //   ].join(' OR ')\n\n  //   console.log(queryString)\n\n  //   return Aeppic.find(queryString, { \n  //     sort: [\n  //       'data.bis',\n  //       'data.bisStart',\n  //       'data.bisEnde',\n  //       'data.name',\n  //       'id'\n  //     ]\n  //   })\n  // }\n}\n","css":"","name":"rd:Aufgaben eines Benutzers","packages":[{"id":"9fbc0645-b97a-4b98-8520-02670f21ac0b","text":"Aeppic Search Helpers","v":"8c5eaad78929f3bc"}],"template":"<div class=\"h-full w-full flex flex-col gap-2\">\n    <div class=\"w-full flex flex-col \" v-for=\"mode of locals.modes\">\n      <div class=\"flex\">\n        <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  :param-text=\"mode.label\"\n                  @selected=\"controller.expand(mode)\"\n                  :param-count=\"mode.documents.length\"\n                  :param-icon=\"mode.expanded ? (mode.iconExpanded || 'fal fa-caret-down') : (mode.icon || 'fal fa-caret-right')\"\n        ></ae-layout> \n      </div>\n    \n      <ae-list v-if=\"mode.expanded\"\n                :list-id=\"mode.listId\"\n                :documents=\"mode.documents\"\n                class=\"mt-4\"\n                param-empty-text=\"Keine Aufgaben im Zeitraum gefunden\"\n                param-design=\"rd:search-card\" \n                @selected=\"Aeppic.drillInto($event, arguments[1])\"\n                :param-enable-filter-bar=\"true\"\n                :param-storage-key=\"layout.id + '_' + mode.identifier\"\n                :param-disable-sort=\"true\"\n                :param-design-params=\"{ showAction: false, hideIcon: true }\"\n      ></ae-list>\n      <div v-else-if=\"mode.notExpandedText\" class=\"text-neutral-500 pl-6 text-sm\">\n        {{mode.notExpandedText}}\n      </div>\n    </div>\n</div>\n\n<!-- TODO: d0ab5d91-0486-4555-869a-b8a5873e7da2 -->\n<!-- <div class=\"_CSS-card\">\n  <div class=\"_CSS-card__title\">\n    Von mir erstellte, überfällige Aufgaben (andere Verantwortliche)\n  </div>\n  <ae-list  list-id=\"058195c7-9ba4-4f79-ab01-4a50ef2347fe\"\n            :documents=\"locals.tasks\"\n            param-design=\"ref-card\"\n            :param-design-params=\"{ readonly: true }\"\n            param-min-column-width=\"300px\"\n            class=\"_CSS-card__list\"\n            @selected=\"Aeppic.navigateTo($event)\"\n  ></ae-list>\n</div> -->\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"4a4f4c51-5b0f-4ff2-bd67-c2acbfb09fb2","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-03-12T13:43:21+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"185dd4c1-0fb4-43f9-8e8e-ab5cdfb82b4f","previous":{"v":"c05e9e583d10fdb0"},"stamps":[],"t":1773323001517,"v":"f8ed37b9ee895e00"},{"a":["apps","0c440c7a-219d-4465-9cbe-2d0eff6ec7ad","85cd7d8f-35be-4092-a40c-274f50729126"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2024-06-27T07:12:11+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1719472347129,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Timer: '9b1d0329-8699-4382-bda3-8eae27e35d03',\n      Arbeitszeit: 'f9279010-1935-4139-abbb-82d928aa09dc'\n    }\n\n    this.NEW_COMMANDS = {\n      TrackedTime: '600b9480-9ea0-473f-86b0-b63c05ccb24d'\n    }\n\n    locals.timer = await this.getTimer()\n  }\n\n  async getTimer() {\n    let timer = null\n\n    const existingTimer = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.Timer}`)\n\n    if (existingTimer) {\n      timer = await Aeppic.edit(existingTimer)\n    } else {\n      timer = await Aeppic.new(this.FORMS.Timer, Aeppic.Account.id)\n      timer.data.abrechenbar = true\n    }\n\n    if (params.document || params.documentId) {\n      const target = params.document || await Aeppic.get(params.documentId)\n\n      if (target) {\n        timer.addReference('dokument', target)\n      }\n    }\n\n    return timer\n  }\n\n  async start() {\n    locals.timer.data.started = Aeppic.DateTime.local().toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n    locals.timer.data.ended = ''\n\n    Aeppic.save(locals.timer)\n\n    $emit('close')\n  }\n\n  async stop() {\n    locals.timer.data.ended = Aeppic.DateTime.local().toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n    Aeppic.commit(locals.timer)\n    \n  }\n\n  async stopAndSave() {\n    await this.stop()\n    await this.save()\n  }\n\n  async save() {\n    if (!locals.timer.data.dokument.id || !locals.timer.data.ended) {\n      return\n    }\n\n    const { dauer, tag, abrechenbar, name, dokument } = locals.timer.data\n\n    const trackedTimeResult = await Aeppic.Commands.execute(this.NEW_COMMANDS.TrackedTime, dokument, {\n      Account: Aeppic.Account,\n      ProfilePage: Aeppic.ProfilePage\n    })\n\n    if (!trackedTimeResult.ok) {\n      console.error('Error creating tracked time', trackedTimeResult.error)\n      return\n    }\n\n    const trackedTime = trackedTimeResult.value\n\n    trackedTime.data = { ...trackedTime.data, ...{\n      name,\n      dauer,\n      tag,\n      abrechenbar,\n    }}\n\n    locals.timer.data.name = ''\n    locals.timer.data.tag = ''\n    locals.timer.data.started = ''\n    locals.timer.data.ended = ''\n    locals.timer.data.abrechenbar = true\n    locals.timer.removeReference('dokument', locals.timer.data.dokument)\n\n    Aeppic.saveAll([locals.timer, trackedTime])\n\n    // TODO: navigate to data.dokument? show track completion?\n    $emit('close')\n  }\n}","css":"","name":"rd:Automatic Timer","packages":[],"template":"<div class=\"flex flex-col gap-2\" v-if=\"locals.timer\">\n<!-- {{locals.timer.data}}  -->\n  <ae-form :document=\"locals.timer\"\n          layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n  ></ae-form>\n\n  <div class=\"flex-1\"></div>\n\n  <div class=\"w-full flex gap-2 justify-end\">\n    <ae-layout    v-if=\"!locals.timer.data.running && !locals.timer.data.stopped\"\n                  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  @selected=\"controller.start()\"\n                  param-icon=\"far fa-play-circle\"\n                  param-text=\"Start\"\n                  param-border=\"true\"\n                  :param-primary=\"true\"\n    ></ae-layout> \n \n    <template v-else>\n      <ae-layout    v-if=\"!locals.timer.data.stopped\"\n                    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    @selected=\"controller.stop()\"\n                    param-icon=\"far fa-stop\"\n                    param-text=\"Stoppen und Bearbeiten\"\n                    param-border=\"true\"\n                    :param-disabled=\"locals.timer.data.stopped\"\n      ></ae-layout> \n      <ae-layout    v-if=\"!locals.timer.data.stopped\"\n                    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    @selected=\"controller.stopAndSave()\"\n                    param-icon=\"far fa-save\"\n                    param-text=\"Stoppen und Speichern\"\n                    param-border=\"true\"\n                    :param-disabled=\"!locals.timer.data.dokument.id\"\n      ></ae-layout> \n\n      <ae-layout    v-if=\"locals.timer.data.stopped\"\n                    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    @selected=\"controller.save()\"\n                    param-icon=\"far fa-save\"\n                    param-text=\"Speichern\"\n                    param-border=\"true\"\n                    :param-disabled=\"!locals.timer.data.dokument.id\"\n                    :param-primary=\"true\"\n      ></ae-layout> \n    </template>\n  </div> \n   \n</div>     "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"e3306061-a60e-46ad-adcd-1b86f5e2fcdb","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-05-05T14:04:14+00:00","backedBy":"","by":"b7485498-f1f3-4ab1-87d1-9cb63ea890c8","client":"server","from":"","impersonatedBy":""},"p":"85cd7d8f-35be-4092-a40c-274f50729126","previous":{"v":"b54094ca492993f3"},"stamps":[],"t":1777989854799,"v":"75cdb21eac52f91d"},{"id":"5f4ec9bf-9b94-4499-9cf4-dc022532f208","v":"2eac863cf409e5a3","previous":{"v":"2cc84c6f666e290d"},"p":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:avatar--small LAYOUT","applies":"","template":"<template v-if=\"locals.document\">\n  <div :title=\"controller.title\" v-if=\"locals.data.foto.dataUrl\" :style=\"{ 'background-color': locals.color, 'background-image': 'url(' + Aeppic.Content.getThumbnailSrc(locals.document, 'foto') + ')' }\" class=\"_CSS-image\" >\n    <!-- <img style=\"height:52px\" :src=\"Aeppic.Content.getThumbnailSrc(locals.document, 'foto')\">  -->\n  </div>\n  <span :title=\"controller.title\" v-else-if=\"locals.data.name\" :style=\"{ 'background-color': locals.color }\" class=\"_CSS-initials\" >{{locals.initials}}</span>\n  <span :title=\"controller.title\" v-else :style=\"{ color: locals.color }\" class=\"_CSS--no-image\"  ><ae-icon class=\"fa fa-user \" style=\"color:gray\" ></ae-icon></span>\n</template>","css":"._CSS {\n  display: flex;\n  justify-content: flex-start;\n  width: auto;\n  /* padding-left: 8px; */\n  /* height: 64px; */\n  align-items: center;\n}\n\n._CSS--no-image {\n  background: lightgray;\n  width: 36px;\n  height: 36px;\n  border-radius: 50%;\n  overflow:none;\n  display:flex;\n  align-items:center;\n  justify-content: center;\n}\n\n._CSS--no-image > * {\n  width: 16px;\n  height: 16px;\n}\n\n._CSS--name-avatar {\n\n}\n\n._CSS-initials {\n  height: 36px;\n  width: 36px;\n  border-radius: 50%;\n  display: flex;\n  align-items:center;\n  justify-content: center;\n  color:white;\n  font-size: 14px;\n  font-weight: bold;\n  font-family:'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;\n  box-shadow: var(--ae-shadow-inset);\n}\n \n._CSS--no-image {\n  opacity: 0.4;\n  font-size: 36px;\n}\n\n._CSS-image {\n  height: 36px;\n  width: 36px;\n  border-radius: 50%;\n  background-repeat: no-repeat;\n  background-size: cover;\n  xbackground-position: center;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  overflow:hidden;\n}","controller":"async init() {\n  locals.document = null\n  locals.data = null\n  locals.color  = null\n  locals.initials = null\n\n  await this.updateLocals(params.field?.[0])  \n\n  watchParam('field', async (newField) => {\n    await this.updateLocals(newField?.[0])\n  })\n}\n\nasync updateLocals(document) {\n  if (!document || !document.id) {\n    locals.document = null\n    locals.data = null\n    locals.color  = null\n    locals.initials = null\n    return\n  }\n\n  locals.document = await Aeppic.get(document)\n  locals.data = locals.document.data\n  locals.color = this.intToRGB(this.hashCode(locals.document.id))\n\n  if (locals.data.vorname.length === 0) {\n    locals.initials = (locals.data.nachname.slice(0,1)).toUpperCase()\n  } else {\n    locals.initials = (locals.data.vorname.slice(0,1) + locals.data.nachname.slice(0,1)).toUpperCase()\n  }\n}\n\nhashCode(str) { // java String#hashCode\n  var hash = 0;\n  for (var i = 0; i < str.length; i++) {\n      hash = str.charCodeAt(i) + ((hash << 5) - hash);\n  }\n  return hash;\n} \n\n intToRGB(i) {\n  var c = (i & 0x00FFFFFF)\n      .toString(16)\n      .toUpperCase();\n\n  return '#' + '00000'.substring(0, 6 - c.length) + c;\n}\n\nget title() {\n  const parts = []\n  \n  locals.data.vorname && parts.push(locals.data.vorname)\n  locals.data.name && parts.push(locals.data.name)\n  locals.data.position && parts.push(`(${locals.data.position})`)\n  \n  return parts.join(' ')\n}","packages":[]},"locks":[],"created":{"at":"2025-01-24T15:35:58+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2025-01-24T15:39:38+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1737733178171,"ct":1737732961426,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","2add3026-2869-40ea-9e6d-dcb14ef0ba19"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2022-05-02T15:10:41+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1674832581753,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    $emit('disable-navigation-handlers')\n\n    locals.ready = false\n\n    try {\n      if (typeof tailwind !== 'undefined') {\n        if (Aeppic.LocalStorage.getValue('redesign-allow-darkmode')) {\n          tailwind.config = {\n            darkMode: 'media',\n            theme: { extend: {} },\n          }\n        } else {\n          tailwind.config = {\n            darkMode: 'selector',\n            theme: { extend: {} },\n          }\n        }\n\n        // https://tailwindcss.com/docs/screens\n        tailwind.config.theme.extend.screens = {\n          '3xl': '2000px',\n        }\n      }\n    } catch (e) {\n      console.error('Error config tailwind', e)\n    }\n\n    locals.errors = 0\n    locals.menu = []\n    locals.openMenus = []\n    locals.submenuView = ''\n    locals.unreadNotifications = 0\n    locals.company = null\n    locals.settings = null\n    locals.windowSize = ''\n    locals.windowWidth = 0\n    locals.structuralForms = []\n    locals.transparentForms = []\n    locals.showBurgerMenu = false\n    locals.showStatusGrid = false\n    locals.persitentShowStatusGrid = false\n    locals.showNotificationsOnLoad =\n      Aeppic.Root.params?.queryParams && 'openNotifications' in Aeppic.Root.params.queryParams\n    locals.highlightAttributeDataTest = false\n    locals.loggedInUser = Aeppic.ProfilePage?.data.name\n    locals.currentUserDocuments = {\n      pinsDocument: null,\n    }\n\n    locals.pageDocuments = []\n    locals.activePageDocument = null\n    locals.pageParams = []\n    locals.activePageParams = null\n    this.drilledPageParams = null\n    locals.companies = []\n    locals.companiesAsDropdownOptions = []\n    locals.activeCompaniesAsDropdownOptions = []\n    locals.activeCompanyBizpinSettings = {\n      disableComments: null,\n    }\n\n    locals.hostname = packages.window?.location.hostname || ''\n\n    this.COMMANDS = {\n      ResolveTab: 'eb41d54d-32b8-4f14-94b0-23316dac1418',\n    }\n\n    this.drillIntoHandler = async (event) => {\n      event.preventDefault()\n      event.stopPropagation()\n\n      const document = await Aeppic.get(event.detail.targetDocument)\n\n      console.log('drillIntoHandler', packages.window.location.href, { event, document }, document.id)\n\n      const eventParams = { ...event.detail }\n\n      const {\n        // exclude params for drilling (use for nextDrilledPageParams)\n        documents,\n        documentsIndex,\n        // exclude Aeppic internals from remaining (do nothing with them)\n        targetDocument,\n        sourceContext,\n        sourceElement,\n        // --\n        ...remainingDetails\n      } = eventParams\n\n      let nextDrilledPageParams = {}\n\n      if (documents !== null && documentsIndex !== null) {\n        nextDrilledPageParams = {\n          ...nextDrilledPageParams,\n          documents,\n          documentsIndex,\n        }\n      }\n\n      console.log('drillIntoHandler', { remainingDetails, nextDrilledPageParams })\n\n      this.nextDrilledPageParams = nextDrilledPageParams\n\n      this.nextPageParams = remainingDetails\n\n      await this._navigateToWithDrill(document, remainingDetails)\n    }\n\n    // TODO: removed capture here, since it prevents e.g. ae-dialog from preventing drillInto\n    packages.window.addEventListener('ae-drill-into', this.drillIntoHandler, { capture: true })\n\n    this.onNavigationHandler = async (event) => {\n      console.log('on-ae-navigate', packages.window.location.href, {\n        event,\n        queryParams: Aeppic.Root.params.queryParams,\n      })\n\n      if (event.detail?.drill) {\n        this.nextNavigationType = 'ae-drill-into'\n      } else {\n        this.nextNavigationType = 'ae-navigate'\n      }\n\n      if (\n        this.isResolvingTabNavigation ||\n        event.detail?.drill ||\n        event.detail?.history?.historic ||\n        event.detail?.tab ||\n        event.detail?.queryParams?.tab\n      ) {\n        return\n      }\n\n      const documentId = event.detail?.documentId\n\n      if (!documentId) {\n        return\n      }\n\n      event.preventDefault()\n      event.stopPropagation()\n\n      await this._navigateToWithResolvedTab(\n        documentId,\n        this._navigationParamsFromEventDetail(event.detail),\n      )\n    }\n\n    // TODO: removed capture here, since it prevents e.g. ae-dialog from preventing drillInto\n    packages.window.addEventListener('ae-will-navigate', this.onNavigationHandler, { capture: true })\n\n    this.onClickOpenNewTabInsteadOfNavigation = (event) => {\n      if (event.target.tagName !== 'A') {\n        return\n      }\n\n      const href = event.target.getAttribute('href')\n      if (!href) {\n        return\n      }\n\n      if (!href.startsWith('http') && !href.startsWith('www')) {\n        return\n      }\n\n      event.preventDefault()\n\n      packages.window.open(href, '_blank')\n    }\n\n    packages.window.addEventListener('click', this.onClickOpenNewTabInsteadOfNavigation)\n\n    watchParam(\n      'pageInfo',\n      async (info) => {\n        console.log('pageInfo', { info })\n\n        if (info.loading) {\n          console.warn('SKIPPING pageInfo because loading')\n          return\n        }\n\n        const { document, canEdit } = info\n\n        console.log('watch.pageDocument: UPDATE', {\n          newDocId: document?.id,\n          canEdit: canEdit,\n          nextNavigationType: this.nextNavigationType,\n        })\n\n        if (!document) {\n          console.warn('watch.pageDocument: IGNORE because document is null')\n          return\n        }\n\n        const preventNavigationForms = ['account']\n\n        if (preventNavigationForms.includes(document.f.id)) {\n          return\n        }\n\n        // descendant of preferences\n        if (document.a_forms.includes('643508ca-fc18-4d2e-bb13-b3c3f2ac053b')) {\n          return\n        }\n\n        const queryTab = Aeppic.Root.params?.queryParams?.tab\n        const resolvedTab =\n          this.nextPageParams?.tab ??\n          info.pageParams?.tab ??\n          queryTab ??\n          await this._resolveTabForDocument(document)\n\n        const shouldCanonicalizeTab =\n          !this.nextPageParams?.tab &&\n          !info.pageParams?.tab &&\n          (queryTab == null || queryTab === '') &&\n          resolvedTab != null &&\n          resolvedTab !== ''\n\n        if (shouldCanonicalizeTab) {\n          await this._navigateToWithResolvedTab(document.id, {\n            ...Aeppic.Root.params?.queryParams,\n            tab: resolvedTab,\n          })\n        }\n\n        const newPageDocuments = [...locals.pageDocuments, document]\n        const newPageParams = [\n          ...locals.pageParams,\n          {\n            ...this.nextPageParams,\n            tab: resolvedTab,\n            readonly: !canEdit,\n            disableComments: locals.activeCompanyBizpinSettings.disableComments,\n          },\n        ]\n\n        locals.activePageDocument = newPageDocuments.slice(-1)[0]\n        locals.activePageParams = newPageParams.slice(-1)[0]\n\n        this.drilledPageParams = { ...this.nextDrilledPageParams }\n        this.nextDrilledPageParams = null\n        this.nextPageParams = null\n\n        // ATTENTION: wir testen hier gerade ob das verzichten auf cached pages die tests in playwright verbessert\n        locals.pageDocuments = newPageDocuments.slice(-1)\n        locals.pageParams = newPageParams.slice(-1)\n\n        // if (this.nextNavigationType === 'ae-navigate') {\n        //   locals.pageDocuments = newPageDocuments.slice(-1)\n        //   locals.pageParams = newPageParams.slice(-1)\n        // } else if (locals.pageDocuments.length >= 3) {\n        //   // limit page history to 3\n        //   locals.pageDocuments = newPageDocuments.slice(-3)\n        //   locals.pageParams = newPageParams.slice(-3)\n        // } else {\n        //   locals.pageDocuments = newPageDocuments\n        //   locals.pageParams = newPageParams\n        // }\n\n        console.log('pageInfo: new active', {\n          activePageDocument: locals.activePageDocument,\n          activePageParams: locals.activePageParams,\n          drilledPageParams: this.drilledPageParams,\n        })\n\n        this.updateHtmlDocumentTitle(document)\n      },\n      {\n        deep: true,\n        immediate: true,\n      },\n    )\n\n    this.onResizeHandler = () => {\n      const windowWidth = $refs?.container?.ownerDocument?.body?.clientWidth || 0\n\n      locals.windowWidth = windowWidth\n      locals.showBurgerMenu = windowWidth < 1024 // below tailwind lg breakpoint\n\n      if (!locals.showBurgerMenu) {\n        locals.showOverlayMenu = false\n      }\n    }\n\n    packages.window.addEventListener('resize', this.onResizeHandler)\n\n    this.onResizeHandler()\n\n    Aeppic.on('change', async (op) => {\n      if (!(op?.type === 'deleted') || !op.document) {\n        return\n      }\n\n      if (op.document.id === locals.activePageDocument?.id) {\n        locals.pageDocuments.splice(-1, 1)\n        locals.pageParams.splice(-1, 1)\n\n        const otherPageDocuments = await Aeppic.getAll(locals.pageDocuments)\n\n        if (otherPageDocuments.length) {\n          for (let i = otherPageDocuments.length - 1; i >= 0; i--) {\n            const document = otherPageDocuments[i]\n\n            // might be also not existing anymore\n            if (!document) {\n              locals.pageDocuments.splice(i, 1)\n              locals.pageParams.splice(i, 1)\n\n              continue\n            }\n\n            locals.activePageDocument = locals.pageDocuments.slice(-1)[0]\n            locals.activePageParams = locals.pageParams.slice(-1)[0]\n\n            return\n          }\n        }\n\n        Aeppic.navigateTo(locals.activePageDocument.p)\n      }\n    })\n\n    //\n    // async code below\n    //\n\n    // await this.insertTailwind3()\n\n    const companyId =\n      (Aeppic.Account?.data.allowDevMode && Aeppic.LocalStorage.getItem('activeCompanyId')) || params.companyId\n\n    await this._onCompanyUpdate(companyId)\n\n    if (Aeppic.Account?.data.allowDevMode) {\n      locals.companies = await Aeppic.find('p:root f.id:c69a0c1c-6c53-40c2-87e8-5ace866bf1df', {\n        sort: ['data.name', 'id'],\n      })\n      locals.companiesAsDropdownOptions = locals.companies.map((c) => ({\n        identifier: c.id,\n        display: c.data.name,\n        iconDesign: true,\n        documentId: c.id,\n      }))\n\n      locals.activeCompaniesAsDropdownOptions = [\n        locals.companiesAsDropdownOptions.find((c) => c.identifier === companyId)?.identifier,\n      ]\n\n      if (companyId && locals.companies.length) {\n        const existingCompany = locals.companies.find((c) => c.id === companyId)\n        await this._onCompanyUpdate(existingCompany?.id || locals.companies[0]?.id)\n      }\n    }\n\n    await Aeppic.nextRenderPass()\n\n    this._setupClick()\n\n    this._onNavigatedHandler = (event) => this.onNavigated(event)\n    $refs.hiddenDomElement.$root.$el.addEventListener('ae-navigated', this._onNavigatedHandler)\n\n    // always load print stylesheet\n    Aeppic.loadStylesheet('ea6ecb86-a778-4ba8-bfb4-2e16bf2193e2')\n\n    if (Aeppic.Root.params.queryParams) {\n      if (Aeppic.Root.params.queryParams.view) {\n        const view = Aeppic.Root.params.queryParams.view\n        const menu = locals.menu.find((m) => this.isMenuActive(m))?.submenu.find((s) => s.identifier === view)\n\n        if (menu) {\n          locals.submenuView = view\n        }\n      }\n    }\n\n    this.onResizeHandler()\n    // this.setupErrorHandlers()\n\n    locals.currentUserDocuments = {\n      pinsDocument: await this._getOrCreatePinsDocument(),\n    }\n\n    locals.ready = true\n\n    this._setupMemoryCollection()\n  }\n\n  async _getOrCreatePinsDocument() {\n    const FORMS = {\n      Pins: '271894b3-6ed5-49f2-9234-9fdd5f7c02aa',\n    }\n\n    let pinsDocument = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${FORMS.Pins}`, {\n      sort: { field: 'created.at', descending: true },\n    })\n\n    if (!pinsDocument) {\n      const newDocument = await Aeppic.new(FORMS.Pins, Aeppic.Account.id)\n      Aeppic.save(newDocument)\n\n      pinsDocument = newDocument.cloneAsDocument()\n    }\n\n    return pinsDocument\n  }\n\n  async onCompanySelected(companyOption) {\n    console.log({ companyOption })\n    locals.activeCompaniesAsDropdownOptions = [companyOption.identifier]\n    await this._onCompanyUpdate(companyOption.identifier)\n\n    Aeppic.LocalStorage.setItem('activeCompanyId', companyOption.identifier)\n  }\n\n  // async insertTailwind3() {\n  //   await Aeppic.nextRenderPass()\n\n  //   const domDocument = $refs.hiddenDomElement.$el.ownerDocument\n\n  //   if (domDocument.head.querySelector('#tailwind')) {\n  //     return\n  //   }\n\n  //   const script = domDocument.createElement('script')\n  //   script.id = 'tailwind'\n  //   script.type = 'text/javascript'\n  //   script.src = 'https://itm.bizpin.de/tailwind_3.4.17.js'\n\n  //   domDocument.head.appendChild(script)\n  // }\n\n  async updateHtmlDocumentTitle(document) {\n    if (!$refs.hiddenDomElement) {\n      // initial call from init happens before \"mounted\" hook\n      await Aeppic.nextRenderPass()\n    }\n\n    if (!this.originalDocumentTitle) {\n      // NOTE: original title is most likely 'aeppic'. overwrite that!\n      const originalTitle = $refs.hiddenDomElement.$el.ownerDocument.title\n\n      if (originalTitle === 'aeppic') {\n        this.originalDocumentTitle = 'bizpin'\n      } else {\n        this.originalDocumentTitle = originalTitle\n      }\n    }\n\n    if (document?.data.label || document?.data.name) {\n      $refs.hiddenDomElement.$el.ownerDocument.title =\n        `${document.data.label || document.data.name} | ${this.originalDocumentTitle}` || this.originalDocumentTitle\n    } else {\n      $refs.hiddenDomElement.$el.ownerDocument.title = this.originalDocumentTitle\n    }\n  }\n\n  async _onCompanyUpdate(companyId) {\n    try {\n      if (typeof tailwind != 'undefined') {\n        const companyCi =\n          companyId && (await Aeppic.findOne(`p:${companyId} f.id:81da74f7-1abf-48c1-add1-18266cd4c30e`))\n\n        if (companyCi) {\n          try {\n            tailwind.config.theme.extend.colors = JSON.parse(companyCi.data.colors)\n          } catch (error) {\n            console.error(`Error parsing company CI: ${error}`)\n          }\n        } else {\n          tailwind.config.theme.extend.colors = {\n            primary: tailwind.colors.blue,\n            secondary: tailwind.colors.slate,\n            'brand-accent': tailwind.colors.lime,\n            'brand-accent-secondary': tailwind.colors.fuchsia,\n            info: tailwind.colors.indigo,\n            warn: tailwind.colors.amber,\n            error: tailwind.colors.rose,\n          }\n        }\n      }\n    } catch (err) {\n      console.error('Error configuring company CI or tailwind', { err })\n    }\n\n    locals.company = await Aeppic.get(companyId)\n\n    if (!locals.company) {\n      console.warn('company not found')\n      return\n    }\n\n    async function getSecurityAdministratorsGroups(document) {\n      if (!document.a) {\n        return null\n      }\n\n      const securityFolders = await Aeppic.find(`a:${document.a[0]} f.id:81939b86-a48e-480e-afd1-cb2907568550`)\n\n      if (!securityFolders.length) {\n        return null\n      }\n\n      const groups = await Promise.all(securityFolders.map((s) => Aeppic.get(s.data.securityGroup.id)))\n\n      return groups.filter((d) => !!d)\n    }\n\n    async function hasAccessToDocument(document) {\n      if (!document) {\n        return false\n      }\n\n      const securityFolderFormId = '81939b86-a48e-480e-afd1-cb2907568550'\n      if (document.f.id === securityFolderFormId) {\n        if (!Aeppic.Account || !Aeppic.Account.data.groups) {\n          return false\n        }\n\n        if (Aeppic.Account.data.isAdmin) {\n          return true\n        }\n\n        const securityAdministrators = await getSecurityAdministratorsGroups(Aeppic.Account)\n        if (!securityAdministrators.length) {\n          return false\n        }\n\n        const isSecurityAdmin = securityAdministrators.find((group) =>\n          Aeppic.Account.data.groups.find((accountGroup) => accountGroup.id === group.id),\n        )\n\n        if (!isSecurityAdmin) {\n          return false\n        }\n      }\n\n      return true\n    }\n\n    const menu = await Promise.all(\n      locals.company.data.menu.map(async (entry) => {\n        const entryDocument = await Aeppic.get(entry)\n\n        if (!entryDocument) {\n          return null\n        }\n\n        let document = null\n\n        let shouldHaveDocument = false\n\n        if (entryDocument.data.lookupByDocument.id) {\n          shouldHaveDocument = true\n          document = await Aeppic.get(entryDocument.data.lookupByDocument)\n        }\n\n        if (entryDocument.data.lookupByForm.id) {\n          shouldHaveDocument = true\n          document = await Aeppic.findOne(`p:${locals.company.id} f.id:${entryDocument.data.lookupByForm.id}`)\n        }\n\n        if (entryDocument.data.lookupByRepositoryFolderForm?.id) {\n          shouldHaveDocument = true\n          document = await Aeppic.findOne(\n            `p:${locals.company.id} f.id:repository-folder-form data.contentsForm:${entryDocument.data.lookupByRepositoryFolderForm.id}`,\n          )\n        }\n\n        if (shouldHaveDocument) {\n          if (!document) {\n            return null\n          }\n\n          if (!(await hasAccessToDocument(document))) {\n            return null\n          }\n\n          if (entryDocument.data.showIfEditable) {\n            if (!(await Aeppic.canEdit(document))) {\n              return null\n            }\n          }\n        }\n\n        // const submenu = (await Aeppic.getAll(entryDocument.data.submenu)).filter(d => !!d)\n\n        const menuEntry = {\n          ...entryDocument.data,\n          document,\n          identifier: entryDocument.id,\n          submenu: (\n            await Promise.all(\n              entryDocument.data.submenu.map(async (s) => {\n                const submenu = await Aeppic.get(s)\n\n                if (!submenu) {\n                  return null\n                }\n\n                const submenuData = {\n                  ...submenu.data,\n                  document: null,\n                }\n\n                // a menu with a sucessful document lookup should use that as realm. elsewise just use the company\n                const realmDocument = document?.id || locals.company?.id\n\n                if (submenu.data.lookupByIdentifier) {\n                  submenuData.document = await Aeppic.findOne(\n                    `p:${realmDocument} data.identifier:${submenu.data.identifier}`,\n                  )\n                } else if (submenu.data.lookupByDocument?.id) {\n                  submenuData.document = await Aeppic.get(submenu.data.lookupByDocument)\n                } else if (submenu.data.lookupByForm?.id) {\n                  submenuData.document = await Aeppic.findOne(`p:${realmDocument} f.id:${submenu.data.lookupByForm.id}`)\n                } else if (submenu.data.lookupByRepositoryFolderForm?.id) {\n                  submenuData.document = await Aeppic.findOne(\n                    `p:${realmDocument} f.id:repository-folder-form data.contentsForm:${submenu.data.lookupByRepositoryFolderForm.id}`,\n                  )\n                } else {\n                  // a regular submenu without document lookups\n                  return submenuData\n                }\n\n                if (!submenuData.document) {\n                  return null\n                }\n\n                if (!(await hasAccessToDocument(submenuData.document))) {\n                  return null\n                }\n\n                if (submenuData.showIfEditable) {\n                  if (!(await Aeppic.canEdit(submenuData.document))) {\n                    return null\n                  }\n                }\n\n                return submenuData\n              }),\n            )\n          ).filter((d) => !!d),\n        }\n\n        return menuEntry\n      }),\n    )\n\n    locals.menu = menu.filter((e) => !!e)\n\n    const apps = await Aeppic.getAll(locals.menu.map((m) => m.app))\n\n    // NOTE: adding structural to query would be the 'correct' way do to this. But I think it might be beneficial to prefetch all forms of all installed apps. One might change this later? @rscheinpflug/2023-01-17\n    // const structuralForms = (await Aeppic.find(`f.id:form (${apps.map(a => `a:${a.id}`).join(' OR ')}) `, { size: 9999 })).filter(f => f.data.tags?.includes('structural'))\n    // transparent implies structural (see rd:navigation), so both tags feed the same query\n    const structuralForms = (await Aeppic.find(`f.id:form (data.tags:*structural* OR data.tags:*transparent*)`, { size: 9999 })).filter((f) =>\n      f.data.tags?.includes('structural') || f.data.tags?.includes('transparent'),\n    )\n    locals.structuralForms = structuralForms\n    locals.transparentForms = structuralForms.filter((f) => f.data.tags?.includes('transparent'))\n\n    locals.settings = await Aeppic.findOne(`p:${locals.company.id} f.id:24842415-3690-4cad-82b9-b959ae7621c6`)\n\n    const menusToOpen = locals.menu.filter((m) => m.openOnInitialLoad === true)\n\n    menusToOpen.forEach((menu) => this.toggleMenu(menu, true))\n\n    const commentsEnabled = await await Aeppic.Preferences.getSettingForDocument(\n      'bizpin:comments:enabled',\n      locals.company,\n    )\n\n    locals.activeCompanyBizpinSettings.disableComments =\n      typeof commentsEnabled === 'boolean' ? !commentsEnabled : undefined\n\n    // TODO:  watchParam('pageInfo') should ideally wait for the company to be updated and then set the activePageParams\n    if (locals.activePageParams && typeof locals.activeCompanyBizpinSettings.disableComments === 'boolean') {\n      locals.activePageParams.disableComments = locals.activeCompanyBizpinSettings.disableComments\n    }\n  }\n\n  onNavigated(event) {\n    const isHistoric = event.detail.history?.historic\n\n    console.debug('onNavigated', JSON.stringify(event.detail), { isHistoric, pageDocuments: locals.pageDocuments.length, pageParams: locals.pageParams })\n\n    if (isHistoric) {\n      this.unsetDrill()\n\n      // if (event.detail?.queryParams?.view) {\n      //   locals.submenuView = event.detail.queryParams.view || ''\n      // }\n    }\n\n    if (event.detail?.queryParams?.tab) {\n      console.debug('setting queryParams.tab = ', event.detail.queryParams.tab)\n      // splice pageParams due to Vue reactivity caveats\n      const lastPageParams = locals.pageParams.slice(-1)[0]\n      locals.pageParams.splice(locals.pageParams.length - 1, 1, {\n        ...lastPageParams,\n        tab: event.detail.queryParams.tab,\n      })\n    }\n    //  else {\n    //   console.log('DEBUG need to resolve tab?')\n\n    //   const document = locals.activePageDocument\n    //   const tabPersistanceKey = `bp-tab-lA-form-ancestor_${document.f.id}_${document.a[0]}`\n    //   console.log('DEBUG LS tab', Aeppic.LocalStorage.getValue(tabPersistanceKey))\n    // }\n\n    if (event.detail?.queryParams?.view) {\n      locals.submenuView = event.detail.queryParams.view || ''\n    }\n\n    if (!event.detail?.view && !event.detail?.queryParams?.view) {\n      console.warn('unset submenuView')\n      locals.submenuView = ''\n    }\n  }\n\n  unsetDrill() {\n    console.log('unsetDrill', locals.pageDocuments.length)\n\n    // if (locals.pageDocuments.length >= 2) {\n    //   locals.pageDocuments.splice(-1, 1)\n    //   locals.activePageDocument = locals.pageDocuments.slice(-1)[0]\n\n    //   locals.pageParams.splice(-1, 1)\n    //   locals.activePageParams = locals.pageParams.slice(-1)[0]\n    // }\n  }\n\n  get isDrilled() {\n    return this.drilledPageParams?.documentsIndex != null && this.drilledPageParams.documents?.length >= 2\n  }\n\n  get canGoBack() {\n    if (this.drilledPageParams?.documentsIndex == null || !this.drilledPageParams.documents) {\n      return null\n    }\n\n    return this.drilledPageParams.documentsIndex > 0 && this.drilledPageParams.documents.length\n  }\n\n  get canGoForward() {\n    if (this.drilledPageParams?.documentsIndex == null || !this.drilledPageParams.documents) {\n      return null\n    }\n\n    return this.drilledPageParams.documentsIndex + 1 < this.drilledPageParams.documents.length\n  }\n\n  drilledGoBack() {\n    if (!this.canGoBack) {\n      return\n    }\n\n    const newIndex = this.drilledPageParams.documentsIndex - 1\n    const document = this.drilledPageParams.documents[newIndex]\n\n    Aeppic.drillInto(document, {\n      documents: this.drilledPageParams.documents,\n      documentsIndex: newIndex,\n    })\n  }\n\n  async _navigateToWithDrill(targetDocument, pageParams) {\n    pageParams = pageParams || {}\n\n    // NOTE @rsch removed because tab would never go away\n    // ...Aeppic.Root.params.queryParams,\n    const tab = pageParams.tab ?? await this._resolveTabForDocument(targetDocument)\n    const nextParams = { view: undefined, drill: true, deleted: undefined }\n\n    if (tab != null && tab !== '') {\n      nextParams.tab = tab\n    }\n\n    Aeppic.navigateTo(targetDocument, nextParams)\n  }\n\n  async _navigateToWithResolvedTab(documentIdentifier, navigationParamsArg) {\n    const navigationParams = navigationParamsArg ?? {}\n    const targetDocument = await Aeppic.get(documentIdentifier)\n    const tab = navigationParams.tab ?? await this._resolveTabForDocument(targetDocument)\n\n    this.isResolvingTabNavigation = true\n    try {\n      const nextParams = {\n        ...navigationParams,\n      }\n\n      delete nextParams.tab\n\n      if (tab != null && tab !== '') {\n        nextParams.tab = tab\n      }\n\n      Aeppic.navigateTo(documentIdentifier, nextParams)\n    } finally {\n      this.isResolvingTabNavigation = false\n    }\n  }\n\n  _navigationParamsFromEventDetail(detail) {\n    const { documentId, ...navigationParams } = detail || {}\n\n    return navigationParams\n  }\n\n  async _resolveTabForDocument(document) {\n    if (!document) {\n      return undefined\n    }\n\n    // Note: The local storage is stringified before being passed to the Command\n    const result = await Aeppic.Commands.execute(this.COMMANDS.ResolveTab, document, {localStorageValues: Aeppic.LocalStorage})\n\n    if (result?.ok) {\n      return result.value\n    }\n\n    console.error('Could not resolve initial tab', result)\n    return undefined\n  }\n\n  drilledGoForward() {\n    if (!this.canGoForward) {\n      return\n    }\n\n    const newIndex = this.drilledPageParams.documentsIndex + 1\n    const document = this.drilledPageParams.documents[newIndex]\n\n    Aeppic.drillInto(document, {\n      documents: this.drilledPageParams.documents,\n      documentsIndex: newIndex,\n    })\n  }\n\n  onMenu(menu) {\n    console.log({ menu }, menu.submenu?.length)\n\n    if (menu.submenu?.length === 0) {\n      locals.submenuView = ''\n\n      Aeppic.navigateTo(menu.document)\n      return\n    }\n\n    if (this.isMenuActive(menu)) {\n      console.log('onMenu: toggleMenu', menu)\n      if (menu.document?.id === locals.activePageDocument?.id) {\n        this.toggleMenu(menu)\n      } else {\n        if (this.isMenuOpen(menu)) {\n          this.onSubMenu(menu, menu.submenu[0])\n        } else {\n          this.toggleMenu(menu)\n          this.onSubMenu(menu, menu.submenu[0])\n        }\n      }\n      return\n    }\n\n    this.toggleMenu(menu)\n  }\n\n  isMenuOpen(menu) {\n    return locals.openMenus.findIndex((identifier) => identifier === menu.identifier) > -1\n  }\n\n  toggleMenu(menu, noNavigation = false) {\n    const index = locals.openMenus.findIndex((identifier) => identifier === menu.identifier)\n\n    if (index === -1) {\n      locals.openMenus.push(menu.identifier)\n\n      const isMenuActive = this.isMenuActive(menu)\n\n      if (!noNavigation && !isMenuActive) {\n        // open first menu entry of submenu\n        this.onSubMenu(menu, menu.submenu[0])\n      }\n    } else {\n      locals.openMenus.splice(index, 1)\n    }\n  }\n\n  isMenuActive(menu) {\n    // console.log({ name: menu.name, menu, pageApplicationId: params.pageInfo.pageApplicationId, activePageDocument: locals.activePageDocument })\n\n    if (menu.lookupByDocument.id) {\n      return (\n        locals.activePageDocument?.id === menu.lookupByDocument.id ||\n        locals.activePageDocument?.a.includes(menu.lookupByDocument.id)\n      )\n    }\n\n    if (menu.lookupByForm.id) {\n      return (\n        locals.activePageDocument?.a_forms.includes(menu.lookupByForm.id) ||\n        locals.activePageDocument?.f.id === menu.lookupByForm.id\n      )\n    }\n\n    if (menu.lookupByRepositoryFolderForm?.id) {\n      return (\n        locals.activePageDocument?.f.id === 'repository-folder-form' &&\n        locals.activePageDocument?.data.contentsForm?.id === menu.lookupByRepositoryFolderForm.id\n      )\n    }\n\n    return params.pageInfo.applicationId === menu.app.id\n  }\n\n  onSubMenu(menu, submenu) {\n    console.log('onSubMenu', { menu, submenu })\n\n    locals.submenuView = submenu.identifier\n    locals.showOverlayMenu = false\n\n    if (submenu.document) {\n      Aeppic.navigateTo(submenu.document, { view: submenu.identifier })\n    } else {\n      Aeppic.navigateTo(menu.document, { view: submenu.identifier })\n    }\n  }\n\n  get allowDebugMode() {\n    return Aeppic.Account?.data.allowDevMode || packages.window?.location.hostname.includes('bizpin-dev.bizpin.de')\n  }\n\n  logoutGroupAccount() {\n    if (confirm('Wollen Sie das Gruppenkonto auf diesem Arbeitsplatz entfernen ?')) {\n      Aeppic.onLinkClicked(null, '/')\n      Aeppic.logout()\n    }\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) {\n    if (!$refs[refName] || !$refs[refName].$el || !$refs[refName].$el.children) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(\n        new CustomEvent(eventName, {\n          detail: eventValue,\n        }),\n      )\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n  setupErrorHandlers() {\n    const originalConsoleError = console.error\n\n    const logError = (...error) => {\n      locals.errors += 1\n      originalConsoleError(error)\n    }\n\n    const domRoot = $refs.hiddenDomElement.$el.getRootNode()\n\n    domRoot.onunhandledrejection = (...args) => logError(...args)\n    domRoot.onerror = (...args) => logError(...args)\n\n    console.error = (...args) => logError(...args)\n  }\n\n  toggleDataTestHighlight() {\n    locals.highlightAttributeDataTest = !locals.highlightAttributeDataTest\n  }\n\n  async _setupMemoryCollection() {\n    // performance.measureUserAgentSpecificMemory() is only available in cross-origin-isolated pages\n    if (!packages.window.performance.measureUserAgentSpecificMemory) {\n      return\n    }\n\n    function measurementInterval() {\n      const MEAN_INTERVAL_IN_MS = 3 * 60 * 1000\n      return -Math.log(Math.random()) * MEAN_INTERVAL_IN_MS\n    }\n\n    const run = async () => {\n      const debug = false\n\n      debug && console.log('Starting memory collection...')\n      const measurement = await performance.measureUserAgentSpecificMemory()\n\n      debug && console.log('Done memory collection', { measurement })\n\n      let measurements = []\n      // only save bigger allocations\n      const old = Aeppic.SessionStorage.getValue('debug-memory-allocation')\n      if (old) {\n        measurements.push(...old)\n\n        if (measurements.length > 60) {\n          measurements = measurements.slice(-60)\n        }\n      }\n\n      const info = {\n        measurement,\n        date: Aeppic.DateTime.local().toISO(),\n      }\n\n      measurements.push(info)\n\n      debug && console.log('Done memory collection', info, measurements)\n\n      Aeppic.SessionStorage.setValue('debug-memory-allocation', measurements)\n\n      Aeppic.setTimeout(run, measurementInterval())\n\n      locals.debugMemoryAllocation = info\n    }\n\n    await run()\n  }\n\n  _setupClick() {\n    this.onClickHandler = (clickEvent) => {\n      if (!locals.showBurgerMenu) {\n        return\n      }\n\n      const clickIsInContainer = clickEvent\n        .composedPath()\n        .find((p) => p === $refs.sidebar || p.classList?.contains('bizpin-app-20-layout-do-not-close-on-click'))\n\n      // console.log({ clickIsInContainer, clickEvent }, clickEvent.composedPath(), $refs.sidebar)\n\n      if (!clickIsInContainer) {\n        locals.showOverlayMenu = false\n      }\n    }\n\n    packages.window.addEventListener('click', this.onClickHandler, true)\n  }\n\n  _tearDownClick() {\n    packages.window.removeEventListener('click', this.onClickHandler, true)\n  }\n\n  destroy() {\n    packages.window.removeEventListener('ae-drill-into', this.drillIntoHandler, { capture: true })\n    packages.window.removeEventListener('ae-will-navigate', this.onNavigationHandler, { capture: true })\n\n    packages.window.removeEventListener('resize', this.onResizeHandler)\n    packages.window.removeEventListener('click', this.onClickOpenNewTabInsteadOfNavigation)\n\n    this._tearDownClick()\n\n    $refs.hiddenDomElement.$root.$el.removeEventListener('ae-navigated', this._onNavigatedHandler)\n  }\n}\n","css":"._CSS-app {\n  /* enable useragent sytling when darkmode is implemented  */ \n  /* xcolor-scheme: normal; */\n\n  color-scheme: light; /* enable useragent sytling because of darkmode  */ \n\n  font-family: Inter,ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  /* xfont-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; */\n  font-feature-settings: normal;\n  font-variation-settings: normal;\n}\n\n._CSS-menu-no-scrollbars {\n  -ms-overflow-style: none;  /* IE and Edge */\n  scrollbar-width: none;  /* Firefox */\n}\n\n._CSS-menu-no-scrollbars::-webkit-scrollbar {\n  display: none; /* webkit */\n}\n\n._CSS-highlight-data-test [data-test]  {\n  color: rebeccapurple !important;\n  transform:rotate3d;\n  \n  animation: pulse 1s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n  text-decoration-style: wavy;\n  text-decoration-line: underline;\n  border: 1px rebeccapurple dashed !important;\n} ","name":"rd:Bizpin App Layout 2.0","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"d4ce6dec568c3dc1"}],"template":"<div v-if=\"Aeppic.Developer.remoteDeveloperMode === 'Client'\" class=\"fixed z-50 text-xs font-bold text-black p-2 right-16 bottom-0 flex items-center gap-1\">\n    <span title=\"Remote Developer Mode is active\">\n    <ae-icon class=\"fal fa-presentation text-rose-500\"></ae-icon>\n    </span>\n    <span class=\"px-1 bg-yellow-400 rounded p-1\">\n      <span class=\"sm:hidden\">XS</span>\n      <span class=\"hidden sm:inline-block md:hidden\">SM</span>\n      <span class=\"hidden sm:hidden md:inline-block lg:hidden\">MD</span>\n      <span class=\"hidden lg:inline-block xl:hidden\">LG</span>\n      <span class=\"hidden xl:inline-block 2xl:hidden\">XL</span>\n      <span class=\"hidden 2xl:inline-block\">2XL</span>\n      {{locals.windowWidth}}\n    </span>\n\n    <div title=\"Copy 'Remote developer connection' to clipboard \" @click.stop=\"Aeppic.copyToClipboard('Aeppic.Developer.enableRemoteDeveloper(\\\\''+Aeppic.Account.id+'\\\\', \\\\'Client\\\\')')\">\n      <ae-icon class=\"fal fa-plug\"></ae-icon>\n    </div>\n\n    <div title=\"Highlight data-test attributes on html elements\" @click.stop=\"controller.toggleDataTestHighlight()\" :class=\"[ locals.highlightAttributeDataTest && 'text-rose-500']\">\n      <ae-icon class=\"fal fa-microscope\"></ae-icon>\n    </div>\n\n    <div>\n      <ae-layout layout-id=\"9c7df82b-b5fc-47c9-9237-5f337390551a\"></ae-layout>\n    </div>\n\n\n\n    <div v-if=\"Aeppic.Account?.data.allowDevMode\" class=\"flex gap-1\" >\n      <ae-layout layout-id=\"95874087-d16c-46b7-bdc8-38854c466a35\"\n                :param-parent=\"locals.activePageDocument\"\n      ></ae-layout>\n      \n      <!-- <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" param-title=\"Enable/disable rd:MasterList Performance Scrolling\" param-border=\"border\" :param-primary=\"Aeppic.LocalStorage.getValue('master-list-performance-scrolling')\" param-icon=\"far fa-list\" @selected=\"Aeppic.LocalStorage.getValue('master-list-performance-scrolling') ? Aeppic.LocalStorage.removeItem('master-list-performance-scrolling') : Aeppic.LocalStorage.setValue('master-list-performance-scrolling', true)\"></ae-layout>       -->\n    </div>\n\n    <!-- <ae-layout layout-id=\"a797282b-feb6-4878-82a2-bac7a5a98a5b\">\n    </ae-layout> -->\n</div>\n\n<!-- placeholder while loading. Make sure to apply same classes -->\n<section v-if=\"!locals.ready\"\n          ref=\"container\"\n          class=\"_CSS-app h-screen bg-white flex justify-center items-center\"\n>\n  <ae-icon class=\"fa fa-spinner-third fa-2x fa-spin text-theme-400\"></ae-icon>\n</section>\n<section  v-else-if=\"params.pageInfo.document\" \n          ref=\"container\"\n          class=\"_CSS-app h-screen flex bg-white ae-dialog-region\"\n          :class=\"{ '_CSS-highlight-data-test': locals.highlightAttributeDataTest }\"\n          :data-test=\"'layout' + '_' + layout.id\"\n> \n  <!-- sidebar --> \n  <section v-if=\"!locals.showBurgerMenu || locals.showOverlayMenu\"\n          class=\"_CSS-menu-no-scrollbars w-[256px] min-w-[256px] border-r bg-white dark:bg-primary-800 dark:text-white flex flex-col h-full overflow-x-hidden overflow-y-auto\"\n          :class=\"[locals.showOverlayMenu && 'fixed top-0 bottom-0 h-screen left-0 z-50 ease-in-out duration-500  max-w-[90%] shadow-lg']\"\n          id=\"sidebar\"\n          ref=\"sidebar\"\n  >\n    <div class=\"ml-2 flex items-center gap-1 py-1 h-[52px] min-h-[52px]\"> \n      <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              param-icon=\"fa fa-bars\"\n              @selected=\"locals.showOverlayMenu = !locals.showOverlayMenu\"\n              class=\"mr-2\"\n              v-if=\"locals.showBurgerMenu\"\n              param-border=\"border border-primary-200\"\n      ></ae-layout> \n\n      \n      <template v-if=\"Aeppic.Account?.data.allowDevMode\">\n        <!-- {{ locals.companiesAsDropdownOptions.length }} -->\n        <!-- {{ locals.activeCompaniesAsDropdownOptions }} -->\n        <ae-layout layout-id=\"8bc795f2-7ac8-4b95-9019-0b27b178a36e\" \n                  :param-options=\"locals.companiesAsDropdownOptions\"\n                  :param-selected-identifiers=\"locals.activeCompaniesAsDropdownOptions\"\n                  @selected=\"controller.onCompanySelected($event)\"\n                  :class=\"[ locals.showOverlayMenu ? 'w-[140px]' : 'w-[200px]' ]\"\n                  param-popup-classes=\"bizpin-app-20-layout-do-not-close-on-click\" \n        ></ae-layout>\n        <!-- <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  v-if=\"locals.company\"      \n                  param-icon=\"far fa-angle-down\"\n                  :param-text=\"locals.company.data.name\"\n        ></ae-layout> -->\n      </template>\n      <img v-else-if=\"locals.company?.data.logo?.dataUrl\" class=\"ml-2 max-h-[44px] object-contain\" \n      :src=\"Aeppic.Content.getSrc(locals.company, 'logo')\"\n      :class=\"[ locals.showOverlayMenu ? 'max-w-[140px]' : 'max-w-[200px]' ]\">\n      <!-- <ae-design name=\"icon\" :document=\"locals.company\"></ae-design> -->\n      <!-- <img class=\"w-[55%]\" v-if=\"locals.logo\" :src=\"locals.logo\"> -->\n      <div class=\"flex-1\"></div>\n\n<!-- e092d7fc-8e68-4ea0-92d5-9d535626ef0e -->\n      <ae-layout layout-id=\"e092d7fc-8e68-4ea0-92d5-9d535626ef0e\" :param-show-on-load=\"locals.showNotificationsOnLoad\"></ae-layout>\n    </div>\n\n    <!-- search and time tracker -->\n    <div class=\"flex flex-col p-2 gap-y-2\">\n      <ae-layout v-if=\"locals.company\" layout-id=\"896c9789-d13f-4fdc-9b30-9b1d6df4a08b\" :param-company=\"locals.company\"></ae-layout>\n      <ae-layout layout-id=\"ca6783b2-ce5e-4115-a28e-da2c8cdbf38e\" :param-only-timer=\"true\"></ae-layout>\n    </div>\n \n    <!-- menu -->\n    <div class=\"flex-1 flex flex-col xp-2 gap-y-1 overflow-y-auto overflow-x-hidden select-none\" ref=\"menu\">\n      <pre v-if=\"Aeppic.LocalStorage.getItem('debug')\" class=\"fixed z-50 bg-red-50/50 bottom-10 text-xs pointer-events-none\">\n        #debug: params.pageApplicationId: {{ params.pageInfo.applicationId }}\n        locals.submenuView: {{locals.submenuView}}\n        locals.activePageDocument: {{ locals.activePageDocument?.data.name || locals.activePageDocument?.id }}\n        locals.pageDocuments: {{ locals.pageDocuments.length}}\n        <!-- locals.selectedMenu: {{ locals.selectedMenu }} -->\n      </pre>\n      <div v-for=\"menu of locals.menu\"\n          class=\"flex flex-col\"\n          @click.stop=\"controller.onMenu(menu)\"\n          :data-test=\"'main-menu_' + menu.name\"\n      > \n        <div class=\"pl-1 py-2 hover:bg-secondary-50 dark:hover:bg-primary-600 dark:hover:bg-primary-600 cursor-pointer\"\n            :class=\"[controller.isMenuActive(menu) && 'text-primary-600 dark:text-primary-400', controller.isMenuActive(menu) && !locals.openMenus.includes(menu.identifier) && 'xbg-primary-100 dark:xbg-primary-700']\"\n        >\n          <div class=\"px-2 flex gap-4 items-center\"\n          >\n            <div class=\"relative flex items-center\">\n              <ae-icon class=\"text-lg shrink-0\" :class=\"menu.namedIcon\" :style=\"{ color: menu.namedIconColor }\"></ae-icon>\n              <ae-design v-if=\"menu.showUnread\" name=\"rd:menu-unread\" :document=\"menu.document\"\n                          class=\"absolute -right-3 -top-2\"\n              ></ae-design>\n            </div>\n            <span class=\"shrink-1 truncate\" :title=\"menu.name\">{{ menu.name }}</span>\n  \n            <div class=\"flex-1\">\n            </div>\n\n            <ae-icon v-if=\"menu.submenu?.length\" class=\"text-secondary-600 dark:text-secondary-400\" :class=\"locals.openMenus.includes(menu.identifier) ? 'far fa-angle-up' : 'far fa-angle-down'\"></ae-icon>\n          </div>\n        </div>\n\n        <div class=\"flex flex-col\" :class=\"{ '': locals.openMenus.includes(menu.identifier) }\" >\n          <div  v-for=\"submenu of menu.submenu\"\n                :data-test=\"'main-menu_' + menu.name + '_submenu_' + submenu.name\"\n                v-show=\"locals.openMenus.includes(menu.identifier)\"\n                class=\"w-full px-1 py-2 hover:bg-primary-50 dark:hover:bg-primary-600 cursor-pointer\t\"\n                @click.stop=\"controller.onSubMenu(menu, submenu)\"\n                :class=\"[controller.isMenuActive(menu) && locals.submenuView === submenu.identifier && 'xbg-primary-100 dark:xbg-primary-700 text-primary-600']\"\n          >\n            <div class=\"pl-11 pr-4 flex gap-4 items-center relative\"   \n            >\n              <span class=\"shrink-1 truncate\" :title=\"submenu.name\">{{ submenu.name }}</span> \n              <div class=\"flex-1\"></div>\n              <ae-icon class=\"text-lg shrink-0\" :class=\"submenu.namedIcon\" :style=\"{ color: menu.namedIconColor }\"></ae-icon>\n              <ae-design v-if=\"submenu.showUnread\" name=\"rd:menu-unread\" :document=\"menu.document\"\n                          class=\"absolute -right-0 -top-1\"\n              ></ae-design>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"flex-1\"> \n      </div>\n\n      <div v-if=\"Aeppic.Account?.data.allowDevMode && locals.debugMemoryAllocation\" class=\"font-mono text-xs\" title=\"Total memory allocation\">\n        {{ new Intl.NumberFormat().format(locals.debugMemoryAllocation.measurement?.bytes / 1000 / 1000, { style: 'decimal' }) }} MB\n      </div>\n\n      <div v-if=\"locals.hostname.includes('itm')\" class=\"pl-1 py-2\">\n        <div class=\"px-2 border-l-2 border-transparent flex gap-4 items-center text-neutral-600 text-xs\">\nIm Interesse der Lesbarkeit verzichten wir auf die Anwendung gendergerechter Sprache.        </div>\n      </div>\n    </div>\n \n    <!-- timer and avatar -->\n    <div class=\"flex flex-col p-2 gap-y-2\">\n      <ae-layout class=\"-mx-2\" layout-id=\"2b86de0f-13e1-4ac7-81d1-b0c5d8cd4fe3\"></ae-layout>\n\n      <!-- avatar -->\n      <section class=\"flex gap-2 items-center cursor-pointer \" @click.stop=\"$refs.userPopup.toggle($event)\" data-test=\"main-usermanager_open\">\n        <ae-design class=\"text-3xl\" name=\"avatar--resizes-with-font\" :document=\"Aeppic.ProfilePage\"></ae-design>\n        <ae-design name=\"title\" :document=\"Aeppic.ProfilePage\"></ae-design>\n          <ae-popup ref=\"userPopup\" >\n            <div class=\"flex flex-col gap-1 bizpin-app-20-layout-do-not-close-on-click\" slot-scope=\"scope\">\n              <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n               param-icon=\"far fa-hammer\" v-if=\"controller.allowDebugMode && !Aeppic.LocalStorage.getItem('debug')\" class=\" italic\" @selected=\"Aeppic.LocalStorage.setItem('debug', true); Aeppic.reload()\"\n                param-text=\"  enable debug mode (and reload) \">\n              </ae-layout>\n              <ae-layout  v-if=\"controller.allowDebugMode && Aeppic.LocalStorage.getItem('debug')\" layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n               param-icon=\"far fa-hammer\" class=\" italic\" @selected=\"Aeppic.LocalStorage.removeItem('debug'); Aeppic.reload()\"\n                param-text=\"  disable debug mode (and reload)\">\n              </ae-layout>\n              <template v-if=\"Aeppic.Account.data.isGroupAccount\">\n                    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                     param-icon=\"far fa-sign-in\" class=\"\" @selected=\"scope.close(); $refs.loginDialog.show()\"\n                      param-text=\"  Anmelden\" :param-disabled=\"true\" data-test=\"main-usermanager_groupaccount_signin-account\">\n                    </ae-layout>\n                    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                     param-icon=\"far fa-sign-out\"  @selected=\"scope.close(); controller.logoutGroupAccount()\"\n                      param-text=\"  Gruppenkonto abmelden\" data-test=\"main-usermanager_groupaccount_signout\">\n                    </ae-layout>\n                </template>\n                <template v-else>\n\n                  <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                   param-icon=\"far fa-cog\" class=\"\" @selected=\"scope.close(); Aeppic.navigateTo(locals.settings)\" :param-disabled=\"!locals.settings\"\n                    param-text=\"  Einstellungen\" data-test=\"main-usermanager_settings\">\n                  </ae-layout>\n                  <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                   param-icon=\"far fa-user-circle\" v-if=\"Aeppic.ProfilePage\" class=\"\" @selected=\"scope.close(); Aeppic.navigateToProfile()\"\n                    param-text=\"  Mein Profil\" data-test=\"main-usermanager_profile\">\n                  </ae-layout>\n                  <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                   param-icon=\"far fa-sign-out\" class=\"\" @selected=\"$refs.signoutConfirmation.show($event)\"\n                    param-text=\"  Abmelden...\" data-test=\"main-usermanager_account_signout\">\n                  </ae-layout>\n\n                  <ae-popup ref=\"signoutConfirmation\" placement=\"right\" >\n                    <div class=\"flex flex-col bizpin-app-20-layout-do-not-close-on-click\" slot-scope=\"signoutConfirmation\">\n                      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                       param-icon=\"far fa-sign-out\" class=\" flex gap-1\" @selected=\"scope.close(); Aeppic.logout()\"\n                        :param-text=\" locals.loggedInUser + ' abmelden'\" data-test=\"main-usermanager_account_signout_confirm\">\n                      </ae-layout> \n\n                      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                       class=\" flex gap-1\" @selected=\"signoutConfirmation.close();scope.close();\"\n                        param-text=\"  Abbrechen\" data-test=\"main-usermanager_account_signout_cancel\">\n                      </ae-layout>\n                    </div>\n                  </ae-popup>\n              </template>\n\n            </div>\n          </ae-popup>\n      </section>\n    </div>\n  </section>\n\n  <!-- statusgrid -->\n  <div class=\" absolute bottom-2 max-w-full left-0 lg:left-[40vw] z-50 shadow rounded-md\">\n    <div class=\"flex-1 h-full bg-white rounded-md dark:bg-primary-800 dark:text-white \"\n          v-show=\"locals.persitentShowStatusGrid || locals.showStatusGrid\"\n      > \n        <ae-layout layout-id=\"a20f408f-c839-46c6-8893-ea70ac277eb0\"\n                  :param-button=\"true\"\n                  :param-simulate=\"false\"\n                  @show=\"locals.showStatusGrid = true\"\n                    @hide=\"locals.showStatusGrid = false\"\n        ></ae-layout>\n        <ae-layout layout-id=\"51db057d-1f10-49d4-a6fc-69bd8725bbdf\"\n                  :param-button=\"true\"\n                  :param-simulate=\"false\"\n                  @show=\"locals.showStatusGrid = true\"\n                    @hide=\"locals.showStatusGrid = false\"\n        ></ae-layout>\n          <ae-layout layout-id=\"ef5b1302-a613-4947-80dd-48b3c5c53001\"\n                    :param-button=\"true\"\n                    :param-simulate=\"false\" \n                    @show=\"locals.showStatusGrid = true\"\n                    @hide=\"locals.showStatusGrid = false\"\n          ></ae-layout>\n          <ae-layout layout-id=\"60476e05-80d4-45a6-ab35-8964e834a9c3\"\n                  :param-button=\"true\"\n                  :param-simulate=\"false\"\n                  @show=\"locals.persitentShowStatusGrid = true\"\n        ></ae-layout> \n      </div>\n  </div>\n  \n  <!-- main -->\n  <section class=\"flex-1 h-full overflow-hidden relative flex flex-col\">\n    <div class=\"fixed bg-red-50/50 z-50 pointer-events-none text-xs\" v-if=\"Aeppic.LocalStorage.getItem('debug')\">\n      activePageDocument:{{locals.activePageDocument?.id}}\n      pageParams:{{ locals.pageParams }}\n      pageParamsTab:{{ locals.pageParams?.[0]?.tab }}\n      submenuView: {{ locals.submenuView}}\n      <!-- pageInfo: {{ params.pageInfo }} -->\n    </div>\n\n    <div v-if=\"locals.showOverlayMenu\" \n          class=\"h-full w-full absolute z-10 bg-black opacity-10 overflow-hidden\" \n    ></div>\n\n    <!-- NOTE(param-hide): only keep the last 2 layouts rendered. Cannot handle this here with v-if or scroll position is lost -->\n    <ae-layout v-for=\"(pageDocument, index) of locals.pageDocuments\"\n              :key=\"'_CSS-pageDocument' + pageDocument.id + index\"\n              layout-id=\"0e40bb7a-7f76-425a-8b07-3dbb6208d277\"\n              v-show=\"locals.activePageDocument === pageDocument\"\n              data-id=\"pageDocument\" \n              class=\"h-full w-full absolute overflow-hidden\" \n              :class=\"{ 'invisible': locals.activePageDocument !== pageDocument }\"\n              :param-page-document=\"pageDocument\"\n              :param-view=\"locals.submenuView\"\n              :param-window-width=\"locals.windowWidth\"\n              :param-hide=\"((locals.pageDocuments.length - 1) - index) > 1\"\n              :param-is-drilled=\"controller.isDrilled\"\n              :param-can-go-back=\"controller.canGoBack\"\n              :param-can-go-forward=\"controller.canGoForward\"\n              :param-transparent-forms=\"locals.transparentForms\"\n              :param-page-params=\"locals.pageParams[index]\"\n              :param-show-burger-menu=\"locals.showBurgerMenu\"\n              :param-show-print-layout=\"locals.showPrintLayout\"\n              :param-current-user-documents=\"locals.currentUserDocuments\"\n              @toggle-overlay-menu=\"locals.showOverlayMenu = !locals.showOverlayMenu\"\n              @forward=\"controller.drilledGoForward()\"\n              @back=\"controller.drilledGoBack()\"\n              :param-readonly=\"locals.pageParams[index]?.readonly\"\n    ></ae-layout>\n    \n    <section  :class=\"params.pageInfo?.loading ? 'opacity-100 pointer-events-auto\t' : 'opacity-0 pointer-events-none\t'\" class=\"absolute h-full w-full flex items-center justify-center bg-secondary-500/5 transition-all duration-500\">\n        <ae-layout v-show=\"params.pageInfo?.loading\" layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" param-icon=\"far fa-circle-notch fa-spin text-3xl\" param-title=\"Lade ...\"></ae-layout>\n    </section>\n\n    <ae-layout ref=\"toasts\"\n              layout-id=\"a2e87b3b-adb6-45dd-be77-a041a1ac5a28\"\n              :param-company=\"locals.company\"\n    ></ae-layout> \n  </section>\n\n</section>\n\n\n<!-- NOTE: do not remove language switch. It enables translation enabling -->\n<ae-layout style=\"display:none;\" layout-id=\"7a66c0bd-aaa4-406d-80da-0b0d5a6ee330\"></ae-layout>\n\n<ae-design name=\"title\" document-id=\"root\" style=\"display:none;\" ref=\"hiddenDomElement\"></ae-design>\n   "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"6670fc35-7bbd-40f5-bea7-6c068d323155","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-07-30T06:36:13+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"185d6cb0922c48a2"},"stamps":[],"t":1785393373074,"v":"778d1422306b2bc0"},{"a":["apps","e1bc93d1-b6c6-4711-a98f-675371c40326","44f0275d-078c-4ec3-b475-13f60453dde8"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"7ee94e29-1c00-4402-9993-47c450cd8a63","text":"rd:board","v":"1300219b129d11cf"},"created":{"at":"2026-03-23T13:30:09+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"ct":1774272609736,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.ready = false\n\n    this.FORMS = {\n      Board: '4ef9e83e-1aa5-4709-bbd5-24e98ea0148c',\n      Column: 'a5d2a684-da42-437b-980f-9e4505b8f4db',\n      Columns: '65aaf402-72cd-45e5-8d88-f88550f1b0c6',\n      Command: 'command-form',\n      CommandGroup: 'command-group-form',\n    }\n    this.DOCUMENTS = {\n      ColumnsManualTemplate: '84288271-0bda-48e5-8b1b-8ead5c55b3c1',\n    }\n\n    locals.FORMS = this.FORMS\n    locals.DOCUMENTS = this.DOCUMENTS\n\n    let boardId = null\n    if (params.boardId && typeof params.boardId === 'string') {\n      boardId = params.boardId\n    } else if (params.board?.id && typeof params.board?.id === 'string') {\n      boardId = params.board.id\n    }\n\n    if (boardId) {\n      this.board = await Aeppic.get(boardId)\n    } else {\n      // Notice that this does not allow you to query by the data.form.\n      const locationId = typeof params.boardLocation === 'string' ? params.boardLocation : params.boardLocation?.id\n      this.board = await Aeppic.findOne(`p:${locationId} f.id:${this.FORMS.Board}`)\n    }\n\n    if (!this.board) {\n      locals.error = 'Could not find a board.'\n      throw new Error(locals.error)\n    }\n\n\n    if (!params.newDocumentLocationId) {\n      throw new Error('Provide params.newDocumentLocationId. The pseudo document is created there.')\n    }\n    if (!(params.newDocumentCommandIds || params.newDocumentCommandGroupId) !== !params.newDocumentLocationId) {\n      locals.error = 'Provide both params.newDocumentCommandId and params.newDocumentLocationId'\n      throw new Error(locals.error)\n    }\n\n    locals.rerenderCreateColumnPopupKey = \"\"\n\n    locals.documents = params.documents\n\n    // This document holds references in its column field to all the columns\n    locals.columnsDocument = null\n    // Every document holds information about every column\n    locals.columnDocuments = []\n    locals.backlogDocument = null\n\n    // This stores the global filter settings\n    locals.filter = ''\n    locals.parentFilter = params.filter || ''\n\n    // Used when creating a new column\n    locals.newColumn = null\n    locals.columnFilter = null\n    locals.columnFilterOptions = []\n\n    locals.secondaryClickView = null\n\n    //This is for document deletion\n    locals.toDeleteDocuments = []\n\n    // Local Storage stores:\n    // View / columnsDocument\n    // Collapsed Columns\n    this.localStorageKey = `board-id-${this.board.id}`\n    // {\n    //   columnsDocumentId: ___,\n    //   showBacklog: false\n    // }\n\n\n    // This decides what you can filter by and which modes you can use. If it's null, you can only use manual mode\n    watchParam('filter', (filter) => {\n      if (locals.parentfilter === filter) {\n        return\n      }\n      locals.parentFilter = filter\n    })\n\n    watchParam('documents', (docs) => {\n      params.debug && console.log(\"Watch Param documents in rd:board\")\n      if (\n        docs.length === locals.documents.length &&\n        docs.every((doc, index) => {\n          return doc.id === locals.documents[index].id && doc.v === locals.documents[index].v\n        })\n      ) {\n        return\n      }\n      locals.documents = [...(docs ?? [])]\n    })\n\n    locals.commandIds = await this.getCommandIds()\n\n    this.columnsDocumentWatchers = null\n    locals.columnsDocuments = []\n    this.boardWatcher = Aeppic.watch(boardId, async (newBoard) => {\n      if (newBoard.id === this.board?.id && newBoard.v === this.board?.v) {\n        return\n      }\n      this.board = newBoard\n      await this.setupColumnsDocuments()\n    })\n    await this.setupColumnsDocuments()\n    \n    locals.pseudoDocument = await Aeppic.new(this.board.data.form[0], params.newDocumentLocationId)\n\n    const {columnsDocumentId, showBacklog} = Aeppic.LocalStorage.getValue(this.localStorageKey) || this.initLocalStorage()\n    locals.showBacklog = showBacklog\n    this.columnsDocumentWatcher = null\n    await this.switchView(locals.columnsDocuments.find(doc => doc.id === columnsDocumentId) || this.defaultView || locals.columnsDocuments[0] || null)\n  }\n\n  async setupColumnsDocuments() {\n    locals.columnsDocuments = await this.getColumnsDocuments()\n    this.columnsDocumentWatchers?.stop()\n    this.columnsDocumentWatchers = Aeppic.watchAll(locals.columnsDocuments, newDocs => {\n      const newDocsWithoutNulls = newDocs.filter(Boolean)\n      const hasChanged = !this.documentsAreEqual(locals.columnsDocuments, newDocsWithoutNulls)\n      if (hasChanged) {\n        locals.columnsDocuments = newDocsWithoutNulls\n      }\n    })\n  }\n\n  get defaultView() {\n    if (!params.defaultView) {\n      return null\n    }\n    const {mode, fieldName, name} = params.defaultView\n    if (!!mode && !!fieldName) {\n      return locals.columnsDocuments.find(doc => {\n        return doc.data.mode === mode && doc.data[this.fieldNameFieldNameFromMode(mode)] === fieldName\n      })\n    } else if (!!mode && !!name) {\n      return locals.columnsDocuments.find(doc => {\n        return doc.data.mode === mode && doc.data.name === name\n      })\n    } else if (!!mode) {\n      return locals.columnsDocuments.find(doc => {\n        return doc.data.mode === mode\n      })\n    }\n    return null\n  }\n\n  async getColumnsDocuments() {\n    const views = this.board.data.views || []\n    const result = await Aeppic.getAll(views)\n\n    if (result.length === 0) {\n      throw new Error('Could not find any views')\n    }\n\n    return result\n  }\n\n  async switchView(columnsDocument) {\n    if (this.columnsDocumentWatcher) {\n      this.columnsDocumentWatcher.stop()\n    }\n    this.columnsDocumentWatcher = Aeppic.watch(columnsDocument, async (newColumnsDocument) => {\n      if (locals.columnsDocument?.v === newColumnsDocument.v && locals.columnsDocument?.id === newColumnsDocument.id) {\n        return\n      }\n      if (!newColumnsDocument.data.columns) {\n        throw new Error(`The columns value of document ${newColumnsDocument.id} must be an array.`)\n      }\n      if (!newColumnsDocument.data.backlog?.id && newColumnsDocument.data.mode === 'switch') {\n        console.warn(`${newColumnsDocument.id} has no backlog.`)\n      }\n      locals.ready = false\n      // debugger\n      locals.columnsDocument = newColumnsDocument\n      locals.columnDocuments = await Aeppic.getAll(newColumnsDocument.data.columns ?? [])\n      locals.backlogDocument = await Aeppic.get(columnsDocument.data.backlog?.id)\n\n      // Local storage\n      const storage = Aeppic.LocalStorage.getValue(this.localStorageKey) || this.initLocalStorage()\n      storage.columnsDocumentId = columnsDocument.id\n      Aeppic.LocalStorage.setValue(this.localStorageKey, storage)\n\n      locals.ready = true\n    })\n  }\n\n  async onDeleteColumn(column) {\n    const editColumnDocument = await Aeppic.edit(locals.columnsDocument)\n    editColumnDocument.removeReference('columns', column.id)\n    // Später über Buisinessregel Spaltendokumente löschen\n    Aeppic.save(editColumnDocument)\n    Aeppic.delete(column)\n  }\n\n  async onDeleteDocument(doc) {\n    // Received, when document is dropped into trash can. You could just delete it immediatly, but we wait for comfirmation.\n    locals.hoversTrash = false\n    params.debug && console.log('Received Delete Document Event', doc)\n  }\n\n  onTrashEnter() {\n    console.log('Entered Trash')\n    locals.hoversTrash = true\n  }\n\n  onTrashLeave() {\n    console.log('Left Delete')\n    locals.hoversTrash = false\n  }\n\n  onConfirmDelete() {\n    const ids = new Set(locals.toDeleteDocuments.map(doc => doc.id))\n    for (const id of ids) {\n      Aeppic.delete(id)\n    }\n\n    locals.toDeleteDocuments = []\n    locals.hoversTrash = false\n  }\n\n  onCancelDelete() {\n    locals.toDeleteDocuments = []\n    locals.hoversTrash = false\n  }\n\n  onTrashChange(event) {\n    console.log(\"Trash Changed\")\n    locals.toDeleteDocuments = [...new Set(locals.toDeleteDocuments)]\n  }\n\n  async onMoveColumnLeft(columnId) {\n    const editColumnsDocument = await Aeppic.edit(locals.columnsDocument)\n    const cols = editColumnsDocument.data.columns\n    const index = cols.findIndex((colRef) => colRef.id === columnId)\n    if (index === -1 || index === 0) {\n      return\n    }\n    ;[cols[index], cols[index - 1]] = [cols[index - 1], cols[index]]\n    Aeppic.save(editColumnsDocument)\n  }\n\n  async onMoveColumnRight(columnId) {\n    const editColumnsDocument = await Aeppic.edit(locals.columnsDocument)\n    const cols = editColumnsDocument.data.columns\n    const index = cols.findIndex((colRef) => colRef.id === columnId)\n    if (index === -1 || index === cols.length - 1) {\n      return\n    }\n    ;[cols[index], cols[index + 1]] = [cols[index + 1], cols[index]]\n    Aeppic.save(editColumnsDocument)\n  }\n\n  async showCreateColumnPopup(event) {\n    // debugger\n    if ($refs.createColumn.visible) {\n      $refs.createColumn.close()\n      return\n    }\n    if (!locals.columnsDocument) {\n      return\n    }\n    const mode = locals.columnsDocument.data.mode\n    if (mode === 'manual') {\n      locals.columnFilter = null\n      locals.columnFilterOptions = []\n      locals.newColumn = await Aeppic.new(this.FORMS.Column, locals.columnsDocument)\n      locals.newColumn.data.mode = mode\n      $refs.createColumn.show(event)\n    } else if (mode === 'selectNumber' || mode === 'selectText') {\n      // rest the filter\n      locals.columnFilter = null\n      // find the field specified in the columnsDocument\n      const fieldName = locals.columnsDocument.data[this.fieldNameFieldNameFromMode(mode)]\n      const field = (await Aeppic.getForm(this.board.data.form[0])).fields.find(\n        (field) => field.name === fieldName\n      )\n      const filterKey = this.filterFieldNameFromMode(mode)\n      const existingSelectColumns = locals.columnDocuments.map((doc) => doc.data[filterKey])\n      locals.columnFilterOptions = field.settings.options\n        .filter((option) => !existingSelectColumns.includes(option.value))\n        .map((option) => {\n          let display = option.display\n          // If the select is of type text, use the value, since its also a string. It could still be an empty string, but that is handled in the template\n          if (mode === 'selectText' && !display) {\n            display = option.value\n          }\n          return {\n            value: option.value,\n            display: display,\n            disabled: false,\n          }\n        })\n      if (locals.columnFilterOptions.length === 0) {\n        locals.columnFilterOptions = [\n          {\n            value: 0,\n            display: 'Alle Spalten angezeigt',\n            disabled: true,\n          },\n        ]\n      }\n            \n      locals.newColumn = await Aeppic.new(this.FORMS.Column, locals.columnsDocument)\n      locals.newColumn.data.mode = mode\n      $refs.createColumn.show(event)\n    } else if (mode === 'references' || mode === 'reference') {\n      // debugger\n      locals.columnFilter = null\n      locals.newColumn = await Aeppic.new(this.FORMS.Column, locals.columnsDocument)\n      locals.newColumn.data.mode = mode\n      locals.pseudoDocument = await Aeppic.new(this.board.data.form[0], params.newDocumentLocationId)\n      $refs.createColumn.show(event)\n    }\n  }\n\n  newColumnSetFilter(filterArg) {\n    // Determine the precise field to write to based on the active mode\n    const filterField = this.filterFieldNameFromMode(locals.newColumn.data.mode)\n    locals.newColumn.data[filterField] = filterArg.value\n    locals.newColumn.data.name = filterArg.display\n    locals.columnFilter = filterArg\n  }\n\n  async createColumn() {\n    // debugger\n    $refs.createColumn.close()\n    locals.rerenderCreateColumnPopupKey = Aeppic.DateTime.local().toString()\n    Aeppic.save(locals.newColumn)\n\n    const editableColumns = await Aeppic.edit(locals.columnsDocument)\n    editableColumns.addReference('columns', locals.newColumn)\n    Aeppic.save(editableColumns)\n  }\n\n  disallowCreatingColumn() {\n    return locals.columnsDocument?.data.mode === 'switch'\n  }\n\n  async onRefSelected(event) {\n    const mode = locals.columnsDocument.data.mode\n    const fieldNameKey = this.fieldNameFieldNameFromMode(mode)\n    const fieldName = locals.columnsDocument.data[fieldNameKey]    \n    let field = event.data[fieldName]\n\n    let selectedRef = null\n    if (Array.isArray(field) && field.length) {\n      selectedRef = field[0]\n    } else {\n      selectedRef = field\n    }\n    if (!selectedRef?.id) {\n      return\n    }\n    const filterRef = await Aeppic.asReference(selectedRef.id)\n    const selectedDocument = await Aeppic.get(selectedRef.id)\n    if (!locals.newColumn.data.name) {\n      locals.newColumn.data.name = filterRef.text\n    }\n    if (!locals.newColumn.data.color) {\n      locals.newColumn.data.color = selectedDocument.data.color || selectedDocument.data.farbe || '#000000'\n    }\n    locals.columnFilter = filterRef\n    const filterField = this.filterFieldNameFromMode(mode)\n    locals.newColumn.data[filterField] = locals.columnFilter\n    Aeppic.commit(locals.newColumn)\n  }\n\n  getFilter(childFilter, parentFilter) {\n    return !!childFilter === false ? parentFilter : childFilter\n  }\n\n  async onChangeView(columnsDocument, event) {\n    // Calculate mode and field\n    await this.switchView(columnsDocument)\n    $refs.switchView.close(event)\n  }\n\n  initLocalStorage() {\n    return {columnsDocumentId: null, showBacklog: true}\n  }\n\n  onShowBacklog() {\n    const storage = Aeppic.LocalStorage.getValue(this.localStorageKey) || this.initLocalStorage()\n    locals.showBacklog = true\n    storage.showBacklog = true\n    Aeppic.LocalStorage.setValue(this.localStorageKey, storage)\n  }\n\n  onHideBacklog() {\n    const storage = Aeppic.LocalStorage.getValue(this.localStorageKey) || this.initLocalStorage()\n    locals.showBacklog = false\n    storage.showBacklog = false\n    Aeppic.LocalStorage.setValue(this.localStorageKey, storage)\n  }\n\n  backlogDisabled(columnsDocument) {\n    if (columnsDocument?.data.mode === 'switch') {\n      return true\n    }\n    return false\n  }\n\n  async getCommandIds() {\n    if (params.newDocumentCommandGroupId && params.newDocumentCommandIds) {\n      console.warn(`Both a command group and a list of commands were provided in board ${this.board.id}. Only the command group is used.`)\n    }\n    const commandGroup = params.newDocumentCommandGroupId && await Aeppic.get(params.newDocumentCommandGroupId)\n    return (commandGroup?.data.commands.map(ref => ref.id) ?? params.newDocumentCommandIds) || []\n  }\n\n  get menuHoverGroup() {\n    return `group-hover/${this.board.id}:`\n  }\n\n  onViewSecondaryClick(view, clickEvent) {\n    locals.secondaryClickView = view\n    $refs.viewSecondaryClickMenu.toggle(clickEvent)\n  }\n\n  async deleteView(event) {\n    this.closePopups()\n    const editable = await Aeppic.edit(this.board)\n    editable.removeReference('views', locals.secondaryClickView.id)\n    Aeppic.save(editable)\n  }\n\n  async onCreateManualView() {\n    const newViewAndChildren = (await Aeppic.cloneDeep(this.DOCUMENTS.ColumnsManualTemplate, this.board.id))\n    const editable = await Aeppic.edit(this.board)\n    editable.addReference('views', newViewAndChildren.root)\n    Aeppic.save(editable)\n    const date = Aeppic.DateTime.now().toLocaleString(Aeppic.DateTime.DATETIME_SHORT)\n    newViewAndChildren.root.data.name = date\n    newViewAndChildren.root.data.mode = 'manual'\n    Aeppic.saveAll(newViewAndChildren.documents)\n  }\n\n  closePopups() {\n    $refs.rename.close()\n    $refs.viewSecondaryClickMenu.close()\n  }\n\n  fieldNameFieldNameFromMode(mode) {\n    if (mode === 'manual') {\n      return null\n    }\n\n    return `${mode}FieldName`\n  }\n\n  filterFieldNameFromMode(mode) {\n    return `${mode}Filter`\n  }\n\n  documentsAreEqual(arr1, arr2) {\n    if (!arr1 || !arr2 || arr1.length !== arr2.length) {\n      return false\n    }\n    for (let i = 0; i < arr1.length; i++) {\n      if (\n        arr1[i]?.id !== arr2[i]?.id ||\n        arr1[i]?.v?.id !== arr2[i]?.v?.id\n      ) {\n        return false\n      }\n    }\n    return true\n  }\n}\n ","css":".board-overflow::-webkit-scrollbar {\n  height: 12px;\n}\n\n.board-overflow::-webkit-scrollbar-track {\n  background-color: oklch(96.7% 0.003 264.542); /* gray-100 */\n  border-radius: 0.375rem;\n}\n\n.board-overflow::-webkit-scrollbar-thumb {\n  background-color: oklch(87.2% 0.01 258.338); /* gray-300 */\n  border-radius: 0.375rem;\n}\n\n.ghostClass {\n  overflow: hidden;\n  width: 0px;\n  height: 0px;\n}\n\n.menuBarRowHeight {\n  height: 32px;\n}\n\n.menuBarIconContainer {\n  height: 100%;\n  width: 48px;\n  display: flex;\n  justify-content: center;\n  flex-shrink: 0;\n  align-items: center;\n  justify-self: end;\n}\n\n","name":"rd:board","packages":[{"id":"ed1e09cd-963e-4f7b-afce-fb70e1f84312","text":"vue-draggable","v":"33bfa1ff66dd725e"}],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<!-- Check out the documentation at d61c24b1-1ef6-42e3-8c7c-61453e185efd -->\n\n<!-- Complete Board -->\n\n<div\n  v-if=\"!locals.ready\"\n  class=\"w-full h-full flex items-center justify-center\"\n>\n  <ae-icon class=\"fa fa-spinner-third fa-2x fa-spin text-theme-400\"></ae-icon>\n</div>\n\n<div\n  v-else\n  class=\"w-full h-full flex relative\"\n>\n  <div \n    class=\"board-overflow overflow-x-auto flex flex-1\"\n    @mouseenter=\"locals.hoveringMenubar = false\"\n  >\n  <!-- Board Body -->\n    <ae-list\n      :key=\"locals.columnsDocument?.id\"\n      class=\"h-full flex-1 pl-2 pr-2\"\n      list-id=\"f584240f-7a55-45cd-8817-cf9daa7c5bc6\"\n      :documents=\"params.documents\"\n      :watchDocuments=\"true\"\n      :filter=\"params.preFilter\"\n      :sort=\"params.preSort\"\n      :param-show-backlog=\"locals.showBacklog && !controller.backlogDisabled(locals.columnsDocument)\"\n      :param-columns=\"locals.columnDocuments\"\n      :param-backlogDocument=\"locals.backlogDocument\"\n      :param-group=\"controller.board.id\"\n      :param-board=\"controller.board\"\n      :param-filter=\"controller.getFilter(locals.filter, locals.parentFilter)\"\n      :param-readonly=\"params.readonly\"\n      :param-new-document-command-ids=\"locals.commandIds\"\n      :param-new-document-location-id=\"params.newDocumentLocationId\"\n      :param-debug=\"params.debug\"\n      :param-delete-document-class-name=\"controller.board.id + 'deleteDocument'\"\n      :param-board-card-params=\"params.boardCardParams\"\n      :param-search-options=\"params.searchOptions\"\n      @delete-column=\"controller.onDeleteColumn($event)\"\n      @delete-document=\"controller.onDeleteDocument($event)\"\n      @trash-enter=\"controller.onTrashEnter()\"\n      @trash-leave=\"controller.onTrashLeave()\"\n      @move-column-left=\"controller.onMoveColumnLeft($event)\"\n      @move-column-right=\"controller.onMoveColumnRight($event)\"\n      @selected=\"$emit('selected', $event, arguments[1])\"\n      @mouseenter=\"locals.hoveringMenubar = false\"\n    ></ae-list>\n  </div>\n\n  <div\n    class=\"w-[52px] shrink-0 h-full bg-transparent\"\n  ></div>\n  <!-- Menu bar -->\n  <!-- NOTE: @dragover.stop prevents dragover event from falling through the menu bar -->\n  <div\n    class=\"absolute top-0 bottom-0 right-0 w-auto h-full flex bg-neutral-100\"\n    @mouseenter=\"locals.hoveringMenubar = true\"\n    @dragover.stop\n  >\n    <div\n      class=\"h-full shrink-0 w-[4px] bg-neutral-500 rounded-t-full\"\n    >\n    </div>\n\n    <div\n      class=\"h-full w-auto flex flex-col max-w-64\"\n    >\n      <!-- Filter -->\n      <div\n        v-if=\"!params.hideFilter\"\n        class=\"menuBarRowHeight flex\"\n      >\n        <ae-design\n          v-show=\"locals.hoveringMenubar\"\n          class=\"bg-transparent text-[0.8em] flex-1 -ml-2 -mr-8\"\n          name=\"rd:toolbar\"\n          :document=\"controller.board\"\n          param-list-form-id=\"0deb4864-cbb6-420c-99ee-337c7444ab24\"\n          @filter=\"locals.filter = $event\"\n          :params=\"{ disableNew: params.disableNew, disableSort: true }\"\n        ></ae-design>\n        <div\n          class=\"menuBarIconContainer\"\n        >\n          <ae-icon\n            class=\"far fa-filter\"\n            :class=\"!!locals.filter && 'text-amber-600'\"\n          >\n          </ae-icon>\n        </div>\n      </div>\n      <!-- New Column -->\n      \n      <button\n        :disabled=\"controller.disallowCreatingColumn(locals.columnsDocument) || params.readonly\"\n        class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300\"\n        :class=\"[(controller.disallowCreatingColumn(locals.columnsDocument) || params.readonly) && 'text-neutral-400']\"\n        @click=\"controller.showCreateColumnPopup($event)\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"ml-auto cursor-pointer\"\n        >\n          Neue Spalte\n        </label>\n        <div\n          class=\"menuBarIconContainer\"\n        >\n          <ae-icon\n            class=\"far fa-plus\"\n          >\n          </ae-icon>\n        </div>\n      </button>\n      <!-- Hide/Show Backlog -->\n      <button\n        class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300\"\n        :class=\"[controller.backlogDisabled(locals.columnsDocument) && 'text-neutral-400']\"\n        @click=\"locals.showBacklog ? controller.onHideBacklog() : controller.onShowBacklog()\"\n        :disabled=\"controller.backlogDisabled(locals.columnsDocument)\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"ml-auto cursor-pointer truncate\"\n        >\n          {{ (locals.backlogDocument?.data.name || 'Alle Einträge') + (locals.showBacklog ? ' eingeblendet' : ' ausgeblendet') }}\n        </label>\n        <div\n          class=\"menuBarIconContainer\"\n        >\n          <ae-icon\n            class=\"\"\n            :class=\"locals.showBacklog ? 'far fa-toggle-on' : 'far fa-toggle-off'\"\n          >\n          </ae-icon>\n        </div>\n      </button>\n      <!-- Empty Spacer -->\n      <div\n        class=\"menuBarRowHeight\"\n      >\n      </div>\n      <!-- Manual Boards -->\n      <div\n        v-if=\"!(locals.columnsDocuments?.filter(doc => doc.data.mode === 'manual')?.length === 0 && params.readonly)\"\n        class=\"menuBarRowHeight flex items-center justify-end mr-4\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"\"\n        >\n          Boards\n        </label>\n      </div>\n      <template\n        v-for=\"columnsDocument of locals.columnsDocuments?.filter(doc => doc.data.mode === 'manual')\"\n      >\n        <button\n          class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300 max-w-[400px]\"\n          @click=\"controller.onChangeView(columnsDocument, $event)\"\n          :key=\"columnsDocument.id\"\n        >\n          <button\n            v-show=\"locals.hoveringMenubar && !params.readonly\"\n            class=\"rounded-full hover:bg-neutral-100 cursor-default size-[24px] ml-[4px] shrink-0\"\n            v-if=\"!params.readonly\"\n            @click.stop=\"controller.onViewSecondaryClick(columnsDocument, $event)\"\n          >\n            <div\n              class=\"size-full items-center flex justify-center\"\n            >\n              <ae-icon\n                class=\"far fa-ellipsis-v\"\n              >\n              </ae-icon>\n            </div>\n          </button>\n          <label\n            v-show=\"locals.hoveringMenubar\"\n            class=\"ml-auto cursor-pointer truncate\"\n          >\n            {{ columnsDocument.data.name || 'Kein Name' }}\n          </label>\n          <div\n            class=\"menuBarIconContainer\"\n          >\n            <ae-icon\n              class=\"fa-circle\"\n              :class=\"[columnsDocument.id === locals.columnsDocument?.id ? 'text-primary-700 fas' : 'far']\"\n            >\n            </ae-icon>\n          </div>\n        </button>\n      </template>\n      <!-- New Manual Board -->\n      <button\n        v-if=\"locals.columnsDocuments?.filter(doc => doc.data.mode === 'manual')?.length < 6 && !params.readonly\"\n        class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300\"\n        @click=\"controller.onCreateManualView()\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"ml-auto cursor-pointer\"\n        >\n          Neues Board\n        </label>\n        <div\n          class=\"menuBarIconContainer\"\n        >\n          <ae-icon\n            class=\"far fa-plus\"\n          >\n          </ae-icon>\n        </div>\n      </button>\n      <!-- Empty Spacer -->\n      <div\n        class=\"menuBarRowHeight\"\n      >\n      </div>\n      <!-- Automatic Boards -->\n      <div\n        v-if=\"locals.columnsDocuments?.filter(doc => doc.data.mode !== 'manual')?.length > 0\"\n        class=\"menuBarRowHeight flex items-center justify-end mr-4\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n        >\n          Ansichten\n        </label>\n      </div>\n      <template\n        v-for=\"columnsDocument of locals.columnsDocuments?.filter(doc => doc.data.mode !== 'manual')\"\n      >\n        <button\n          class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300\"\n          @click=\"controller.onChangeView(columnsDocument, $event)\"\n          :key=\"columnsDocument.id\"\n        >\n          <label\n            v-show=\"locals.hoveringMenubar\"\n            class=\"ml-auto cursor-pointer\"\n          >\n            {{ columnsDocument.data.name || 'Kein Name' }}\n          </label>\n          <div\n            class=\"menuBarIconContainer\"\n          >\n            <ae-icon\n              class=\"fa-circle\"\n              :class=\"[columnsDocument.id === locals.columnsDocument?.id ? 'text-primary-700 fas' : 'far']\"\n            >\n            </ae-icon>\n          </div>\n        </button>\n      </template>\n      <!-- Spacer -->\n      <div class=\"flex-1\"></div>\n      <!-- Cancel Delete -->\n      <button\n        v-if=\"locals.toDeleteDocuments?.length\"\n        class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300\"\n        @click=\"controller.onCancelDelete()\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"ml-auto cursor-pointer\"\n        >\n          Abbrechen\n        </label>\n        <div\n          class=\"menuBarIconContainer\"\n        >\n          <ae-icon\n            class=\"far fa-times\"\n          >\n          </ae-icon>\n        </div>\n      </button>\n      <!-- Confirm Delete -->\n      <button\n        v-if=\"locals.toDeleteDocuments?.length\"\n        class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300\"\n        @click=\"controller.onConfirmDelete()\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"ml-auto cursor-pointer\"\n        >\n          {{ 'Bestätigen' + ((locals.toDeleteDocuments && locals.toDeleteDocuments.length > 0) ? ' (' + locals.toDeleteDocuments.length + ')' : '') }}\n        </label>\n        <div\n          class=\"menuBarIconContainer\"\n        >\n          <ae-icon\n            class=\"far fa-check\"\n          >\n          </ae-icon>\n        </div>\n      </button>\n      <!-- Drag Delete -->\n      <div\n        v-if=\"!params.readonly && !(Aeppic.Device === 'Phone')\"\n        class=\"menuBarRowHeight flex items-center\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"ml-auto\"\n        >\n          Löschen\n        </label>\n        <!-- Use absolute position to overlay trashcan over draggable area -->\n        <div\n          class=\"relative menuBarIconContainer\"\n          title=\"Karten zum löschen in den Mülleimer ziehen\"\n        >\n          <!-- Note: Ghostclass using display: none, causes repeated rerenders of the draggable. -->\n          <draggable\n            class=\"absolute -top-[10px] left-0 right-0 -bottom-[15px] xh-8 xw-8 xbg-red-500 z-5\"\n            v-model=\"locals.toDeleteDocuments\"\n            :class=\"controller.board.id + 'deleteDocument'\"\n            :group=\"{name: controller.board.id, pull: false}\"\n            :sort=\"false\"\n            :animation=\"50\"\n            ghostClass=\"ghostClass\"\n            :dragoverBubble=\"false\"\n            :filter=\"'.not-draggable'\"\n            @change=\"controller.onTrashChange($event)\"\n          >\n          </draggable>\n          <ae-icon\n            class=\"fas fa-trash-alt absolute\"\n            :class=\"locals.hoversTrash && 'text-red-600'\"\n          ></ae-icon>\n        </div>\n      </div>\n      <div class=\"menuBarRowHeight\">\n      </div>\n\n\n      <ae-popup \n        ref=\"viewSecondaryClickMenu\" \n        placement=\"bottom\"\n      >\n        <div  \n          v-if=\"locals.secondaryClickView\"\n          class=\"py-2 px-1 flex flex-col gap-1\">\n          <!-- Rename -->\n          <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-edit\"\n            param-text=\"Umbenennen\"\n            param-classes=\"border-none\"\n            @selected=\"$refs.rename.show($event)\"\n          ></ae-layout>\n          <!-- Delete  $refs.removeConfirmDialog.$emit('show', event) -->\n          <ae-layout \n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-trash\"\n            param-text=\"Löschen\"\n            param-classes=\"border-none justify-center w-full\"\n            @selected=\"$refs.removeConfirmDialog.$emit('show', locals.secondaryClickView.id)\"\n          ></ae-layout>\n        </div>\n      </ae-popup>\n      <ae-popup \n        ref=\"rename\"\n        class=\"\"\n        placement=\"bottom\"\n      >\n        <div  \n          v-if=\"locals.secondaryClickView\" \n          class=\"py-2 px-1 flex gap-1 items-center w-full\"\n        >\n          <ae-design  \n            name=\"rd:editable-title\" \n            :document=\"locals.secondaryClickView\"\n            class=\"flex-1 min-w-0\"\n          ></ae-design>\n        </div>\n      </ae-popup>\n\n      <ae-layout  \n        layout-id=\"b477c02e-0e5a-4baf-b782-3e0e64d8816c\"\n        ref=\"removeConfirmDialog\"\n        @delete=\"controller.deleteView($event)\"\n      ></ae-layout>\n    </div>\n  </div>\n  \n\n</div>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<ae-popup ref=\"switchView\" placement=\"bottom\">\n  <template #default>\n    <div class=\"flex flex-col gap-2 p-1\">\n      <ae-layout\n        v-for=\"columnsDocument of locals.columnsDocuments\"\n        :key=\"columnsDocument.id\"\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        :param-text=\"columnsDocument.data.name || 'Kein Name'\"\n        @selected=\"controller.onChangeView(columnsDocument, $event)\"\n        :param-italic=\"false\"\n        param-classes=\"text-left\"\n      ></ae-layout>\n    </div>\n  </template>\n</ae-popup>\n\n<ae-popup ref=\"createColumn\" placement=\"bottom-end\">\n  <template #default=\"scope\">\n    <div :key=\"locals.rerenderCreateColumnPopupKey\">\n      <div v-if=\"locals.columnsDocument?.data.mode === 'manual'\">\n        <ae-form\n          :document=\"locals.newColumn\"\n          layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n          :view=\"{only: {fields: ['name', 'color']}}\"\n        ></ae-form>\n        <ae-layout\n          class=\"p-1\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.createColumn()\"\n          param-icon=\"far fa-save\"\n          param-text=\"Spalte erstellen\"\n        ></ae-layout>\n      </div>\n      <div v-else-if=\"locals.columnsDocument?.data.mode === 'reference' || locals.columnsDocument?.data.mode === 'references'\"\n            class=\"pt-4\">\n        <ae-form\n          :document=\"locals.pseudoDocument\"\n          @data-changed=\"controller.onRefSelected($event)\"\n          layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n          :view=\"{only: {fields: [locals.columnsDocument.data[controller.fieldNameFieldNameFromMode(locals.columnsDocument.data.mode)]], standaloneControls: []}}\"\n          :watch=\"false\"\n          :readonly=\"!!locals.columnFilter\"\n        ></ae-form>\n        <ae-form\n          :document=\"locals.newColumn\"\n          layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n          :view=\"{only: {fields: ['name', 'color']}}\"\n        ></ae-form>\n        <ae-layout\n          v-if=\"locals.columnFilter\"\n          class=\"p-1\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.createColumn()\"\n          param-icon=\"far fa-save\"\n          param-text=\"Spalte erstellen\"\n        ></ae-layout>\n      </div>\n      <div v-else-if=\"locals.columnsDocument?.data.mode === 'switch'\"></div>\n      <div v-else-if=\"locals.columnsDocument?.data.mode === 'selectNumber' || locals.columnsDocument?.data.mode === 'selectText'\">\n        <div v-if=\"!locals.columnFilter\">\n          <ae-layout\n            v-for=\"filterOption of locals.columnFilterOptions\"\n            class=\"p-1\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            @selected=\"controller.newColumnSetFilter(filterOption)\"\n            :param-text=\"!!filterOption.display ? filterOption.display : 'Leer'\"\n            :param-italic=\"!filterOption.display\"\n            :param-disabled=\"filterOption.disabled\"\n          ></ae-layout>\n        </div>\n        <div v-else>\n          <ae-form\n            :document=\"locals.newColumn\"\n            layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n            :view=\"{only: {fields: ['name', 'color']}}\"\n          ></ae-form>\n          <ae-layout\n            class=\"p-1\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            @selected=\"controller.createColumn()\"\n            param-icon=\"far fa-save\"\n            param-text=\"Spalte erstellen\"\n          ></ae-layout>\n        </div>\n      </div>\n      <div v-else>Keine Ansicht um Spalte zu erzeugen</div>\n    </div>\n  </template>\n</ae-popup>\n\n\n\n\n\n\n\n\n"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"1d3dc097-ae91-409d-99cb-43c236be89aa","inheritedLocks":[null,null,null,null],"locks":[],"meta":{},"modified":{"at":"2026-03-31T06:53:02+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"7ee94e29-1c00-4402-9993-47c450cd8a63","text":"rd:board","v":"1300219b129d11cf"},"p":"44f0275d-078c-4ec3-b475-13f60453dde8","previous":{"v":"9fe8b49ec870fbd2"},"stamps":[],"t":1774939982402,"v":"0dd4701baaeeddbf"},{"a":["apps","089481c4-a42f-4a98-9bc9-12e9f1131f4b","5fa71c32-0186-4007-92a9-f03a32b0ff33","43420696-8097-4fc1-88e5-c69df9821470"],"a_depth":4,"a_forms":["folder","application-form","form-folder","form"],"created":{"at":"2025-05-07T11:07:33+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1761297216741,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.ready = false\n\n    this.FORMS = {\n      Board: '43420696-8097-4fc1-88e5-c69df9821470',\n      ColumnManual: '7ffd7cb7-3f51-459f-8fa1-26de32ff095d',\n      ColumnsManual: 'd94b4c11-de6b-4f8d-8c80-d1614881236a',\n      ColumnReference: 'e7af0745-5a1d-4671-82af-0a0681e74d13',\n      ColumnsReference: 'bd1e3c2f-463f-4df2-91bb-36666a826256',\n      ColumnReferences: 'd6c394cd-7e18-4602-a222-eaf419ff9922',\n      ColumnsReferences: 'cf83727e-718b-472b-83ca-5bb793f8f30b',\n      ColumnSwitch: 'd2d60610-aa7b-4f73-9a2a-7655e8955234',\n      ColumnsSwitch: '98ba1258-42b7-4a98-adee-ca683502f4bb',\n      ColumnSelectText: '0433f3dc-f144-4f59-823e-8f0d32118ebe',\n      ColumnsSelectText: '447b3702-8242-46ea-953c-f59f50376b30',\n      ColumnSelectNumber: 'f780b382-da9e-4ba3-98ef-1b8106e1e73c',\n      ColumnsSelectNumber: 'a22a54e0-cd5d-4fcb-aae9-e31a3f238c8e',\n      Command: 'command-form',\n      CommandGroup: 'command-group-form',\n    }\n    this.DOCUMENTS = {\n      ColumnsManualTemplate: '39055752-3367-4040-8b6e-99494b314e37',\n    }\n\n    locals.FORMS = this.FORMS\n    locals.DOCUMENTS = this.DOCUMENTS\n\n    let boardId = null\n    if (params.boardId && typeof params.boardId === 'string') {\n      boardId = params.boardId\n    } else if (params.board?.id && typeof params.board?.id === 'string') {\n      boardId = params.board.id\n    } else {\n    locals.error = 'You must provide a board using param-board or param-boardId'\n      throw new Error(locals.error)\n    }\n    \n\n    if (!params.newDocumentLocationId) {\n      throw new Error('Provide params.newDocumentLocationId. The pseudo document is created there.')\n    }\n    if (!(params.newDocumentCommandIds || params.newDocumentCommandGroupId) !== !params.newDocumentLocationId) {\n      locals.error = 'Provide both params.newDocumentCommandId and params.newDocumentLocationId'\n      throw new Error(locals.error)\n    }\n\n\n\n    locals.rerenderCreateColumnPopupKey = \"\"\n\n    locals.documents = params.documents\n\n    // This document holds references in its column field to all the columns\n    locals.columnsDocument = null\n    // Every document holds information about every column\n    locals.columnDocuments = []\n    locals.backlogDocument = null\n\n    // This stores the global filter settings\n    locals.filter = ''\n    locals.parentFilter = params.filter || ''\n\n    // Used when creating a new column\n    locals.newColumn = null\n    locals.columnFilter = null\n    locals.columnFilterOptions = []\n\n    locals.secondaryClickView = null\n\n    //This is for document deletion\n    locals.toDeleteDocuments = []\n\n    // Local Storage stores:\n    // View / columnsDocument\n    // Collapsed Columns\n    this.localStorageKey = `board-id-${boardId}`\n    // {\n    //   columnsDocumentId: ___,\n    //   showBacklog: false\n    // }\n\n    this.board = await Aeppic.get(boardId)\n\n    // This decides what you can filter by and which modes you can use. If it's null, you can only use manual mode\n    watchParam('filter', (filter) => {\n      if (locals.parentfilter === filter) {\n        return\n      }\n      locals.parentFilter = filter\n    })\n\n    watchParam('documents', (docs) => {\n      params.debug && console.log(\"Watch Param documents in rd:board\")\n      if (\n        docs.length === locals.documents.length &&\n        docs.every((doc, index) => {\n          return doc.id === locals.documents[index].id && doc.v === locals.documents[index].v\n        })\n      ) {\n        return\n      }\n      locals.documents = [...(docs ?? [])]\n    })\n\n    locals.commandIds = await this.getCommandIds()\n\n    this.columnsDocumentWatchers = null\n    locals.columnsDocuments = []\n    this.boardWatcher = Aeppic.watch(boardId, async (newBoard) => {\n      if (newBoard.id === this.board?.id && newBoard.v === this.board?.v) {\n        return\n      }\n      this.board = newBoard\n      await this.setupColumnsDocuments()\n    })\n    await this.setupColumnsDocuments()\n    \n    locals.pseudoDocument = await Aeppic.new(this.board.data.form[0], params.newDocumentLocationId)\n\n    const {columnsDocumentId, showBacklog} = Aeppic.LocalStorage.getValue(this.localStorageKey) || this.initLocalStorage()\n    locals.showBacklog = showBacklog\n    this.columnsDocumentWatcher = null\n    await this.switchView(locals.columnsDocuments.find(doc => doc.id === columnsDocumentId) || this.defaultView || locals.columnsDocuments[0] || null)\n  }\n\n  async setupColumnsDocuments() {\n    locals.columnsDocuments = await this.getColumnsDocuments()\n    this.columnsDocumentWatchers?.stop()\n    this.columnsDocumentWatchers = Aeppic.watchAll(locals.columnsDocuments, newDocs => {\n      const newDocsWithoutNulls = newDocs.filter(Boolean)\n      const hasChanged = !this.documentsAreEqual(locals.columnsDocuments, newDocsWithoutNulls)\n      if (hasChanged) {\n        locals.columnsDocuments = newDocsWithoutNulls\n      }\n    })\n  }\n\n  get defaultView() {\n    if (!params.defaultView) {\n      return null\n    }\n    const {columndsDocumentFormId, fieldName, name} = params.defaultView\n    if (!!columndsDocumentFormId && !!fieldName) {\n      return locals.columnsDocuments.find(doc => {\n        return doc.f.id === columndsDocumentFormId && doc.data.fieldName === fieldName\n      })\n    } else if (!!columndsDocumentFormId && !!name) {\n      return locals.columnsDocuments.find(doc => {\n        return doc.f.id === columndsDocumentFormId && doc.data.name === name\n      })\n    } else if (!!columndsDocumentFormId) {\n      return locals.columnsDocuments.find(doc => {\n        return doc.f.id === columndsDocumentFormId\n      })\n    }\n    return null\n  }\n\n  async getColumnsDocuments() {\n    const result = []\n    // manual\n    const listColumnsManual = Array.isArray(this.board.data.listColumnsManual) ? this.board.data.listColumnsManual : [this.board.data.listColumnsManual] // needed for older board-form-version\n    result.push(...(await Aeppic.getAll(listColumnsManual)))\n    // select text\n    result.push(...(await Aeppic.getAll(this.board.data.listColumnsSelectText)))\n    // select number\n    result.push(...(await Aeppic.getAll(this.board.data.listColumnsSelectNumber)))\n    // switch\n    result.push(...(await Aeppic.getAll(this.board.data.listColumnsSwitch)))\n    // references\n    result.push(...(await Aeppic.getAll(this.board.data.listColumnsReferences)))\n    // reference\n    result.push(...(await Aeppic.getAll(this.board.data.listColumnsReference)))\n\n    if (result.length === 0) {\n      throw new Error('Could not find any views')\n    }\n\n    return result\n  }\n\n  async switchView(columnsDocument) {\n    // debugger\n    // Watch executes the callback when initialized.\n    if (this.columnsDocumentWatcher) {\n      this.columnsDocumentWatcher.stop()\n    }\n    this.columnsDocumentWatcher = Aeppic.watch(columnsDocument, async (newColumnsDocument) => {\n      if (locals.columnsDocument?.v === newColumnsDocument.v && locals.columnsDocument?.id === newColumnsDocument.id) {\n        return\n      }\n      if (!newColumnsDocument.data.columns) {\n        throw new Error(`The columns value of document ${newColumnsDocument.id} must be an array.`)\n      }\n      if (!newColumnsDocument.data.backlog?.id && newColumnsDocument?.f.id === this.FORMS.ColumnsSwitch) {\n        console.warn(`${newColumnsDocument.id} has no backlog.`)\n      }\n      locals.ready = false\n      // debugger\n      locals.columnsDocument = newColumnsDocument\n      locals.columnDocuments = await Aeppic.getAll(newColumnsDocument.data.columns ?? [])\n      locals.backlogDocument = await Aeppic.get(columnsDocument.data.backlog?.id)\n\n      // Local storage\n      const storage = Aeppic.LocalStorage.getValue(this.localStorageKey) || this.initLocalStorage()\n      storage.columnsDocumentId = columnsDocument.id\n      Aeppic.LocalStorage.setValue(this.localStorageKey, storage)\n\n      locals.ready = true\n    })\n  }\n\n  async onDeleteColumn(column) {\n    const editColumnDocument = await Aeppic.edit(locals.columnsDocument)\n    editColumnDocument.removeReference('columns', column.id)\n    // Später über Buisinessregel Spaltendokumente löschen\n    Aeppic.save(editColumnDocument)\n    Aeppic.delete(column)\n  }\n\n  async onDeleteDocument(doc) {\n    // Received, when document is dropped into trash can. You could just delete it immediatly, but we wait for comfirmation.\n    locals.hoversTrash = false\n    params.debug && console.log('Received Delete Document Event', doc)\n  }\n\n  onTrashEnter() {\n    console.log('Entered Trash')\n    locals.hoversTrash = true\n  }\n\n  onTrashLeave() {\n    console.log('Left Delete')\n    locals.hoversTrash = false\n  }\n\n  onConfirmDelete() {\n    const ids = new Set(locals.toDeleteDocuments.map(doc => doc.id))\n    for (const id of ids) {\n      Aeppic.delete(id)\n    }\n\n    locals.toDeleteDocuments = []\n    locals.hoversTrash = false\n  }\n\n  onCancelDelete() {\n    locals.toDeleteDocuments = []\n    locals.hoversTrash = false\n  }\n\n  onTrashChange(event) {\n    console.log(\"Trash Changed\")\n    locals.toDeleteDocuments = [... new Set(locals.toDeleteDocuments)]\n  }\n\n  async onMoveColumnLeft(columnId) {\n    const editColumnsDocument = await Aeppic.edit(locals.columnsDocument)\n    const cols = editColumnsDocument.data.columns\n    const index = cols.findIndex((colRef) => colRef.id === columnId)\n    if (index === -1 || index === 0) {\n      return\n    }\n    ;[cols[index], cols[index - 1]] = [cols[index - 1], cols[index]]\n    Aeppic.save(editColumnsDocument)\n  }\n\n  async onMoveColumnRight(columnId) {\n    const editColumnsDocument = await Aeppic.edit(locals.columnsDocument)\n    const cols = editColumnsDocument.data.columns\n    const index = cols.findIndex((colRef) => colRef.id === columnId)\n    if (index === -1 || index === cols.length - 1) {\n      return\n    }\n    ;[cols[index], cols[index + 1]] = [cols[index + 1], cols[index]]\n    Aeppic.save(editColumnsDocument)\n  }\n\n  async showCreateColumnPopup(event) {\n    // debugger\n    if ($refs.createColumn.visible) {\n      $refs.createColumn.close()\n      return\n    }\n    if (!locals.columnsDocument) {\n      return\n    }\n    if (locals.columnsDocument.f.id === this.FORMS.ColumnsManual) {\n      locals.columnFilter = null\n      locals.columnFilterOptions = []\n      locals.newColumn = await Aeppic.new(this.FORMS.ColumnManual, locals.columnsDocument)\n      $refs.createColumn.show(event)\n    } else if (locals.columnsDocument.f.id === this.FORMS.ColumnsSelectNumber || locals.columnsDocument.f.id === this.FORMS.ColumnsSelectText) {\n      // rest the filter\n      locals.columnFilter = null\n      // find the field specified in the columnsDocument\n      const field = (await Aeppic.getForm(this.board.data.form[0])).fields.find(\n        (field) => field.name === locals.columnsDocument.data.fieldName\n      )\n      const existingSelectColumns = locals.columnDocuments.map((doc) => doc.data.filter)\n      locals.columnFilterOptions = field.settings.options\n        .filter((option) => !existingSelectColumns.includes(option.value))\n        .map((option) => {\n          let display = option.display\n          // If the select is of type text, use the value, since its also a string. It could still be an empty string, but that is handled in the template\n          if (locals.columnsDocument.f.id === this.FORMS.ColumnsSelectText && !display) {\n            display = option.value\n          }\n          return {\n            value: option.value,\n            display: display,\n            disabled: false,\n          }\n        })\n      if (locals.columnFilterOptions.length === 0) {\n        locals.columnFilterOptions = [\n          {\n            value: 0,\n            display: 'Alle Spalten angezeigt',\n            disabled: true,\n          },\n        ]\n      }\n      if (locals.columnsDocument.f.id === this.FORMS.ColumnsSelectNumber) {\n        locals.newColumn = await Aeppic.new(this.FORMS.ColumnSelectNumber, locals.columnsDocument)\n      } else if (locals.columnsDocument.f.id === this.FORMS.ColumnsSelectText) {\n        locals.newColumn = await Aeppic.new(this.FORMS.ColumnSelectText, locals.columnsDocument)\n      }\n      locals.newColumn.data.fieldName = locals.columnsDocument.data.fieldName\n      $refs.createColumn.show(event)\n    } else if (locals.columnsDocument.f.id === this.FORMS.ColumnsReferences || locals.columnsDocument.f.id === this.FORMS.ColumnsReference) {\n      // debugger\n      locals.columnFilter = null\n      if (locals.columnsDocument.f.id === this.FORMS.ColumnsReferences) {\n        locals.newColumn = await Aeppic.new(this.FORMS.ColumnReferences, locals.columnsDocument)\n      } else if (locals.columnsDocument.f.id === this.FORMS.ColumnsReference) {\n        locals.newColumn = await Aeppic.new(this.FORMS.ColumnReference, locals.columnsDocument)\n      }\n      locals.pseudoDocument = await Aeppic.new(this.board.data.form[0], params.newDocumentLocationId)\n      locals.newColumn.data.fieldName = locals.columnsDocument.data.fieldName\n      $refs.createColumn.show(event)\n    }\n  }\n\n  newColumnSetFilter(filter) {\n    locals.newColumn.data.filter = filter.value\n    locals.newColumn.data.name = filter.display\n    locals.columnFilter = filter\n  }\n\n  async createColumn() {\n    // debugger\n    $refs.createColumn.close()\n    locals.rerenderCreateColumnPopupKey = Aeppic.DateTime.local().toString()\n    Aeppic.save(locals.newColumn)\n\n    const editableColumns = await Aeppic.edit(locals.columnsDocument)\n    editableColumns.addReference('columns', locals.newColumn)\n    Aeppic.save(editableColumns)\n  }\n\n  disallowCreatingColumn() {\n    return locals.columnsDocument?.f.id === this.FORMS.ColumnsSwitch\n  }\n\n  async onRefSelected(event) {\n    let field = event.data[locals.columnsDocument.data.fieldName]\n    let selectedRef = null\n    if (Array.isArray(field) && field.length) {\n      selectedRef = field[0]\n    } else {\n      selectedRef = field\n    }\n    if (!selectedRef.id) {\n      return\n    }\n    const filter = await Aeppic.asReference(selectedRef.id)\n    const selectedDocument = await Aeppic.get(selectedRef.id)\n    if (!locals.newColumn.data.name) {\n      locals.newColumn.data.name = filter.text\n    }\n    if (!locals.newColumn.data.color) {\n      locals.newColumn.data.color = selectedDocument.data.color || selectedDocument.data.farbe || '#000000'\n    }\n    locals.columnFilter = filter\n    locals.newColumn.data.filter = locals.columnFilter\n    Aeppic.commit(locals.newColumn)\n  }\n\n  getFilter(childFilter, parentFilter) {\n    return !!childFilter === false ? parentFilter : childFilter\n  }\n\n  async onChangeView(columnsDocument, event) {\n    // Calculate mode and field\n    await this.switchView(columnsDocument)\n    $refs.switchView.close(event)\n  }\n\n  initLocalStorage() {\n    return {columnsDocumentId: null, showBacklog: true}\n  }\n\n  onShowBacklog() {\n    const storage = Aeppic.LocalStorage.getValue(this.localStorageKey) || this.initLocalStorage()\n    locals.showBacklog = true\n    storage.showBacklog = true\n    Aeppic.LocalStorage.setValue(this.localStorageKey, storage)\n  }\n\n  onHideBacklog() {\n    const storage = Aeppic.LocalStorage.getValue(this.localStorageKey) || this.initLocalStorage()\n    locals.showBacklog = false\n    storage.showBacklog = false\n    Aeppic.LocalStorage.setValue(this.localStorageKey, storage)\n  }\n\n  backlogDisabled(columnsDocument) {\n    if (columnsDocument?.f.id === this.FORMS.ColumnsSwitch) {\n      return true\n    }\n    return false\n  }\n\n   async getCommandIds() {\n    if (params.newDocumentCommandGroupId && params.newDocumentCommandIds) {\n      console.warn(`Both a command group and a list of commands were provided in board ${this.board.id}. Only the command group is used.`)\n    }\n    const commandGroup = params.newDocumentCommandGroupId && await Aeppic.get(params.newDocumentCommandGroupId)\n    return (commandGroup?.data.commands.map(ref => ref.id) ?? params.newDocumentCommandIds) || []\n  }\n\n  get menuHoverGroup() {\n    return `group-hover/${this.board.id}:`\n  }\n\n  onViewSecondaryClick(view, clickEvent) {\n    locals.secondaryClickView = view\n    $refs.viewSecondaryClickMenu.toggle(clickEvent)\n  }\n\n  async deleteView(event) {\n    this.closePopups()\n    const editable = await Aeppic.edit(this.board)\n    editable.removeReference('listColumnsManual', locals.secondaryClickView.id)\n    Aeppic.save(editable)\n  }\n\n  async onCreateManualView() {\n    const newViewAndChildren = (await Aeppic.cloneDeep(this.DOCUMENTS.ColumnsManualTemplate, this.board.id))\n    const editable = await Aeppic.edit(this.board)\n    editable.addReference('listColumnsManual', newViewAndChildren.root)\n    Aeppic.save(editable)\n    const date = Aeppic.DateTime.now().toLocaleString(Aeppic.DateTime.DATETIME_SHORT)\n    newViewAndChildren.root.data.name = date\n    Aeppic.saveAll(newViewAndChildren.documents)\n  }\n\n  closePopups() {\n    $refs.rename.close()\n    $refs.viewSecondaryClickMenu.close()\n  }\n\n  documentsAreEqual(arr1, arr2) {\n    if (!arr1 || !arr2 || arr1.length !== arr2.length) {\n      return false\n    }\n    for (let i = 0; i < arr1.length; i++) {\n      if (\n        arr1[i]?.id !== arr2[i]?.id ||\n        arr1[i]?.v?.id !== arr2[i]?.v?.id\n      ) {\n        return false\n      }\n    }\n    return true\n  }\n}\n ","css":".board-overflow::-webkit-scrollbar {\n  height: 12px;\n}\n\n.board-overflow::-webkit-scrollbar-track {\n  background-color: oklch(96.7% 0.003 264.542); /* gray-100 */\n  border-radius: 0.375rem;\n}\n\n.board-overflow::-webkit-scrollbar-thumb {\n  background-color: oklch(87.2% 0.01 258.338); /* gray-300 */\n  border-radius: 0.375rem;\n}\n\n.ghostClass {\n  overflow: hidden;\n  width: 0px;\n  height: 0px;\n}\n\n.menuBarRowHeight {\n  height: 32px;\n}\n\n.menuBarIconContainer {\n  height: 100%;\n  width: 48px;\n  display: flex;\n  justify-content: center;\n  flex-shrink: 0;\n  align-items: center;\n  justify-self: end;\n}\n\n","name":"rd:board","packages":[{"id":"ed1e09cd-963e-4f7b-afce-fb70e1f84312","text":"vue-draggable","v":"33bfa1ff66dd725e"}],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<!-- Check out the documentation at fdd8c78b-207a-4b2e-8f99-e8eebc7d9b3f -->\n\n<!-- Complete Board -->\n\n<div\n  v-if=\"!locals.ready\"\n  class=\"w-full h-full flex items-center justify-center\"\n>\n  <ae-icon class=\"fa fa-spinner-third fa-2x fa-spin text-theme-400\"></ae-icon>\n</div>\n\n<div\n  v-else\n  class=\"w-full h-full flex relative\"\n>\n  <div \n    class=\"board-overflow overflow-x-auto flex flex-1\"\n    @mouseenter=\"locals.hoveringMenubar = false\"\n  >\n  <!-- Board Body -->\n    <ae-list\n      v-if=\"1\"\n      :key=\"locals.columnsDocument?.id\"\n      list-id=\"c1790eba-7565-4f7c-9b82-efa091f7e7c6\"\n      class=\"h-full flex-1 pl-2 pr-2\"\n      :watchDocuments=\"true\"\n      :param-show-backlog=\"locals.showBacklog && !controller.backlogDisabled(locals.columnsDocument)\"\n      :documents=\"params.documents\"\n      :param-columns=\"locals.columnDocuments\"\n      :param-backlogDocument=\"locals.backlogDocument\"\n      :param-group=\"controller.board.id\"\n      :param-board=\"controller.board\"\n      :param-filter=\"controller.getFilter(locals.filter, locals.parentFilter)\"\n      :param-readonly=\"params.readonly\"\n      :param-new-document-command-ids=\"locals.commandIds\"\n      :param-new-document-location-id=\"params.newDocumentLocationId\"\n      :param-debug=\"params.debug\"\n      :param-delete-document-class-name=\"controller.board.id + 'deleteDocument'\"\n      :param-board-card-params=\"params.boardCardParams\"\n      @delete-column=\"controller.onDeleteColumn($event)\"\n      @delete-document=\"controller.onDeleteDocument($event)\"\n      @trash-enter=\"controller.onTrashEnter()\"\n      @trash-leave=\"controller.onTrashLeave()\"\n      @move-column-left=\"controller.onMoveColumnLeft($event)\"\n      @move-column-right=\"controller.onMoveColumnRight($event)\"\n      @selected=\"$emit('selected', $event, arguments[1])\"\n      @mouseenter=\"locals.hoveringMenubar = false\"\n    ></ae-list>\n  </div>\n\n  <div\n    class=\"w-[52px] shrink-0 h-full bg-transparent\"\n  ></div>\n  <!-- Menu bar -->\n  <!-- NOTE: @dragover.stop prevents dragover event from falling through the menu bar -->\n  <div\n    class=\"absolute top-0 bottom-0 right-0 w-auto h-full flex bg-neutral-100\"\n    @mouseenter=\"locals.hoveringMenubar = true\"\n    @dragover.stop\n  >\n    <div\n      class=\"h-full shrink-0 w-[4px] bg-neutral-500 rounded-t-full\"\n    >\n    </div>\n\n    <div\n      class=\"h-full w-auto flex flex-col max-w-64\"\n    >\n      <!-- Filter -->\n      <div\n        v-if=\"!params.hideFilter\"\n        class=\"menuBarRowHeight flex\"\n      >\n        <ae-design\n          v-show=\"locals.hoveringMenubar\"\n          class=\"bg-transparent text-[0.8em] flex-1 -ml-2 -mr-8\"\n          name=\"rd:toolbar\"\n          :document=\"controller.board\"\n          param-list-form-id=\"0deb4864-cbb6-420c-99ee-337c7444ab24\"\n          @filter=\"locals.filter = $event\"\n          :params=\"{ disableNew: params.disableNew, disableSort: true }\"\n        ></ae-design>\n        <div\n          class=\"menuBarIconContainer\"\n        >\n          <ae-icon\n            class=\"far fa-filter\"\n            :class=\"!!locals.filter && 'text-amber-600'\"\n          >\n          </ae-icon>\n        </div>\n      </div>\n      <!-- New Column -->\n      \n      <button\n        :disabled=\"controller.disallowCreatingColumn(locals.columnsDocument) || params.readonly\"\n        class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300\"\n        :class=\"[(controller.disallowCreatingColumn(locals.columnsDocument) || params.readonly) && 'text-neutral-400']\"\n        @click=\"controller.showCreateColumnPopup($event)\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"ml-auto cursor-pointer\"\n        >\n          Neue Spalte\n        </label>\n        <div\n          class=\"menuBarIconContainer\"\n        >\n          <ae-icon\n            class=\"far fa-plus\"\n          >\n          </ae-icon>\n        </div>\n      </button>\n      <!-- Hide/Show Backlog -->\n      <button\n        class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300\"\n        :class=\"[controller.backlogDisabled(locals.columnsDocument) && 'text-neutral-400']\"\n        @click=\"locals.showBacklog ? controller.onHideBacklog() : controller.onShowBacklog()\"\n        :disabled=\"controller.backlogDisabled(locals.columnsDocument)\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"ml-auto cursor-pointer truncate\"\n        >\n          {{ (locals.backlogDocument?.data.name || 'Alle Einträge') + (locals.showBacklog ? ' eingeblendet' : ' ausgeblendet') }}\n        </label>\n        <div\n          class=\"menuBarIconContainer\"\n        >\n          <ae-icon\n            class=\"\"\n            :class=\"locals.showBacklog ? 'far fa-toggle-on' : 'far fa-toggle-off'\"\n          >\n          </ae-icon>\n        </div>\n      </button>\n      <!-- Empty Spacer -->\n      <div\n        class=\"menuBarRowHeight\"\n      >\n      </div>\n      <!-- Manual Boards -->\n      <div\n        v-if=\"!(locals.columnsDocuments?.filter(doc => doc.f.id === locals.FORMS.ColumnsManual)?.length === 0 && params.readonly)\"\n        class=\"menuBarRowHeight flex items-center justify-end mr-4\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"\"\n        >\n          Boards\n        </label>\n      </div>\n      <template\n        v-for=\"columnsDocument of locals.columnsDocuments?.filter(doc => doc.f.id === locals.FORMS.ColumnsManual)\"\n      >\n        <button\n          class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300 max-w-[400px]\"\n          @click=\"controller.onChangeView(columnsDocument, $event)\"\n          :key=\"columnsDocument.id\"\n        >\n          <button\n            v-show=\"locals.hoveringMenubar && !params.readonly\"\n            class=\"rounded-full hover:bg-neutral-100 cursor-default size-[24px] ml-[4px] shrink-0\"\n            v-if=\"!params.readonly\"\n            @click.stop=\"controller.onViewSecondaryClick(columnsDocument, $event)\"\n          >\n            <div\n              class=\"size-full items-center flex justify-center\"\n            >\n              <ae-icon\n                class=\"far fa-ellipsis-v\"\n              >\n              </ae-icon>\n            </div>\n          </button>\n          <label\n            v-show=\"locals.hoveringMenubar\"\n            class=\"ml-auto cursor-pointer truncate\"\n          >\n            {{ columnsDocument.data.name || 'Kein Name' }}\n          </label>\n          <div\n            class=\"menuBarIconContainer\"\n          >\n            <ae-icon\n              class=\"fa-circle\"\n              :class=\"[columnsDocument.id === locals.columnsDocument?.id ? 'text-primary-700 fas' : 'far']\"\n            >\n            </ae-icon>\n          </div>\n        </button>\n      </template>\n      <!-- New Manual Board -->\n      <button\n        v-if=\"locals.columnsDocuments?.filter(doc => doc.f.id === locals.FORMS.ColumnsManual)?.length < 6 && !params.readonly\"\n        class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300\"\n        @click=\"controller.onCreateManualView()\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"ml-auto cursor-pointer\"\n        >\n          Neues Board\n        </label>\n        <div\n          class=\"menuBarIconContainer\"\n        >\n          <ae-icon\n            class=\"far fa-plus\"\n          >\n          </ae-icon>\n        </div>\n      </button>\n      <!-- Empty Spacer -->\n      <div\n        class=\"menuBarRowHeight\"\n      >\n      </div>\n      <!-- Automatic Boards -->\n      <div\n        v-if=\"locals.columnsDocuments?.filter(doc => doc.f.id !== locals.FORMS.ColumnsManual)?.length > 0\"\n        class=\"menuBarRowHeight flex items-center justify-end mr-4\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n        >\n          Ansichten\n        </label>\n      </div>\n      <template\n        v-for=\"columnsDocument of locals.columnsDocuments?.filter(doc => doc.f.id !== locals.FORMS.ColumnsManual)\"\n      >\n        <button\n          class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300\"\n          @click=\"controller.onChangeView(columnsDocument, $event)\"\n          :key=\"columnsDocument.id\"\n        >\n          <label\n            v-show=\"locals.hoveringMenubar\"\n            class=\"ml-auto cursor-pointer\"\n          >\n            {{ columnsDocument.data.name || 'Kein Name' }}\n          </label>\n          <div\n            class=\"menuBarIconContainer\"\n          >\n            <ae-icon\n              class=\"fa-circle\"\n              :class=\"[columnsDocument.id === locals.columnsDocument?.id ? 'text-primary-700 fas' : 'far']\"\n            >\n            </ae-icon>\n          </div>\n        </button>\n      </template>\n      <!-- Spacer -->\n      <div class=\"flex-1\"></div>\n      <!-- Cancel Delete -->\n      <button\n        v-if=\"locals.toDeleteDocuments?.length\"\n        class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300\"\n        @click=\"controller.onCancelDelete()\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"ml-auto cursor-pointer\"\n        >\n          Abbrechen\n        </label>\n        <div\n          class=\"menuBarIconContainer\"\n        >\n          <ae-icon\n            class=\"far fa-times\"\n          >\n          </ae-icon>\n        </div>\n      </button>\n      <!-- Confirm Delete -->\n      <button\n        v-if=\"locals.toDeleteDocuments?.length\"\n        class=\"menuBarRowHeight flex items-center rounded-full hover:bg-neutral-300\"\n        @click=\"controller.onConfirmDelete()\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"ml-auto cursor-pointer\"\n        >\n          {{ 'Bestätigen' + ((locals.toDeleteDocuments && locals.toDeleteDocuments.length > 0) ? ' (' + locals.toDeleteDocuments.length + ')' : '') }}\n        </label>\n        <div\n          class=\"menuBarIconContainer\"\n        >\n          <ae-icon\n            class=\"far fa-check\"\n          >\n          </ae-icon>\n        </div>\n      </button>\n      <!-- Drag Delete -->\n      <div\n        v-if=\"!params.readonly && !(Aeppic.Device === 'Phone')\"\n        class=\"menuBarRowHeight flex items-center\"\n      >\n        <label\n          v-show=\"locals.hoveringMenubar\"\n          class=\"ml-auto\"\n        >\n          Löschen\n        </label>\n        <!-- Use absolute position to overlay trashcan over draggable area -->\n        <div\n          class=\"relative menuBarIconContainer\"\n          title=\"Karten zum löschen in den Mülleimer ziehen\"\n        >\n          <!-- Note: Ghostclass using display: none, causes repeated rerenders of the draggable. -->\n          <draggable\n            class=\"absolute -top-[10px] left-0 right-0 -bottom-[15px] xh-8 xw-8 xbg-red-500 z-5\"\n            v-model=\"locals.toDeleteDocuments\"\n            :class=\"controller.board.id + 'deleteDocument'\"\n            :group=\"{name: controller.board.id, pull: false}\"\n            :sort=\"false\"\n            :animation=\"50\"\n            ghostClass=\"ghostClass\"\n            :dragoverBubble=\"false\"\n            :filter=\"'.not-draggable'\"\n            @change=\"controller.onTrashChange($event)\"\n          >\n          </draggable>\n          <ae-icon\n            class=\"fas fa-trash-alt absolute\"\n            :class=\"locals.hoversTrash && 'text-red-600'\"\n          ></ae-icon>\n        </div>\n      </div>\n      <div class=\"menuBarRowHeight\">\n      </div>\n\n\n      <ae-popup \n        ref=\"viewSecondaryClickMenu\" \n        placement=\"bottom\"\n      >\n        <div  \n          v-if=\"locals.secondaryClickView\"\n          class=\"py-2 px-1 flex flex-col gap-1\">\n          <!-- Rename -->\n          <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-edit\"\n            param-text=\"Umbenennen\"\n            param-classes=\"border-none\"\n            @selected=\"$refs.rename.show($event)\"\n          ></ae-layout>\n          <!-- Delete  $refs.removeConfirmDialog.$emit('show', event) -->\n          <ae-layout \n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-trash\"\n            param-text=\"Löschen\"\n            param-classes=\"border-none justify-center w-full\"\n            @selected=\"$refs.removeConfirmDialog.$emit('show', locals.secondaryClickView.id)\"\n          ></ae-layout>\n        </div>\n      </ae-popup>\n      <ae-popup \n        ref=\"rename\"\n        class=\"\"\n        placement=\"bottom\"\n      >\n        <div  \n          v-if=\"locals.secondaryClickView\" \n          class=\"py-2 px-1 flex gap-1 items-center w-full\"\n        >\n          <ae-design  \n            name=\"rd:editable-title\" \n            :document=\"locals.secondaryClickView\"\n            class=\"flex-1 min-w-0\"\n          ></ae-design>\n        </div>\n      </ae-popup>\n\n      <ae-layout  \n        layout-id=\"b477c02e-0e5a-4baf-b782-3e0e64d8816c\"\n        ref=\"removeConfirmDialog\"\n        @delete=\"controller.deleteView($event)\"\n      ></ae-layout>\n    </div>\n  </div>\n  \n\n</div>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<ae-popup ref=\"switchView\" placement=\"bottom\">\n  <template #default>\n    <div class=\"flex flex-col gap-2 p-1\">\n      <ae-layout\n        v-for=\"columnsDocument of locals.columnsDocuments\"\n        :key=\"columnsDocument.id\"\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        :param-text=\"columnsDocument.data.name || 'Kein Name'\"\n        @selected=\"controller.onChangeView(columnsDocument, $event)\"\n        :param-italic=\"false\"\n        param-classes=\"text-left\"\n      ></ae-layout>\n    </div>\n  </template>\n</ae-popup>\n\n<ae-popup ref=\"createColumn\" placement=\"bottom-end\">\n  <template #default=\"scope\">\n    <div  :key=\"locals.rerenderCreateColumnPopupKey\">\n      <div v-if=\"locals.columnsDocument?.f.id === controller.FORMS.ColumnsManual\">\n        <ae-form\n          :document=\"locals.newColumn\"\n          layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n          :view=\"{only: {fields: ['name', 'color']}}\"\n        ></ae-form>\n        <ae-layout\n          class=\"p-1\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.createColumn()\"\n          param-icon=\"far fa-save\"\n          param-text=\"Spalte erstellen\"\n        ></ae-layout>\n      </div>\n      <div v-else-if=\"locals.columnsDocument?.f.id === controller.FORMS.ColumnsReference || locals.columnsDocument?.f.id === controller.FORMS.ColumnsReferences\"\n            class = pt-4>\n        <ae-form\n          :document=\"locals.pseudoDocument\"\n          @data-changed=\"controller.onRefSelected($event)\"\n          layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n          :view=\"{only: {fields: [locals.columnsDocument.data.fieldName], standaloneControls: []}}\"\n          :watch=\"false\"\n          :readonly=\"!!locals.columnFilter\"\n        ></ae-form>\n        <ae-form\n          :document=\"locals.newColumn\"\n          layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n          :view=\"{only: {fields: ['name', 'color']}}\"\n        ></ae-form>\n        <ae-layout\n          v-if=\"locals.columnFilter\"\n          class=\"p-1\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.createColumn()\"\n          param-icon=\"far fa-save\"\n          param-text=\"Spalte erstellen\"\n        ></ae-layout>\n      </div>\n      <div v-else-if=\"locals.columnsDocument?.f.id === controller.FORMS.ColumnsSwitch\"></div>\n      <div v-else-if=\"locals.columnsDocument?.f.id === controller.FORMS.ColumnsSelectNumber || locals.columnsDocument?.f.id === controller.FORMS.ColumnsSelectText\">\n        <div v-if=\"!locals.columnFilter\">\n          <ae-layout\n            v-for=\"filterOption of locals.columnFilterOptions\"\n            class=\"p-1\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            @selected=\"controller.newColumnSetFilter(filterOption)\"\n            :param-text=\"!!filterOption.display ? filterOption.display : 'Leer'\"\n            :param-italic=\"!filterOption.display\"\n            :param-disabled=\"filterOption.disabled\"\n          ></ae-layout>\n        </div>\n        <div v-else>\n          <ae-form\n            :document=\"locals.newColumn\"\n            layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n            :view=\"{only: {fields: ['name', 'color']}}\"\n          ></ae-form>\n          <ae-layout\n            class=\"p-1\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            @selected=\"controller.createColumn()\"\n            param-icon=\"far fa-save\"\n            param-text=\"Spalte erstellen\"\n          ></ae-layout>\n        </div>\n      </div>\n      <div v-else>Keine Ansicht um Spalte zu erzeugen</div>\n    </div>\n  </template>\n</ae-popup>\n\n\n\n\n\n\n\n\n"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"7ee94e29-1c00-4402-9993-47c450cd8a63","inheritedLocks":[null,null,null,null,null],"locks":[],"meta":{},"modified":{"at":"2026-03-23T13:15:41+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"43420696-8097-4fc1-88e5-c69df9821470","previous":{"v":"b6c6d7bafa82ddc6"},"stamps":[],"t":1774271741636,"v":"1300219b129d11cf"},{"id":"63b85200-0507-40ab-b920-9f905bf3011e","v":"0bad006e7fe93200","cloneOf":{"id":"240e8d9d-eb21-4759-85c5-13d085e0219f","v":"0aa75c55b24037d2","text":"Board User Settings"},"originalCloneOf":{"id":"240e8d9d-eb21-4759-85c5-13d085e0219f","v":"0aa75c55b24037d2","text":"Board User Settings"},"previous":{"v":"8d3683f262d631d1"},"p":"676a196c-72c0-44e3-bdcc-9ac195273e80","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"rd:Board User Settings","applies":"","packages":[],"template":"<ae-control v-if=\"locals.board && locals.fieldParams && locals.fieldName\"\n            name=\"rd:ref\"\n            :document=\"locals.board\"\n            :field-name=\"locals.fieldName\"\n            :params=\"locals.fieldParams\"\n            @ae-will-navigate.stop.prevent.native\n            @ae-drill-into.stop.prevent.native\n></ae-control>\n\n","css":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      BoardSettings: '43420696-8097-4fc1-88e5-c69df9821470'\n    }\n    locals.board = null\n    locals.fieldParams = null\n    locals.fieldName = ''\n\n    await this._init()\n\n    $on('execute-save', () => {\n      Aeppic.save(locals.board)\n\n      $emit('save')\n    })\n  }\n\n  async _init() {\n    const board = params.document.f.id === this.FORMS.BoardSettings ? params.document : await Aeppic.findOne(`p:${params.document.id} f.id:${this.FORMS.BoardSettings}`)\n\n    if (board.data.useStamps) {\n      locals.fieldName = 'columnsByStamps'\n\n      const form = await Aeppic.getForm(board.f.id)\n      const fieldParams = form.getFieldControlParams(locals.fieldName)\n\n      locals.fieldParams = { ...fieldParams, noAdd: true }\n    } else {\n      locals.fieldName = 'columnsByRef'\n\n      const firstForm = board.data.form.id ? board.data.form : board.data.form[0]\n\n      const form = await Aeppic.getForm(firstForm.id)\n      const field = form.getField(board.data.fieldName)\n\n      const fieldParams = form.getFieldControlParams(board.data.fieldName)\n      const forms = fieldParams?.forms || field.formRef\n      const creationForm = !fieldParams?.formRef && field.formRef !== 'ref' ? field.formRef : null\n\n      locals.fieldParams = { ...fieldParams, forms, creationForm }\n    }\n\n    locals.board = await Aeppic.edit(board)\n  }\n\n} "},"locks":[],"created":{"at":"2023-01-17T14:51:46+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-08-14T09:19:39+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1692004779902,"ct":1673967106706,"a_depth":3,"a":["apps","089481c4-a42f-4a98-9bc9-12e9f1131f4b","676a196c-72c0-44e3-bdcc-9ac195273e80"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2022-05-03T15:02:55+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1651590175789,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.error = ''\n    \n    if (params.classes?.includes('italic')) {\n      locals.error += 'Italic should not be passed using params.classes. Use params.italic=true instead.'\n    }\n  }\n}","css":"","name":"rd:Button","packages":[],"template":"<!-- \n    @param {boolean} [italic] - Adds italic to the text.\n    @param {?} [text] - \n    @param {?} [icon] - \n    @param {?} [iconDesignDocumentId] - \n    @param {?} [iconRight] - \n    @param {?} [iconRightDesignDocumentId] - \n    @param {?} [documentId] - The document id to display with the title design in the button.\n    @param {?} [buttonLeft] - The button to display on the left side of the button.\n    @param {?} [buttonRight] - The button to display on the right side of the button.\n    @param {boolean} [buttonRightShowOnHover] - Show the right button only on hover.\n    @param {?} [keyHint] - \n    @param {?} [title] - \n    @param {number} [count] -\n    @param {?} [countColors] - The colors to display on the count.\n    @param {?} [colors] - Overwrites the all(!) default colors except disabled: background, text, hover, enabled.\n    @param {?} [border] - \n    @param {boolean} [primary] - Displayed the button with primary colors. Ignores colors.\n    @param {boolean} [disabled] - \n    @param {?} [classes] - Pass custom classes to the button. Might break internal styles, use with caution.\n-->\n<div v-if=\"locals.error\" class=\"text-red-500\">{{ locals.error }}</div>\n<!-- The button  sets not-italic as to not inherit italic from the parent div. \n    The italic param sets the italic class and adds a right margin to the text.\n    Bold, underline, etc. are not considered because they dont cause any issues. -->\n<button\n  v-else\n  class=\"group relative w-full rounded-full py-1 px-2 border shadow-theme-500 enabled:hover:shadow-sm enabled:focus:outline-none enabled:focus:ring-1 enabled:focus:ring-theme-100 flex items-center disabled:bg-neutral-200 disabled:opacity-75 disabled:cursor-not-allowed select-none overflow-visible not-italic\"\n  :class=\"[params.classes,  \n                !params.disabled && params.primary && (params.primaryColors || 'border-primary-100 bg-primary-800 text-primary-100 enabled:hover:bg-primary-700 enabled:hover:border-primary-200'), \n                params.border || 'border-transparent', \n                !params.primary && (params.colors || 'bg-white enabled:hover:bg-secondary-200 enabled:hover:border-secondary-200'),\n                ]\"\n  :disabled=\"params.disabled\"\n  @click.stop=\"$emit('selected', $event)\"\n  @xclick=\"$emit('selected', $event)\"\n  @contextmenu.stop.prevent=\"$emit('contextmenu', $event)\"\n  :title=\"params.title\"\n  :data-test=\"'layout_' + layout.id\"\n>\n  <div class=\"w-full h-full truncate flex items-center\">\n    <ae-layout\n      v-if=\"params.buttonLeft\"\n      layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n      :params=\"params.buttonLeft\"\n      @selected=\"$emit('left', $event)\"\n      data-test=\"left\"\n    ></ae-layout>\n    <ae-icon v-if=\"params.icon\" :class=\"params.icon\"></ae-icon>\n    <ae-design v-if=\"params.iconDesignDocumentId\" name=\"rd:icon\" :document-id=\"params.iconDesignDocumentId\"></ae-design>\n    <span\n      v-if=\"params.text\"\n      data-text\n      class=\"truncate\"\n      :class=\"{ 'ml-1': params.icon || params.iconDesignDocumentId, 'mr-1': params.iconRight || params.iconRightDesignDocumentId, 'italic pr-1': params.italic  }\"\n    >\n      {{ params.text }}\n    </span>\n    <ae-design\n      v-else-if=\"params.documentId\"\n      name=\"title\"\n      :document-id=\"params.documentId\"\n      :class=\"{ 'ml-1': params.icon || params.iconDesignDocumentId, 'mr-1': params.iconRight || params.iconRightDesignDocumentId }\"\n    ></ae-design>\n    <!-- <span v-else class=\"-ml-1\">&nbsp;</span>  -->\n    <div class=\"flex-1\"></div>\n    <ae-icon v-if=\"params.iconRight\" :class=\"params.iconRight\"></ae-icon>\n    <ae-design\n      v-if=\"params.iconRightDesignDocumentId\"\n      name=\"rd:icon\"\n      :document-id=\"params.iconRightDesignDocumentId\"\n    ></ae-design>\n    <span v-if=\"params.keyHint\" class=\"text-sm text-secondary-500 ml-auto\"> {{ params.keyHint }} </span>\n    <ae-layout\n      v-if=\"params.buttonRight\"\n      :class=\"[params.buttonRightShowOnHover && Aeppic.Device === 'Desktop' && 'hidden group-hover:block']\"\n      layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n      :params=\"params.buttonRight\"\n      @selected=\"$emit('right', $event)\"\n      data-test=\"right\"\n    ></ae-layout>\n  </div>\n\n  <div\n    v-if=\"params.count\"\n    class=\"overflow-visible pointer-events-none absolute right-[-1px] top-[-1px] rounded-full w-4 h-4 flex items-center justify-center\"\n    :class=\"[params.countColors || 'bg-gray-500 text-white', params.count <= 9 && 'text-[12px]', params.count > 9 && params.count <= 99 && 'text-[10px]', params.count > 99 && 'text-[8px]']\"\n  >\n    <div class=\"font-bold\">{{ params.count }}</div>\n  </div>\n</button>\n"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"80e59dec-29b1-45f1-8391-f5621cf9f0b2","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-06-12T09:29:24+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"a31d0549a9c08bf8"},"stamps":[],"t":1781256564283,"v":"41a38eb125ee668f"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2025-02-17T12:28:28+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1739795308477,"data":{"applies":"","controller":"","css":"","name":"rd:Button (as Editable)","packages":[],"template":"<div class=\"pr-2 rounded-full border border-secondary-200 flex items-center gap-1 overflow-hidden\">\n  <ae-design v-if=\"params.document\" name=\"rd:title-action\" :document=\"params.document\"></ae-design>\n  <ae-control v-if=\"params.document\" name=\"rd:text\" :document=\"params.document\" field-name=\"name\" class=\"flex-1 min-w-0\"></ae-control> \n  <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" param-icon=\"far fa-save\" param-title=\"Speichern\" @selected=\"$emit('save')\"></ae-layout>\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"f6f185b5-f820-4d06-b110-c5fb4b753189","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-08-13T13:44:20+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"d69dc3c07a824ef7"},"stamps":[],"t":1755092660588,"v":"8d793b27ccfae235"},{"id":"6b4f495b-7951-43fa-ae22-287b714df42b","v":"29b0654a29f28e64","previous":{"v":"24eff08f92f4defb"},"p":"a72b89db-1811-40ae-89fa-572eb9bcbe53","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:Button Termin Erstellung","applies":"","template":"<ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n           param-icon=\"far fa-calendar-plus\"\n           @selected=\"controller.showNew()\"\n></ae-layout>","css":"","controller":"class Controller {\n  init() {\n    this.FORMS = {\n      Kalender: 'c6237a67-b8cf-4107-92d8-afd460497f0e',\n      KalenderOrdner: '034b53f0-ce6a-46d6-bd0e-771f2c9ee59c',\n      Termin: 'e6b7aced-aaa0-49a4-b573-cfa307595402',\n    }\n\n  }\n  async showNew() {\n    const masterCalendar = await Aeppic.findOne(`p:${params.document.a[0]} f.id:${this.FORMS.Kalender}`)\n    const existingFolder = await Aeppic.findOne(`p:${params.document.a[0]} f.id:${this.FORMS.KalenderOrdner}`)\n\n    let folder = existingFolder\n    if (!existingFolder) {\n      folder = await Aeppic.new(this.FORMS.KalenderOrdner, masterCalendar.id)\n      folder.addReference('owner', Aeppic.Account)\n      Aeppic.save(folder)\n    }\n\n    const newEvent = await Aeppic.new(this.FORMS.Termin, folder.id)\n\n    $refs.dialog.show(newEvent)\n  }\n}","packages":[]},"locks":[],"created":{"at":"2023-12-15T13:10:12+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-12-15T14:08:40+00:00","by":"anonymous","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1702649320012,"ct":1702645812388,"a_depth":3,"a":["apps","d8c9a42b-e289-4c9a-97ea-801de8ab480a","a72b89db-1811-40ae-89fa-572eb9bcbe53"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2025-04-23T12:09:41+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1745410181482,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.animationDuration = `duration-${500}`\n    locals.animationDelayHoverStart = `group-hover:delay-${500}`\n    locals.animationDelayHoverEnd = `group-hover:delay-${0}`\n  }\n\n  onMouseEnter() {\n    // Note: offsetWidth includes padding, but not margin. The padding is 0 at the animation start. \n    // We want the length of the text field to include the padding thoug. It just doesnt work here, which is why we use only margin.\n    // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth\n    $refs.textContainer.style.width = `${$refs.text.offsetWidth}px`\n    console.log($refs.textContainer.style.width)\n    $refs.textContainer.style.opacity = 1\n  }\n  \n  onMouseLeave() {\n    $refs.textContainer.style.width = `0px`\n    $refs.textContainer.style.opacity = 0\n  }\n\n  get hoverBackgroundClassesNormalSecondIcon() {\n    return this.getHoverBackgroundClassesNormal(params.classes)\n  }\n\n  get hoverBackgroundClassesPrimarySecondIcon() {\n    return this.getHoverBackgroundClassesNormal(params.primaryClasses)\n  }\n\n  getHoverBgClasses(classes) {\n    return classes.split(' ').filter(c => { return c.includes('hover:bg-') })\n  }\n}","css":"","name":"rd:Button with Icon and hidden Text","packages":[],"template":"<!-- \nHovering the secondary icon will use normal hover background color.\nPrimary classes in general and for icons are used in addition to normal classes.\n\n@param {boolean}    [disabled] - \n@param {boolean}    [primary] - \n@param {string}     [groupName] - Defines the group name for the tailwind groups\n@param {boolean}    [alwaysShowSecondaryIcon] - \n@param {string}     [classes] - Styles the entire button.\n@param {string}     [primaryClasses] - Used when primary is true in addition to classes\n@param {string}     [firstIconClasses] - Icon name like \"far fa-plus\" and other classes, like text color\n@param {string}     [firstIconClassesPrimary] - \n@param {string}     [secondIconClasses] - Icon name like \"far fa-plus\" and other classes, like text color.\n@param {string}     [secondIconClassesPrimary]\n@param {} [] - \n@param {} [] - \n@param {} [] - \n\n-->\n\n<!-- group is the group for just the button. group/groupName is the outside group -->\n<button \n  class=\"group rounded-full bg-green-300 flex items-center justify-start overflow-hidden relative\"\n  :class=\"[ params.classes,\n            params.primary && params.primaryClasses,\n            params.iconRight && 'flex-row-reverse']\"\n  @mouseenter=\"controller.onMouseEnter()\"\n  @mouseleave=\"controller.onMouseLeave()\"\n  @click=\"$emit('selected')\"\n>\n  <div\n    class=\"size-[1.8em] flex items-center justify-center\"\n  >\n    <ae-icon\n      :class=\"[ params.firstIconClasses,\n                params.primary && params.firstIconClassesPrimary]\"\n    ></ae-icon>\n  </div>\n  <div\n    class=\"opacity-1 group-hover:opacity-100 w-0 transition-all truncate flex justify-start\"\n    :class=\"[locals.animationDuration,\n             locals.animationDelayHoverStart,\n             locals.animationDelayHoverEnd,\n             params.iconRight ? 'justify-end' : 'justify-start',\n             params.iconRight ? 'group-hover:mr-[0.4em]' : 'group-hover:ml-[0.4em]',\n             params.iconRight ? 'group-hover:ml-[0.7em]' : 'group-hover:mr-[0.7em]']\"\n    ref=\"textContainer\"\n  >\n    <!-- Padding for italic -->\n    <span\n      class=\"text-nowrap pr-[1px]\"\n      ref=\"text\"\n    > \n      {{ params.text }}\n    </span>   \n  </div>\n  <div\n    v-if=\"params.secondIconClasses\"\n    class=\"size-[1.8em] flex items-center justify-center rounded-full\"\n\n    @click.stop=\"$emit('selected-secondary')\"\n  >\n    <ae-icon\n      :class=\"[ params.secondIconClasses,\n                params.primary && params.secondIconClassesPrimary,\n                params.alwaysShowSecondaryIcon ? '' : 'hidden group-hover:inline-block']\"\n    ></ae-icon>\n  </div>\n\n  <!-- Disabled filter -->\n  <div\n    v-if=\"params.disabled\"\n    class=\"absolute bg-gray-500 opacity-50 size-[2000px] layer-2\"\n  >\n  </div>\n</button>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"857525a5-80e7-4ef2-9b53-86033e2beae4","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-04-24T08:05:39+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"c3d1f7316ae0179b"},"stamps":[],"t":1745481939098,"v":"5c2bc8e7e28ebc18"},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9","63b6cadb-9c72-4418-9e64-01291117a51e"],"a_depth":5,"a_forms":["system-folder-form","folder","form","folder","layout-form"],"created":{"at":"2025-10-07T13:48:14+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1760003542710,"data":{"applies":"","controller":"class Controller {\n  init() {\n  }\n\n  shape(isEnd, button) {\n    const isSelected = (button.mode ?? params.mode) === 'toggle' && (button.shapeAsSelected ?? params.shapeAsSelected ?? button.selected)\n\n    if (isEnd) {\n      if (params.shape === 'square' && !isSelected) {\n        return 'very-square'\n      }\n      return 'round'\n    }\n    if (isSelected) {\n      return 'round'\n    }\n    return 'very-square'\n  }\n\n  get mode() {\n    return params.mode || 'default'\n  }\n}","css":"","name":"rd:Buttongroup","packages":[],"parameters":["color","style","size","disabled","mode","leftIconAttached","rightIconAttached","position","colorAsSelected","shapeAsSelected","buttons.identifier",""],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":["Default for button.color","Default for button.style","Size of all buttons","Default for button.disabled","Default for button.mode","Default for button.leftIconAttached","Default for button.rightIconAttached","Default for button.position","Default for button.colorAsSelected. Prevents button.selected from determining the color.","Default for button.shapeAsSelected. Prevents button.selected from determining the shape.","The identifier when clicking the button"],"parametersTypes":["string","string","string","boolean","string","boolean","boolean","string","boolean","boolean","string"],"template":"<div\n  class=\"flex gap-[0.125rem] w-full\"\n>\n  <ae-layout\n      v-for=\"(button, index) in params.buttons || []\"\n      class=\"min-w-0\"\n      :class=\"button.width == null && 'flex-1'\"\n      layoutId=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      :params=\"{\n          ...button, \n          selected: button.colorAsSelected ?? params.colorAsSelected ?? !!button.selected,\n          leftShape: controller.shape(index === 0, button),\n          rightShape: controller.shape(index === (params.buttons || []).length - 1, button),\n          leftShapeStatic: index === 0,\n          rightShapeStatic: index === (params.buttons || []).length - 1,\n          size: params.size,\n          style: button.style ?? params.style,\n          disabled: button.disabled ?? params.disabled,\n          leftIconAttached: button.leftIconAttached ?? params.leftIconAttached,\n          rightIconAttached: button.rightIconAttached ?? params.rightIconAttached,\n          position: button.position ?? params.position,\n          mode: button.mode ?? controller.mode,\n        }\"\n      @selected=\"$emit('selected', button.identifier)\"\n    ></ae-layout>\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"f8b28bc5-081c-4c39-aa9f-8ab9357f5466","inheritedLocks":[null,null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-09T10:30:09+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"63b6cadb-9c72-4418-9e64-01291117a51e","previous":{"v":"0ea9bcaa9678be19"},"stamps":[],"t":1760005809101,"v":"3e62c8926b89102e"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2023-08-07T12:39:25+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1691411965862,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.collapsed = params.collapsed ?? false\n\n    watchParam('collapsed', (value) => locals.collapsed = value)\n\n    // await Aeppic.nextRenderPass()\n\n\n    // this.updateCollapsedHandler = () => {\n    //   const clientWidth = $refs.buttons.scrollWidth\n\n    //   const containingLayout = $refs.buttons.parentElement.parentElement\n    //   const clientWidthOfElementContainingThisLayout = containingLayout.clientWidth\n\n    //   console.log({\n    //     clientWidth\n    //   }, { clientWidth: containingLayout.clientWidth, scrollWidth: containingLayout.scrollWidth })\n\n    //   if (!clientWidth || !clientWidthOfElementContainingThisLayout) {\n    //     return\n    //   }\n \n    //   console.log({ clientWidth, clientWidthOfElementContainingThisLayout })\n \n    //   locals.collapsed = clientWidth > clientWidthOfElementContainingThisLayout\n    // }\n\n    // watchParam('buttons', async () => {\n    //   locals.collapsed = false\n    //   await Aeppic.nextRenderPass() \n    //   await Aeppic.nextRenderPass()\n\n    //   await Aeppic.nextRenderPass() \n    //   await Aeppic.nextRenderPass()\n\n    //   debugger\n\n    //   this.updateCollapsedHandler()\n    // })\n\n    // // this.observer = new MutationObserver((mutations) => this.updateCollapsedHandler())\n    // // this.observer.observe($refs.buttons, { attributes: true, childList: true, subtree: true })\n  }\n\n  selected(button) {\n    $refs.popup.close()\n\n    $emit('selected', button)\n  }\n\n  get selectedButton() {\n    return params.selectedIdentifier && params.buttons.find(b => b.identifier === params.selectedIdentifier)\n  }\n\n  destroy() {\n    this.observer?.disconnect()\n  }\n}\n\n \n\n\n","css":"","name":"rd:Buttons (Collapsing)","packages":[],"template":"<div class=\"flex gap-2\" ref=\"buttons\">\n    <ae-layout v-if=\"locals.collapsed\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon-right=\"far fa-angle-down\"\n            :param-text=\"params.selectedIdentifier && controller.selectedButton ? controller.selectedButton.text : (params.selectText || 'Auswählen')\" \n            :param-document-id=\"controller.selectedButton?.documentId\" \n            :param-icon=\"controller.selectedButton?.icon\" \n            :param-icon-design-document-id=\"controller.selectedButton?.iconDesignDocumentId\" \n            ref=\"button\" \n            :param-count=\"controller.selectedButton?.count\"\n            :param-border=\"params.border\"\n            :param-disabled=\"params.disabled\"\n            @selected=\"$refs.popup.toggle({ target: $refs.button.$el })\"\n            class=\"w-full\"\n    ></ae-layout>\n\n    <template v-else>\n      <ae-layout v-for=\"button of params.buttons\"\n                layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                :param-document-id=\"button.documentId\"\n                :param-count=\"button.count\"\n                :param-text=\"button.text\"\n                :param-icon=\"button.icon\"\n                :param-icon-right-design-document-id=\"button.iconRightDesignDocumentId\"\n                :param-primary=\"params.selectedIdentifier && params.selectedIdentifier === button.identifier\"\n                :param-border=\"params.border\"\n                :param-disabled=\"button.disabled || params.disabled\"\n                :param-title=\"button.title\"\n                @selected=\"$emit('selected', button)\"\n                class=\"max-w-[200px]\"\n      >\n      </ae-layout>\n    </template>\n</div>\n\n\n<ae-popup ref=\"popup\">\n    <div class=\"flex flex-col gap-1 p-2\">\n      <ae-layout v-for=\"button of params.buttons\"\n                      layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    :param-document-id=\"button.documentId\"\n                    :param-count=\"button.count\"\n                    :param-text=\"button.text\"\n                    :param-icon=\"button.icon\"\n                    :param-icon-right-design-document-id=\"button.iconRightDesignDocumentId\"\n                    :param-primary=\"params.selectedIdentifier && params.selectedIdentifier === button.identifier\"\n                    :param-disabled=\"button.disabled || params.disabled\"\n                    @selected=\"controller.selected(button)\"\n                    class=\"w-full\"\n                    param-classes=\"w-full\"\n        >\n        </ae-layout>\n  </div>\n</ae-popup> "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"017828fa-4448-499d-bfaf-45ef6b470b43","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-04-09T06:17:10+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"cb52b3adf529b6dd"},"stamps":[],"t":1775715430758,"v":"f61a1a1cdb30afbf"},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","05787127-986a-494f-a69e-8733c1176596","fdfaf800-858a-4b45-91c9-5bdad7a63672","17c3177b-a9e2-4dc1-b653-facbd56702cd"],"a_depth":5,"a_forms":["folder","application-form","form-folder","form","design-form"],"created":{"at":"2025-11-07T14:36:07+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1762526167657,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.chart = null\n    // Needs documents, label, backgroundColor, borderColor\n    this.dataSets = params.dataSets\n\n    await Aeppic.nextRenderPass()\n    this.createChart(this.dataSets)\n\n    watchParam('dataSets', (dataSets) => {\n      this.dataSets = dataSets\n      this.createChart(this.dataSets)\n    })\n    watchParam('monthsToShow', () => {\n      this.createChart(this.dataSets)\n    })\n  }\n\n  createChart(dataSets) {\n    if (this.chart) {\n      this.chart.destroy()\n    }\n    const endMonth = DateTime.local()\n\n    const labels = []\n    const monthNames = [\n      'Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun',\n      'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'\n    ]\n    for (let i = this.monthsToShow - 1; i >= 0; i--) {\n      const d = endMonth.minus({ months: i })\n      const monthIndex = (d.month - 1) % 12\n      labels.push(monthNames[monthIndex] + ' ' + d.year)\n    }\n\n    const processDocs = (docs, dataArray) => {\n      if (!docs) return;\n\n      for (const doc of docs) {\n        const docDate = DateTime.fromISO(doc.created.at)\n        const monthIndex = (docDate.month - 1) % 12\n        const dataIndex = labels.findIndex(label => label === monthNames[monthIndex] + ' ' + docDate.year)\n\n        if (dataIndex !== -1) {\n          dataArray[dataIndex]++\n        }\n      }\n    }\n    dataSets.forEach(dataSet => dataSet.data = new Array(this.monthsToShow).fill(0))\n    dataSets.forEach(dataSet => processDocs(dataSet.documents, dataSet.data))\n\n    dataSets.forEach(dataSet => dataSet.borderWidth = 1)\n    this.chart = new Chart($refs.chart, {\n      type: 'bar',\n      data: {\n        labels: labels,\n        datasets: dataSets,\n      },\n      options: {\n        responsive: true,\n        maintainAspectRatio: false,\n        scales: {\n          y: {\n            beginAtZero: true,\n            ticks: {\n              precision: 0\n            },\n          }\n        },\n        plugins: {\n          legend: {\n            position: 'top',\n          }\n        }\n      }\n    })\n  }\n\n  get monthsToShow() {\n    return params.monthsToShow ?? 12\n  }\n\n\n  destroy() {\n    if (this.chart) {\n      this.chart.destroy()\n    }\n  }\n}","css":"","name":"rd:chart created at by month Bar","packages":[{"id":"4a6e27ae-e4a0-4e22-9997-b352899f86f5","text":"Chart.js","v":"c044548d5a0892ce"}],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<header \n  v-if=\"params.title\"\n  class=\"font-bold text-lg truncate\"\n>\n  {{params.title}}\n</header>\n<div class=\"relative\" style=\"height: 300px; width: 100%;\">\n  <canvas ref=\"chart\"></canvas>\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"54cd8d8e-5aa2-4823-8500-4db3d136b1f0","inheritedLocks":[null,null,null,null,null,null],"locks":[],"modified":{"at":"2025-11-14T13:00:45+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"17c3177b-a9e2-4dc1-b653-facbd56702cd","previous":{"v":"8b8459bf710b710d"},"stamps":[],"t":1763125245616,"v":"aeb0779d98b98275"},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","05787127-986a-494f-a69e-8733c1176596","fdfaf800-858a-4b45-91c9-5bdad7a63672","17c3177b-a9e2-4dc1-b653-facbd56702cd"],"a_depth":5,"a_forms":["folder","application-form","form-folder","form","design-form"],"cloneOf":{"id":"54cd8d8e-5aa2-4823-8500-4db3d136b1f0","text":"rd:faults vs maintenances","v":"d83866b7e496d708"},"created":{"at":"2025-11-13T07:12:24+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1763017944595,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.chart = null\n    // Needs documents, label, backgroundColor, borderColor\n    this.dataSets = params.dataSets\n\n    await Aeppic.nextRenderPass()\n    this.createChart(this.dataSets)\n\n    watchParam('dataSets', (dataSets) => {\n      this.dataSets = dataSets\n      this.createChart(this.dataSets)\n    })\n    watchParam('weeksToShow', () => {\n      this.createChart(this.dataSets)\n    })\n  }\n\n  createChart(dataSets) {\n    if (this.chart) {\n      this.chart.destroy()\n    }\n    const endWeek = DateTime.local()\n\n    const labels = []\n    for (let i = this.weeksToShow - 1; i >= 0; i--) {\n      const d = endWeek.minus({ weeks: i })\n      labels.push(`KW ${d.weekNumber} ${d.year}`)\n    }\n\n    const processDocs = (docs, dataArray) => {\n      if (!docs) return;\n\n      for (const doc of docs) {\n        const docDate = DateTime.fromISO(doc.created.at)\n        const docWeekKey = `KW ${docDate.weekNumber} ${docDate.year}`\n        const dataIndex = labels.indexOf(docWeekKey)\n\n        if (dataIndex !== -1) {\n          dataArray[dataIndex]++\n        }\n      }\n    }\n    dataSets.forEach(dataSet => dataSet.data = new Array(this.weeksToShow).fill(0))\n    dataSets.forEach(dataSet => processDocs(dataSet.documents, dataSet.data))\n\n    dataSets.forEach(dataSet => {\n      dataSet.borderWidth = 2\n      dataSet.tension = 0.4\n      dataSet.fill = true\n    })\n    this.chart = new Chart($refs.chartWeeklyAverage, {\n      type: 'line',\n      data: {\n        labels: labels,\n        datasets: dataSets\n      },\n      options: {\n        responsive: true,\n        maintainAspectRatio: false,\n        scales: {\n          y: {\n            beginAtZero: true,\n            ticks: {\n              precision: 0\n            }\n          },\n          x: {\n            ticks: {\n              display: false\n            },\n            grid: {\n              display: false\n            }\n          }\n        },\n        plugins: {\n          legend: {\n            position: 'top',\n          },\n          tooltip: {\n            mode: 'index',\n            intersect: false\n          }\n        },\n        interaction: {\n          mode: 'index',\n          intersect: false\n        },\n        elements: {\n          point: {\n            radius: 0\n          }\n        }\n      }\n    })\n  }\n\n  get weeksToShow() {\n    return params.weeksToShow ?? 52\n  }\n\n  destroy() {\n    if (this.chart) {\n      this.chart.destroy()\n    }\n  }\n}","css":"","name":"rd:chart created at by week polynomial interpolation","packages":[{"id":"4a6e27ae-e4a0-4e22-9997-b352899f86f5","text":"Chart.js","v":"c044548d5a0892ce"}],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<header \n  v-if=\"params.title\"\n  class=\"font-bold text-lg truncate\"\n>\n  {{ params.title }}\n</header>\n<div class=\"relative\" style=\"height: 300px; width: 100%;\">\n  <canvas ref=\"chartWeeklyAverage\"></canvas>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"653300e7-8af5-4ce4-964c-8c96a2c61fce","inheritedLocks":[null,null,null,null,null,null],"locks":[],"modified":{"at":"2025-11-14T13:02:35+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"54cd8d8e-5aa2-4823-8500-4db3d136b1f0","text":"rd:faults vs maintenances","v":"d83866b7e496d708"},"p":"17c3177b-a9e2-4dc1-b653-facbd56702cd","previous":{"v":"0f976f40539a6942"},"stamps":[],"t":1763125355910,"v":"f991389dd23cdc19"},{"a":["apps","e1bc93d1-b6c6-4711-a98f-675371c40326","44f0275d-078c-4ec3-b475-13f60453dde8"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"433bf79c-700a-41db-b7d1-c3d7ad95523a","text":"rd:column","v":"a9f7dd5ca23c2fd6"},"created":{"at":"2026-03-23T13:30:09+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"ct":1774272609764,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    // this.DOCUMENTS = { \n    //   editableColumn: '776a89a7-3a0b-4e51-a205-faacc21efbf3'\n    // }\n\n    locals.ready = false\n\n    locals.showMoreOptions = false\n    locals.showFilter = false\n    locals.filter = ''\n    locals.sort = []\n    locals.parentFilter = params.filter || ''\n    locals.documents = [...(params.documents ?? [])]\n    locals.editableColumn = null\n    locals.localStorageKey = `column-id-${params.columnId}`\n    locals.collapsed = (Aeppic.LocalStorage.getValue(locals.localStorageKey) || {collapsed: false}).collapsed ?? false\n    locals.rerenderKey = \"\"\n    locals.displayCapStep = 50\n    locals.displayCap = 50\n    locals.filteredDocuments = []\n\n    locals.newDocumentCommands = (await Aeppic.getAll(params.newDocumentCommandIds)).filter(doc => !!doc)\n\n    watchParam('documents', (docs, oldDocs) => {\n      if (locals.documents.length === docs.length && \n          docs.every((doc, index) => {\n            return doc.id === locals.documents[index].id\n          })) {\n        return\n      } \n      params.debug && console.log(\"Column Layout params.documents Changed\", params.name)\n      locals.documents = [...(docs ?? [])]\n    })\n\n    watchParam('filter', (filter) => {\n      if (locals.parentfilter === filter) {\n        return\n      } \n      locals.parentFilter = filter\n    })\n\n    watchParam('name', (name) => {\n      locals.name = name\n    })\n\n    watchParam('color', (name) => {\n      locals.name = name\n    })\n\n    locals.ready = true\n  }\n\n  get filter() {\n    return !!locals.filter ? locals.filter : locals.parentFilter\n  }\n\n  toggleSortVisibility(event) {\n    // debugger\n    $refs.editSort.toggle(event)\n  }\n\n  async showEditPopup(event) {\n    locals.editableColumn = await Aeppic.edit(params.columnId)\n    locals.editableColumn.data.color = params.color\n    locals.editableColumn.data.name = params.name\n    $refs.editColumn.toggle(event)\n  }\n\n  onChangeColumnMetadata() {\n    \n    $refs.editColumn.close()\n    locals.rerenderKey = Aeppic.DateTime.local().toString()\n    Aeppic.save(locals.editableColumn)\n  }\n\n  onCollapse() {\n    locals.collapsed = true\n    const storage = (Aeppic.LocalStorage.getValue(locals.localStorageKey) || {collapsed: true})\n    storage.collapsed = true\n    Aeppic.LocalStorage.setValue(locals.localStorageKey, storage)\n  }\n\n  onExpand() {\n    locals.collapsed = false\n    const storage = (Aeppic.LocalStorage.getValue(locals.localStorageKey) || {collapsed: false})\n    storage.collapsed = false\n    Aeppic.LocalStorage.setValue(locals.localStorageKey, storage)\n  }\n\n  onCreateNewDocument(newDocumentCommandId) {\n    $refs.newDocumentPopup.close()\n    $emit('create-new-document', newDocumentCommandId)\n  }\n\n  increaseDisplayCap() {\n    locals.displayCap = locals.displayCap + locals.displayCapStep\n  }\n\n  \n}","css":"","name":"rd:column","packages":[],"template":"<template v-if=\"locals.ready\">\n  <div \n    v-if=\"!locals.collapsed || params.disableCollapse\" \n    class=\"w-64 flex flex-col h-full gap-1 xborder xborder-blue-200 select-none\">\n    <!-- Column Header -->\n    <div class=\"w-full rounded-md border border-secondary-200 bg-white\"\n        :class=\"!!controller.filter && 'border-amber-600'\"\n    >\n      <!-- First Row -->\n      <div class=\"flex gap-1 px-1 py-1 items-center\">\n        <!-- Collapse Button -->\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.onCollapse()\"\n          param-icon=\"far fa-arrow-from-right\"\n          :param-disabled=\"params.disableCollapse\"\n        ></ae-layout>\n        <!-- Column Name/Title -->\n        <div class=\"mr-auto truncate text-[0.8em] xfont-semibold xtracking-wide\" :style=\"{ color: params.color }\"\n          :title=\"params.name\"\n        >{{ params.name || \"Unbenannt\" }}</div>\n        <!-- {{ '(' + (locals.documents?.length || 0).toString() + ') ' + (params.name || \"Unbenannt\") }} -->\n        <!-- More Options Button -->\n        <ae-layout\n          v-if=\"0\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"locals.showMoreOptions = !locals.showMoreOptions\"\n          param-icon=\"far fa-ellipsis-v\"\n          param-title=\"Mehr Funktionen\"\n        ></ae-layout>\n      </div>\n      <!-- Second Row -->\n      <div class=\"flex gap-1 px-1 py-1 items-center flex justify-between border-t border-secondary-100\">\n        <!-- Column Stats -->\n        <div class=\"flex gap-2\">\n        <div \n          v-if=\"Aeppic.Math.min(locals.documents.length, locals.displayCap, locals.filteredDocuments.length) !== Aeppic.Math.min(locals.documents.length, locals.filteredDocuments.length)\"\n          title=\"Anzahl der momentan angezeigten Dokumente\"\n        >\n          <ae-icon class=\"far fa-eye\"></ae-icon>\n          {{ Aeppic.Math.min(locals.documents.length, locals.displayCap, locals.filteredDocuments.length) }}\n        </div>\n        <div \n          v-if=\"!!controller.filter\"\n          title=\"Alle Dokumente, die vom Filter zugelassen werden. Auch nicht angezeigte\"\n        >\n          <ae-icon \n            class=\"far fa-filter\"\n            :class=\"!!controller.filter && 'text-amber-600'\"\n          ></ae-icon>\n          {{ locals.filteredDocuments.length }}\n        </div>\n        <div \n          title=\"Alle Dokumente\"\n        >\n          <ae-icon class=\"far fa-sigma\"></ae-icon>\n          {{ locals.documents.length }}\n        </div>\n        </div>\n        <!-- Increase shown Documents cap -->\n        <ae-layout\n          v-if=\"locals.displayCap < locals.documents.length\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.increaseDisplayCap()\"\n          param-icon=\"far fa-plus\"\n          param-text=\"\"\n          :param-title=\"'Anzahl der maximal angezeigten Dokumente um ' + locals.displayCapStep + ' erhöhen'\"\n        ></ae-layout>\n        <!-- More Options Button -->\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"locals.showMoreOptions = !locals.showMoreOptions\"\n          param-icon=\"far fa-ellipsis-v\"\n          param-title=\"Mehr Funktionen\"\n        ></ae-layout>\n      </div>\n      <!-- Third Row / Settings -->\n      <div\n        v-if=\"locals.showMoreOptions\"\n        class=\"border-t border-secondary-100 px-1 flex justify-between py-1\"\n      >\n        <!-- To the left Button -->\n        <ae-layout\n          v-if=\"$listeners['move-column-left']\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"$emit('move-column-left')\"\n          param-icon=\"far fa-arrow-left\"\n          param-title=\"Spalte nach links\"\n          :param-disabled=\"params.readonly || params.leftMostColumn\"\n        ></ae-layout>\n        <!-- Delete Column Button -->\n        <div v-if=\"$listeners['delete-column']\" @mouseleave=\"locals.deletePending = false\">\n          <ae-layout\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            @selected=\"$refs.deleteColumnPopup.show($event)\"\n            param-icon=\"fas fa-trash-alt\"\n            param-title=\"Spalte löschen. Dokumente in Backlog legen.\"\n            :param-disabled=\"params.readonly\"\n          ></ae-layout>\n        </div>\n        <!-- Edit Button -->\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.showEditPopup($event)\"\n          param-icon=\"far fa-pencil\"\n          param-title=\"Bearbeiten\"\n          :param-disabled=\"params.readonly\"\n        ></ae-layout>\n        <!-- Sort Show/Hide Button -->\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.toggleSortVisibility($event)\"\n          param-icon=\"far fa-sort-alt\"\n          param-title=\"Sortieren\"\n        ></ae-layout>\n        <!-- To the right Button -->\n        <ae-layout\n          v-if=\"$listeners['move-column-right']\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"$emit('move-column-right')\"\n          param-icon=\"far fa-arrow-right\"\n          param-title=\"Spalte nach rechts\"\n          :param-disabled=\"params.readonly || params.rightMostColumn\"\n        ></ae-layout>\n      </div>\n      <!-- Fourth Row / Filter and Search -->\n      <!-- <div\n        v-if=\"locals.showMoreOptions\"\n        class=\"border-t border-secondary-100 px-1 flex justify-between py-1\"\n      > -->\n      <!-- </div> -->\n    </div>\n    <ae-design\n      v-if=\"locals.showMoreOptions\"\n      class=\"text-[1em]\"\n      name=\"rd:toolbar\"\n      :document=\"params.board\"\n      :param-list-form-id=\"params.board.data.form[0]\"\n      :param-disable-sort=\"true\"\n      @filter=\"locals.filter = $event\"\n      :param-storage-key=\"'userpref@boardColumnToolbar' + locals.localStorageKey\"\n    >\n    </ae-design>\n\n    <!-- New Document Button -->\n    <button\n      v-if=\"!params.readonly && $listeners['create-new-document'] && locals.newDocumentCommands?.length\"\n      class=\"text-[0.7em] text-secondary-500 hover:bg-secondary-200 rounded-full py-1 cursor-pointer\"\n      @click.stop=\"$refs.newDocumentPopup.toggle($event)\"\n    >\n      <ae-icon\n        class=\"far fa-plus\"\n      ></ae-icon>\n      <span>\n        Neu\n      </span>\n    </button>\n\n    <!-- Column Body -->\n    <div\n      class=\"flex-1 min-h-0 select-auto overflow-y-scroll pr-1\"\n    >\n      <ae-list\n        list-id=\"49448488-fd3b-4a9d-a8ce-9beda8c1424f\"\n        class=\"h-full\"\n        :param-group=\"params.group\"\n        :param-color=\"params.color\"\n        :param-enable-column-sorting=\"params.enableColumnSorting\"\n        :param-column-id=\"params.columnId\"\n        :param-disable-animation=\"params.disableAnimation\"\n        :param-board=\"params.board\"\n        :param-board-card-params=\"params.boardCardParams\"\n        :param-display-cap=\"locals.displayCap\"\n        :param-debug=\"params.debug\"\n        :param-readonly=\"params.readonly\"\n        :documents=\"locals.documents\"\n        :watch-documents=\"false\"\n        :filter=\"controller.filter\"\n        :sort=\"$listeners.sort ? [] : locals.sort\"\n        :search-options=\"params.searchOptions\"\n        @change=\"$emit('change', $event)\"\n        @selected=\"$emit('selected' ,$event, arguments[1])\"\n        @delete-document=\"$emit('delete-document', $event)\"\n        @trash-enter=\"$emit('trash-enter')\"\n        @trash-leave=\"$emit('trash-leave')\"\n        @filtered-documents=\"locals.filteredDocuments = $event\"\n      ></ae-list>\n    </div>\n  </div>\n\n  <div v-else class=\"h-full flex flex-col select-none\">\n    <div class=\"rounded-md border border-secondary-200 p-1\">\n      <div class=\"flex gap-2\">\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.onExpand()\"\n          param-icon=\"far fa-arrow-from-left\"\n        ></ae-layout>\n      </div>\n    </div>\n    <div class=\"mt-2 flex-1 min-h-0 flex justify-center\">\n      <span class=\"truncate\" :style=\"{writingMode: 'sideways-rl', color: params.color}\">\n        {{params.name || \"Unbenannt\"}}\n      </span>\n    </div>\n  </div>\n</template>\n\n<ae-popup ref=\"editSort\" placement=\"bottom\" :maxWidth=\"1000\">\n  <template #default>\n    <div class=\"bg-slate-50 flex flex-col\">\n      <!-- -mx-8 prevents the toolbars padding from looking bad -->\n      <ae-design\n        class=\"w-full\"\n        name=\"rd:toolbar\"\n        :document=\"params.board\"\n        :param-list-form-id=\"params.board.data.form[0]\"\n        :param-disable-filter=\"true\"\n        :param-disable-search=\"true\"\n        @sort=\"locals.sort = $event\"\n      >\n      </ae-design>\n      <ae-layout\n        v-if=\"$listeners.sort\"\n        class=\"p-1\"\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        @selected=\"$emit('sort', locals.sort)\"\n        param-icon=\"far fa-save\"\n        param-title=\"\"\n        param-text=\"Sortierung bestätigen\"\n        :param-disabled=\"params.readonly\"\n      ></ae-layout>\n    </div>\n  </template>\n</ae-popup>\n\n<ae-popup ref=\"editColumn\" placement=\"bottom\">\n  <template #default>\n    <div class=\"py-2 px-1 flex flex-col gap-1\"\n          :key=\"locals.rerenderKey\"\n    >\n      <ae-form\n        :document=\"locals.editableColumn\"\n        layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n        :view=\"{only: {fields: ['name', 'color']}}\"\n      ></ae-form>\n      <ae-layout\n        class=\"p-1\"\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        @selected=\"controller.onChangeColumnMetadata()\"\n        param-icon=\"far fa-save\"\n        param-title=\"Speichern\"\n        param-text=\"Speichern\"\n      ></ae-layout>\n    </div>\n  </template>\n</ae-popup>\n\n<ae-popup ref=\"newDocumentPopup\" placement=\"bottom\">\n  <template #default>\n    <div class=\"py-2 px-1 flex flex-col gap-1\"\n    >\n      <ae-layout\n            v-for=\"command of locals.newDocumentCommands\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            @selected=\"controller.onCreateNewDocument(command.id)\"\n            :param-icon=\"command.data.namedIcon\"\n            :param-text=\"command.data.label || command.data.name\"\n      ></ae-layout>\n    </div>\n  </template>\n</ae-popup>\n\n<ae-popup ref=\"deleteColumnPopup\" placement=\"bottom\">\n  <template #default>\n    <div class=\"py-2 px-1 flex flex-col gap-1\"\n    >\n      <ae-layout\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        @selected=\"$emit('delete-column')\"\n        param-icon=\"fas fa-trash-alt text-red-600\"\n        param-title=\"Spalte löschen. Dokumente in Backlog legen.\"\n        param-text=\"Löschen bestätigen\"\n        :param-disabled=\"params.readonly\"\n      ></ae-layout>\n    </div>\n  </template>\n</ae-popup>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"374dea59-4216-4ab6-92b3-37a99f5b7924","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-04-07T07:07:31+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"433bf79c-700a-41db-b7d1-c3d7ad95523a","text":"rd:column","v":"a9f7dd5ca23c2fd6"},"p":"44f0275d-078c-4ec3-b475-13f60453dde8","previous":{"v":"2dff4f2d213d8c62"},"stamps":[],"t":1775545651975,"v":"f3dfdcca3f133350"},{"a":["apps","089481c4-a42f-4a98-9bc9-12e9f1131f4b","676a196c-72c0-44e3-bdcc-9ac195273e80"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2025-04-11T09:42:09+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1744364529251,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.DOCUMENTS = { \n      editableColumn: '776a89a7-3a0b-4e51-a205-faacc21efbf3'\n    }\n\n    locals.ready = false\n\n    locals.showMoreOptions = false\n    locals.showFilter = false\n    locals.filter = ''\n    locals.sort = []\n    locals.parentFilter = params.filter || ''\n    locals.documents = [...(params.documents ?? [])]\n    locals.editableColumn = null\n    locals.localStorageKey = `column-id-${params.columnId}`\n    locals.collapsed = (Aeppic.LocalStorage.getValue(locals.localStorageKey) || {collapsed: false}).collapsed ?? false\n    locals.rerenderKey = \"\"\n    locals.displayCapStep = 50\n    locals.displayCap = 50\n    locals.filteredDocuments = []\n\n    locals.newDocumentCommands = (await Aeppic.getAll(params.newDocumentCommandIds)).filter(doc => !!doc)\n\n    watchParam('documents', (docs, oldDocs) => {\n      if (locals.documents.length === docs.length && \n          docs.every((doc, index) => {\n            return doc.id === locals.documents[index].id\n          })) {\n        return\n      } \n      params.debug && console.log(\"Column Layout params.documents Changed\", params.name)\n      locals.documents = [...(docs ?? [])]\n    })\n\n    watchParam('filter', (filter) => {\n      if (locals.parentfilter === filter) {\n        return\n      } \n      locals.parentFilter = filter\n    })\n\n    watchParam('name', (name) => {\n      locals.name = name\n    })\n\n    watchParam('color', (name) => {\n      locals.name = name\n    })\n\n    locals.ready = true\n  }\n\n  get filter() {\n    return !!locals.filter ? locals.filter : locals.parentFilter\n  }\n\n  toggleSortVisibility(event) {\n    // debugger\n    $refs.editSort.toggle(event)\n  }\n\n  async showEditPopup(event) {\n    locals.editableColumn = await Aeppic.edit(params.columnId)\n    locals.editableColumn.data.color = params.color\n    locals.editableColumn.data.name = params.name\n    $refs.editColumn.toggle(event)\n  }\n\n  onChangeColumnMetadata() {\n    \n    $refs.editColumn.close()\n    locals.rerenderKey = Aeppic.DateTime.local().toString()\n    Aeppic.save(locals.editableColumn)\n  }\n\n  onCollapse() {\n    locals.collapsed = true\n    const storage = (Aeppic.LocalStorage.getValue(locals.localStorageKey) || {collapsed: true})\n    storage.collapsed = true\n    Aeppic.LocalStorage.setValue(locals.localStorageKey, storage)\n  }\n\n  onExpand() {\n    locals.collapsed = false\n    const storage = (Aeppic.LocalStorage.getValue(locals.localStorageKey) || {collapsed: false})\n    storage.collapsed = false\n    Aeppic.LocalStorage.setValue(locals.localStorageKey, storage)\n  }\n\n  onCreateNewDocument(newDocumentCommandId) {\n    $refs.newDocumentPopup.close()\n    $emit('create-new-document', newDocumentCommandId)\n  }\n\n  increaseDisplayCap() {\n    locals.displayCap = locals.displayCap + locals.displayCapStep\n  }\n\n  \n}","css":"","name":"rd:column","packages":[],"template":"<template v-if=\"locals.ready\">\n  <div \n    v-if=\"!locals.collapsed || params.disableCollapse\" \n    class=\"w-64 flex flex-col h-full gap-1 xborder xborder-blue-200 select-none\">\n    <!-- Column Header -->\n    <div class=\"w-full rounded-md border border-secondary-200 bg-white\"\n        :class=\"!!controller.filter && 'border-amber-600'\"\n    >\n      <!-- First Row -->\n      <div class=\"flex gap-1 px-1 py-1 items-center\">\n        <!-- Collapse Button -->\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.onCollapse()\"\n          param-icon=\"far fa-arrow-from-right\"\n          :param-disabled=\"params.disableCollapse\"\n        ></ae-layout>\n        <!-- Column Name/Title -->\n        <div class=\"mr-auto truncate text-[0.8em] xfont-semibold xtracking-wide\" :style=\"{ color: params.color }\"\n          :title=\"params.name\"\n        >{{ params.name || \"Unbenannt\" }}</div>\n        <!-- {{ '(' + (locals.documents?.length || 0).toString() + ') ' + (params.name || \"Unbenannt\") }} -->\n        <!-- More Options Button -->\n        <ae-layout\n          v-if=\"0\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"locals.showMoreOptions = !locals.showMoreOptions\"\n          param-icon=\"far fa-ellipsis-v\"\n          param-title=\"Mehr Funktionen\"\n        ></ae-layout>\n      </div>\n      <!-- Second Row -->\n      <div class=\"flex gap-1 px-1 py-1 items-center flex justify-between border-t border-secondary-100\">\n        <!-- Column Stats -->\n        <div class=\"flex gap-2\">\n        <div \n          v-if=\"Aeppic.Math.min(locals.documents.length, locals.displayCap, locals.filteredDocuments.length) !== Aeppic.Math.min(locals.documents.length, locals.filteredDocuments.length)\"\n          title=\"Anzahl der momentan angezeigten Dokumente\"\n        >\n          <ae-icon class=\"far fa-eye\"></ae-icon>\n          {{ Aeppic.Math.min(locals.documents.length, locals.displayCap, locals.filteredDocuments.length) }}\n        </div>\n        <div \n          v-if=\"!!controller.filter\"\n          title=\"Alle Dokumente, die vom Filter zugelassen werden. Auch nicht angezeigte\"\n        >\n          <ae-icon \n            class=\"far fa-filter\"\n            :class=\"!!controller.filter && 'text-amber-600'\"\n          ></ae-icon>\n          {{ locals.filteredDocuments.length }}\n        </div>\n        <div \n          title=\"Alle Dokumente\"\n        >\n          <ae-icon class=\"far fa-sigma\"></ae-icon>\n          {{ locals.documents.length }}\n        </div>\n        </div>\n        <!-- Increase shown Documents cap -->\n        <ae-layout\n          v-if=\"locals.displayCap < locals.documents.length\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.increaseDisplayCap()\"\n          param-icon=\"far fa-plus\"\n          param-text=\"\"\n          :param-title=\"'Anzahl der maximal angezeigten Dokumente um ' + locals.displayCapStep + ' erhöhen'\"\n        ></ae-layout>\n        <!-- More Options Button -->\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"locals.showMoreOptions = !locals.showMoreOptions\"\n          param-icon=\"far fa-ellipsis-v\"\n          param-title=\"Mehr Funktionen\"\n        ></ae-layout>\n      </div>\n      <!-- Third Row / Settings -->\n      <div\n        v-if=\"locals.showMoreOptions\"\n        class=\"border-t border-secondary-100 px-1 flex justify-between py-1\"\n      >\n        <!-- To the left Button -->\n        <ae-layout\n          v-if=\"$listeners['move-column-left']\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"$emit('move-column-left')\"\n          param-icon=\"far fa-arrow-left\"\n          param-title=\"Spalte nach links\"\n          :param-disabled=\"params.readonly || params.leftMostColumn\"\n        ></ae-layout>\n        <!-- Delete Column Button -->\n        <div v-if=\"$listeners['delete-column']\" @mouseleave=\"locals.deletePending = false\">\n          <ae-layout\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            @selected=\"$refs.deleteColumnPopup.show($event)\"\n            param-icon=\"fas fa-trash-alt\"\n            param-title=\"Spalte löschen. Dokumente in Backlog legen.\"\n            :param-disabled=\"params.readonly\"\n          ></ae-layout>\n        </div>\n        <!-- Edit Button -->\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.showEditPopup($event)\"\n          param-icon=\"far fa-pencil\"\n          param-title=\"Bearbeiten\"\n          :param-disabled=\"params.readonly\"\n        ></ae-layout>\n        <!-- Sort Show/Hide Button -->\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.toggleSortVisibility($event)\"\n          param-icon=\"far fa-sort-alt\"\n          param-title=\"Sortieren\"\n        ></ae-layout>\n        <!-- To the right Button -->\n        <ae-layout\n          v-if=\"$listeners['move-column-right']\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"$emit('move-column-right')\"\n          param-icon=\"far fa-arrow-right\"\n          param-title=\"Spalte nach rechts\"\n          :param-disabled=\"params.readonly || params.rightMostColumn\"\n        ></ae-layout>\n      </div>\n      <!-- Fourth Row / Filter and Search -->\n      <div\n        v-if=\"locals.showMoreOptions\"\n        class=\"border-t border-secondary-100 px-1 flex justify-between py-1\"\n      >\n        <ae-design\n          class=\"text-[1em]\"\n          name=\"rd:toolbar\"\n          :document=\"params.board\"\n          :param-list-form-id=\"params.board.data.form[0]\"\n          :param-disable-sort=\"true\"\n          @filter=\"locals.filter = $event\"\n          :param-storage-key=\"'userpref@boardColumnToolbar' + locals.localStorageKey\"\n        >\n        </ae-design>\n      </div>\n    </div>\n\n    <!-- New Document Button -->\n    <button\n      v-if=\"!params.readonly && $listeners['create-new-document'] && locals.newDocumentCommands?.length\"\n      class=\"text-[0.7em] text-secondary-500 hover:bg-secondary-200 rounded-full py-1 cursor-pointer\"\n      @click.stop=\"$refs.newDocumentPopup.toggle($event)\"\n    >\n      <ae-icon\n        class=\"far fa-plus\"\n      ></ae-icon>\n      <span>\n        Neu\n      </span>\n    </button>\n\n    <!-- Column Body -->\n    <div\n      class=\"flex-1 min-h-0 select-auto overflow-y-scroll pr-1\"\n    >\n      <ae-list\n        list-id=\"4bc2d590-f52b-4d27-82d6-2ccc0f556ff7\"\n        class=\"h-full\"\n        :param-group=\"params.group\"\n        :param-color=\"params.color\"\n        :param-enable-column-sorting=\"params.enableColumnSorting\"\n        :param-column-id=\"params.columnId\"\n        :param-disable-animation=\"params.disableAnimation\"\n        :param-board=\"params.board\"\n        :param-board-card-params=\"params.boardCardParams\"\n        :param-display-cap=\"locals.displayCap\"\n        :param-debug=\"params.debug\"\n        :param-readonly=\"params.readonly\"\n        :documents=\"locals.documents\"\n        :filter=\"controller.filter\"\n        :sort=\"$listeners.sort ? [] : locals.sort\"\n        @change=\"$emit('change', $event)\"\n        @selected=\"$emit('selected' ,$event, arguments[1])\"\n        @delete-document=\"$emit('delete-document', $event)\"\n        @trash-enter=\"$emit('trash-enter')\"\n        @trash-leave=\"$emit('trash-leave')\"\n        @filtered-documents=\"locals.filteredDocuments = $event\"\n      ></ae-list>\n    </div>\n  </div>\n\n  <div v-else class=\"h-full flex flex-col select-none\">\n    <div class=\"rounded-md border border-secondary-200 p-1\">\n      <div class=\"flex gap-2\">\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          @selected=\"controller.onExpand()\"\n          param-icon=\"far fa-arrow-from-left\"\n        ></ae-layout>\n      </div>\n    </div>\n    <div class=\"mt-2 flex-1 min-h-0 flex justify-center\">\n      <span class=\"truncate\" :style=\"{writingMode: 'sideways-rl', color: params.color}\">\n        {{params.name || \"Unbenannt\"}}\n      </span>\n    </div>\n  </div>\n</template>\n\n<ae-popup ref=\"editSort\" placement=\"bottom\" :maxWidth=\"1000\">\n  <template #default>\n    <div class=\"bg-slate-50 flex flex-col\">\n      <!-- -mx-8 prevents the toolbars padding from looking bad -->\n      <ae-design\n        class=\"\"\n        name=\"rd:toolbar\"\n        :document=\"params.board\"\n        :param-list-form-id=\"params.board.data.form[0]\"\n        :param-disable-filter=\"true\"\n        :param-disable-search=\"true\"\n        @sort=\"locals.sort = $event\"\n      >\n      </ae-design>\n      <ae-layout\n        v-if=\"$listeners.sort\"\n        class=\"p-1\"\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        @selected=\"$emit('sort', locals.sort)\"\n        param-icon=\"far fa-save\"\n        param-title=\"\"\n        param-text=\"Sortierung bestätigen\"\n        :param-disabled=\"params.readonly\"\n      ></ae-layout>\n    </div>\n  </template>\n</ae-popup>\n\n<ae-popup ref=\"editColumn\" placement=\"bottom\">\n  <template #default>\n    <div class=\"py-2 px-1 flex flex-col gap-1\"\n          :key=\"locals.rerenderKey\"\n    >\n      <ae-form\n        :document=\"locals.editableColumn\"\n        layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n        :view=\"{only: {fields: ['name', 'color']}}\"\n      ></ae-form>\n      <ae-layout\n        class=\"p-1\"\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        @selected=\"controller.onChangeColumnMetadata()\"\n        param-icon=\"far fa-save\"\n        param-title=\"Speichern\"\n        param-text=\"Speichern\"\n      ></ae-layout>\n    </div>\n  </template>\n</ae-popup>\n\n<ae-popup ref=\"newDocumentPopup\" placement=\"bottom\">\n  <template #default>\n    <div class=\"py-2 px-1 flex flex-col gap-1\"\n    >\n      <ae-layout\n            v-for=\"command of locals.newDocumentCommands\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            @selected=\"controller.onCreateNewDocument(command.id)\"\n            :param-icon=\"command.data.namedIcon\"\n            :param-text=\"command.data.label || command.data.name\"\n      ></ae-layout>\n    </div>\n  </template>\n</ae-popup>\n\n<ae-popup ref=\"deleteColumnPopup\" placement=\"bottom\">\n  <template #default>\n    <div class=\"py-2 px-1 flex flex-col gap-1\"\n    >\n      <ae-layout\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        @selected=\"$emit('delete-column')\"\n        param-icon=\"fas fa-trash-alt text-red-600\"\n        param-title=\"Spalte löschen. Dokumente in Backlog legen.\"\n        param-text=\"Löschen bestätigen\"\n        :param-disabled=\"params.readonly\"\n      ></ae-layout>\n    </div>\n  </template>\n</ae-popup>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"433bf79c-700a-41db-b7d1-c3d7ad95523a","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-03-09T09:54:28+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"p":"676a196c-72c0-44e3-bdcc-9ac195273e80","previous":{"v":"30d74db4221887ef"},"stamps":[],"t":1773050068319,"v":"a9f7dd5ca23c2fd6"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"5886531d-7ae8-47ec-8b16-adc3378fcd1f","text":"Command Dialog Manager","v":"4891cf5679b5721d"},"created":{"at":"2026-06-15T12:28:20+00:00","backedBy":"","by":"b7485498-f1f3-4ab1-87d1-9cb63ea890c8","client":"server","from":"","impersonatedBy":""},"ct":1781526500126,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this._fallbackShowTimeout = null\n\n    this.defaultDialogId = '458bacf5-0b5f-44ec-9ad4-c2302183ab89'\n    locals.ready = false\n\n    locals.dialogId = this.defaultDialogId\n    locals.loadedDialogId =  ''\n    locals.showOptions = null\n\n    $on('show', (options) => this.show(options))\n  }\n\n  onDialogReady(loadedDialogId) {\n    console.log('onDialogReady', { loadedDialogId, timeout: this._fallbackShowTimeout, showOptions: locals.showOptions })\n\n    locals.loadedDialogId = loadedDialogId\n\n    // If every dialog is ensured to $emit('ready') after loading, one can remove this logic\n    if (this._fallbackShowTimeout) {\n      clearTimeout(this._fallbackShowTimeout)\n      this._fallbackShowTimeout = null\n    }\n    \n    $refs.dialog.$emit('show', locals.showOptions)\n  }\n\n  async show(options) {\n    // reset previously rendered dialog\n    locals.ready = false\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    locals.showOptions = options\n\n    if (options?.dialog?.data?.layout?.id) {\n      locals.dialogId = options.dialog.data.layout.id\n    } else {\n      locals.dialogId = this.defaultDialogId\n    }\n\n    locals.ready = true\n\n    // wait for ae-layout to render\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    const isRequestedDialogRendered = locals.dialogId === locals.loadedDialogId\n    console.log({ isRequestedDialogRendered })\n\n    if (!isRequestedDialogRendered) {\n      // opening the dialog will be handled in this.onDialogReady()\n      this._fallbackShowTimeout = Aeppic.setTimeout(() => {\n        this.onDialogReady(locals.dialogId)\n      }, 300)\n\n      return\n    } \n\n    $refs.dialog.$emit('show', locals.showOptions)\n  }\n}     ","css":"","name":"rd:Command Dialog Manager","packages":[],"template":"<!-- Only run $emit('show') within dialog when it announces readyness via @ready -->\n<!-- re-emit @close to allow to react to dialog success/cancel/abort/... event -->\n\n<ae-layout\n  v-if=\"locals.ready\"\n  :layout-id=\"locals.dialogId\"\n  :param-document=\"params.document\"\n  ref=\"dialog\"\n  @ready=\"controller.onDialogReady(locals.dialogId)\"\n  @close=\"$emit('close')\"\n></ae-layout>\n"},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"82e47b0a-5a52-4480-97d1-6cf0318cc940","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-06-15T12:28:44+00:00","backedBy":"","by":"b7485498-f1f3-4ab1-87d1-9cb63ea890c8","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"5886531d-7ae8-47ec-8b16-adc3378fcd1f","text":"Command Dialog Manager","v":"4891cf5679b5721d"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"initial"},"stamps":[],"t":1781526524802,"v":"7927019093dedbd5"},{"id":"fde4ed81-1f72-4e27-b2bf-f1291c4ec7ea","v":"aa89259feaba017e","cloneOf":{"id":"ed784d22-af86-420e-b70c-15a6e4dc7512","v":"2a3ab8ad74e1ed7f","text":"Command executor with Dialog"},"originalCloneOf":{"id":"ed784d22-af86-420e-b70c-15a6e4dc7512","v":"2a3ab8ad74e1ed7f","text":"Command executor with Dialog"},"previous":{"v":"56634d8020860bd4"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"rd:Command executor with Dialog","applies":"","packages":[],"template":"<template v-if=\"locals.command\">\n  <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            :param-icon-design-document-id=\"locals.command.id\"\n             :param-document-id=\"locals.command.id\"\n             @selected=\"controller.executeCommand()\"\n             :param-disabled=\"params.disabled\"\n             :param-title=\"params.disabled && 'Keine Berechtigung'\"\n             :param-border=\"params.border\"\n             :param-primary=\"params.primary\"\n  ></ae-layout>\n\n  <ae-layout  layout-id=\"5886531d-7ae8-47ec-8b16-adc3378fcd1f\"\n              ref=\"commandDialog\"\n  ></ae-layout>\n</template>\n\n","css":"._CSS-button {\n  display: flex;\n}","controller":"class Controller {\n  async init() {\n    if (!params.command || !params.target) {\n      throw new Error('Missing param.command OR params.target')\n    }\n    \n    locals.command = await Aeppic.get(params.command)\n  }\n\n  async executeCommand() {\n    const command = locals.command\n\n    console.log({command})\n\n    const result = await Aeppic.Commands.execute(command, params.target, {...params.options})\n\n    if (!result.ok) {\n      console.error('Could not execute command', command, result)\n      return\n    }\n\n    if (command.data.navigation !== 'dialog') {\n      console.error(`unsupported mode \"${command.data.navigation}\". Expected \"dialog\"`, command)\n      return\n    }\n\n    const dialog = await Aeppic.get(command.data.navigationTarget)\n\n    if (!dialog) {\n      console.error('could not find dialog', dialog)\n      return\n    }\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $refs.commandDialog.$emit('show', { dialog, document: result.value, command: locals.command })\n  }\n}"},"locks":[],"created":{"at":"2023-09-18T13:54:51+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2024-05-07T09:36:55+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1715074615503,"ct":1695045291856,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2022-05-13T13:56:47+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1758789946217,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.STAMPS = {\n      CommentPublish: '04a939a8-6732-4f94-ad75-6f17ac417136'\n    }\n \n    this.FORMS = {\n      Comment: 'cf155969-ede1-43a4-9b10-3a697b19db91',\n      Notification: '6d164aff-df9b-470d-9632-cfb6f5892509',\n      PingAsNotificationCategory: '97902782-7315-4837-94fc-8e080c6cfbf3',\n      Ping: '42cf6e7a-e304-49a6-86e1-c94d84f1d0d9',\n      Employee: 'd2ac3563-3c3f-4f02-b923-9b67abf98d10',\n      NotificationRequest: 'ddaa6921-770e-4a73-b8a4-b4a99abed24b',\n      Group: 'group'\n    } \n\n    this.handler = (clickEvent) => {\n      if (!locals.show) {\n        return\n      }\n\n      const clickIsInContainer = clickEvent.composedPath().find(p => p === $refs.container)\n\n      if (!clickIsInContainer) {\n        this.closeComments()\n      }\n    } \n\n    locals.pingEmployeeSelectorSettings = {\n      filter: {\n        ancestorId: params.document.a[0],\n        base: `(f.id:${this.FORMS.Employee} OR f.id:${this.FORMS.Group})`,\n      }\n    }\n\n    locals.mentionEmployeeSelectorSettings = {\n      filter: {\n        ancestorId: params.document.a[0],\n        base: `f.id:${this.FORMS.Employee}`,\n      }\n    }\n    \n    locals.disabled = true \n    locals.show = false\n    locals.comments = []\n    locals.newComment = null\n    locals.receiver = []\n\n    const { globalSettings } = await Aeppic.Preferences.getSettingsDocuments('bizpin:comments')\n    const { disableForms, disableAncestorForms } = globalSettings.data\n \n    if (disableForms.find(f => f.id === params.document.f.id) || params.document.a_forms.some(aForm => disableAncestorForms.find(ancestorFormRef => ancestorFormRef.id === aForm))) {\n      return \n    }\n\n    if (this.documentShallNotHaveComments) {\n      return\n    }\n\n    locals.disabled = false\n\n    if (params.highlightComment && params.windowWidth < 1280) {\n      this.openComments()\n    }  \n \n    watchParam('windowWidth', (windowWidth) => {\n\n      if (windowWidth < 1280) {\n        if (!params.highlightComment) {\n          return\n        } \n\n        this.openComments()\n      } else {\n        this.closeComments()\n      }\n    })\n\n\n    await this._prefetchComments()\n  }\n\n  _setupClick() {\n    packages.window.addEventListener('click', this.handler)\n  }\n\n  _tearDownClick() {\n    packages.window.removeEventListener('click', this.handler)\n\n  }\n\n  get documentShallNotHaveComments() {\n    return params.document.a_depth <= 1\n  }\n\n  async openComments() {\n    if (locals.show) {\n      return\n    }\n    \n    this._setupClick()\n\n    locals.show = true\n    locals.showList = true\n  }\n \n  async _prefetchComments() {\n    const pingQueries = [\n      `(p:${Aeppic.Account.id} f.id:${this.FORMS.Notification} data.document.id:${params.document.id} data.category:${this.FORMS.PingAsNotificationCategory} )`,\n      `(p:${Aeppic.Account.id} f.id:${this.FORMS.NotificationRequest} data.document.id:${params.document.id} data.category:${this.FORMS.PingAsNotificationCategory} )`,\n      `(p:${Aeppic.Account.id} f.id:${this.FORMS.Ping} data.document.id:${params.document.id})`,\n    ]\n    const commentQuery =  `(p:${params.document.id} f.id:${this.FORMS.Comment})`\n\n    const query = [  \n      ...pingQueries,\n      commentQuery, \n    ].filter(Boolean).join(' OR ')  \n \n    const searchOptions = { size: 500, sort: { field: 'created.at', descending: true } }\n    locals.comments = await Aeppic.find(query, searchOptions) \n  }  \n\n  async closeComments() {\n    this._tearDownClick()\n    locals.show = false\n\n    locals.showList = false\n\n    // update comments button once after closing (and likely adding a comment)\n    await this._prefetchComments()\n  }\n\n  destroy() {\n    this._tearDownClick()\n  }\n}           ","css":"","name":"rd:Comments Btn","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"d4ce6dec568c3dc1"}],"template":"<div class=\"relative\">\n  <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-comment\"\n            @selected=\"controller.openComments()\"\n            :param-disabled=\"locals.disabled\"\n            :param-count=\"locals.comments.length\"\n            param-border=\"border-slate-200\"\n  ></ae-layout> \n</div>\n\n\n<div class=\"fixed top-0 bottom-0 h-screen right-0 z-50 ease-in-out duration-500  max-w-[90%] border-l shadow-lg overflow-hidden bg-white\"\n    :class=\"[locals.show ?  'w-[500px] opacity-1' : 'w-0 opacity-0' ]\"\n    ref=\"container\"\n>\n  <ae-layout  v-if=\"locals.show\"\n              v-show=\"locals.showList\"\n              layout-id=\"0e6b3b93-8e22-4616-9389-a00a6a1a4f59\"\n              :param-document=\"params.document\"\n              :param-highlight-comment=\"params.highlightComment\"\n              class=\"shadow h-full w-full\"\n            @close=\"controller.closeComments()\"\n  ></ae-layout>\n</div>  \n "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"2ad0619d-792e-40ea-9e76-f7801593f6f8","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-09-25T09:35:55+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"a1ab54f2fc298c73"},"stamps":[],"t":1758792955408,"v":"8f553dbb94967896"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2022-08-30T09:57:28+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1674227242882,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.STAMPS = {\n      CommentPublish: '04a939a8-6732-4f94-ad75-6f17ac417136',\n    }\n\n    this.FORMS = {\n      Comment: 'cf155969-ede1-43a4-9b10-3a697b19db91',\n      Ping: '42cf6e7a-e304-49a6-86e1-c94d84f1d0d9',\n      Employee: 'd2ac3563-3c3f-4f02-b923-9b67abf98d10',\n      Group: 'group',\n    }\n\n    locals.pingEmployeeSelectorSettings = {\n      filter: {\n        ancestorId: params.document.a[0],\n        base: `(f.id:${this.FORMS.Employee} OR f.id:${this.FORMS.Group})`,\n      },\n    }\n\n    locals.mentionEmployeeSelectorSettings = {\n      filter: {\n        ancestorId: params.document.a[0],\n        base: `f.id:${this.FORMS.Employee}`,\n      },\n    }\n\n    locals.help = `\nDie Kommentarfunktion in bizpin ermöglicht es Ihnen, Notizen, Rückfragen, Absprachen und Entscheidungen direkt im Zusammenhang mit einem Document zu hinterlegen. So bleiben alle relevanten Informationen an einem Ort und sind leicht zugänglich.\n<br>\n<br>\nEin privater Ping funktioniert ähnlich wie ein Kommentar, mit dem Unterschied das dieser immer nur dem Sender und Empfänger angezeigt wird.\n`\n\n    locals.show = true\n    locals.comments = []\n    locals.newComment = null\n    locals.receiver = []\n\n    const accountLimit = `p:${Aeppic.Account.id}`\n    const pingsParts = [\n      `(${accountLimit} f.id:${this.FORMS.Ping} data.document.id:${params.document.id})`,\n      `p:${params.document.id} f.id:${this.FORMS.Ping}`,\n    ]  \n    const pingsQuery = pingsParts.join(' OR ')\n    const commentQuery = `p:${params.document.id} f.id:${this.FORMS.Comment}`\n    const query = `(${pingsQuery}) OR (${commentQuery})`\n\n    console.log({ query })\n\n    const searchOptions = { size: 500, sort: { field: 'created.at', descending: false } }\n    locals.comments = await Aeppic.find(query, searchOptions)\n\n    Aeppic.subscribe(query, searchOptions, (docs) => (locals.comments = docs))\n\n    await this.createNewComment()\n\n    locals.root = await Aeppic.get('root')\n  }\n\n  async createNewComment() {\n    locals.newComment = null\n\n    const newComment = await Aeppic.new(this.FORMS.Comment, params.document)\n    newComment.hidden = true\n    Aeppic.commit(newComment)\n\n    locals.newComment = newComment\n  }\n\n  async save() {\n    const filledOut = !!locals.newComment.data.content\n\n    if (!filledOut) {\n      return\n    }\n\n    const isPing = !!locals.receiver.length\n\n    let editable = locals.newComment\n\n    if (isPing) {\n      editable = await this.newPing(locals.receiver)\n    }\n\n    editable.data.content = locals.newComment.data.content\n\n    editable.hidden = false\n\n    Aeppic.save(editable)\n\n    if (!isPing) {\n      const comment = await Aeppic.get(editable)\n      Aeppic.stamp(comment, this.STAMPS.CommentPublish)\n    }\n\n    locals.receiver = []\n\n    await this.createNewComment()\n  }\n\n  async newPing(receivers) {\n    const ping = await Aeppic.new(this.FORMS.Ping, params.document)\n\n    if (!receivers) {\n      throw new Error('Could not resolve receivers')\n    }\n\n    ping.data = {\n      document: await Aeppic.asReference(params.document),\n      who: await Aeppic.asReference(Aeppic.Account),\n    }\n\n    receivers.forEach((r) => ping.addReference('receiver', r))\n\n    return ping\n  }\n\n  async selectedReceiver(groupOrEmployee) {\n    if (!groupOrEmployee) {\n      return\n    }\n\n    const newReceivers = []\n    if (groupOrEmployee.f.id === this.FORMS.Group) {\n      const accounts = await Aeppic.find(`a:${groupOrEmployee.a[0]} f.id:account data.groups:${groupOrEmployee.id}`, {\n        size: 999,\n      })\n      const employees = await Promise.all(accounts.map((a) => Aeppic.getProfilePageForAccount(a)))\n\n      newReceivers.push(...employees)\n    } else {\n      newReceivers.push(groupOrEmployee)\n    }\n\n    for (const receiver of newReceivers) {\n      if (locals.receiver.find((r) => r.id === receiver.id)) {\n        continue\n      }\n\n      locals.receiver.push(receiver)\n    }\n  }\n\n  async removeReceiver(employee) {\n    const index = locals.receiver.findIndex((r) => r.id === employee.id)\n\n    if (index >= 0) {\n      locals.receiver.splice(index, 1)\n    }\n  }\n}\n","css":"","name":"rd:Comments List","packages":[],"template":"\n  <div xv-if=\"locals.show\" class=\"h-full w-full bg-white flex flex-col overflow-hidden rounded-md\">\n    <div class=\"text-lg pb-2 flex justify-between items-center px-4 border-b\">\n      <div class=\"py-1 text-base pt-2 pb-1 overflow-hidden\">\n        <div class=\"flex gap-1 items-center\">\n          <div class=\"text-sm text-neutral-500\">\n            Kommentare\n          </div>\n          <ae-control v-if=\"locals.root\" :document=\"locals.root\"  name=\"rd:help\" :param-text=\"locals.help\"></ae-control> \n        </div>\n        <ae-design name=\"title\" :document=\"params.document\"></ae-design>\n      </div>\n      \n      <ae-layout v-if=\"!params.noClose\" \n                layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                param-icon=\"far fa-times\"\n                @selected=\"$emit('close')\"\n                class=\"text-neutral-500\"\n      ></ae-layout>  \n    </div>\n\n    <ae-list  v-if=\"locals.comments.length\"\n              list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\" \n              :documents=\"locals.comments\" \n              param-design=\"rd:card\"  \n              class=\"p-4 overflow-auto flex-1\" \n              :param-design-params=\"{ highlightComment: params.highlightComment }\"\n              :param-initial-scroll-bottom=\"true\"\n    ></ae-list>\n    <div v-else class=\"flex-1 p-4\"></div>\n\n    <!-- <ae-control :document=\"params.document\" name=\"conversations\"></ae-control> -->\n    <div class=\"bg-gray-50 p-4 flex gap-3\">\n      <div class=\"w-30 flex flex-col\">\n        <ae-design name=\"avatar--resizes-with-font\" class=\"text-2xl\" :document=\"Aeppic.ProfilePage\"></ae-design>\n\n        <div v-if=\"locals.receiver.length\" class=\"flex-1 flex flex-col items-center gap-1 mt-4 max-h-[50vh] overflow-auto\" >\n          <div class=\"text-sm text-neutral-500\">\n            <ae-icon class=\"fa fa-at\"></ae-icon>\n          </div> \n\n          <ae-list\n            list-id=\"5a30185e-24bc-430b-b477-fa85634c26c7\"\n            :documents=\"locals.receiver\"\n            :param-maxBubbles=\"6\"\n            :param-horizontal=\"false\"\n            :param-noWrap=\"true\"\n            xclass=\"text-2xl\"\n            @remove=\"controller.removeReceiver($event)\"\n          ></ae-list>\n          <!-- <ae-layout layout-id=\"ffd34105-fa6a-44f5-aa63-64923233f178\"\n                    :params=\"{ employees: locals.receiver, vertical: true, class: 'text-2xl' }\"\n                    @remove=\"controller.removeReceiver($event)\"\n          ></ae-layout> -->\n\n          <!-- <div v-for=\"receiver of locals.receiver\" @click.stop=\"controller.removeReceiver(receiver)\">\n            <ae-design name=\"avatar--resizes-with-font\" class=\"text-xl\" :document=\"receiver\"></ae-design>\n          </div> -->\n        </div> \n      </div>\n    \n      <div class=\"min-h-[3em]  w-full xoverflow-hidden bg-white flex-1 p-1 border rounded-lg flex flex-col\">\n        <ae-control v-if=\"locals.newComment\"\n                    name=\"rd:editor-comment\"\n                    :document=\"locals.newComment\"\n                    field-name=\"content\"\n                    :params=\"{ withoutBorder: true, withoutMenu: true, placeholderText: 'Hier schreiben...' }\"\n                    ref=\"editor\"\n                    :param-ctrl-enter-save=\"true\"\n                    @save=\"controller.save()\"\n                    class=\"overflow-y-auto max-h-64\"\n        ></ae-control>\n        <div v-else class=\"min-h-[3em] italic text-neutral-500 p-2\">Hier schreiben...</div>\n   \n        <!-- <textarea v-if=\"locals.newComment\" v-model=\"locals.newComment.data.content\" class=\"w-full mb-1 outline-none flex-1\" placeholder=\"Hier schreiben...\" rows=\"4\"></textarea> -->\n \n        <div class=\"w-full flex gap-1\">\n          <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      param-icon=\"far fa-at\"\n                      class=\"text-neutral-500\"\n                      @selected=\"$refs.mentionEmployeeSelector.$emit('show', $event)\"\n                      :param-disabled=\"!!locals.receiver.length\"\n                      param-title=\"Benutzer in Kommentar erwähnen\"\n          ></ae-layout>\n          <ae-layout \n              ref=\"mentionEmployeeSelector\"\n              layout-id=\"36649f27-5869-49e6-9b49-3b5c3b9c795d\"\n              :param-settings=\"locals.mentionEmployeeSelectorSettings\" \n              :param-hide-path=\"true\"\n              @selected=\"$refs.editor.$emit('insert-reference', $event)\"\n              param-title=\"Empfänger für Erwähnung auswählen\"\n              :param-hide-button=\"true\"\n          ></ae-layout>\n          \n          <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      param-icon=\"far fa-smile\"\n                      class=\"text-neutral-500\"\n                      @selected=\"$refs.editor.$emit('smile', $event)\"\n                      title=\"Emoji einfügen\"\n          ></ae-layout>\n\n          <!-- TODO: attachment -->\n          <!-- <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      param-icon=\"far fa-paperclip\"\n                      class=\"text-neutral-500\" \n                      :param-disabled=\"true\"\n                      param-title=\"Anhänge an Kommentare (bald wieder verfügbar)\" \n          ></ae-layout> -->\n          \n\n          <div class=\"flex-1\"></div>\n\n          <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      param-icon=\"far fa-user-circle\"\n                      param-text=\"Privater Ping\"\n                      class=\"text-neutral-500 mr-1\"\n                      :param-primary=\"locals.receiver.length\"\n                      @selected=\"$refs.pingEmployeeSelector.$emit('show', $event)\"\n          ></ae-layout>\n          <ae-layout \n              ref=\"pingEmployeeSelector\"\n              layout-id=\"36649f27-5869-49e6-9b49-3b5c3b9c795d\"\n              :param-settings=\"locals.pingEmployeeSelectorSettings\"\n              :param-hide-path=\"true\"\n              @selected=\"controller.selectedReceiver($event)\"\n              param-icon=\"far fa-user-circle\"\n              param-title=\"Empfänger für Ping auswählen\"\n              :param-hide-button=\"true\"\n          ></ae-layout>\n\n          <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      param-text=\"Senden\"\n                      :param-primary=\"true\"\n                      @selected=\"$refs.editor.$emit('save-now')\"  \n          ></ae-layout>\n        </div>\n      </div>\n    </div>\n  </div>"},"f":{"id":"layout-form","text":"Layout","v":"4e65fada52ca8c8a"},"id":"0e6b3b93-8e22-4616-9389-a00a6a1a4f59","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-05-12T12:32:13+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"f354ae6747cdb171"},"stamps":[],"t":1778589133790,"v":"0f69249e66c23ee4"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"e5accfd9-8d33-46e5-a4d7-69a91b5f8543","text":"Confirm Leave Handler Layout","v":"15f7edcfb4bfee71"},"created":{"at":"2025-12-11T10:45:45+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"ct":1765449953798,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this._setup()\n\n    await Aeppic.nextRenderPass()\n \n    this.bus = params.documentChangedBus\n    this.willNavigateHandler = (event) => this.handleWillNavigate(event)\n\n    const events = params.events || ['ae-drill-into', 'ae-will-navigate', 'popstate', 'beforeunload']\n\n    if ($refs.hiddenDomElement && $refs.hiddenDomElement.$root && $refs.hiddenDomElement.$root.$el) {\n      if (events.includes('ae-drill-into')) {\n        $refs.hiddenDomElement.$root.$el.addEventListener('ae-drill-into', this.willNavigateHandler, { capture: true })\n      }\n      if (events.includes('ae-will-navigate')) {\n        $refs.hiddenDomElement.$root.$el.addEventListener('ae-will-navigate', this.willNavigateHandler, { capture: true })\n      }\n    }\n\n    if (!packages.window) {\n      console.warn('[WARN]: not attaching to browser events due to missing window package')\n    }\n\n    if (events.includes('popstate')) {\n      this.originalPopstate = packages.window.onpopstate\n      packages.window.onpopstate = null\n      packages.window && packages.window.removeEventListener('popstate', this.willNavigateHandler)\n\n      packages.window && packages.window.addEventListener('popstate', this.willNavigateHandler)\n    }\n\n    if (events.includes('beforeunload')) {\n      packages.window && packages.window.addEventListener('beforeunload', this.willNavigateHandler)\n    }\n  }\n\n  _setup() {\n    // taken from server/src/app.js\n    const BIZPIN_LAYOUT_ID = '6670fc35-7bbd-40f5-bea7-6c068d323155'\n    const layoutId = BIZPIN_LAYOUT_ID\n    async function renderPage(layoutId, pageDocumentId, options = {}) {\n      console.log('(app) render', pageDocumentId)\n      console.log('rendering layout', layoutId, pageDocumentId)\n      Aeppic.renderLayout(layoutId, {\n        params: {\n          pageDocumentId,\n          queryParams: options.queryParams,\n          urlHash: options.urlHash,\n          history: {\n            historic: options.historic || false,\n            timestamp: options.timestamp\n          }\n        }\n      })\n    }\n\n    this.buildinPopstateHandler = function (e) {\n      this.originalPopstate(e)\n    }\n  }\n\n  handleWillNavigate(event) {\n    console.log('confirm_leave_handler:handleWillNavigate', event, this.bus && this.bus.documentChanged, params.forceWarn)\n\n    if (!params.forceWarn && (!this.bus || (this.bus && !this.bus.documentChanged))) {\n      this.buildinPopstateHandler(event)\n      return true\n    }\n\n    // console.log('###########', event, locals.id)\n\n    const leave = packages.window.confirm(params.message || 'Sie haben ungespeicherte Änderungen. Seite trotzdem verlassen?')\n\n    if (leave) {\n      this.bus && this.bus.reset()\n\n      this.buildinPopstateHandler(event)\n      return true\n    }\n\n    if ('returnValue' in event) {\n      event.returnValue = ''\n    }\n\n    if ('preventDefault' in event) {\n      event.preventDefault()\n    }\n    if ('stopPropagation' in event) {\n      event.stopPropagation()\n    }\n  }\n\n\n  destroy() {\n    if ($refs.hiddenDomElement && $refs.hiddenDomElement.$root && $refs.hiddenDomElement.$root.$el) {\n      $refs.hiddenDomElement.$root.$el.removeEventListener('ae-drill-into', this.willNavigateHandler, { capture: true })\n      $refs.hiddenDomElement.$root.$el.removeEventListener('ae-will-navigate', this.willNavigateHandler, { capture: true })\n    }\n\n    if (this.originalPopstate) {\n      packages.window.onpopstate = this.originalPopstate\n      packages.window && packages.window.removeEventListener('popstate', this.willNavigateHandler)\n    }\n\n    packages.window && packages.window.removeEventListener('beforeunload', this.willNavigateHandler)\n  }\n}","css":"","name":"rd:Confirm Leave Handler Layout","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"150e1aeee6052825"}],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<ae-design name=\"title\" document-id=\"root\" style=\"display:none;\" ref=\"hiddenDomElement\"></ae-design>\n<div style=\"display:none\">\n  { changed? {{ params.documentChangedBus ? params.documentChangedBus.documentChanged : null }} }\n</div>\n\n<!-- {{locals.id}} -->"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"15576f91-6e36-4b37-9984-4980b1e7ef65","inheritedLocks":[null,null,null,null],"locks":[],"meta":{},"modified":{"at":"2025-12-11T11:17:17+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"e5accfd9-8d33-46e5-a4d7-69a91b5f8543","text":"Confirm Leave Handler Layout","v":"15f7edcfb4bfee71"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"b0d8aa0e8cd2d1d5"},"stamps":[],"t":1765451837434,"v":"442b4e6347103b52"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2023-01-11T12:18:09+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1708680080134,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.confirmReload = (event) => {\n      event.preventDefault()\n      event.returnValue = true\n    } \n \n    locals.connected = true\n\n    if (params.simulate) {\n      this.connectionChanged(false)\n\n      return\n    } \n\n    this.vue = new Vue({\n      computed: {\n        connection() {\n          return Aeppic.ConnectionStatus.connected\n        }\n      },\n      watch: {\n        connection: (isConnected) => this.connectionChanged(isConnected)\n      } \n    })\n  }\n\n  connectionChanged(isConnected) {\n    locals.connected = isConnected\n\n    if (locals.connected) {\n      $emit('hide')\n\n      packages.window.removeEventListener('beforeunload', this.confirmReload)\n    } else {\n      $emit('show')\n\n      packages.window.addEventListener('beforeunload', this.confirmReload)\n    }\n  }\n\n  destroy() {\n    if (this.vue) {\n      this.vue.$destroy()\n    }\n    \n    packages.window.removeEventListener('beforeunload', this.confirmReload)\n  }\n}   ","css":"","name":"rd:Connection Status","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"cc146accf5ec1930"}],"template":"<ae-layout v-if=\"params.button\"\n            v-show=\"!locals.connected\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-wifi-slash text-red-500\"\n            param-text=\"Offline\"\n            param-title=\"Die Verbindung zum Server wurde unterbrochen. Bitte warten Sie, bis die Verbindung wiederhergestellt wurde.\"\n            @selected=\"!locals.connected && $refs.popup.show($event)\"\n            :param-classes=\"params.classes\"\n></ae-layout>\n<ae-layout v-if=\"params.icon\"\n            v-show=\"!locals.connected\"\n            layout-id=\"9fdb8db1-ffb9-4e5a-ac0a-90d73f80b167\"\n            param-icon=\"far fa-wifi-slash\"\n            :param-count=\"locals.status?.data.jobsLeft\" \n            class=\"text-red-500\"\n            :param-classes=\"params.classes\"\n></ae-layout>\n\n<ae-popup ref=\"popup\" base-attachment=\"top right\" popup-attachment=\"center center\" :close-delay=\"200\">\n  <div slot=\"popup\" class=\"_CSS-menu\" slot-scope=\"scope\">    \n    <p>Bizpin ist derzeit nicht mit dem Server verbunden.</p>\n    <p>Bitte warten Sie, bis die Verbindung wiederhergestellt wurde.</p>\n  </div>\n</ae-popup>\n\n\n<!-- <ae-layout layout-id=\"e5accfd9-8d33-46e5-a4d7-69a91b5f8543\" :param-force-warn=\"!locals.connected\"></ae-layout> -->"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"ef5b1302-a613-4947-80dd-48b3c5c53001","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-06-25T12:29:04+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"9386fe4ce0c95141"},"stamps":[],"t":1750854544931,"v":"6be487bc27870de2"},{"id":"9d4a5e7b-8604-48b1-b525-d7b357997a6e","v":"5f5af45652f27365","cloneOf":{"id":"21e13528-924d-4eaf-b3cc-99cc7c5bfbed","v":"9666bd89756a0f8b","text":"Create with Dialog (no-details)"},"originalCloneOf":{"id":"21e13528-924d-4eaf-b3cc-99cc7c5bfbed","v":"9666bd89756a0f8b","text":"Create with Dialog (no-details)"},"previous":{"v":"71e896e1a7633972"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"rd:Create with Dialog ","applies":"","packages":[],"template":"<template v-if=\"locals.form\">\n  <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              @selected=\"controller.openNew($event)\"\n              v-if=\"locals.canEdit && controller.children\"\n              param-text=\"Neu\"\n              param-icon=\"far fa-plus\"\n              :param-primary=\"true\"\n              ref=\"button\"\n  ></ae-layout> \n  \n  <ae-layout  layout-id=\"066b41f7-036f-422c-9afc-4c3015ddc4b4\"\n              :param-documents=\"controller.children\"\n              ref=\"popupNew\"\n              :param-list-id=\"params.pageApplicationId ? '71bdf479-64dd-474d-b6ce-44e65b4ce1d9' : null\"\n              @selected=\"controller.showNewDocument($event)\"\n              :param-page-application-id=\"params.pageApplicationId\"\n              :param-design-params=\"{ preferLabel: true }\"\n  ></ae-layout>\n\n  <ae-dialog v-if=\"locals.showDialog\"\n              ref=\"dialogNewDocument\"\n              :title=\"locals.newDocument && locals.newDocument.f.text || ''\"\n              :backdrop-close=\"false\"\n              @close=\"controller.close()\"\n              :dialog-size=\"{ 'height': Aeppic.Device === 'Desktop' ? '90vh' : null, width: Aeppic.Device === 'Desktop' ? '60vw' : null }\"\n  >\n    <div slot=\"header\" slot-scope=\"scope\" class=\"_CSS-dialog__header\">\n      <span class=\"_CSS-dialog__header-title\">\n        <!-- {{ locals.newDocument && locals.newDocument.f.text || '' }} -->\n        <ae-design name=\"title\" :document=\"locals.newDocument\" :param-prefer-label=\"true\"></ae-design>\n      </span>\n      <button class=\"ae-button\" @click.stop=\"scope.close(); controller.deleteNewDocument()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n    <ae-design slot=\"body\" name=\"rd:form\" :document=\"locals.newDocument\" :edit=\"false\" :watch=\"false\"></ae-design>\n    <div slot=\"commands\" slot-scope=\"scope\" class=\"_CSS-dialog__commands\">\n      <button class=\"ae-button\" style=\"margin-right: 2em;\" @click=\"scope.close();controller.deleteNewDocument()\">Abbrechen</button>\n      <button class=\"ae-button\" :class=\"{ 'ae-button--primary': !locals.preferNavigateToNewDocument || !controller.isElectron }\" @click=\"scope.close(); controller.saveNewDocument()\">Speichern</button>\n      <button v-if=\"locals.preferNavigateToNewDocument && controller.isElectron\" class=\"ae-button ae-button--primary\" @click=\"controller.saveNewDocument()\">Speichern und Öffnen</button>\n\n    </div>\n  </ae-dialog>\n\n  <ae-layout layout-id=\"e5accfd9-8d33-46e5-a4d7-69a91b5f8543\"\n              :param-force-warn=\"locals.showDialog\"\n  ></ae-layout>\n\n</template>\n","css":"._CSS-commands {\n  display: grid;\n  grid-gap: 2px;\n  grid-auto-columns: auto;\n  grid-auto-flow:column;\n}\n\n/* DIALOG */\n\n._CSS-dialog__header {\n  flex: 1;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n._CSS-dialog__commands {\n  flex: 1;\n  display: flex;\n  justify-content: flex-end;\n}\n\n._CSS-dialog__commands * {\n  margin-left:12px;\n}\n\n._CSS-dialog__header-title {\n  font-size: 1.5em;\n  font-weight: bold;\n}","controller":"class Controller {\n  async init() {\n    locals.noCreateForms = [\n      '1ec5237d-463a-417f-8dac-5bbbbc2e35b7',\n    ]\n\n    locals.showDialog = false\n    locals.canEdit = false\n\n    if (locals.noCreateForms.includes(params.document.f.id)) {\n      return\n    }\n\n    locals.form = null\n    locals.form = await Aeppic.getForm(params.document.f.id)\n    // NOTE: until 2021-11-04 the exact form was retrieved for allowed children\n    // locals.form = await Aeppic.getFormForDocument(params.document)\n\n    const canEdit = await Aeppic.canEdit(params.document)\n    locals.canEdit = Aeppic.Account && Aeppic.Account.data.isGroupAccount === false && canEdit === true\n\n    if (params.pageApplicationId) {\n       locals.allowedChildrenTemplates = await Aeppic.getAll((await Aeppic.Preferences.getSetting(`apps:${params.pageApplicationId}:templates`)))\n    }\n  }\n\n\n  get children() {\n    if (params.pageApplicationId) {\n      return locals.allowedChildrenTemplates\n    }\n\n    if (locals.form.allowedChildrenForms && locals.form.allowedChildrenForms.length) {\n      return locals.form.allowedChildrenForms\n    }\n    // handle form 'repository-folder' different\n    if (params.document.data.contentsForm && params.document.data.contentsForm.id) {\n      return [params.document.data.contentsForm]\n    }\n  }\n\n  openNew(event) {\n    $emit('show')\n\n    $refs.popupNew.$emit('show', { target: $refs.button.$el })\n  }\n\n  async showNewDocument(refOrAllowedChildrenTemplate) {\n    console.log({ refOrAllowedChildrenTemplate })\n    if (locals.allowedChildrenTemplates) {\n      const template = refOrAllowedChildrenTemplate.data.template.id\n\n      const cloneResult =  await Aeppic.cloneDeep(template, params.document.id, { save: true })\n\n      locals.preferNavigateToNewDocument = refOrAllowedChildrenTemplate.data.navigateToClone === true\n\n      locals.newDocument = cloneResult.root\n    } else {\n      locals.preferNavigateToNewDocument = false\n\n      locals.newDocument = await Aeppic.new(refOrAllowedChildrenTemplate.id, params.document.id)\n    }\n\n    if ('hidden' in locals.newDocument) {\n      locals.newDocument.hidden = true\n    }\n\n    Aeppic.save(locals.newDocument)\n\n    $refs.popupNew.$emit('close')\n\n    locals.showDialog = true\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $refs.dialogNewDocument.show()\n  }\n\n  async deleteNewDocument() {\n    await Aeppic.delete(locals.newDocument)\n\n    locals.newDocument = null\n    locals.preferNavigateToNewDocument = false\n  }\n\n  saveNewDocument() {\n    if (locals.newDocument.hidden) {\n      locals.newDocument.hidden = false\n    }\n\n    $refs.dialogNewDocument.close()\n    Aeppic.save(locals.newDocument)\n\n    const referenceFieldName = params.formReferenceFields && params.formReferenceFields[locals.newDocument.f.id]\n\n    if (referenceFieldName) {\n      params.document.addReference(referenceFieldName, locals.newDocument)\n      Aeppic.save(params.document)\n    }\n\n    if (locals.preferNavigateToNewDocument) {\n      Aeppic.navigateTo(locals.newDocument)\n    }\n\n    locals.newDocument = null\n\n    $emit('close')\n  }\n\n  get isElectron() {\n    return typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0\n  }\n\n  close() {\n    $emit('close')\n\n    locals.showDialog = false\n  }\n\n  destroy() {\n    locals.showDialog = false\n\n    $refs.dialogNewDocument && $refs.dialogNewDocument.close()\n  }\n}"},"locks":[],"created":{"at":"2022-12-01T15:02:03+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-10-10T09:46:06+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1696931166204,"ct":1669906923035,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2023-07-14T11:51:12+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1702904240994,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this.ignoreMonthDayUpdatesOnce = true\n\n    locals.attributes = [\n      {\n        key: 'today',\n        highlight: {\n          fillMode: 'light',\n        },\n        dates: new Date(),\n      }\n    ]\n\n    locals.masks = {}\n\n    if (params.type === 'year-month') {\n      locals.masks = {\n        input: 'MMMM YYYY'\n      }\n    }\n\n    watchParam('hasTime', () => {\n      this.announceUpdatedValue(this.jsDate(params.value))\n    })\n\n    watchParam('mode', () => {\n      this.announceUpdatedValue(this.jsDate(params.value))\n    })\n\n    watchParam('isRange', () => {\n      this.announceUpdatedValue(this.jsDate(params.value))\n    })\n\n    this.initialShowPopover()\n\n    $on('emit-update-now', event => {\n      this.announceUpdatedValue(new Date())\n    }) \n  }\n\n  async initialShowPopover() {\n    if (!params.initialShowPopover || params.readonly) {\n      return\n    }\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    if (params.initialShowPopover) {\n      $refs.picker.togglePopover()\n    }\n  }\n\n\n  unset() {\n    this.announceUpdatedValue(null)\n  }\n\n  // htmlDate(value) {\n  //   if (!value) {\n  //     return ''\n  //   }\n\n  //   if (params.mode === 'dateTime') {\n  //     return Aeppic.DateTime.fromISO(value, { setZone: true }).toLocal().toFormat(\"yyyy-MM-dd'T'T\")\n  //   }\n\n  //   if (params.type === 'year-month') {\n  //     return Aeppic.DateTime.fromISO(value, { setZone: true }).toLocal().toFormat(\"yyyy-MM\")\n  //   }\n\n  //   return Aeppic.DateTime.fromISO(value, { setZone: true }).toLocal().toFormat('yyyy-MM-dd')\n  // }\n\n  jsDate(value) {\n    // \"UNDEFINED\" is a well-known value to prevent this the \"now\" control from updating the field\n    if (!value || value === 'UNDEFINED') {\n      return null\n    }\n\n    if (params.isRange) {\n      return {\n        start: value.start && Aeppic.DateTime.fromISO(value.start, { setZone: true }).toLocal().toJSDate(),\n        end: value.end && Aeppic.DateTime.fromISO(value.end, { setZone: true }).toLocal().toJSDate()\n      }\n    }\n\n    if (value) {\n      const start = typeof value === 'object' ? value.start : value\n\n      if (!start) {\n        return null\n      }\n\n      return Aeppic.DateTime.fromISO(start, { setZone: true }).toLocal().toJSDate()\n    }\n\n    return null\n  }\n\n  get requiredFailed() {\n    if (!params.required) {\n      return false\n    }\n\n    const value = this.jsDate(params.value)\n\n    if (value == null) {\n      return true\n    }\n\n    if (typeof value === 'object' && 'start' in value) {\n      return value.start == null || value.end == null\n    }\n\n    return !value\n  }\n\n  announceUpdatedValue(value) {\n    params.debug && console.log('announceUpdatedValue', value)\n\n    if (this.ignoreUpdateOnce) {\n      this.ignoreUpdateOnce = false\n      return\n    }\n\n    if (!value) {\n      this._emitInput('')\n      return\n    }\n\n    if (params.type === 'year-month') {\n      const start = typeof value === 'object' && 'start' in value ? value.start : value\n      const startDt = Aeppic.DateTime.fromJSDate(start)\n\n      const startDayISO = startDt.startOf('month').toISO()\n      const endDayISO = startDt.endOf('month').toISO()\n\n      this._emitInput({\n        start: this.toISOStringWithOffset(startDayISO),\n        end: this.toISOStringWithOffset(endDayISO),\n      })\n\n      return\n    }\n\n    if (params.isRange) {\n      // keep time distance when a previous start and end is known\n      if (params.value.start && params.value.end) {\n        const { start, end } = params.value \n        const [ startDt, endDt ] = [\n          Aeppic.DateTime.fromISO(start),\n          Aeppic.DateTime.fromISO(end),\n        ]\n\n        if (+Aeppic.DateTime.fromJSDate(value.start) === +Aeppic.DateTime.fromJSDate(value.end)) {\n        // when the picker decides to equalize the times restore the previous time gap\n          const previousDistance = endDt.diff(startDt).as('minutes')\n\n          if (previousDistance) {\n            value.end = Aeppic.DateTime.fromJSDate(value.start).plus({ minutes: previousDistance }).toJSDate()\n          }\n        } else if (+Aeppic.DateTime.fromJSDate(value.end) === +endDt) {\n        // only move endDate's time if only start changed\n          const isOneSameDayAndOnlyTimeChanged = startDt.day === endDt.day && startDt.month === endDt.month && startDt.year === endDt.year\n\n          if (isOneSameDayAndOnlyTimeChanged) {\n            const previousDistance = endDt.diff(startDt).as('minutes')\n\n            if (previousDistance) {\n              value.end = Aeppic.DateTime.fromJSDate(value.start).plus({ minutes: previousDistance }).toJSDate()\n            }\n          }\n        }\n      }\n\n\n      const dates = {\n        start: this.toISOStringWithOffset(value.start),\n        end: this.toISOStringWithOffset(value.end),\n      }\n\n      this._emitInput(dates)\n      return\n    }\n\n    this._emitInput(this.toISOStringWithOffset(value))\n  }\n\n  toISOStringWithOffset(value) {\n    // if (!value) {\n    //   return ''\n    // }\n\n    // const date = new Date(value)\n\n    // return Aeppic.DateTime.fromJSDate(date).toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n\n    if (!value) {\n      return ''\n    }\n\n    const date = new Date(value)\n\n    // return Aeppic.DateTime.fromJSDate(date).toFormat(\"yyyy-LL-dd'T'TTZZZ\")\n    const dateTimeObject = params.mode === 'dateTime' ? Aeppic.DateTime.fromJSDate(date) : Aeppic.DateTime.fromJSDate(date).startOf('day')\n    const day = dateTimeObject.toFormat('yyyy-LL-dd')\n\n    // bug in Intl.format with resultings times equal or bigger than 24:00:00\n    // see: https://github.com/moment/luxon/issues/726\n    // see: https://github.com/moment/luxon/issues/915\n    // see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle\n    let timeWithTimeZone = dateTimeObject.toFormat('HH:mm:ssZZ')\n\n    // FIXME: Chrome 75 (Windows 10) does output an invalid timezone (2:00:00+0200) with a length of 12 characters.\n    if (timeWithTimeZone.length === 12) {\n      const offset = (Math.abs(new Date().getTimezoneOffset() / 60)).toString().padStart(2, '0')\n      timeWithTimeZone = `${offset}${timeWithTimeZone.slice(1)}`\n    }\n\n    return `${day}T${timeWithTimeZone}`\n  }\n\n  get minDate() {\n    if (params.min) {\n      return params.min\n    }\n\n    if (params.minField) {\n      if (!params.document) {\n        console.error(`Need params.document if params.minField is used`)\n      }\n\n      return params.document.data[params.minField]\n    }\n\n    return null\n  }\n\n  get maxDate() {\n    if (params.max) {\n      return params.max\n    }\n\n    if (params.maxField) {\n      if (!params.document) {\n        console.error(`Need params.document if params.maxField is used`)\n      }\n\n      return params.document.data[params.maxField]\n    }\n\n    return null\n  }\n\n  setYearMonth(event) {\n    params.debug && console.log('setYearMonth', event, { ignoreMonthDayUpdatesOnce: this.ignoreMonthDayUpdatesOnce })\n\n    if (params.type !== 'year-month') {\n      return\n    }\n\n    // ignore only once. This callback will be called when is-range property is added to v-calender component, despite no actual updates\n    if (this.ignoreMonthDayUpdatesOnce) {\n      this.ignoreMonthDayUpdatesOnce = false\n      return\n    }\n\n\n    const eventAsDay = Aeppic.DateTime.fromObject(event).toISO()\n\n    this._emitInput(this.toISOStringWithOffset(eventAsDay))\n  }\n\n  _emitInput(value) {\n    // vue.nextTick is super important because of how v-calender works internally\n    // Once we make any change to the emitted value from v-calender (as we do with params.keepTimeDistance [to move the end date 1 hour if one moves the start hour]) the following update to\n    //   params.value would be ignored. So we have to wait for the interals of v-calender to unlock again (which is internally done by a vue.nextTick).\n    Aeppic.nextRenderPass(() => {\n      $emit('input', value)\n    })\n  }\n}\n\n","css":"._CSS-picker__input {\n  width: 100%;\n}\n\n._CSS .vc-popover-content {\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  box-shadow: var(--ae-shadow);\n}\n\n._CSS-date {\n  display: flex;\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-date--required {\n  border-color: red;\n}\n\n._CSS ._CSS-input {\n  border: initial;\n}","name":"rd:date-input","packages":[{"id":"7fd60096-e527-4f12-95db-90959b630b75","text":"V-Calendar","v":"33aab68aa6354ab9"}],"template":"<!-- <pre>\n{{ params.value }} \n{{ controller.jsDate(params.value) }}  \n{{params.inline}}\n</pre> -->\n<!-- NOTE: locale removed to allow auto locale display (@rsch/2025-03-28) -->\n<!-- locale=\"de\" -->\n\n<div\n  v-if=\"params.type === 'year-month'\">\n<month-picker \n  :value=\"controller.jsDate(params.value)\" @input=\"(value) => controller.announceUpdatedValue(value)\"\n  :attributes=\"locals.attributes\" :popover=\"{ visibility: params.readonly ? 'hidden' : 'focus', positionFixed: true }\"\n  :min-date=\"controller.minDate\" :max-date=\"controller.maxDate\" style=\"width: 100%\" :mode=\"params.mode || 'date'\" is24hr\n  :minute-increment=\"5\" :masks=\"locals.masks\" @update:to-page=\"controller.setYearMonth($event)\"\n  :is-range=\"params.isRange\" @click.native.stop\n  ref=\"picker\"\n  >\n  <template v-if=\"!params.inline\" v-slot:default=\"{ inputValue, inputEvents, togglePopover, hidePopover }\">\n    <div class=\"border rounded-md flex bg-white\" :class=\"{ 'border-red-500': controller.requiredFailed }\"\n      @click.stop=\"{ !params.readonly && togglePopover() }\">\n      <div v-if=\"!params.noIcon\" class=\"px-2 flex items-center border-r text-neutral-500\">\n        <ae-icon class=\"far fa-calendar-alt\"></ae-icon>\n      </div>\n\n      <input\n        class=\"py-1 px-2\"\n        :value=\"inputValue\"\n        v-on=\"inputEvents\"\n        :disabled=\"params.readonly\"\n        style=\"width: 100%\"\n        :required=\"params.required\"\n        placeholder=\"Datum auswählen\"\n      />\n\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" @selected=\"controller.unset()\"\n        class=\"self-center px-1\" param-icon=\"far fa-times\"\n        param-classes=\"bg-neutral-100 hover:bg-neutral-200 text-xs rounded-full\"\n        v-if=\"inputValue && !params.readonly && !params.disableRemove\"></ae-layout>\n    </div>\n  </template>\n</month-picker>\n</div>\n\n<date-picker \n  v-else\n  :value=\"controller.jsDate(params.value)\" @input=\"(value) => controller.announceUpdatedValue(value)\"\n  :attributes=\"locals.attributes\" :popover=\"{ visibility: params.readonly ? 'hidden' : 'focus', positionFixed: true }\"\n  :min-date=\"controller.minDate\" :max-date=\"controller.maxDate\" style=\"width: 100%\" :mode=\"params.mode || 'date'\" is24hr\n  :minute-increment=\"5\" :masks=\"locals.masks\" @update:to-page=\"controller.setYearMonth($event)\"\n  :is-range=\"params.isRange\" @click.native.stop :class=\"{ '_CSS-only-year-month': params.type === 'year-month' }\"\n  ref=\"picker\"\n  >\n  <template v-if=\"!params.inline\" v-slot:default=\"{ inputValue, inputEvents, togglePopover, hidePopover }\">\n    <div class=\"border rounded-md flex bg-white\" :class=\"{ 'border-red-500': controller.requiredFailed }\"\n      @click.stop=\"{ !params.readonly && togglePopover() }\">\n      <div v-if=\"!params.noIcon\" class=\"px-2 flex items-center border-r text-neutral-500\">\n        <ae-icon class=\"far fa-calendar-alt\"></ae-icon>\n      </div>\n\n      <input\n        class=\"py-1 px-2\"\n        :value=\"inputValue\"\n        v-on=\"inputEvents\"\n        :disabled=\"params.readonly\"\n        style=\"width: 100%\"\n        :required=\"params.required\"\n        placeholder=\"Datum auswählen\"\n      />\n\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" @selected=\"controller.unset()\"\n        class=\"self-center px-1\" param-icon=\"far fa-times\"\n        param-classes=\"bg-neutral-100 hover:bg-neutral-200 text-xs rounded-full\"\n        v-if=\"inputValue && !params.readonly && !params.disableRemove\"></ae-layout>\n    </div>\n  </template>\n  <template #header-title=\"scope\" v-if=\"params.hasTime\">\n    <div class=\"flex gap-1 items-center text-base\">\n      <ae-layout v-if=\"params.type !== 'year-month'\" layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        param-icon=\"far fa-clock text-sm\" @selected=\"$emit('toggle-time')\" :param-primary=\"params.mode === 'dateTime'\"\n        param-title=\"Mit/ohne Uhrzeit umschalten\"></ae-layout>\n      <div class=\"text-sm\">{{scope.title}}</div>\n      <ae-layout v-if=\"params.type !== 'year-month'\" layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        param-icon=\"far fa-arrows-h text-sm\" @selected=\"$emit('toggle-range')\" :param-primary=\"params.isRange\"\n        param-title=\"Von/bis umschalten\"></ae-layout>\n    </div>\n  </template>\n</date-picker>\n\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"1a42b378-3876-4ef9-b0bc-9557009a1d69","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-03-12T14:15:50+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"2d2fdbd39247e4f1"},"stamps":[],"t":1773324950457,"v":"c76e888e2e2c89d0"},{"a":["system","lists","e476f910-4a94-40a9-b815-dc5935b4b822"],"a_depth":3,"a_forms":["system-folder-form","folder","list-form"],"created":{"at":"2025-11-18T08:34:35+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1763454875372,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.bodyVisible = Array(Object.keys(params.groups).length).fill(true)\n    watchParam('groups', (groups) => {\n      locals.bodyVisible = Array(Object.keys(groups).length).fill(true)\n    })\n  }\n\n  toggleBodyVisibility(index) {\n    locals.bodyVisible.splice(index, 1, !locals.bodyVisible[index])\n  }\n}","css":"","name":"rd:Default Vertical Grouped List Layout","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<template\n  v-for=\"(documents, documentIdOrKey, index) of params.groups\"\n>\n  <!-- Group -->\n  <div\n    :class=\"params.group?.classes\"\n  >\n    <!-- Header -->\n    <section \n      class=\"flex items-center gap-2\"\n      :class=\"params.header?.classes\"\n    >\n      <!-- Toggle Button -->\n      <div \n        v-if=\"params.group.collapsable\"\n        @click=\"controller.toggleBodyVisibility(index)\"\n      >\n        <ae-icon\n          :class=\"[locals.bodyVisible[index] ? 'far fa-chevron-down' : 'far fa-chevron-up']\"\n        ></ae-icon>\n      </div>\n      <!-- Title -->\n      <span \n        v-if=\"params.header?.title\"\n        :class=\"params.header.title.classes\"\n      >\n        {{params.header.title.text}}\n      </span>\n      <!-- Design / Layout -->\n      <ae-design\n        v-if=\"params.header?.design\"\n        :name=\"params.header.design.name\"\n        :params=\"params.header.design.params\"\n        :document-id=\"documentIdOrKey\"\n        :class=\"params.header.design.classes\"\n        v-on=\"$listeners\"\n      ></ae-design>\n      <ae-layout\n        v-if=\"params.header?.layout\"\n        :name=\"params.layout.name\"\n        :params=\"{...params.header.layout.params, key: documentIdOrKey}\"\n        :class=\"params.header.layout.classes\"\n        v-on=\"$listeners\"\n      ></ae-layout>\n    </section>\n\n    <!-- Body -->\n    <ae-layout\n      v-if=\"!params.group.collapsable || locals.bodyVisible[index]\"\n      layout-id=\"daafafaf-e40a-4837-adcb-75bd25f67143\"\n      :param-layers=\"params.layers\"\n      :param-documents=\"documents\"\n      :class=\"params.body?.classes\"\n      v-on=\"$listeners\"\n    ></ae-layout>\n  </div>\n</template>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"f67a5e19-1dba-40c2-88f3-90b924837899","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-11-19T13:35:49+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"e476f910-4a94-40a9-b815-dc5935b4b822","previous":{"v":"e8d14271f7b748eb"},"stamps":[],"t":1763559349976,"v":"c98075dbb35413c8"},{"a":["system","177b1d7c-255c-4d16-b367-e9622b4db575"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2023-12-21T12:24:45+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1703161498906,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.dialog = null\n    locals.executionError = null\n    locals.targetDocument = null\n    locals.commands = []\n    locals.cancelCommand = null\n\n    $on('show', (options) => this._show(options))\n\n    $emit('ready')\n  }\n\n  async _show(options) {\n    locals.dialog = options.dialog\n    // const command = options.command\n    const document = options.document || params.document\n\n    // the command which leads to this dialog was already executed by 'Command Buttons with Dialog'. \n    //  The document passend in is already the result of the command. Do not execute it twice \n    locals.targetDocument = document\n       \n    locals.executionError = null\n\n    if (locals.dialog) {\n      const allCommands = Array.from(await Aeppic.getAll(locals.dialog.data.commands)).reverse()\n\n      const { cancel, rest } = allCommands.reduce((result, command) => {\n        if (command) {\n          if (!result.cancel && command.data.name.toLowerCase().trim() === 'cancel') {\n            result.cancel = command\n          } else {\n            result.rest.push(command)\n          }\n        }\n \n        return result\n      }, { cancel: null, rest: [] })\n\n      const visibleRest = (await Promise.all(rest.map(async command => {\n        return await Aeppic.Commands.isVisible(command, locals.targetDocument) ? command : null\n      }))).filter(Boolean)\n\n      console.log({visibleRest})\n\n      locals.commands = visibleRest\n      locals.cancelCommand = cancel\n    }\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n    \n    $refs.executionDialog.show()\n  }\n\n  closeExecutionDialog() {\n    console.log('close')\n    $refs.executionDialog && $refs.executionDialog.close()\n\n    locals.executionError = null\n\n    $emit('close')\n  }\n\n  async executeDialogCommand(commandId) {\n    if (!await this._executeCommand(commandId, locals.targetDocument)) {\n      return\n    }\n\n    this.closeExecutionDialog()\n  }\n\n  async _executeCommand(commandId, targetDocument) {\n    const commandResult = await Aeppic.Commands.execute(commandId, targetDocument, { Account: Aeppic.Account, ProfilePage: Aeppic.ProfilePage }, { navigation: true })\n\n    if (!commandResult.ok || ('ok' in commandResult.value && !commandResult.value.ok)) {\n      const message = commandResult.value && commandResult.value.message || 'error:execution'\n\n      locals.executionError = message\n      console.error(commandResult)\n      \n      return false\n    }\n\n    if (commandResult.value != null && 'value' in commandResult.value) {\n      return commandResult.value.value\n    }\n\n    return commandResult.value\n  }\n\n\n\n  destroy() {\n    this.closeExecutionDialog()\n  }\n} \n\n\n","css":"._CSS-commands {\n  display: grid;\n  grid-gap: 2px;\n  grid-auto-columns: auto;\n  grid-auto-flow:column;\n}\n\n/* DIALOG */\n\n._CSS-dialog__header {\n  flex: 1;\n  display: flex;\n  justify-content: center;\n}\n\n._CSS-dialog__commands {\n  flex: 1;\n  display: flex;\n  justify-content: flex-end;\n}\n\n._CSS-error {\n  margin: var(--ae-size-2);\n  color: var(--ae-accent-red-600);\n}\n","name":"rd:Dialog Default Layout","packages":[],"template":"<ae-dialog  ref=\"executionDialog\"\n            :backdrop-close=\"false\"\n            :dialog-size=\"controller.dialogSize\"\n            :data-test=\"'layout' + '_' + layout.id\"\n>\n  <div v-if=\"locals.dialog\" slot=\"header\" slot-scope=\"scope\" class=\"flex justify-between items-center\">\n    <div>\n    {{ locals.dialog.data.title || locals.dialog.data.name }} \n    </div>\n\n     <template v-if=\"locals.cancelCommand\"> \n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  param-icon=\"far fa-times\"\n                 :xparam-icon=\"locals.cancelCommand.data.namedIcon\"\n                 :param-title=\"locals.cancelCommand.data.label || locals.cancelCommand.data.text\"\n                 @selected=\"controller.executeDialogCommand(locals.cancelCommand)\"\n                 param-border=\"border\"\n      ></ae-layout>\n    </template>\n  </div>\n\n  <div slot=\"body\" @ae-drill-into.stop.prevent @ae-will-navigate.stop.prevent >\n    <ae-design  v-if=\"locals.dialog && locals.dialog.data.design && locals.targetDocument\"\n                :name=\"locals.dialog.data.design\"\n                :document=\"locals.targetDocument\"\n                :edit=\"locals.dialog.data.editable\"\n                :watch=\"false\"\n                :params=\"{ executionError: locals.executionError }\"\n    ></ae-design>\n\n    <p v-if=\"locals.dialog && locals.dialog.data.message\"\n      style=\"white-space:pre-line;\"\n      v-html=\"Aeppic.Parser.markdown(locals.dialog.data.message)\"\n    >\n    </p>\n \n    <div class=\"\" v-if=\"locals.executionError\">\n      <ae-icon class=\"far fa-exclamation-triangle\"></ae-icon>\n      {{ Aeppic.translate(locals.executionError) }}\n    </div>\n  </div>\n\n\t<div v-if=\"locals.dialog\" slot=\"commands\" slot-scope=\"scope\" class=\"p-4 flex gap-1 \">\n    <template v-for=\"(command, index) of locals.commands\"> \n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                 :param-icon=\"command.data.namedIcon\"\n                 :param-text=\"command.data.label || command.data.name\"\n                 :param-primary=\"index === locals.commands.length - 1\"\n                 @selected=\"controller.executeDialogCommand(command.id)\"\n                 param-border=\"border\"\n                 :data-test=\"'dialog_command-' + (command.id)\"\n      ></ae-layout>\n    </template>\n\t</div>\n</ae-dialog> \n  "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"458bacf5-0b5f-44ec-9ad4-c2302183ab89","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-06-16T12:04:24+00:00","backedBy":"","by":"b7485498-f1f3-4ab1-87d1-9cb63ea890c8","client":"server","from":"","impersonatedBy":""},"p":"177b1d7c-255c-4d16-b367-e9622b4db575","previous":{"v":"8147a80d361502de"},"stamps":[],"t":1781611464183,"v":"48d0b47e45a1c20a"},{"id":"c6e449bd-af9b-49b2-83ff-b5e10d7ea838","v":"a2b7ba6846bd77e9","previous":{"v":"b38bc8beac9754dc"},"p":"b676aa47-5082-403c-bf82-6aeead137ec1","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:Dialog Workflow Transition Execution","applies":"","template":"<ae-dialog  ref=\"executionDialog\"\n            :backdrop-close=\"false\"\n>\n  <div slot=\"header\" slot-scope=\"scope\" class=\"flex justify-between items-center\">\n    <div>\n    {{ locals.dialog.title }} \n    </div>\n\n     <!-- <template v-if=\"locals.cancelCommand\">  -->\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  param-icon=\"far fa-times\"\n                 param-title=\"Abbrechen\"\n                 @selected=\"controller.cancel()\"\n                 param-border=\"border\"\n      ></ae-layout>\n    <!-- </template> -->\n  </div>\n\n  <div slot=\"body\" @ae-drill-into.stop.prevent @ae-will-navigate.stop.prevent >\n    <!-- <ae-design  v-if=\"locals.dialog && locals.dialog.data.design && locals.targetDocument\"\n                :name=\"locals.dialog.data.design\"\n                :document=\"locals.targetDocument\"\n                :edit=\"locals.dialog.data.editable\"\n                :watch=\"false\"\n                :params=\"{ executionError: locals.executionError }\"\n    ></ae-design> -->\n\n    <p v-if=\"locals.dialog.text\"\n      style=\"white-space:pre-line;\"\n      v-html=\"Aeppic.Parser.markdown(locals.dialog.text)\"\n    >\n    </p>\n \n    <!-- <div class=\"\" v-if=\"locals.executionError\">\n      <ae-icon class=\"far fa-exclamation-triangle\"></ae-icon>\n      {{ Aeppic.translate(locals.executionError) }}\n    </div> -->\n  </div>\n\n\t<div v-if=\"locals.dialog\" slot=\"commands\" slot-scope=\"scope\" class=\"p-4 flex gap-1 \">\n    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                 xparam-icon=\"command.data.namedIcon\"\n                 param-text=\"Ausführen\"\n                 :param-primary=\"true\"\n                 @selected=\"controller.confirm()\"\n                 param-border=\"border border-primary-200\"\n      ></ae-layout>\n    <!-- <template v-for=\"(command, index) of locals.commands\"> \n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                 :param-icon=\"command.data.namedIcon\"\n                 :param-text=\"command.data.label || command.data.name\"\n                 :param-primary=\"index === locals.commands.length - 1\"\n                 @selected=\"controller.executeDialogCommand(command.id)\"\n                 param-border=\"border\"\n      ></ae-layout>\n    </template> -->\n\t</div>\n</ae-dialog> \n","css":"","controller":"class Controller {\n  async init() {\n    locals.dialog = {}\n\n    $on('show', event => this.show(event))\n  }\n\n  _reset() {\n    locals.dialog = {\n      document: null,\n      title: '',\n      text: '',\n      confirm: null,\n      cancel: null,\n    }\n  }\n\n  show(event) {\n    this._reset()\n\n    const {\n      document,\n      text,\n      confirm,\n      cancel,\n      title,\n    } = event\n\n    locals.dialog = {\n      document,\n      text,\n      confirm,\n      cancel,\n      title,\n    }\n\n    $refs.executionDialog.show()\n\n    // confirm({ confirmed: true })\n  }\n  \n  cancel() {\n    $refs.executionDialog.close()\n    \n    locals.dialog.cancel({ cancelled: true })\n\n    this._reset()\n  }\n\n  confirm() {\n    $refs.executionDialog.close()\n    \n    locals.dialog.confirm({ confirmed: true })\n\n    this._reset()\n  }\n}","packages":[]},"locks":[],"created":{"at":"2024-11-04T13:41:06+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-11-04T16:14:02+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1730736842304,"ct":1730727666440,"a_depth":3,"a":["apps","009b3a60-72d5-46f6-8dc6-7f9001e03283","b676aa47-5082-403c-bf82-6aeead137ec1"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"765b4707-916f-42ef-afdd-853582fe4314","text":"Document Dialog","v":"34b28a69941c5a3e"},"created":{"at":"2026-02-17T12:14:10+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"ct":1771330455422,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.documentForm = null\n\n    $on('show', (event) => this.show(event))\n    $on('close', (event) => this.close(event))\n\n    this.show = (eventData) => {\n      $refs.dialog.show(eventData)\n    }\n    this.close = () => $refs.dialog.close()\n    \n    watchParam('form' , async () => this.updateDocumentForm())\n    watchParam('document' , async () => this.updateDocumentForm())\n    watchParam('documentId' , async () => this.updateDocumentForm())\n\n    this.updateDocumentForm()\n  }\n\n  async updateDocumentForm() {\n    if (params.form) {\n      locals.documentForm = params.form\n      return\n    }\n\n    if (params.document) {\n      locals.documentForm = await Aeppic.getFormForDocument(params.document)\n      return\n    }\n  \n    if (params.documentId) {\n      const document = await Aeppic.get(params.documentId)\n      locals.documentForm = await Aeppic.getFormForDocument(document)\n      return\n    }\n\n    return null\n  }\n\n  get fieldConditions() {\n    if (locals.documentForm) {\n      return locals.documentForm.evaluateConditions(params.document.data)\n    }\n  }\n}","css":"._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  overflow: hidden;\n}\n\n\n._CSS-dialog__body {\n  overflow: scroll;\n}","name":"rd:Document Dialog","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<ae-dialog ref=\"dialog\" :dialog-size=\"{ height: params.dialogHeight, width: params.dialogWidth }\">\n  <div slot=\"header\" class=\"_CSS-dialog__header\" slot-scope=\"scope\">\n    <span v-if=\"params.title\">{{params.title}}</span>\n    <div v-else>\n      <ae-design v-if=\"locals.documentForm\" name=\"title\" :document=\"locals.documentForm\"></ae-design>\n    </div>\n    <button class=\"ae-button\" @click.stop=\"scope.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div slot=\"body\" v-if=\"params.document\" :key=\"params.document.id && params.document.v\" class=\"_CSS-dialog__body\">\n    <template v-if=\"params.document && locals.documentForm\">\n      <div class=\"ae-row\" style=\"padding: var(--bp-page-content-padding);\" v-if=\"params.showPath\">\n        <div class=\"ae-col ae-control-container ae-form-cell\">\n          <label class=\"ae-form-cell__label\">Pfad</label>\n          <div class=\"ae-form-cell__control\">\n            <ae-design class=\"ae-form-cell__input\" name=\"path\" :document=\"params.document\" :watch=\"false\"></ae-design>\n          </div>\n        </div>\n      </div>\n      <template v-if=\"params.edit\">\n        <ae-form :auto-save=\"params.autoSave\"\n                  layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n                  :document=\"params.document\"\n                  :form=\"locals.documentForm\"\n        ></ae-form>\n      </template>\n      <template v-else>\n        <!-- <ae-form  layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n                   :document=\"params.document\"\n                   :form=\"locals.documentForm\"\n                   :readonly=\"true\"\n                   :view=\"{ only: { fields: params.fieldsToDisplay }}\"\n        ></ae-form> -->\n        <!-- TODO: use new form layout. -->\n        <!-- FIXME: how to get rootSection/create a view? -->\n        <ae-layout layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\"\n                    :param-document=\"params.document\"\n                    :param-form=\"locals.documentForm\"\n                    :param-readonly=\"true\"\n                    :param-fields-to-display=\"params.fieldsToDisplay\"\n                    :param-field-conditions=\"controller.fieldConditions\"\n        ></ae-layout>\n      </template>\n\n    </template>\n  </div>\n</ae-dialog>\n \n  "},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"38182e5a-9f4e-45c8-b886-eacf413041ab","inheritedLocks":[null,null,null,null],"locks":[],"meta":{},"modified":{"at":"2026-02-17T12:24:25+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"765b4707-916f-42ef-afdd-853582fe4314","text":"Document Dialog","v":"34b28a69941c5a3e"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"47492fb9b7de2146"},"stamps":[],"t":1771331065184,"v":"b81bb59faca5c55a"},{"id":"dff662e9-9a83-44d1-97c5-6f7f7f124248","v":"80f37d3cd12eecee","previous":{"v":"0beeb97f4c1fff73"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:Document in Page as Dialog","applies":"","template":"<ae-dialog ref=\"dialog\" :dialog-size=\"{ height: '80vh', width: '90vw' }\" :dialog-style=\"{ height: '80vh', width: '90vw' }\">\n  <template #header=\"scope\">\n    <div class=\"flex justify-between\">\n      <ae-design v-if=\"locals.pageDocument\"\n                  name=\"rd:page-toolbar\"\n                 :document=\"locals.pageDocument\"\n                 :param-readonly=\"true\"\n      ></ae-design>\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  @selected=\"scope.close()\"\n                  param-icon=\"far fa-times\"\n                  param-border=\"border\"\n      ></ae-layout>\n    </div>\n  </template>\n  <template #body>\n    <div class=\"overflow-hidden relative w-full h-full flex flex-col\" v-if=\"locals.pageDocument\">\n      <ae-design name=\"rd:page-inner\"\n                :document=\"locals.pageDocument\"\n                class=\"h-full w-full absolute xopacity-20 overflow-hidden\" \n                :param-readonly=\"true\"\n      ></ae-design>\n\n          <!-- <ae-layout \n              :key=\"'_CSS-pageDocument' + locals.pageDocument.id\"\n              layout-id=\"0e40bb7a-7f76-425a-8b07-3dbb6208d277\"\n              data-id=\"pageDocument\" \n              class=\"h-full w-full absolute xopacity-20 overflow-hidden\" \n              :param-page-document=\"locals.pageDocument\"\n              :param-readonly=\"true\"\n              :param-page-params=\"{ readonly: true, disableDelete: true, noEdit: true }\"\n              :param-no-navigation=\"true\"\n    ></ae-layout> -->\n<!-- \n              :param-is-drilled=\"locals.pageDocuments.length >= 2\"\n              :param-can-go-back=\"controller.canGoBack\"\n              :param-can-go-forward=\"controller.canGoForward\"\n              :param-structural-forms=\"locals.structuralForms\"\n              :param-page-params=\"locals.pageParams[index]\"\n              :param-readonly=\"locals.pageParams[index]?.readonly\"\n              :param-window-width=\"locals.windowWidth\"\n              @forward=\"controller.drilledGoForward()\"\n              @back=\"controller.drilledGoBack()\"\n              @toggle-overlay-menu=\"locals.showOverlayMenu = !locals.showOverlayMenu\"\n               -->\n    </div>\n  </template>\n  <template #footer></template>\n</ae-dialog>","css":"","controller":"class Controller {\n  async init() {\n    locals.show = false\n\n    locals.pageDocument = null\n\n    $on('show', (document) => this.show(document))\n  }\n\n  async show(document) {\n    locals.pageDocument = await Aeppic.get(document)\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n    \n    $refs.dialog.show()\n  }\n}","packages":[]},"locks":[],"created":{"at":"2024-05-13T11:46:10+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-05-13T13:45:17+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","impersonatedBy":null,"from":"","client":"server"},"t":1715607917630,"ct":1715600770536,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"4315cb45-89a9-46cf-aa17-336eb1a19a61","v":"c97d26dc7710bf04","previous":{"v":"87d63d911e8f7986"},"p":"ce941088-6dfa-42c2-a967-1cb0693f1d75","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:Docx File template Input Layout","applies":"","template":"<ae-control name=\"rd:file\" :document=\"params.document\" field-name=\"template\" :params=\"locals.params\"></ae-control>","css":"","controller":"class Controller {\n  init() {\n    locals.params = { ...params, ...params.form.getFieldControlParams('template') }\n  }\n}","packages":[]},"locks":[],"created":{"at":"2024-04-26T12:46:16+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-05-13T13:49:55+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","impersonatedBy":null,"from":"","client":"server"},"t":1715608195627,"ct":1714135576934,"a_depth":3,"a":["apps","fb62ad28-07b0-4a99-91bd-43c297656f12","ce941088-6dfa-42c2-a967-1cb0693f1d75"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2023-03-01T10:39:05+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1677667145233,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.renderPopup = false \n    locals.selectedOptions = [] \n    locals.toolbarDocument = null\n    locals.filter = ''\n    locals.options = []\n\n    if (!params.options) {\n      throw new Error('Provide options')\n    }\n\n    this._syncOptions()\n\n    this._updateSelectedOptions(params.selectedIdentifiers)\n    \n    watchParam('selectedIdentifiers', (selectedIdentifiers) => this._updateSelectedOptions(selectedIdentifiers))\n    watchParam('options', async () => {\n      this._syncOptions()\n      await this.loadDocumentsForOptions()\n      this._updateSelectedOptions(params.selectedIdentifiers)\n    })\n\n    await this.loadDocumentsForOptions()\n\n    locals.ready = true\n  }\n\n  _syncOptions() {\n    locals.options = (params.options || []).map(opt => ({ \n      ...opt,\n      hidden: false\n    }))\n  }\n\n  async loadDocumentsForOptions() {\n    if (!locals.options || !locals.options.length) return\n\n    const documentIds = locals.options\n      .map(opt => opt.documentId)\n      .filter(id => id != null)\n\n    if (documentIds.length === 0) {\n      locals.toolbarDocument = null\n      return\n    }\n\n    const documents = await Aeppic.getAll(documentIds)\n\n    let firstFoundDoc = null\n    \n    for (const option of locals.options) {\n      if (option.documentId) {\n        const doc = documents.find(d => d && d.id === option.documentId)\n        if (doc) {\n          option.document = doc\n          \n          if (!firstFoundDoc) {\n            firstFoundDoc = doc\n          }\n        }\n      }\n    }\n\n    locals.toolbarDocument = firstFoundDoc\n  }\n\n  _updateSelectedOptions(selectedIdentifiers) {\n    const selected = selectedIdentifiers ?? []\n    params.debug && console.log('_updateSelectedOptions', { selected, options: locals.options }, locals.options.filter(option => option.identifier &&  selected.includes(option.identifier) )[0]?.identifier )\n    locals.selectedOptions = []\n    locals.selectedOptions = locals.options.filter(option => option.identifier &&  selected.includes(option.identifier))\n  }\n\n  showPicker(clickEvent) {\n    params.debug && console.log('showPicker')\n    $emit('show-picker')\n      // this.tippy.setProps({\n      //   maxWidth: $refs.container?.clientWidth,\n      // })\n    $refs.popup.toggle(clickEvent)\n\n    locals.renderPopup = true\n  }\n\n  closePicker() {\n    $refs.popup.close()\n  }\n\n\n  selected(option) {\n    const anyDisplayOptionGiven = option.icon || option.iconDesign || option.iconColor || option.documentId || option.display\n\n    if (!anyDisplayOptionGiven) { \n      return\n    }\n\n    $emit('selected', option)\n\n    this.closePicker()\n  }\n\n  async handleFilter(filter) {\n    locals.filter = filter\n    const searchString = (filter || '').trim()\n\n    if (!searchString) {\n      for (const option of locals.options) {\n        option.hidden = false\n      }\n      return\n    }\n\n    await Promise.all(locals.options.map(async (option) => {\n      let isMatch = false\n\n      if (option.document || option.documentId) {\n        const target = option.document || option.documentId\n        isMatch = await Aeppic.match(target, searchString, {searchAllFields: true})\n      } else if (option.display || option.title || option.heading) {\n        const textToSearch = `${option.display || ''} ${option.title || ''} ${option.heading || ''}`.toLowerCase()\n        isMatch = textToSearch.includes(searchString.toLowerCase())\n      }\n      option.hidden = !isMatch\n    }))\n  }\n} ","css":"","name":"rd:Dropdown","packages":[],"template":"<div  v-if=\"locals.selectedOptions?.length\"\n      ref=\"container\"\n     class=\"border rounded-full py-1 px-2 flex gap-4 bg-primary-800 text-primary-100\"\n     @click.stop=\"controller.showPicker({ target: $refs.container })\"\n     :data-test=\"'layout' + '_' + layout.id\"\n>\n\n  <div class=\"flex gap-2 select-none truncate\" :key=\"option.identifier\" v-for=\"option of locals.selectedOptions\" :title=\"option.title\">\n    <div v-if=\"option.icon || option.iconDesign\" class=\"self-center\">\n      <ae-icon v-if=\"option.icon\" :class=\"[option.icon, option.iconColor]\"></ae-icon>\n      <ae-design v-else-if=\"option.iconDesign\" name=\"rd:icon\" :document-id=\"option.documentId\"></ae-design>\n    </div> \n\n    <ae-design v-if=\"option.documentId\" :name=\"option.design || 'rd:styled-title,title'\" :document-id=\"option.documentId\"\n                class=\"truncate\"\n    ></ae-design>\n    <div v-else-if=\"option.display\" class=\"whitespace-nowrap truncate\"> \n      {{ option.display }} \n    </div> \n    <div v-else-if=\"!option.icon && !option.iconDesign\" class=\"whitespace-nowrap\">\n      leer\n    </div>\n  </div>\n\n  <div v-if=\"!locals.selectedOptions.length\">\n    leer\n  </div>    \n\n  <div class=\"ml-auto pl-2 relative flex flex-col h-full\">\n    <ae-icon class=\"far fa-angle-down absolute top-1 right-0\"></ae-icon>\n  </div> \n</div>\n<ae-layout v-else\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          :params=\"params.buttonParams\"\n          @selected=\"controller.showPicker($event)\"\n></ae-layout>\n\n<ae-popup ref=\"popup\" placement=\"bottom\">\n  <div :data-test=\"(!!params.dataTest ? (params.dataTest + '_') : '')  + 'layout_' + layout.id + '_popup'\">\n    <div class=\"max-h-[40vh] overflow-auto min-w-[200px]\" :class=\"params.popupClasses\">\n    \n    <div v-if=\"locals.renderPopup\" class=\"w-full flex flex-col gap-1 bg-white rounded-md relative\">\n      \n      <div v-if=\"locals.toolbarDocument\" class=\"sticky top-0 z-10 p-2\">\n        <ae-design \n          class=\"shadow-md rounded-md\"\n          name=\"rd:toolbar\" \n          :document=\"locals.toolbarDocument\"\n          :param-list-form-id=\"locals.toolbarDocument.f.id\"\n          :param-disable-new=\"true\"\n          :param-disable-sort=\"true\"\n          :param-filter-fields=\"params.filterFields\"\n          :param-initial-focus-search=\"true\"\n          @filter=\"controller.handleFilter($event)\"\n        ></ae-design>\n      </div>\n      \n      <div v-if=\"!locals.options.length\" class=\"italic text-neutral-600 py-1 px-2\" data-test=\"empty-state\">\n        Keine Einträge\n      </div>\n      \n      <section v-for=\"option of locals.options\"\n          v-show=\"!option.hidden\"\n          @click.stop=\"controller.selected(option)\"\n          class=\"w-full select-none truncate\"\n          :title=\"option.title\"\n          data-test=\"listItem\"\n      > \n        <div v-if=\"option.divide\" class=\"border-t py-1\">\n        </div>\n\n        <div v-if=\"option.heading\" class=\"border-t py-1 text-neutral-400 text-xs text-left px-2 cursor-default\">\n          {{ option.heading }}\n        </div>\n        \n        <div v-if=\"option.icon || option.iconDesign || option.iconColor || option.documentId || option.display\" class=\"py-1 px-2 flex items-center gap-2 hover:bg-neutral-100 cursor-pointer\"\n            :class=\"{ 'font-bold text-primary-800': locals.selectedOptions?.find(o => o.identifier === option.identifier) }\"\n        >\n          <div v-if=\"option.icon || option.iconDesign\" class=\"self-center\">\n            <ae-icon v-if=\"option.icon\" :class=\"[option.icon, option.iconColor]\"></ae-icon>\n            <ae-design v-else-if=\"option.iconDesign\" name=\"rd:icon\" :document-id=\"option.documentId\"></ae-design>\n          </div> \n\n          <ae-design v-if=\"option.documentId\" :name=\"option.design || 'rd:styled-title,title'\" :document-id=\"option.documentId\"\n                    class=\"w-full truncate\"\n          ></ae-design>\n          <div v-else-if=\"option.display\" class=\"whitespace-nowrap truncate\" > \n            {{ option.display }}\n          </div> \n          <div v-else-if=\"!option.icon && !option.iconDesign\" class=\"whitespace-nowrap\">\n            leer\n          </div>\n        </div>\n      </section> \n    </div>  \n    </div>\n  </div>\n</ae-popup>\n "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"8bc795f2-7ac8-4b95-9019-0b27b178a36e","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-05-05T12:36:32+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"be71af03b9ac35c4"},"stamps":[],"t":1777984592175,"v":"5537a735c50ee6eb"},{"id":"76eab791-99ed-4e56-a5c7-b089b21125fa","v":"17de9b57c6b51990","previous":{"v":"ff8f338021257637"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:Edit and Delete Dropdown","applies":"","template":"<ae-popup ref=\"menu\" placement=\"bottom\">\n  <div v-if=\"params.document\" class=\"py-2 px-1 flex flex-col gap-1\">\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              param-icon=\"far fa-edit\"\n              param-text=\"Umbenennen\"\n              param-classes=\"border-none\"\n              @selected=\"$refs.rename.show($event)\"\n      ></ae-layout>\n\n      <ae-layout\n            layout-id=\"0ded34c5-1221-4511-af93-d897a79f1369\"\n            :param-document=\"params.document\"\n            :params=\"{ buttonLayoutId: '80e59dec-29b1-45f1-8391-f5621cf9f0b2', buttonParams: { icon: 'far fa-trash', text: 'Löschen', classes: 'border-none justify-center w-full' } }\"\n            class=\"flex-1\"\n      ></ae-layout>\n  </div>\n</ae-popup>\n\n\n<ae-popup ref=\"rename\">\n  <div v-if=\"params.document\" class=\"py-2 px-1 flex gap-1\">\n      <ae-form :document=\"params.document\"\n          :auto-save=\"true\"\n          :auto-save-after=\"2500\"\n          layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n          :view=\"{ only: { fields: params.editableFields }}\"\n      ></ae-form>\n    <!-- <ae-design name=\"rd:editable-title\"\n              :document=\"params.document\"\n              @save=\"controller.closePopups()\"\n    ></ae-design> -->\n\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              param-icon=\"far fa-save\"\n              @selected=\"controller.closePopups()\"\n      ></ae-layout>\n  </div>\n</ae-popup>","css":"","controller":"class Controller {\n  init() {\n    $on('show', (event) => {\n      $refs.menu.show(event)\n    })\n  }\n\n  closePopups() { \n    $refs.rename.close()\n    $refs.boardMenu.close()\n  }\n}","packages":[]},"locks":[],"created":{"at":"2023-02-14T14:17:44+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-02-14T14:27:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1676384853926,"ct":1676384264048,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","144e85c0-d7f9-4b20-8928-be30f0c78bda","647b2571-aea1-4247-8adb-b43bb4c94afc"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2022-07-05T08:09:24+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1657008564265,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.over = null\n    locals.employees = []\n\n    // if (params.employees) {\n    //   locals.employees = params.employees.slice(0,1).map(e => {\n    //     if (typeof e === 'string') {\n    //       return { id: e }\n    //     }\n        \n    //     return e\n    //   })\n    // }\n    \n    watchParam('employees', async (paramEmployees) => locals.employees = await this.unique(paramEmployees))\n    \n    if (params.employees) {\n      locals.employees = await this.unique(params.employees)\n    }\n  }\n\n  async unique(documentsParam) {\n    const documents = Array.isArray(documentsParam) ? documentsParam : [documentsParam]\n    const ensuredDocuments = await Aeppic.getAll(documents)\n\n    const set = new Set()\n    const result = []\n\n    ensuredDocuments.forEach((document, index) => {\n      if (!document) {\n        const ref = documents[index]\n\n        // nothing passend in\n        if (!ref) {\n          return\n        }\n\n        if (typeof ref === 'string') {\n          set.add(ref)\n        } else {\n          set.add(ref.id)\n        }\n\n        result.push(ref)\n\n        return\n      }\n\n      if (set.has(document.id)) {\n        return\n      } \n\n      set.add(document.id)\n      result.push(document)\n    })\n\n    return result\n  }\n\n  get overlapClasses() {\n    return !params.noOverlap && (params.vertical ? '-mt-1' : '-ml-1')\n  }\n}","css":"","name":"rd:Employee Avatars","packages":[],"template":"<div class=\"flex flex-row flex-wrap\"\n    :class=\"[params.vertical && 'flex-col', controller.overlapClasses === '-mt-1' && 'mt-1', controller.overlapClasses === '-ml-1' && 'ml-1', ]\"\n    @mouseleave=\"locals.over = null\">\n    <!-- REENABLE locals.employees -->\n    <!-- {{ params.employees[0] }} -->\n    <!-- <ae-design :class=\"[ controller.overlapClasses, params.class ]\"\n                name=\"table-title\"\n                :document-id=\"params.employees[0]\"\n                @mouseenter.native=\"locals.over = employee\"\n                @xmouseleave.native=\"locals.over = null\"\n                :watch=\"false\"\n                :watch-design=\"false\"\n    ></ae-design>  -->\n\n  <div v-for=\"(employee, index) of locals.employees\" :key=\"employee.id\" class=\"relative\">\n    <template v-if=\"typeof employee === 'object' && 'data' in employee\">\n      <ae-design :class=\"[ controller.overlapClasses, params.class ]\"\n                  name=\"avatar--resizes-with-font\"\n                  :document-id=\"employee.id\"\n                  @mouseenter.native=\"locals.over = employee\"\n                  @xmouseleave.native=\"locals.over = null\"\n                  :title=\"employee.data?.name\"\n      ></ae-design> \n\n      <template v-if=\"$listeners.remove\">\n        <div v-if=\"locals.over === employee\"\n              class=\"backdrop-blur-sm bg-white/30 rounded-full absolute top-0 left-0 right-0 bottom-0 flex items-center justify-center\"\n              :class=\"controller.overlapClasses\"\n              @mouseenter=\"locals.over = employee\"\n              @click.stop=\"$emit('remove', employee)\"\n              :title=\"employee.data.name + ' entfernen'\"\n        >\n          <ae-icon  class=\"fa fa-times\"></ae-icon>\n        </div>\n      </template>\n    </template>\n    <template v-else>\n      <span :title=\"typeof employee === 'string' ? employee : employee.text\"><ae-icon class=\"fa fa-user-circle text-[1em]\" :style=\"{ fill: '#BBB' + '!important' }\"></ae-icon></span>\n        <template v-if=\"$listeners.remove\">\n        <div v-if=\"locals.over === employee\"\n              class=\"backdrop-blur-sm bg-white/30 rounded-full absolute top-0 left-0 right-0 bottom-0 flex items-center justify-center\"\n              :class=\"controller.overlapClasses\"\n              @mouseenter=\"locals.over = employee\"\n              @click.stop=\"$emit('remove', employee)\"\n              :title=\"typeof employee === 'string' ? employee : employee.text + ' entfernen'\"\n        >\n          <ae-icon  class=\"fa fa-times\"></ae-icon>\n        </div>\n      </template>\n    </template>\n  </div>\n</div>\n  "},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"ffd34105-fa6a-44f5-aa63-64923233f178","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-09-19T15:32:59+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"647b2571-aea1-4247-8adb-b43bb4c94afc","previous":{"v":"7522556960924d84"},"stamps":[],"t":1758295979880,"v":"3896067934267016"},{"a":["apps","0c440c7a-219d-4465-9cbe-2d0eff6ec7ad","85cd7d8f-35be-4092-a40c-274f50729126"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2019-09-13T09:20:43+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1740666014595,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Estimate: '08a478e7-a278-4c26-b2b6-65f9563a7da8'\n    }\n\n    this.NEW_COMMANDS = {\n      Estimate: 'e7e76d3d-1d97-4979-8b13-2d25faab4d67'\n    }\n\n    this.COMMANDS = {\n      CanEditTimeTracking: '7a4f59d3-da0f-4cf5-a5f0-5c4e7d0a393f'\n    }\n\n    locals.estimate = await this.getEstimate()\n  }\n\n  async canEditTimeTracking() {\n    const result = await Aeppic.Commands.execute(this.COMMANDS.CanEditTimeTracking, params.document || params.documentId, { Account: Aeppic.Account, ProfilePage: Aeppic.ProfilePage })\n    return result.ok && result.value === true\n  }\n\n  async getEstimate() {\n    if (!(await this.canEditTimeTracking())) {\n      return\n    }\n\n    let estimate = null\n\n    const existingEstimate = await Aeppic.findOne(\n      `p:${params.document ? params.document.id : params.documentId} f.id:${this.FORMS.Estimate}`\n    )\n\n    if (existingEstimate) {\n      estimate = await Aeppic.edit(existingEstimate)\n    } else {\n      const estimateResult = await Aeppic.Commands.execute(\n        this.NEW_COMMANDS.Estimate,\n        params.document || params.documentId,\n        { Account: Aeppic.Account, ProfilePage: Aeppic.ProfilePage }\n      )\n\n      if (!estimateResult.ok || estimateResult.error) {\n        console.error('Error creating tracked time', estimateResult)\n        return\n      }\n\n      estimate = estimateResult.value\n    }\n\n    return estimate\n  }\n\n  async save() {\n    if (!(await this.canEditTimeTracking())) {\n      return\n    }\n\n    Aeppic.save(locals.estimate)\n\n    $emit('close')\n  }\n}\n","css":"._CSS-estimate {\n  height: 100%;\n\n  display: flex;\n  flex-flow: column;\n}\n\n\n._CSS-actions {\n  display: flex;\n  justify-content: flex-end;\n}","name":"rd:Estimate Entry","packages":[],"template":"<div class=\"_CSS-estimate\" v-if=\"locals.estimate\">\n  <ae-form :document=\"locals.estimate\"\n           layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n  ></ae-form>\n\n  <div style=\"flex:1\"></div>\n\n  <div class=\"_CSS-actions\">\n    <button class=\"ae-button ae-button--primary\" @click=\"controller.save()\" :disabled=\"!locals.estimate\">\n      Speichern\n    </button>\n  </div> \n\n</div>\n<div v-else class=\"italic\">\n  Keine Berechtigung\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"4642a086-2247-48c6-b155-5879b098503c","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-05-05T11:50:26+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"85cd7d8f-35be-4092-a40c-274f50729126","previous":{"v":"9bc1e27867b004b9"},"stamps":[],"t":1777981826787,"v":"d6d40008eea275a6"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"aea9f60c-e5c4-4d96-8f81-8f0dda80e442","text":"Export Buttons","v":"dc0d974577489979"},"created":{"at":"2022-09-19T09:40:58+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1663580458989,"data":{"applies":"","controller":"class Controller {\n\n  async init() {\n    // locals.printEnabled = false\n    // locals.printEnabled = await Aeppic.Preferences.getSetting('bizpin:generic:enablePrintButtons')\n    locals.allowZip = false\n    \n    const allowedForms = await Aeppic.Preferences.getSetting('bizpin:zip:forms')\n    if (allowedForms) {\n      locals.allowZip = allowedForms.find(form => form.id === params.document.f.id)\n    }\n    \n    watchParam('document', async (doc) => {\n      locals.allowZip = allowedForms.find(form => form.id === doc.f.id)\n    })\n  }\n  \n  get zipDownloadUrl() {\n    return `/api/services/41e10b87-b2e2-4534-a224-ebe1b728ff29/v1/zip?folderId=${params.document?.id}`\n  }\n  \n  // get printLayoutUrl() {\n  //   if (!params.document) {\n  //     return ''\n  //   }\n    \n  //   return [\n  //     '/' + params.document.id + '?print',\n  //     params.view && `&view=${params.view}`,\n  //     params.tab && `&tab=${params.tab}`,\n  //   ].filter(Boolean).join('')\n  // }\n  \n  // get printDownloadUrl() {\n  //   const base = '/api/docs/' + params.document?.id + '/_print'\n    \n  //   const parts = []\n    \n  //   if (params.document) {\n  //     parts.push(`name=${params.document.data.name}`)\n  //   }\n    \n  //   const queryString = '?' + parts.map(p => encodeURIComponent(p)).join('&')\n    \n  //   return base + queryString\n  // }\n}\n  ","css":"._CSS {\n  display: flex;\n}\n\n._CSS-popup {\n  padding: var(--ae-size-2) 0;\n  background-color: white;\n  box-shadow: var(--ae-shadow-2);\n  transition: opacity .15s, visibility 1s;\n  border-radius: var(--ae-border-radius);\n  display: flex;\n  flex-flow: column;\n}\n","name":"rd:Export Buttons","packages":[],"template":"<div v-if=\"locals.allowZip\" class=\"flex flex-col gap-1 w-full\">\n  <!-- NOTE: print view is not needed anymore because print stylesheet is loaded always for media print -->\n  <!-- <a v-if=\"locals.printEnabled\" class=\"w-full\" title=\"Druckansicht\" target=\"_blank\" :href=\"controller.printLayoutUrl\" >\n    <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                param-icon=\"far fa-print\"\n                param-text=\"Druckansicht\"\n                param-classes=\"w-full\"\n    ></ae-layout> \n  </a> -->\n\n  <!-- FIXME: PDF works sometimes, sometimes stuff is missing (if loading takes to long) -->\n  <!-- <a v-if=\"locals.printEnabled\" class=\"ae-button\" title=\"Als PDF speichern\" target=\"_blank\" :href=\"controller.printDownloadUrl\">\n    <ae-icon class=\"fad fa-file-pdf\"></ae-icon> Druckansicht als PDF herunterladen\n  </a> -->\n\n  <a v-if=\"locals.allowZip\" class=\"w-full\" title=\"Als ZIP speichern\" target=\"_blank\" :href=\"controller.zipDownloadUrl\">\n      <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                param-icon=\"far fa-file-download\"\n                param-text=\"Dateien als ZIP herunterladen\"\n                param-classes=\"w-full\"\n    ></ae-layout> \n  </a>\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"4373ea43-cc54-40f4-8d94-a4329d2dcf66","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2024-11-06T14:22:54+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"aea9f60c-e5c4-4d96-8f81-8f0dda80e442","text":"Export Buttons","v":"dc0d974577489979"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"581f1934128e8e91"},"stamps":[],"t":1730902974328,"v":"c239f0f62713b35e"},{"a":["apps","3339944f-c35f-44b1-b427-a6db1d012825","c4651b79-e62d-44e7-a5a7-8b49d602ea90"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2024-11-21T14:12:24+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1732198354219,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.url = ''\n    locals.name = ''\n\n    $on('export', (event) => this.exportEvent(event))\n  }\n\n  async exportCsv(optionsParam) {\n    const options = {\n      ...{\n        includeFields: params.includeFields,\n        includeParentName: params.includeParentName,\n        documents: params.documents,\n      },\n      ...optionsParam,\n    }\n\n    locals.name = options.name || params.document?.data.name || 'Export'\n\n    const documents =\n      options.documents || (await Aeppic.find(`p:${params.document.id} f.id:${params.formId}`, { size: 9999 }))\n    const form = params.formId ? await Aeppic.getForm(params.formId) : await Aeppic.getFormForDocument(documents[0])\n\n    const getRefsName = async (refs) => {\n      const asDocuments = await Aeppic.getAll(refs)\n      return await Promise.all(\n        asDocuments.map(async (doc) => {\n          if (!doc) {\n            return ''\n          }\n\n          const name = doc.data.name\n          if (name) {\n            return name\n          }\n\n          return (await Aeppic.get(doc.f.id)).data.name || ''\n        }),\n      )\n    }\n\n    const headers = []\n    if (options.includeParentName) {\n      headers.push('Name des Vater-Objektes')\n    }\n\n    const includeFieldsOfData = options.includeFields?.map((f) => f.replace('data.', ''))\n\n    for (const field of form.fields) {\n      if (includeFieldsOfData && !includeFieldsOfData.includes(field.name)) {\n        continue\n      }\n\n      const placeholder = form.getPlaceholder(field.name)\n      if (placeholder) {\n        headers.push(placeholder.label)\n      } else {\n        headers.push(field.name)\n      }\n    }\n\n    if (options.additionalHeaders) {\n      headers.push(...options.additionalHeaders)\n    }\n\n    // const currencyFormatter = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' })\n    const numberFormat = new Intl.NumberFormat(packages.window.navigator.language || 'de-DE', { style: 'decimal', minimumFractionDigits: 2 })\n\n    const promises = documents.map(async (document, documentIndex) => {\n      const row = []\n\n      if (options.includeParentName) {\n        const parent = await Aeppic.get(document.p)\n\n        row.push(`${parent.data.name}`)\n      }\n\n      for (const field of form.fields) {\n        if (includeFieldsOfData && !includeFieldsOfData.includes(field.name)) {\n          continue\n        }\n\n        const controlName = form.getPlaceholder(field.name)?.control?.name\n\n        let values = field.cardinality ? document.data[field.name] : [document.data[field.name]]\n\n        if (field.type === 'number') {\n          values = values.map(value => {\n            return numberFormat.format(value)\n          })\n        }\n\n        if (field.subType === 'ref') {\n          values = await getRefsName(values)\n        }\n\n        if (field.subType === 'date') {\n          const format = controlName === 'datetime' ? 'yyyy-MM-dd HH:mm' : 'yyyy-MM-dd'\n\n          values = values.map((value) => {\n            if (!value) {\n              return ''\n            }\n\n            return Aeppic.DateTime.fromISO(value).toFormat(format)\n          })\n        }\n\n        if (field.subType === 'duration') {\n          values = values.map((value) => {\n            if (!value) {\n              return ''\n            }\n\n            return Aeppic.DateTimeDuration.fromObject(value).toFormat('hh:mm:ss')\n          })\n        }\n\n        if (field.subType === 'address') {\n          const all = ['street', 'streetNumber', 'postalCode', 'city', 'country', 'supplement', 'country', 'state']\n\n          values = values.map((value) => {\n            if (all.every((subKeyName) => value[subKeyName])) {\n              return ''\n            }\n\n            return all.map((subKeyName) => value[subKeyName]).join(' ')\n          })\n        }\n\n        row.push(values.join('\\n'))\n      }\n\n      if (options.additionalColumns) {\n        // TODO: verify there is sth?!\n        row.push(...options.additionalColumns[documentIndex])\n      }\n\n      return row\n    })\n\n    const rows = await Promise.all(promises)\n\n    await this.download(headers, rows)\n  }\n\n  async exportEvent(event) {\n    if (event.additionalColumns) {\n      const { additionalColumns, additionalHeaders, includeFields, documents, name } = event\n\n      await this.exportCsv({ additionalColumns, additionalHeaders, includeFields, documents, name })\n      return\n    }\n\n    const { rows, headers, name } = event\n\n    locals.name = name || 'Export'\n\n    await this.download(headers, rows)\n  }\n\n  async download(headers, rows) {\n    const unparse = packages.unparse\n\n    if (!unparse) {\n      throw new Error('Package PapaParser not loaded')\n    }\n\n    const data = unparse(\n      {\n        fields: headers,\n        data: rows,\n      },\n      {\n        delimiter: ';',\n      },\n    )\n\n    const blob = new Blob(['\\uFEFF', data], { type: 'text/csv' })\n    const objectUrl = URL.createObjectURL(blob)\n\n    locals.url = objectUrl\n\n    await Aeppic.nextRenderPass()\n\n    $refs.a.click()\n  }\n}\n","css":"","name":"rd:Export documents as CSV","packages":[{"id":"0b308b82-a87f-4c2c-9cee-e09b90d37156","text":"CSV Parser","v":"677a965740861db9"},{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"429d193aa0c72c7a"}],"template":"<ae-layout\n  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n  param-icon=\"far fa-file-csv\"\n  param-text=\"csv-Datei\"\n  @selected=\"controller.exportCsv()\"\n  :param-disabled=\"params.documents && !params.documents.length\"\n  param-border=\"border border-secondary-200\"\n></ae-layout>\n\n<a\n  v-if=\"locals.url\"\n  ref=\"a\"\n  :href=\"locals.url\"\n  :download=\"locals.name + '-' + Aeppic.DateTime.local().toFormat('yyyy-LL-dd_HH-mm-ss') + '.csv'\"\n  target=\"_blank\"\n></a>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"6611846e-c4bc-4d29-bb20-9c2efb8eb2bb","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-03-03T09:26:40+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"c4651b79-e62d-44e7-a5a7-8b49d602ea90","previous":{"v":"029720ecc64d8385"},"stamps":[],"t":1772530000067,"v":"de93d28d1770a2c1"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2022-05-17T13:12:58+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1652793178660,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Pins: '271894b3-6ed5-49f2-9234-9fdd5f7c02aa'\n    }\n\n    locals.pinned = false\n    locals.pins = null\n\n    this._updatePinsDocument(params.pinsDocument)\n    watchParam('pinsDocument', (newPinsDocument) => this._updatePinsDocument(newPinsDocument))\n\n    watchParam('document', doc => this.update(doc))\n    this.update(params.document)\n  }\n \n  _updatePinsDocument(pinsDocument) {\n    this.pinsDocumentWatcher?.stop()\n    this.pinsDocumentWatcher = null\n\n    locals.pins = pinsDocument\n    this.update(params.document)\n\n    if (!pinsDocument) {\n      return\n    }\n\n    this.pinsDocumentWatcher = Aeppic.watch(pinsDocument, (updatedPinsDocument) => {\n      locals.pins = updatedPinsDocument\n      this.update(params.document)\n    })\n  }\n\n  // async getOrCreatePinsDocument() {\n  //   let pinsDocument = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.Pins}`, { sort: { field: 'created.at', descending: true } })\n\n  //   if (!pinsDocument) {\n  //     const newDocument = await Aeppic.new(this.FORMS.Pins, Aeppic.Account.id)\n  //     Aeppic.save(newDocument)\n\n  //     pinsDocument = newDocument.cloneAsDocument()\n  //   }\n\n  //   return pinsDocument\n  // }\n\n  update(doc) {\n    if (!locals.pins || !doc) {\n      return\n    }\n\n    locals.pinned = !!locals.pins.data.pinnedDocuments.find(d => doc.id === d.id)\n    // console.log('update', locals.pinned)\n  }\n\n  async toggle() {\n    const included = !!locals.pins.data.pinnedDocuments.find(d => params.document.id === d.id)\n    \n    let remove = false\n    let add = false\n\n    if (included) {\n      remove = true\n      locals.pinned = false\n    } else {\n      add = true\n      locals.pinned = true\n    }\n\n    const editablePinsDocument = await Aeppic.edit(locals.pins)\n\n    if (remove) {\n      editablePinsDocument.removeReference('pinnedDocuments', params.document)\n    } else if (add) {\n      editablePinsDocument.addReference('pinnedDocuments', params.document)\n    }\n\n    Aeppic.save(editablePinsDocument) \n  }\n}","css":"","name":"rd:Favorites Pin","packages":[],"template":"<div class=\"flex items-center h-full\" v-if=\"params.document\">\n  <ae-layout  v-if=\"!locals.pinned && params.document.hidden\"\n              layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              param-icon=\"far fa-eye-slash text-blue-500\"\n              param-title=\"Dieses Dokument ist versteckt und nur über Verlinkungen erreichbar.\"\n              param-disabled=\"true\"\n              param-border=\"border border-secondary-200\"\n  ></ae-layout>\n  <ae-layout  v-else \n              layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              :param-icon=\"locals.pinned ? 'fa fa-thumbtack' : 'far fa-thumbtack'\"\n              :param-classes=\"[locals.pinned && 'text-yellow-500' ]\"\n              @selected=\"controller.toggle()\"\n              param-title=\"Unter 'Meine Pins' anpinnen\"\n              param-border=\"border border-secondary-200\"\n              :param-disabled=\"!locals.pins\"\n  ></ae-layout> \n</div> \n\n<!-- <button v-if=\"params.document\" class=\"ae-button ae-button--small\" @click.stop=\"controller.toggle()\">\n  <div class=\"\" >\n    <ae-icon v-if=\"!locals.pinned\" class=\"far fa-thumbtack\"></ae-icon>\n    <ae-icon v-else class=\"fa fa-thumbtack text-yellow-500\"></ae-icon>\n  </div> \n</button> --> \n\n<div class=\"flex items-center h-full\" v-else-if=\"locals.pins && locals.pins.data.pinnedDocuments.length\">\n  <div class=\"text-sm text-neutral-500 flex items-center gap-2\">\n    <!-- <ae-icon class=\"fa fa-thumbtack\"></ae-icon> -->\n    <div>Pins</div>\n  </div> \n\n  <ae-list list-id=\"simple-list\"\n          :documents=\"locals.pins.data.pinnedDocuments\"\n          :watch-documents=\"false\"\n          param-design=\"rd:pinned\"\n          @selected=\"Aeppic.navigateTo($event)\"\n  ></ae-list>\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"e328702a-6cac-44eb-801b-e75fbd946a09","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-10-31T15:11:46+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"0c46b9ec80db071b"},"stamps":[],"t":1761923506965,"v":"d6318939a7fbffeb"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","1cc4b977-c14d-4587-af47-d6ac230f60b3","cf06d688-aeb4-45ff-941b-058334cf2436"],"a_depth":4,"a_forms":["folder","application-form","design-folder","design-form"],"created":{"at":"2026-04-23T06:14:17+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"ct":1776924857356,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.ready = true\n  }\n\n  get category() {\n    return params.treeController.nodeCategory(params.node)\n  }\n\n  get inPath() {\n    return params.treeController._nodeInPath(params.node)\n  }\n\n  get looksFolded() {\n    return params.treeController.nodeLooksFolded(params.node)\n  }\n\n  get visibleChildren() {\n    if (this.category === 'ancestor') {\n      return params.node.childNodes.filter(child => params.treeController._nodeInPath(child))\n    }\n    return params.node.childNodes\n  }\n\n  get shouldRenderChildren() {\n    return !this.looksFolded && this.visibleChildren.length > 0\n  }\n\n  get showEllipsis() {\n    return this.category === 'thresholdPermitted' && params.node.hasChildren && !params.node.folded\n  }\n\n  get isSelected() {\n    return params.node.document.id === params.treeController.selectedDocument.id\n  }\n\n  get titleClasses() {\n    if (this.isSelected) {\n      return 'bg-primary-400 text-white border-transparent hover:bg-primary-800'\n    }\n    if (this.inPath) {\n      return 'bg-primary-800 text-white border-transparent hover:bg-primary-400'\n    }\n    return 'border-transparent text-gray-800 hover:border-gray-300'\n  }\n\n  toggle() {\n    if (this.category === 'ancestor') return\n    params.treeController.toggleFold(params.node)\n  }\n\n  handleSelected() {\n    params.treeController.handleNodeSelected(params.node)\n  }\n}","css":"","name":"rd:folder-tree-node","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<template>\n  <div class=\"w-full h-full\">\n    \n    <div class=\"flex items-start py-1 items-center\">\n      <div \n        v-if=\"!['ancestor', 'thresholdAncestor'].includes(controller.category)\"\n        @click=\"controller.toggle()\" \n        class=\"flex items-center justify-center w-6 h-6 flex-shrink-0 transition-opacity cursor-pointer text-gray-400 hover:text-secondary-800\"\n        :class=\"params.node.hasChildren ? '' : 'opacity-50'\"\n      >\n        <ae-icon \n          class=\"far fa-chevron-left transition-transform duration-200\"\n          :class=\"params.node.folded ? 'rotate-180' : 'rotate-[270deg]'\"\n        ></ae-icon>\n      </div>\n\n      <div \n        @click.stop=\"controller.handleSelected()\"\n        class=\"flex items-center min-h-[1.5rem] px-2 py-1 rounded-md border cursor-pointer transition-colors flex-1 xmin-w-0 gap-2\"\n        :class=\"[controller.titleClasses, params.truncate ? 'min-w-0' : '']\"\n      >\n        <ae-design \n          :document-id=\"params.node.document.id\"\n          name=\"rd:icon\"\n          class=\"pointer-events-none\"\n          :param-use-form-icon=\"true\"\n          :param-size=\"4\"\n          :param-disable-ring=\"true\"\n          param-forceBackgroundColorStyle=\"transparent\"\n        ></ae-design>\n        <ae-design \n          :document-id=\"params.node.document.id\"\n          name=\"title\"\n          class=\"font-medium pointer-events-none overflow-hidden w-full select-none\"\n          :param-fit=\"true\"\n        ></ae-design>\n      </div>\n    </div>\n    <div \n      v-if=\"controller.shouldRenderChildren\"\n      class=\"flex flex-col transition-colors\"\n      :class=\"{ 'ml-3 pl-3 border-l border-transparent group-hover:border-gray-300': !['ancestor', 'thresholdAncestor'].includes(controller.category) }\"\n    >\n      <ae-layout \n        v-for=\"childNode in controller.visibleChildren\" \n        :key=\"childNode.document.id\"\n        layout-id=\"3697b29a-a27c-4402-bab3-118002055040\" \n        :param-node=\"childNode\" \n        :param-tree-controller=\"params.treeController\"\n        :param-truncate=\"params.truncate\"\n      ></ae-layout>\n    </div>\n\n    <div \n      v-if=\"controller.showEllipsis\"\n      class=\"flex flex-col transition-colors ml-3 pl-3 border-l border-transparent group-hover:border-gray-300\"\n    >\n      <div class=\"flex items-center min-h-[1.5rem] px-2 py-1 text-gray-400 tracking-widest font-bold\">\n        ...\n      </div>\n    </div>\n\n  </div>\n</template>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"3697b29a-a27c-4402-bab3-118002055040","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2026-05-07T13:25:02+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"cf06d688-aeb4-45ff-941b-058334cf2436","previous":{"v":"6eeba4d2f9788276"},"stamps":[],"t":1778160302209,"v":"1c3e2b59d7ae3b23"},{"id":"e0ab58b1-614c-495a-94ec-288c623b4d48","v":"a38eba5772fbd903","cloneOf":{"id":"aebb3ba2-835e-4b1a-b2a0-68642bda2f23","v":"29cbc6599212ed17","text":"rd:Button Toggle done "},"originalCloneOf":{"id":"aebb3ba2-835e-4b1a-b2a0-68642bda2f23","v":"29cbc6599212ed17","text":"rd:Button Toggle done "},"previous":{"v":"a399bf5fa638db38"},"p":"85cd7d8f-35be-4092-a40c-274f50729126","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:Form Button Toggle abgerechnet ","applies":"","template":"\n<ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            :param-text=\"locals.showDone ? 'Abgerechnete ausblenden' : 'Abgerechnete anzeigen (' + params.invoicedDocumentsLength + ')'\"\n            param-classes=\"text-xs rounded-full\"\n            :param-disabled=\"!params.invoicedDocumentsLength\"\n            @selected=\"controller.toggleShow()\"\n></ae-layout>","css":"","controller":"class Controller {\n  async init() {\n    locals.showDone = true\n\n    this.toggleShow()\n  }\n\n  toggleShow() {\n    locals.showDone = !locals.showDone\n\n    if (locals.showDone) {\n      $emit('filter', '')\n    } else {\n      $emit('filter', 'data.abgerechnet:false')\n    }\n  }\n}","packages":[]},"locks":[],"created":{"at":"2024-02-22T08:56:45+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-02-22T09:22:54+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1708593774130,"ct":1708592205938,"a_depth":3,"a":["apps","0c440c7a-219d-4465-9cbe-2d0eff6ec7ad","85cd7d8f-35be-4092-a40c-274f50729126"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","59edbdbc-2cab-426a-bb42-6e57c5158e4f","185dd4c1-0fb4-43f9-8e8e-ab5cdfb82b4f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2024-02-19T08:42:02+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1708332122042,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.showDone = false\n\n    this.toggleShow()\n  }\n\n  toggleShow() {\n    locals.showDone = !locals.showDone\n\n    if (locals.showDone) {\n      $emit('filter', '')\n    } else {\n      $emit('filter', 'data.erledigt:false')\n    }\n  }\n}","css":"","name":"rd:Form Button Toggle done ","packages":[],"template":"\n<ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            :param-text=\"locals.showDone ? 'Erledigte ausblenden' : 'Erledigte anzeigen (' + params.document?.data.unteraufgabenErledigt + ')'\"\n            param-classes=\"text-xs rounded-full\"\n            :param-disabled=\"!params.document?.data.unteraufgabenErledigt\"\n            @selected=\"controller.toggleShow()\"\n></ae-layout>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"aebb3ba2-835e-4b1a-b2a0-68642bda2f23","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-05-08T14:13:09+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"185dd4c1-0fb4-43f9-8e8e-ab5cdfb82b4f","previous":{"v":"f34b4e5474554c98"},"stamps":[],"t":1778249589632,"v":"de5cd12e680759cc"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2024-09-26T10:00:54+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1727344854598,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.types = [\n      { identifier: '7a009010-589f-4a58-926d-68ad83e7c282', type: 'text', control: 'color', label: 'Color' },\n      { identifier: 'd4e2dabf-f02f-452f-8ab1-051d5d7c31c0', type: 'date', control: 'date', label: 'Date' },\n      { identifier: '6a88a279-4e5d-4da5-b4f0-9a2df4f75874', type: 'datetime', control: 'datetime', label: 'Datetime' },\n      { identifier: 'd3c0444b-d3de-4936-b4ea-c36c1f749732', type: 'mail', control: 'email', controlParams: 'simple-input', label: 'E-Mail' },\n      { identifier: '7fb64d74-b6b5-4fe7-ac66-8878543527b9', type: 'number', control: 'number', label: 'Number' },\n      { identifier: '21f6692e-54a4-421c-8495-e2cee4f5f7e7', type: 'text', control: 'multiline', controlParams: 'color=red', label: 'Multiline (Color: red)' },\n      { identifier: 'd8e34171-12cb-4f6d-97e9-a7d322eca103', type: 'text', control: 'multiline', label: 'Multiline' },\n      { identifier: '0fe717ad-c9c5-4bc5-a402-df1f9ccf0f0a', type: 'phone', control: 'phone', controlParams: 'simple-input', label: 'Phone' },\n      { identifier: '90d1333e-96fd-4105-8df4-8ee0055aeaa5', type: 'text', control: 'url', controlParams: 'simple-input', label: 'URL' },\n      {\n        identifier: 'c678cb3d-3dba-44ba-8e74-25dc692a3ee4',\n        type: 'signature',\n        control: 'signature',\n        label: 'Signature',\n      },\n      { identifier: 'd7f02525-5f10-4efa-a667-ad3eff96f827', type: 'text', control: 'text', label: 'Text' },\n      {\n        identifier: '1e7474a9-e8a0-46b2-8d32-ac7247e496d8',\n        type: 'switch',\n        control: 'switch',\n        label: 'Yes/no',\n        controlParams: 'appearance=\"toggle-text\"'\n      },\n      {\n        identifier: 'bc2bc55b-6115-4281-b930-09d8375cf70d',\n        type: 'select',\n        control: 'select',\n        label: 'Yes/no (noting set by default)',\n        controlParams: 'appearance=\"toggle-text\"',\n        typeOptions: {\n          options: [\n            { display: '', value: '' },\n            { display: 'Yes', value: 'TRUE' },\n            { display: 'No', value: 'FALSE' },\n          ],\n        }\n      },\n    ]\n\n    locals.fields = [\n      {\n        identifier: 'default',\n        label: '<show always>'\n      }\n    ]\n\n    this.reset()\n\n    this._fillFields()\n  }\n\n  reset() {\n    locals.text = ''\n\n    // locals.fieldLabel = Aeppic.uuid() || ''\n    locals.fieldLabel = ''\n\n    locals.fieldOptions = {\n      ...locals.types.find(({ identifier }) => identifier === 'd7f02525-5f10-4efa-a667-ad3eff96f827'),\n      required: true,\n      position: 'after',\n      visibility: '',\n    }\n\n    locals.showIfTrueFieldIdentifier = 'default'\n    locals.showIfFalseFieldIdentifier = 'default'\n    locals.hideIfTrueFieldIdentifier = 'default'\n    locals.hideIfFalseFieldIdentifier = 'default'\n    locals.selectedVisibilityType = ''\n  }\n\n  updateType(typeIdentifier) {\n    const { type, control, controlParams, typeOptions } = locals.types.find(({ identifier }) => identifier === typeIdentifier)\n\n    locals.fieldOptions.type = type\n    locals.fieldOptions.control = control\n    locals.fieldOptions.controlParams = controlParams\n    locals.fieldOptions.typeOptions = typeOptions\n    locals.fieldOptions.visibility = ''\n  }\n\n  updateVisibilityIf(visibilityType, fieldIdentifier) {\n    let visibilityExpression = ''\n    let compareTrueish = false\n\n\n    if (visibilityType === 'show-true') {\n      compareTrueish = true\n      visibilityExpression = 'show'\n      locals.showIfTrueFieldIdentifier = fieldIdentifier\n    } else if (visibilityType === 'show-false') {\n      compareTrueish = false\n      visibilityExpression = 'show'\n      locals.showIfFalseFieldIdentifier = fieldIdentifier\n    } else if (visibilityType === 'hidden-true') {\n      visibilityExpression = 'hidden'\n      compareTrueish = true\n      locals.hideIfTrueFieldIdentifier = fieldIdentifier\n    } else if (visibilityType === 'hidden-false') {\n      visibilityExpression = 'hidden'\n      compareTrueish = false\n      locals.hideIfFalseFieldIdentifier = fieldIdentifier\n    } else {\n      throw new Error('Invalid visibilityType value. Expected \"show-true\", \"show-false\", \"hide-true\", or \"hide-false\".')\n    }\n    \n    // if (typeShowOrHidden === 'show') {\n    //   locals.showIfFieldIdentifier = fieldIdentifier\n    //   locals.hideIfFieldIdentifier = 'default'\n    // } else if (typeShowOrHidden === 'hidden') {\n    //   locals.hideIfFieldIdentifier = fieldIdentifier\n    //   locals.showIfFieldIdentifier = 'default'\n    // } else {\n    //   throw new Error('Invalid typeShowOrHidden value. Expected \"show\" or \"hidden\".')\n    // }\n\n    if (fieldIdentifier === 'default') {\n      locals.selectedVisibilityType = ''\n\n      locals.fieldOptions.visibility = ''\n      return\n    }\n\n    locals.selectedVisibilityType = visibilityType\n\n    const placeholder = this._form.getPlaceholder(fieldIdentifier)\n    const field = placeholder.field \n\n    const possibleSimpleComparisionInversion = compareTrueish ? '' : '!'\n\n    if (field.subType === 'select') {\n      const isYesNoSelect = field.settings.options.length === 3 && field.settings.options[0].value === '' && field.settings.options[1].value === 'true' && field.settings.options[2].value === 'false'\n\n      if (isYesNoSelect) {\n        if (compareTrueish) {\n          locals.fieldOptions.visibility = `${visibilityExpression} if ${fieldIdentifier} === 'true'`\n        } else {\n          locals.fieldOptions.visibility = `${visibilityExpression} if ${fieldIdentifier} === 'false'`\n        }\n      } else {\n        locals.fieldOptions.visibility = `${visibilityExpression} if ${possibleSimpleComparisionInversion}${fieldIdentifier}`\n      }\n\n      return\n    } \n\n    if (field.subType === 'file') {\n      locals.fieldOptions.visibility = `${visibilityExpression} if ${possibleSimpleComparisionInversion}${fieldIdentifier}.dataUrl`\n      return\n    }\n\n    // boolean, string, number, ...\n    locals.fieldOptions.visibility = `${visibilityExpression} if ${possibleSimpleComparisionInversion}${fieldIdentifier}`\n  }\n\n  get _form() {\n    if (!params.form) {\n      return null\n    }\n\n    // params.form is the FormDocument. Under .form is the actual Form-Class Instance\n    return params.form.form\n  }\n\n   async _fillFields () {\n     if (!params.form) {\n       return\n     }\n\n      // params.form is the FormDocument. Under .form is the actual Form-Class Instance\n      const placeholders = this._form.getPlaceholders()\n\n      const fields = placeholders.map(p => {\n        return {\n          identifier: p.field.name,\n          label: p.label\n        }\n      })\n      // console.log(fields)\n  \n      locals.fields.push(...fields)   \n   }\n}\n ","css":"","name":"rd:Form Field Add Button [FORM BUILDER]","packages":[],"template":"<div class=\"flex flex-wrap gap-1\">\n  <ae-layout\n    v-if=\"!params.noField\"\n    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n    :param-icon=\"'far fa-plus ' + (params.iconColor || 'text-fuchsia-400') \"\n    :param-border=\"params.border || 'border border-fuchsia-600'\"\n    :param-text=\"'Field'\"\n    @selected=\"$refs.fieldPopup.show($event)\"\n  ></ae-layout>\n\n  <ae-layout\n    v-if=\"!params.noText\"\n    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n    :param-icon=\"'far fa-plus ' + (params.iconColor || 'text-fuchsia-400') \"\n    :param-border=\"params.border || 'border border-fuchsia-600'\"\n    :param-text=\"'Text'\"\n    @selected=\"$refs.textPopup.show($event)\"\n  ></ae-layout>\n</div>\n\n<ae-popup ref=\"textPopup\" :max-width=\"600\" >\n  <div class=\"p-4 w-[600px]\">\n    <div class=\"min-h-[300px] flex flex-col gap-1\">\n      <div class=\"flex flex-row items-center\">\n        <div class=\"w-1/3\">Position</div>\n        <div class=\"w-2/3\">\n          <select class=\"w-full border border-gray-400 rounded\" v-model=\"locals.fieldOptions.position\">\n            <option value=\"before\">Before</option>\n            <option value=\"after\">After</option>\n          </select>\n        </div>\n      </div>\n\n      <div class=\"flex flex-row items-center\">\n        <div>Text</div>\n      </div>\n\n      <textarea rows=\"20\" class=\"flex-1 border outline-none rounded-md p-1\" v-model=\"locals.text\"></textarea>\n\n      <ae-layout\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        param-icon=\"far fa-plus text-fuchsia-400\"\n        param-border=\"border border-fuchsia-600\"\n        param-text=\"Add\"\n        :param-disabled=\"!locals.text\"\n        @selected=\"$emit('add', { text: locals.text, fieldOptions: locals.fieldOptions })\"\n      ></ae-layout>\n    </div>\n  </div>\n</ae-popup>\n\n<ae-popup ref=\"fieldPopup\" @close=\"controller.reset()\" :max-width=\"400\">\n  <div class=\"p-4 w-[400px]\">\n    <!-- {{ locals.fieldOptions }} -->\n\n    <div class=\"min-h-[300px]  flex flex-col\">\n      <div class=\"flex-1 flex flex-col gap-2\">\n        <div class=\"flex flex-row items-center\">\n          <div class=\"w-1/3\">Position</div>\n          <div class=\"w-2/3\">\n            <select class=\"w-full border border-gray-400 rounded\" v-model=\"locals.fieldOptions.position\">\n              <option value=\"before\">Left</option>\n              <option value=\"after\">Right</option>\n            </select>\n          </div>\n        </div>\n\n        <div class=\"flex flex-row items-center\">\n          <div class=\"w-1/3\">Label</div>\n          <div class=\"w-2/3\">\n            <input v-focus type=\"text\" class=\"w-full border border-gray-400 rounded invalid:border-red-400\" required v-model.trim=\"locals.fieldLabel\" />\n          </div>\n        </div>\n        <div class=\"flex flex-row items-center\">\n          <div class=\"w-1/3\">Type</div>\n          <div class=\"w-2/3\">\n            <select\n              class=\"w-full border border-gray-400 rounded\"\n              :value=\"locals.fieldOptions.identifier\"\n              @input=\"controller.updateType($event.target.value)\"\n            >\n              <option v-for=\"type of locals.types\" :value=\"type.identifier\">{{type.label}}</option>\n            </select>\n          </div>\n        </div>\n\n        <div class=\"flex flex-row items-center\">\n          <div class=\"w-1/3\">Required</div>\n          <div class=\"w-2/3\">\n            <input type=\"checkbox\" v-model=\"locals.fieldOptions.required\" />\n          </div>\n        </div>\n\n        <div class=\"flex flex-row items-center\">\n          <div class=\"w-1/3\">Show if (true)</div>\n          <div class=\"w-2/3\">\n            <select\n              class=\"w-full border border-gray-400 rounded\"\n              :value=\"locals.showIfTrueFieldIdentifier\"\n              @input=\"controller.updateVisibilityIf('show-true', $event.target.value)\"\n              :disabled=\"locals.selectedVisibilityType !== '' && locals.selectedVisibilityType !== 'show-true'\"\n            >\n              <option v-for=\"field of locals.fields\" :value=\"field.identifier\">{{field.label}}</option>\n            </select>\n          </div>\n        </div> \n\n        <div class=\"flex flex-row items-center\">\n          <div class=\"w-1/3\">Show if (false)</div>\n          <div class=\"w-2/3\">\n            <select\n              class=\"w-full border border-gray-400 rounded\"\n              :value=\"locals.showIfFalseFieldIdentifier\"\n              @input=\"controller.updateVisibilityIf('show-false', $event.target.value)\"\n              :disabled=\"locals.selectedVisibilityType !== '' && locals.selectedVisibilityType !== 'show-false'\"\n            >\n              <option v-for=\"field of locals.fields\" :value=\"field.identifier\">{{field.label}}</option>\n            </select>\n          </div>\n        </div> \n\n        <div class=\"flex flex-row items-center\">\n          <div class=\"w-1/3\">Hide if (true)</div>\n          <div class=\"w-2/3\">\n            <select\n              class=\"w-full border border-gray-400 rounded\"\n              :value=\"locals.hideIfTrueFieldIdentifier\"\n              @input=\"controller.updateVisibilityIf('hidden-true', $event.target.value)\"\n              :disabled=\"locals.selectedVisibilityType !== '' && locals.selectedVisibilityType !== 'hidden-true'\"\n            >\n              <option v-for=\"field of locals.fields\" :value=\"field.identifier\">{{field.label}}</option>\n            </select>\n          </div>\n        </div> \n\n        <div class=\"flex flex-row items-center\">\n          <div class=\"w-1/3\">Hide if (false)</div>\n          <div class=\"w-2/3\">\n            <select\n              class=\"w-full border border-gray-400 rounded\"\n              :value=\"locals.hideIfFalseFieldIdentifier\"\n              @input=\"controller.updateVisibilityIf('hidden-false', $event.target.value)\"\n              :disabled=\"locals.selectedVisibilityType !== '' && locals.selectedVisibilityType !== 'hidden-false'\"\n            >\n              <option v-for=\"field of locals.fields\" :value=\"field.identifier\">{{field.label}}</option>\n            </select>\n          </div>\n        </div> \n\n        <!-- <div class=\"flex flex-row items-center\">\n          <div class=\"w-1/3\">Control</div>\n          <div class=\"w-2/3\">\n            <select\n              class=\"w-full border border-gray-400 rounded\"\n              v-model=\"locals.fieldOptions.control\"\n              :disabled=\"!locals.controlsByType[locals.fieldOptions.type]\"\n            >\n              <option v-for=\"type of locals.controlsByType[locals.fieldOptions.type]\" :value=\"type.control\">\n                {{type.label}}\n              </option>\n            </select>\n          </div>\n        </div> -->\n\n        <!-- <div v-if=\"locals.type === 'select'\" class=\"flex flex-row items-center\">\n          <div class=\"w-1/3\">Select: Options</div>\n          <div class=\"w-2/3\">\n            <input type=\"text\" class=\"w-full border border-gray-400 rounded\" v-model=\"params.fieldOptions.placeholder\">\n          </div>\n        </div> -->\n\n        <div class=\"flex-1\"></div>\n\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          param-icon=\"far fa-plus text-fuchsia-400\"\n          param-border=\"border border-fuchsia-600\"\n          param-text=\"Add\"\n          :param-disabled=\"!locals.fieldLabel\"\n          @selected=\"$emit('add', { fieldLabel: locals.fieldLabel, fieldOptions: locals.fieldOptions })\"\n        ></ae-layout>\n      </div>\n    </div>\n  </div>\n</ae-popup>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"12d87688-9cd6-4242-b206-74cab2de2bcc","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-05-12T10:17:18+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"197f96a51d6ec4b7"},"stamps":[],"t":1747045038859,"v":"5cd430a48e5e1c4d"},{"id":"d0c3250d-8f3f-4a6d-9495-bb0aa155f91b","v":"1da36b4e672fac98","cloneOf":{"id":"7f087b7f-c6a4-49d8-803a-4486341ae23d","text":"Form Field Layout","v":"0bb620d2ad0fcf06"},"originalCloneOf":{"id":"7f087b7f-c6a4-49d8-803a-4486341ae23d","text":"Form Field Layout","v":"0bb620d2ad0fcf06"},"previous":{"v":"3373dd5183cecb5b"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"rd:Form Field Layout","applies":"","packages":[],"template":"<!-- {ro}{{params.readonly}} {{params.document.readonly}} -->\n<!-- <div class=\"text-blue-300\">\nfieldName {{ params.field.name }}\ncP {{params.placeholder}}\n</div> -->\n<section class=\"h-full flex xjustify-between flex-col gap-1 overflow-hidden justify-stretch\" :data-readonly=\"params.readonly\">\n  <div class=\"flex justify-between\">\n    <label :for=\"id('input_id_for_label')\" \n            class=\"font-medium flex-1 text-neutral-600 dark:text-neutral-200 flex items-center gap-1\"\n    >\n      <span v-if=\"!params.field.controlParams?.hideLabel\" :title=\"Aeppic.translate(params.field.label)\">\n        {{ Aeppic.translate(params.field.label) }}\n      </span>\n\n      <ae-control v-if=\"locals.hasHelp\"\n        name=\"rd:help\"\n        :field-name=\"params.field.name\"\n        :document=\"params.document\"\n        :form=\"params.form\"\n        :params=\"params.field.controlParams\"\n        :param-placeholder=\"locals.helpPlaceholder\" \n        :readonly=\"params.readonly\"\n      ></ae-control> \n    </label>\n\n    <ae-layout v-if=\"params.field.controlParams?.additionalButtonLayout\" \n              :layout-id=\"params.field.controlParams.additionalButtonLayout\"\n              :param-document=\"params.document\"\n              :param-field-name=\"params.field.name\"\n              :param-control-params=\"params.field.controlParams\"\n              @filter=\"locals.fixedControlFilter = $event\"\n              class=\"mx-1\"\n    ></ae-layout>\n\n    <ae-control \n      :name=\"'rd:' + params.field.controlName + '-add'\"\n      :field-name=\"params.field.name\"\n      :document=\"params.document\"\n      :form=\"params.form\"\n      :params=\"params.field.controlParams\"\n      :param-input-id=\"id('input_id_for_label--add')\"\n      :data-original-control-name=\"'rd:' + params.field.controlName + '-add'\"\n      :disable-default-control=\"true\"\n      :readonly=\"params.readonly\"\n      :param-fixed-control-filter=\"locals.fixedControlFilter\"\n    ></ae-control>\n  </div>\n\n  <ae-control \n    class=\"w-full     grow overflow-hidden\"\n    :name=\"'rd:' + params.field.controlName\"\n    :field-name=\"params.field.name\"\n    :label=\"params.field.label\"\n    :document=\"params.document\"\n    :form=\"params.form\"\n    :params=\"params.field.controlParams\"\n    :param-confirm-remove=\"false\"\n    :param-input-id=\"id('input_id_for_label')\"\n    :data-original-control-name=\"'rd:' + params.field.controlName\"\n    :readonly=\"params.readonly\"\n    :param-debug=\"Aeppic.LocalStorage.getItem('debug')\"\n    :param-fixed-control-filter=\"locals.fixedControlFilter\"\n  ></ae-control>\n</section>  ","css":"","controller":"class Controller {\n  async init() {\n    locals.helpPlaceholder = params.form.getPlaceholder(params.field.name)\n    locals.hasHelp =\n      (locals.helpPlaceholder?.field?.settings?.help &&\n        (locals.helpPlaceholder.field.settings.help.text || locals.helpPlaceholder.field.settings.help.html)) ||\n      (locals.helpPlaceholder?.field?.settings?.helpExtended &&\n        (locals.helpPlaceholder.field.settings.helpExtended.text || locals.helpPlaceholder.field.settings.helpExtended.html))\n\n    locals.fixedControlFilter = ''\n  }\n}\n"},"locks":[],"created":{"at":"2022-08-23T10:25:30+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"modified":{"at":"2026-04-20T07:45:45+00:00","by":"729fa027-7e7e-4b06-9602-f535c43824f0","backedBy":"","impersonatedBy":"","from":"","client":"server"},"t":1776671145003,"ct":1661250330891,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"d0c3250d-8f3f-4a6d-9495-bb0aa155f91b","text":"rd:Form Field Layout","v":"1da36b4e672fac98"},"created":{"at":"2026-05-12T09:40:09+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"ct":1778578809806,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.helpPlaceholder = params.form.getPlaceholder(params.field.name)\n    locals.hasHelp =\n      (locals.helpPlaceholder?.field?.settings?.help &&\n        (locals.helpPlaceholder.field.settings.help.text || locals.helpPlaceholder.field.settings.help.html)) ||\n      (locals.helpPlaceholder?.field?.settings?.helpExtended &&\n        (locals.helpPlaceholder.field.settings.helpExtended.text ||\n          locals.helpPlaceholder.field.settings.helpExtended.html))\n\n    locals.fixedControlFilter = ''\n  }\n\n  get controlName() {\n    const noRedesignControl = ['html', 'css', 'js', 'form', 'style', \n      'aeppic:code-design-controller',\n      'aeppic:code-control-controller',\n      'aeppic:code-form-controller',\n      'aeppic:code-layout-controller',\n      'aeppic:code-list-controller',\n       'workflow:install-locks',\n    ] \n\n    if (noRedesignControl.includes(params.field.controlName.toLowerCase())) {\n      return params.field.controlName\n    }\n\n    return 'rd:' + params.field.controlName\n  }\n}\n","css":"","name":"rd:Form Field Layout [DEV]","packages":[],"template":"<!-- {ro}{{params.readonly}} {{params.document.readonly}} -->\n<!-- <div class=\"text-blue-300\">\nfieldName {{ params.field.name }}\ncP {{params.placeholder}}\n</div> -->\n\n<section class=\"h-full flex xjustify-between flex-col gap-1 overflow-hidden justify-stretch\" :data-readonly=\"params.readonly\">\n  <div class=\"flex justify-between\">\n    <label :for=\"id('input_id_for_label')\" \n            class=\"font-medium flex-1 text-neutral-600  flex items-baseline gap-1\"\n    >\n      <span v-if=\"!params.field.controlParams?.hideLabel\" :title=\"Aeppic.translate(params.field.label)\">\n        {{ Aeppic.translate(params.field.label) }}\n      </span>\n\n      <span class=\"text-yellow-700 font-mono text-xs \">\n        {{params.field.name}}\n      </span>\n\n      <ae-control v-if=\"locals.hasHelp\"\n        name=\"rd:help\"\n        :field-name=\"params.field.name\"\n        :document=\"params.document\"\n        :form=\"params.form\"\n        :params=\"params.field.controlParams\"\n        :param-placeholder=\"locals.helpPlaceholder\" \n        :readonly=\"params.readonly\"\n      ></ae-control> \n    </label>\n\n    <ae-layout v-if=\"params.field.controlParams?.additionalButtonLayout\" \n              :layout-id=\"params.field.controlParams.additionalButtonLayout\"\n              :param-document=\"params.document\"\n              :param-field-name=\"params.field.name\"\n              :param-control-params=\"params.field.controlParams\"\n              @filter=\"locals.fixedControlFilter = $event\"\n              class=\"mx-1\"\n    ></ae-layout>\n\n    <ae-control \n      :name=\"'rd:' + params.field.controlName + '-add'\"\n      :field-name=\"params.field.name\"\n      :document=\"params.document\"\n      :form=\"params.form\"\n      :params=\"params.field.controlParams\"\n      :param-input-id=\"id('input_id_for_label--add')\"\n      :data-original-control-name=\"'rd:' + params.field.controlName + '-add'\"\n      :disable-default-control=\"true\"\n      :readonly=\"params.readonly\"\n      :param-fixed-control-filter=\"locals.fixedControlFilter\"\n    ></ae-control>\n  </div>\n\n  <ae-control \n    class=\"w-full     grow overflow-hidden\"\n    :name=\"controller.controlName\"\n    :field-name=\"params.field.name\"\n    :label=\"params.field.label\"\n    :document=\"params.document\"\n    :form=\"params.form\"\n    :params=\"params.field.controlParams\"\n    :param-confirm-remove=\"false\"\n    :param-input-id=\"id('input_id_for_label')\"\n    :data-original-control-name=\"'rd:' + params.field.controlName\"\n    :readonly=\"params.readonly\"\n    :param-debug=\"Aeppic.LocalStorage.getItem('debug')\"\n    :param-fixed-control-filter=\"locals.fixedControlFilter\"\n  ></ae-control>\n</section>  "},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"d1bd20c3-51fd-4cc4-838a-e646e43da89f","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-06-25T12:48:29+00:00","backedBy":"","by":"b7485498-f1f3-4ab1-87d1-9cb63ea890c8","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"d0c3250d-8f3f-4a6d-9495-bb0aa155f91b","text":"rd:Form Field Layout","v":"1da36b4e672fac98"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"04d81685aa94e38e"},"stamps":[],"t":1782391709970,"v":"1ff08ba87245de9c"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"d0c3250d-8f3f-4a6d-9495-bb0aa155f91b","text":"rd:Form Field Layout","v":"0dc998024bfa0e04"},"created":{"at":"2024-07-04T12:06:43+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1720094803860,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.helpPlaceholder = params.form.getPlaceholder(params.field.name) \n    locals.hasHelp = locals.helpPlaceholder?.field?.settings?.help && (locals.helpPlaceholder.field.settings.help.text || locals.helpPlaceholder.field.settings.help.html)\n\n    locals.fixedControlFilter = ''\n    locals.sectionTitle = ''\n  } \n\n  formBuilderAdd(data) {\n    const event = new CustomEvent('form-builder-add', { \n      bubbles: true,\n      detail: {\n        ...data\n      }\n    })\n\n    $refs.field.dispatchEvent(event)\n  }\n\n  formBuilderRemove(data) {\n    const event = new CustomEvent('form-builder-remove', { \n      bubbles: true,\n      detail: {\n        ...data\n      }\n    })\n\n    $refs.field.dispatchEvent(event)\n  }\n\n  formBuilderChange(data) {\n    const event = new CustomEvent('form-builder-change', { \n      bubbles: true,\n      detail: {\n        ...data\n      }\n    })\n\n    $refs.field.dispatchEvent(event)\n  }\n\n  showChangeLabelPopup(event) {\n    locals.sectionTitle = params.field?.placeholder?.label || ''\n    $refs.changeTitlePopup.show(event)\n  }\n}\n ","css":"","name":"rd:Form Field Layout [FORM BUILDER]","packages":[],"template":"<!-- {ro}{{params.readonly}} {{params.document.readonly}} -->\n<section ref=\"field\" class=\"h-full flex justify-between flex-col gap-1\" :data-readonly=\"params.readonly\">\n  <div class=\"flex justify-between\">\n    <label :for=\"id('input_id_for_label')\" \n            class=\"font-medium flex-1 text-neutral-600 dark:text-neutral-200 flex items-center gap-1 flex-wrap\"\n    >\n      <span>\n        {{ Aeppic.translate(params.field.label) }}\n      </span>\n\n      <ae-control v-if=\"locals.hasHelp\"\n        name=\"rd:help\"\n        :field-name=\"params.field.name\"\n        :document=\"params.document\"\n        :form=\"params.form\"\n        :params=\"params.field.controlParams\"\n        :param-placeholder=\"locals.helpPlaceholder\" \n        :readonly=\"params.readonly\"\n      ></ae-control> \n\n      <div class=\"flex-1 basis-full\"></div>\n\n\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-edit text-fuchsia-400\"\n            param-border=\"border border-fuchsia-600\"\n            class=\"text-base font-normal\"\n            :param-text=\"'Rename'\"\n            @selected=\"controller.showChangeLabelPopup($event)\"\n      ></ae-layout>\n\n      <ae-layout layout-id=\"12d87688-9cd6-4242-b206-74cab2de2bcc\"\n                  @add=\"controller.formBuilderAdd({ placeholder: params.field.placeholder, markdownText: $event.markdownText, fieldLabel: $event.fieldLabel, fieldOptions: $event.fieldOptions })\"\n                  :param-no-text=\"true\"\n                  :param-form=\"params.document\"\n      ></ae-layout>\n\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                 param-icon=\"far fa-trash text-fuchsia-400\"\n                 param-border=\"border border-fuchsia-600\"\n                 :param-text=\"'Delete'\"\n                 @selected=\"controller.formBuilderRemove({ placeholder: params.field.placeholder })\"\n      ></ae-layout>\n    </label>\n\n    <ae-layout v-if=\"params.field.controlParams?.additionalButtonLayout\" \n              :layout-id=\"params.field.controlParams.additionalButtonLayout\"\n              :param-document=\"params.document\"\n              :param-field-name=\"params.field.name\"\n              :param-control-params=\"params.field.controlParams\"\n              @filter=\"locals.fixedControlFilter = $event\"\n              class=\"mx-1\"\n    ></ae-layout>\n\n    <ae-control \n      :name=\"'rd:' + params.field.controlName + '-add'\"\n      :field-name=\"params.field.name\"\n      :document=\"params.document\"\n      :form=\"params.form\"\n      :params=\"params.field.controlParams\"\n      :param-input-id=\"id('input_id_for_label--add')\"\n      :data-original-control-name=\"'rd:' + params.field.controlName + '-add'\"\n      :disable-default-control=\"true\"\n      :readonly=\"params.readonly\"\n      :param-fixed-control-filter=\"locals.fixedControlFilter\"\n    ></ae-control>\n  </div>\n\n  <ae-control \n    class=\"w-full\"\n    :name=\"'rd:' + params.field.controlName\"\n    :field-name=\"params.field.name\"\n    :document=\"params.document\"\n    :form=\"params.form\"\n    :params=\"params.field.controlParams\"\n    :param-input-id=\"id('input_id_for_label')\"\n    :data-original-control-name=\"'rd:' + params.field.controlName\"\n    :readonly=\"params.readonly\"\n    :param-debug=\"Aeppic.LocalStorage.getItem('debug')\"\n    :param-fixed-control-filter=\"locals.fixedControlFilter\"\n  ></ae-control>\n</section>  \n\n<ae-popup ref=\"changeTitlePopup\">\n  <div class=\"border border-fuchsia-600 flex flex-col gap-2\">\n    <input type=\"text\" v-model=\"locals.sectionTitle\" class=\"w-full\" />\n\n    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                param-icon=\"far fa-save text-fuchsia-400\"\n                param-border=\"border border-fuchsia-600\"\n                class=\"text-base\"\n                :param-text=\"'Rename'\"\n                @selected=\"controller.formBuilderChange({ placeholder: params.field.placeholder, title: locals.sectionTitle })\"\n    ></ae-layout>\n  </div>\n</ae-popup>"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"5e48b52d-cc3b-446b-b9f5-3c35810c500c","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-05-12T10:24:04+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"d0c3250d-8f3f-4a6d-9495-bb0aa155f91b","text":"rd:Form Field Layout","v":"0dc998024bfa0e04"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"6f7da8ffe26eb120"},"stamps":[],"t":1747045444550,"v":"b660c08d8508e9cc"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"6c39f2cc-6059-42b2-8796-5c803899367c","text":"Form Layout (Experimental)","v":"c5b3367925a28107"},"created":{"at":"2022-08-23T10:02:45+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1661248965946,"data":{"applies":"","controller":"class Controller {\n  get theme() {\n    return {\n      ...params.theme,\n      ...{\n        field: {\n          ...params.theme?.field,\n          layoutId: 'd0c3250d-8f3f-4a6d-9495-bb0aa155f91b',\n        }\n      },\n    }\n  }\n}","css":"","name":"rd:Form Layout","packages":[],"template":"<div class=\"mx-auto max-w-5xl   h-full\">\n  <div class=\"bg-white dark:bg-slate-800 rounded-md p-4 xl:shadow  flex flex-col overflow-auto   h-full\">\n    <ae-form-section-next\n      :form=\"params.form\"\n      :document=\"params.document\"\n      :section=\"params.rootSection\"\n      :theme=\"controller.theme\"\n      layout-id=\"79b637c1-27d3-4bfc-83fe-353c824e1379\"\n      :readonly=\"params.readonly\"\n      class=\"     flex-1\"\n      :view=\"params.view\"\n      :data-document-id=\"params.document.id\"\n      :data-test=\"'layout' + '_' + layout.id\"\n    ></ae-form-section-next>\n  </div>\n</div>         "},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"efdb156e-9350-4cb3-8e00-4a69adec691b","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-04-02T06:31:55+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"6c39f2cc-6059-42b2-8796-5c803899367c","text":"Form Layout (Experimental)","v":"c5b3367925a28107"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"92fb40c2b2650a8d"},"stamps":[],"t":1775111515901,"v":"83066791b6fed1d7"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"efdb156e-9350-4cb3-8e00-4a69adec691b","text":"rd:Form Layout (Experimental)","v":"94516613a7913dca"},"created":{"at":"2024-07-04T12:05:30+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1720094730368,"data":{"applies":"","controller":"class Controller {\n  get theme() {\n    return {\n      ...params.theme,\n      ...{\n        field: {\n          ...params.theme?.field,\n          layoutId: '5e48b52d-cc3b-446b-b9f5-3c35810c500c',\n        }\n      },\n    }\n  }\n}","css":"","name":"rd:Form Layout (FORM BUILDER)","packages":[],"template":"<div class=\"mx-auto max-w-5xl\">\n  <div class=\"bg-white dark:bg-slate-800 rounded-md p-4 xl:shadow\">\n    <ae-form-section-next\n      :form=\"params.form\"\n      :document=\"params.document\"\n      :section=\"params.rootSection\"\n      :theme=\"controller.theme\"\n      layout-id=\"8072a74b-4894-42e2-b3c8-021635885831\"\n      :readonly=\"params.readonly\"\n    ></ae-form-section-next>\n  </div>\n</div>    "},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"38e54765-9dc4-4dc4-92c9-6f314052fe20","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-10-13T13:31:15+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"efdb156e-9350-4cb3-8e00-4a69adec691b","text":"rd:Form Layout (Experimental)","v":"94516613a7913dca"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"ecd0f331a87c236c"},"stamps":[],"t":1760362275798,"v":"065038bb7c84bb7b"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"efdb156e-9350-4cb3-8e00-4a69adec691b","text":"rd:Form Layout","v":"83066791b6fed1d7"},"created":{"at":"2026-05-12T09:33:44+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"ct":1778578424339,"data":{"applies":"","controller":"class Controller {\n  get theme() {\n    return {\n      ...params.theme,\n      ...{\n        field: {\n          ...params.theme?.field,\n          layoutId: 'd1bd20c3-51fd-4cc4-838a-e646e43da89f',\n        }\n      },\n    }\n  }\n}","css":"","name":"rd:Form Layout [DEV]","packages":[],"template":"<div class=\"bg-white rounded-md p-4 xl:shadow  flex flex-col overflow-auto   h-full\">\n  <ae-form-section-next :form=\"params.form\" :document=\"params.document\" :section=\"params.rootSection\"\n    :theme=\"controller.theme\" layout-id=\"4ff7b398-33fd-4ebe-af21-72777c01314e\" :readonly=\"params.readonly\"\n    class=\"     flex-1\" :view=\"params.view\" :data-document-id=\"params.document.id\"\n    :data-test=\"'layout' + '_' + layout.id\"></ae-form-section-next></div>"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"23f40ca9-b846-4117-9c59-693f6015e379","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-05-12T10:04:26+00:00","backedBy":"","by":"b7485498-f1f3-4ab1-87d1-9cb63ea890c8","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"efdb156e-9350-4cb3-8e00-4a69adec691b","text":"rd:Form Layout","v":"83066791b6fed1d7"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"2425c249243cad43"},"stamps":[],"t":1778580266753,"v":"d2290bfdee625a57"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"efdb156e-9350-4cb3-8e00-4a69adec691b","text":"rd:Form Layout","v":"83066791b6fed1d7"},"created":{"at":"2026-04-15T11:31:31+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"ct":1776252691140,"data":{"applies":"","controller":"class Controller {\n  get theme() {\n    return {\n      ...params.theme,\n      ...{\n        field: {\n          ...params.theme?.field,\n          layoutId: 'd0c3250d-8f3f-4a6d-9495-bb0aa155f91b',\n        }\n      },\n    }\n  }\n}","css":"","name":"rd:Form Layout not centered","packages":[],"template":"<div class=\"bg-white dark:bg-slate-800 rounded-md p-4 xl:shadow  flex flex-col overflow-auto   h-full\">\n  <ae-form-section-next\n    :form=\"params.form\"\n    :document=\"params.document\"\n    :section=\"params.rootSection\"\n    :theme=\"controller.theme\"\n    layout-id=\"79b637c1-27d3-4bfc-83fe-353c824e1379\"\n    :readonly=\"params.readonly\"\n    class=\"     flex-1\"\n    :view=\"params.view\"\n    :data-document-id=\"params.document.id\"\n    :data-test=\"'layout' + '_' + layout.id\"\n  ></ae-form-section-next>\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"5c8ac4b6-e1a9-4cdf-af03-553dbc4d80d5","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-04-15T11:32:14+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"efdb156e-9350-4cb3-8e00-4a69adec691b","text":"rd:Form Layout","v":"83066791b6fed1d7"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"initial"},"stamps":[],"t":1776252734632,"v":"663da252fc6ca215"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2025-02-18T12:28:04+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1739881684571,"data":{"applies":"","controller":"init() {\n  locals.field = params.form.getField('name')\n\n  watchParam('form', form => locals.field = form.getField('name'))\n} ","css":"","name":"rd:Form Layout only name control","packages":[],"template":"<div class=\"ae-form mx-auto max-w-5xl\">\n  <div class=\"ae-form-field bg-white dark:bg-slate-800 rounded-md p-4 xl:shadow\">\n    <label :for=\"id('input_id_for_label')\" \n            class=\"font-medium flex-1 text-neutral-600 dark:text-neutral-200 flex items-center gap-1 flex-wrap\"\n    >\n      <span>\n        {{ Aeppic.translate(locals.field.label || locals.field.name) }}\n      </span>\n    </label>\n\n    <ae-control name=\"rd:text\" :document=\"params.document\" field-name=\"name\" :readonly=\"params.readonly\"></ae-control>\n\n\n    <!-- <ae-form-field :document=\"params.document\" :field=\"locals.field\"\n                layout-id=\"d0c3250d-8f3f-4a6d-9495-bb0aa155f91b\"  \n    ></ae-form-field> -->\n          \n    </div>\n  </div>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"1b2f20e1-a8fe-410d-870b-c2defa293958","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-03-07T13:48:51+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"5270f1cf4f8ea52d"},"stamps":[],"t":1741355331803,"v":"51415fabca0abc4f"},{"id":"82ccae76-4329-4eac-92f8-85ba77bc362b","v":"b25801ec2352be48","previous":{"v":"9f56f889563ea99a"},"p":"8fb938a6-72d4-4582-9faa-0595ce1dcced","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"rd:Form Layout: Full Height Bpmn","applies":"","packages":[],"template":"<ae-control name=\"rd:bpmn\" \n            :document=\"params.document\"\n            field-name=\"prozess\"\n            class=\"h-full\"\n            :params=\"locals.fieldParams\"\n            :readonly=\"params.readonly\"\n></ae-control>","css":"","controller":"init() {\n  locals.fieldParams = params.form.getFieldControlParams('prozess')\n} \n "},"locks":[],"created":{"at":"2022-12-01T13:44:55+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-12-01T13:52:29+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1669902749237,"ct":1669902295029,"a_depth":3,"a":["apps","bd4df555-2c56-4a5f-82f0-7e4745372f51","8fb938a6-72d4-4582-9faa-0595ce1dcced"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"4dfdf094-32b3-41fe-a2eb-50a809c39d7d","text":"Form Section Layout (Experimental)","v":"fc5496454d5dc191"},"created":{"at":"2022-11-03T08:46:24+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1667465184442,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.visibleParagraphs = []\n    locals.document = null\n    locals.form = null\n    locals.theme = null\n    locals.readonly = null\n\n    locals.allItemsHidden = false\n\n    locals.headerClassesByLevel = {\n      1: 'mt-6 mb-4 text-2xl font-semibold m-auto w-max',\n      2: 'mt-4 mb-2 text-xl font-semibold',\n      3: 'mt-4 mb-2 text-lg font-semibold',\n      4: 'mt-4 mb-2 text-base font-semibold',\n      5: 'mt-4 mb-2 text-sm font-semibold',\n      6: 'mt-4 mb-2 text-xs font-semibold',\n    }\n\n    watchParam('paragraphs', () => {\n      this.scheduleUpdate()\n    })\n    watchParam('document', () => {\n      this.scheduleUpdate()\n    })\n    watchParam('form', () => {\n      this.scheduleUpdate()\n    })\n    watchParam('theme', () => {\n      this.scheduleUpdate()\n    })\n    watchParam('readonly', () => {\n      this.scheduleUpdate()\n    })\n\n    this.scheduleUpdate()\n  }\n\n  scheduleUpdate() {\n    this.counter += 1\n\n    if (this.scheduledUpdate) {\n      return\n    }\n\n    this.scheduleUpdated = Aeppic.nextRenderPass(() => {\n      this.scheduledUpdate = null\n\n      locals.document = params.document\n      locals.form = params.form\n      locals.readonly = params.readonly\n      locals.theme = params.theme\n      this._updateVisibleParagraphs(params.paragraphs)\n      this._updateAllItemsHidden(params.paragraphs)\n\n    })\n  }\n\n\n  _updateVisibleParagraphs(paragraphs) {\n    locals.visibleParagraphs = paragraphs.filter(paragraph => paragraph.items.length && paragraph.isVisible)\n  }\n\n\n  _updateAllItemsHidden(paragraphs) { \n    locals.allItemsHidden = paragraphs.every(paragraph => \n        paragraph.items.length === 0// || \n        // paragraph.items.every(item => item.type !== 'FIELD')\n      )\n  }\n} ","css":"._CSS {\n  display: flex;\n  flex-direction: column;\n}","name":"rd:Form Section Layout","packages":[],"template":"<!-- <template v-if=\"Aeppic.LocalStorage.getItem('debug')\">\n  <pre>\n  params.section.level {{params.section.level}}\n  locals.allItemsHidden {{locals.allItemsHidden }}\n  params.paragraphs.length {{ params.paragraphs.length }}\n  params.subSections.length {{ params.subSections.length }}\n  </pre>\n\n  p.isVisible\n  <div v-for=\"paragraph of params.paragraphs\">\n    {{ paragraph.items.length }} {{ paragraph.isVisible }}\n  </div>\n\n  theme\n  {{ params.theme }}\nlocals.allItemsHidden: {{ locals.allItemsHidden }}\nsectionTitle: {{params.section.title}} \n</template> -->\n<template v-if=\"!locals.allItemsHidden\">\n  <ae-header v-if=\"!params.hideTitle\"\n              :level=\"params.section.level\"\n            :class=\"locals.headerClassesByLevel[params.section.level]\"\n  >\n    {{ Aeppic.translate(params.section.title) }}\n  </ae-header>\n  <ae-form-paragraph v-for=\"(paragraph, paragraphIndex) of locals.visibleParagraphs\"\n    :paragraph=\"paragraph\"\n    :document=\"locals.document\"\n    :form=\"locals.form\"\n    :theme=\"locals.theme\"\n    :readonly=\"locals.readonly\"\n    class=\"      max-h-full\"\n    :class=\"{ 'flex-1': paragraphIndex === locals.visibleParagraphs.length - 1 }\"\n    >\n    <!-- <template #debug> \n      type: {{paragraph.type}} vis: {{ paragraph.isVisible}} ro: {{ paragraph.isReadonly}}\n      {{paragraph.items}}\n    </template>  -->\n\n    <!-- STANDALONE_CONTROL  -->\n    <template #control=\"{ document, form, control }\">\n      <div class=\"h-full w-full flex justify-between flex-col gap-1\">\n        <!-- <div class=\"flex justify-between\">\n          {{control.parameters}}\n        </div> -->\n        <ae-control v-if=\"control.isVisible\"\n                  :readonly=\"locals.readonly || control.isReadonly\"\n                  :class=\"control.classes\"\n                  :styles=\"control.styles\"\n                  :name=\"'rd:' + control.name.replace('core:', '')\" \n                  :document=\"document\"\n                  :form=\"form\"\n                  :params=\"control.parameters\"\n                  :theme=\"locals.theme\"\n                  :data-original-control-name=\"control.name\" \n        ></ae-control>\n      </div>\n    </template>\n  </ae-form-paragraph>\n</template>\n<ae-form-section-next v-for=\"section of params.subSections\"\n  v-if=\"section.isVisible\"\n  :section=\"section\"\n  :document=\"params.document\"\n  :form=\"params.form\"\n  :theme=\"params.theme\"\n  layout-id=\"79b637c1-27d3-4bfc-83fe-353c824e1379\"\n  :readonly=\"params.readonly\"\n  :data-subsection=\"section.index\"\n  :view=\"params.view\"\n  >\n</ae-form-section-next>\n<!-- === -->\n"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"79b637c1-27d3-4bfc-83fe-353c824e1379","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-11-05T13:04:29+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"4dfdf094-32b3-41fe-a2eb-50a809c39d7d","text":"Form Section Layout (Experimental)","v":"fc5496454d5dc191"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"2824f86c6da635a3"},"stamps":[],"t":1762347869058,"v":"0044974bb9a647f8"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"79b637c1-27d3-4bfc-83fe-353c824e1379","text":"rd:Form Section Layout","v":"0044974bb9a647f8"},"created":{"at":"2026-05-12T09:40:07+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"ct":1778578807427,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.visibleParagraphs = []\n    locals.document = null\n    locals.form = null\n    locals.theme = null\n    locals.readonly = null\n\n    locals.useTabs = (params.subSections || []).some(s => s.level === 1 && s.title)\n    locals.activeTabIndex = 0\n      locals.visibleSubSections = (params.subSections || []).filter(s => s.isVisible && s.title)\n\n        watchParam('subSections', (subs) => {\n    locals.visibleSubSections = (subs || []).filter(s => s.isVisible && s.title)\n    locals.useTabs = (subs || []).some(s => s.level === 1 && s.title)\n    if (locals.activeTabIndex >= locals.visibleSubSections.length) {\n      locals.activeTabIndex = 0\n    }\n  })\n\n\n    locals.allItemsHidden = false\n\n    locals.headerClassesByLevel = {\n      1: 'mt-6 mb-4 text-2xl font-semibold m-auto w-max',\n      2: 'mt-4 mb-2 text-xl font-semibold',\n      3: 'mt-4 mb-2 text-lg font-semibold',\n      4: 'mt-4 mb-2 text-base font-semibold',\n      5: 'mt-4 mb-2 text-sm font-semibold',\n      6: 'mt-4 mb-2 text-xs font-semibold',\n    }\n\n    watchParam('paragraphs', () => {\n      this.scheduleUpdate()\n    })\n    watchParam('document', () => {\n      this.scheduleUpdate()\n    })\n    watchParam('form', () => {\n      this.scheduleUpdate()\n    })\n    watchParam('theme', () => {\n      this.scheduleUpdate()\n    })\n    watchParam('readonly', () => {\n      this.scheduleUpdate()\n    })\n\n    this.scheduleUpdate()\n  }\n\n  scheduleUpdate() {\n    this.counter += 1\n\n    if (this.scheduledUpdate) {\n      return\n    }\n\n    this.scheduleUpdated = Aeppic.nextRenderPass(() => {\n      this.scheduledUpdate = null\n\n      locals.document = params.document\n      locals.form = params.form\n      locals.readonly = params.readonly\n      locals.theme = params.theme\n      this._updateVisibleParagraphs(params.paragraphs)\n      this._updateAllItemsHidden(params.paragraphs)\n\n    })\n  }\n\n\n  _updateVisibleParagraphs(paragraphs) {\n    locals.visibleParagraphs = paragraphs.filter(paragraph => paragraph.items.length && paragraph.isVisible)\n  }\n\n\n  _updateAllItemsHidden(paragraphs) { \n    locals.allItemsHidden = paragraphs.every(paragraph => \n        paragraph.items.length === 0// || \n        // paragraph.items.every(item => item.type !== 'FIELD')\n      )\n  }\n\n\n  getControlName(controlName) {\n    const noRedesignControl = ['html', 'css', 'js', 'form', 'style', \n      'aeppic:code-design-controller',\n      'aeppic:code-control-controller',\n      'aeppic:code-form-controller',\n      'aeppic:code-layout-controller',\n      'aeppic:code-list-controller',\n       'workflow:install-locks',\n    ] \n\n    if (noRedesignControl.includes(controlName.toLowerCase())) {\n      return controlName\n    }\n\n    return 'rd:' + controlName\n  }\n} ","css":"._CSS {\n  display: flex;\n  flex-direction: column;\n}","name":"rd:Form Section Layout [DEV]","packages":[],"template":"<template v-if=\"!locals.allItemsHidden\">\n  <ae-header v-if=\"!params.hideTitle && params.section.title\"\n             :level=\"params.section.level\"\n             :class=\"locals.headerClassesByLevel[params.section.level]\"\n  >\n    {{ Aeppic.translate(params.section.title) }}\n  </ae-header>\n  <ae-form-paragraph v-for=\"(paragraph, paragraphIndex) of locals.visibleParagraphs\"\n    :paragraph=\"paragraph\"\n    :document=\"locals.document\"\n    :form=\"locals.form\"\n    :theme=\"locals.theme\"\n    :readonly=\"locals.readonly\"\n    class=\"max-h-full\"\n    :class=\"{ 'xflex-1': paragraphIndex === locals.visibleParagraphs.length - 1 }\"\n  >\n    <template #control=\"{ document, form, control }\">\n      <div class=\"h-full w-full flex justify-between flex-col gap-1\">\n        <ae-control v-if=\"control.isVisible\"\n                    :readonly=\"locals.readonly || control.isReadonly\"\n                    :class=\"control.classes\"\n                    :styles=\"control.styles\"\n                    :name=\"controller.getControlName(control.name)\"\n                    :document=\"document\"\n                    :form=\"form\"\n                    :params=\"control.parameters\"\n                    :theme=\"locals.theme\"\n                    :data-original-control-name=\"control.name\"\n        ></ae-control>\n      </div>\n    </template>\n  </ae-form-paragraph>\n</template>\n\n<!-- TABBED subsections -->\n<template v-if=\"locals.useTabs && locals.visibleSubSections.length > 0\">\n  <div role=\"tablist\"\n       class=\"flex flex-wrap gap-1 border-b border-gray-200\"\n       data-test=\"section-tabs\">\n    <button v-for=\"(section, index) of locals.visibleSubSections\"\n            :key=\"section.index\"\n            type=\"button\"\n            role=\"tab\"\n            :aria-selected=\"index === locals.activeTabIndex\"\n            @click=\"locals.activeTabIndex = index\"\n            :class=\"[\n              'px-8 py-2 text-sm font-medium border-b-2 -mb-px transition-colors focus:outline-none',\n              index === locals.activeTabIndex\n                ? 'border-blue-500 text-blue-600'\n                : 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300'\n            ]\"\n            :data-test=\"'tab-' + section.index\"\n    >\n      {{ Aeppic.translate(section.title) || section.index }}\n    </button>\n  </div>\n\n  <ae-form-section-next v-for=\"(section, index) of locals.visibleSubSections\"\n    v-show=\"index === locals.activeTabIndex\"\n    :key=\"section.index\"\n    :section=\"section\"\n    :document=\"params.document\"\n    :form=\"params.form\"\n    :theme=\"params.theme\"\n    layout-id=\"4ff7b398-33fd-4ebe-af21-72777c01314e\"\n    :readonly=\"params.readonly\"\n    :data-subsection=\"section.index\"\n    :view=\"params.view\"\n    :hide-title=\"true\"\n  ></ae-form-section-next>\n</template>\n\n<!-- STACKED subsections -->\n<template v-else>\n  <ae-form-section-next v-for=\"section of params.subSections\"\n    v-show=\"section.isVisible\"\n    :section=\"section\"\n    :document=\"params.document\"\n    :form=\"params.form\"\n    :theme=\"params.theme\"\n    layout-id=\"4ff7b398-33fd-4ebe-af21-72777c01314e\"\n    :readonly=\"params.readonly\"\n    :data-subsection=\"section.index\"\n    :view=\"params.view\"\n  ></ae-form-section-next>\n</template>"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"4ff7b398-33fd-4ebe-af21-72777c01314e","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-06-25T12:50:47+00:00","backedBy":"","by":"b7485498-f1f3-4ab1-87d1-9cb63ea890c8","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"79b637c1-27d3-4bfc-83fe-353c824e1379","text":"rd:Form Section Layout","v":"0044974bb9a647f8"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"2bfe61669daf051d"},"stamps":[],"t":1782391847146,"v":"9fbeb17c53001c1e"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"79b637c1-27d3-4bfc-83fe-353c824e1379","text":"rd:Form Section Layout (Experimental)","v":"be48a4fc3a48d404"},"created":{"at":"2024-07-04T12:16:23+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1720095383490,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.allItemsHidden = false\n\n    locals.headerClassesByLevel = {\n      1: 'mt-6 mb-4 text-2xl font-semibold m-auto w-max',\n      2: 'mt-4 mb-2 text-xl font-semibold',\n      3: 'mt-4 mb-2 text-lg font-semibold',\n      4: 'mt-4 mb-2 text-base font-semibold',\n      5: 'mt-4 mb-2 text-sm font-semibold',\n      6: 'mt-4 mb-2 text-xs font-semibold',\n    }\n\n    locals.sectionTitle = ''\n    locals.paragraphText = ''\n\n \n    this._updateAllItemsHidden(params.paragraphs)  \n    watchParam('paragraphs', paragraphs => this._updateAllItemsHidden(paragraphs))\n  }\n\n\n  _updateAllItemsHidden(paragraphs) { \n    locals.allItemsHidden = paragraphs.every(paragraph => \n        paragraph.items.length === 0// || \n        // paragraph.items.every(item => item.type !== 'FIELD')\n      )\n  }\n\n  formBuilderAdd(data) {\n    const event = new CustomEvent('form-builder-add', { \n      bubbles: true,\n      detail: {\n        ...data\n      }\n    })\n\n    $refs.domNode.dispatchEvent(event)\n  }\n\n  formBuilderRemove(data) {\n    const event = new CustomEvent('form-builder-remove', { \n      bubbles: true,\n      detail: {\n        ...data\n      }\n    })\n\n    $refs.domNode.dispatchEvent(event)\n  }\n\n  formBuilderChange(data) {\n    const event = new CustomEvent('form-builder-change', { \n      bubbles: true,\n      detail: {\n        ...data\n      }\n    })\n\n    $refs.domNode.dispatchEvent(event)\n  }\n\n  showTextPopup(event, options) {\n    const { text, paragraphIndex } = options\n\n    // first remove what appears to be one empty line to the user\n    // and then remove surrounding backticks at the beginning and end\n    locals.paragraphText = text.markdown.replace(/```\\n```\\n/g, '\\n').replace(/```\\n?/g, '')\n    \n    $refs['changeTextPopup_' + paragraphIndex][0].show(event)\n  }\n}   ","css":"","name":"rd:Form Section Layout [FORM BUILDER]","packages":[],"template":"<!-- <template v-if=\"Aeppic.LocalStorage.getItem('debug')\">\n  <pre>\n  params.section.level {{params.section.level}}\n  locals.allItemsHidden {{locals.allItemsHidden }}\n  params.paragraphs.length {{ params.paragraphs.length }}\n  params.subSections.length {{ params.subSections.length }}\n  </pre>\n\n  p.isVisible\n  <div v-for=\"paragraph of params.paragraphs\">\n    {{ paragraph.items.length }} {{ paragraph.isVisible }}\n  </div>\n\n  theme\n  {{ params.theme }}\nlocals.allItemsHidden: {{ locals.allItemsHidden }}\nsectionTitle: {{params.section.title}} \n</template> -->\n\n<template xv-if=\"!locals.allItemsHidden\">\n  <ae-header\n    v-if=\"!params.hideTitle\"\n    :level=\"params.section.level\"\n    :class=\"locals.headerClassesByLevel[params.section.level]\"\n    class=\"flex gap-1 flex-wrap\"\n  >\n    {{ Aeppic.translate(params.section.title) }}\n    <div class=\"flex gap-1\">\n      <ae-layout\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        param-icon=\"far fa-edit text-sky-400\"\n        param-border=\"border border-sky-600\"\n        class=\"text-base font-normal\"\n        :param-text=\"'Rename'\"\n        @selected=\"$refs.changeTitlePopup.show($event)\"\n      ></ae-layout>\n      <ae-layout\n        v-if=\"params.section.index !== 1\"\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        param-icon=\"far fa-trash-alt text-sky-400\"\n        param-border=\"border border-sky-600\"\n        class=\"text-base font-normal\"\n        :param-text=\"'Delete'\"\n        @selected=\"controller.formBuilderRemove({ sectionIndex: params.section.index })\"\n      ></ae-layout>\n    </div>\n\n    <ae-popup ref=\"changeTitlePopup\">\n      <div class=\"border border-fuchsia-600 flex flex-col gap-2\">\n        <input type=\"text\" v-model.trim=\"locals.sectionTitle\" class=\"w-full\" />\n\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          param-icon=\"far fa-save text-fuchsia-400\"\n          param-border=\"border border-fuchsia-600\"\n          class=\"text-base\"\n          :param-text=\"'Rename'\"\n          @selected=\"controller.formBuilderChange({ sectionIndex: params.section.index, title: locals.sectionTitle })\"\n        ></ae-layout>\n      </div>\n    </ae-popup>\n  </ae-header>\n\n  <div v-for=\"(paragraph, paragraphIndex) of params.paragraphs\">\n    <ae-form-paragraph\n      v-if=\"paragraph.items.length && paragraph.isVisible\"\n      :paragraph=\"paragraph\"\n      :document=\"params.document\"\n      :form=\"params.form\"\n      :theme=\"params.theme\"\n      :readonly=\"params.readonly\"\n    >\n      <!-- <template #debug>  -->\n      <!-- lgt{{paragraph.items.length}} vi{{ paragraph.isVisible}} ro{{ paragraph.isReadonly}} -->\n      <!-- <pre v-show=\"false\" v-if=\"paragraph.type === 'TEXT'\">[not-supported] Type: {{paragraph.type}}</pre>  -->\n      <!-- </template>  -->\n\n      <template #field=\"{ document, form, field }\">\n        <!-- FIXME: params not existing. see aeppic-full -->\n        <!-- <ae-form-field v-if=\"field.isVisible\"\n          :field=\"field\"\n          :document=\"document\"\n          :form=\"form\"\n          :placeholder=\"field.placeholder\"\n          :params=\"{ ...field.controlParams, '_formBuilderParagraphKey': paragraph.key, '_formBuilderFieldKey': control.id }\"\n          :theme=\"params.theme\"\n          :readonly=\"params.readonly || field.isReadonly\"\n        >\n        </ae-form-field> -->\n        <!-- TODO: also add from ae-form-paragraph.vue -->\n        <!-- :style=\"getItemStyle(fields)\"> -->\n      </template>\n\n      <!-- SLOT: standalone-control -->\n      <template #control=\"{ document, form, control }\">\n        <div class=\"h-full w-full flex justify-between flex-col gap-1\">\n          <!-- <div class=\"flex justify-between\">\n            {{control.parameters}}\n          </div> -->\n\n          <ae-control\n            v-if=\"control.isVisible\"\n            :readonly=\"params.readonly || control.isReadonly\"\n            :class=\"control.classes\"\n            :styles=\"control.styles\"\n            :name=\"'rd:' + control.name.replace('core:', '')\"\n            :document=\"document\"\n            :form=\"form\"\n            :params=\"{ ...control.parameters, '_formBuilderParagraphKey': paragraph.key, '_formBuilderFieldKey': control.id  }\"\n            :theme=\"params.theme\"\n            :data-original-control-name=\"control.name\"\n          ></ae-control>\n        </div>\n      </template>\n\n      <template #text=\"{ document, form, text }\">\n        <div class=\"flex gap-2 items-center flex-wrap\">\n          <!-- <div class=\"italic\">Markdown Text</div> -->\n          <ae-layout\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-edit text-sky-400\"\n            param-border=\"border border-sky-600\"\n            class=\"text-base font-normal\"\n            :param-text=\"'Change text'\"\n            @selected=\"controller.showTextPopup($event, { text: text, paragraphIndex })\"\n          ></ae-layout>\n\n          <ae-layout\n            layout-id=\"12d87688-9cd6-4242-b206-74cab2de2bcc\"\n            @add=\"controller.formBuilderAdd({ paragraph: paragraph._unfilteredParagraph._paragraph, text: $event.text, fieldLabel: $event.fieldLabel, fieldOptions: $event.fieldOptions })\"\n            param-icon-color=\"text-lime-400\"\n            param-border=\"border border-lime-600\"\n            :param-form=\"document\"\n          ></ae-layout>\n          <ae-layout\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-trash-alt text-lime-400\"\n            param-border=\"border border-lime-600\"\n            class=\"text-base font-normal\"\n            :param-text=\"'Delete'\"\n            @selected=\"controller.formBuilderRemove({ paragraph: paragraph._unfilteredParagraph._paragraph })\"\n          ></ae-layout>\n        </div>\n\n        <span v-html=\"text.html\"></span>\n\n        <ae-popup :ref=\"'changeTextPopup_' + paragraphIndex\" :max-width=\"600\">\n          <div class=\"border border-fuchsia-600 w-[600px] flex flex-col gap-2\">\n            <textarea rows=\"20\" v-model=\"locals.paragraphText\" class=\"flex-1 border outline-none rounded-md p-1\" />\n    \n            <ae-layout\n              layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              param-icon=\"far fa-save text-fuchsia-400\"\n              param-border=\"border border-fuchsia-600\"\n              class=\"text-base\"\n              :param-text=\"'Change text'\"\n              @selected=\"controller.formBuilderChange({ paragraph: paragraph._unfilteredParagraph._paragraph, text: locals.paragraphText })\"\n            ></ae-layout>\n          </div>\n        </ae-popup>\n      </template>\n    </ae-form-paragraph>\n  </div>\n\n  <div v-if=\"params.section.index !== 0\" ref=\"section\" class=\"flex\">\n    <ae-layout\n      layout-id=\"12d87688-9cd6-4242-b206-74cab2de2bcc\"\n      @add=\"controller.formBuilderAdd({ sectionIndex: params.section.index, text: $event.text, fieldLabel: $event.fieldLabel, fieldOptions: $event.fieldOptions })\"\n      param-border=\"border border-slate-600\"\n      param-icon-color=\"text-slate-400\"\n      :param-form=\"params.document\"\n    ></ae-layout>\n\n    <ae-layout\n      layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n      param-icon=\"far fa-plus text-slate-400\"\n      param-border=\"border border-slate-600\"\n      :param-text=\"'Paragraph'\"\n      @selected=\"controller.formBuilderAdd({ sectionIndex: params.section.index })\"\n    ></ae-layout>\n  </div>\n</template>\n\n<ae-form-section-next\n  v-for=\"section of params.subSections\"\n  v-if=\"section.isVisible\"\n  :section=\"section\"\n  :document=\"params.document\"\n  :form=\"params.form\"\n  :theme=\"params.theme\"\n  layout-id=\"8072a74b-4894-42e2-b3c8-021635885831\"\n  :readonly=\"params.readonly\"\n>\n</ae-form-section-next>\n\n<div style=\"display: none;\" ref=\"domNode\"></div>\n"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"8072a74b-4894-42e2-b3c8-021635885831","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2025-04-17T14:13:06+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"79b637c1-27d3-4bfc-83fe-353c824e1379","text":"rd:Form Section Layout (Experimental)","v":"be48a4fc3a48d404"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"09a5ca5bd1b41222"},"stamps":[],"t":1744899186391,"v":"27bfc3d68f2617cc"},{"a":["apps","9302d29e-bf32-4350-a5fd-18b542d1b5db","d98e0ddd-7901-4cc6-864a-813fe8fb196a"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2022-05-12T14:23:36+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1761838112649,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Unternehmen: 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df',\n      InstallableApps: 'fd2c27b5-d778-4dea-b139-c7e51016fbd9',\n    }\n\n    locals.ready = false\n\n    locals.show = false\n    locals.search = ''\n    locals.inputValue = ''\n    locals.searchSort = [{ field: 'modified.at', descending: true }, { field: 'data.name' }, { field: 'id' }]\n    locals.limitSearchToDocument = null\n    locals.searchDocuments = []\n\n    locals.searchLoading = false\n    locals.searchLoadingIcon = false\n    locals.perfectSearchCompleted = false\n\n    locals.searchWaitingForUserOk = true\n\n    locals.prewarmDocuments = []\n\n    locals.formIdsToFind = []\n    // locals.formsFilter = ''\n    locals.availableFilters = { forms: [] }\n\n    if (params.showUi !== false) {\n      this.handler = (keyboardEvent) => {\n        if (keyboardEvent.ctrlKey && keyboardEvent.key === 'k') {\n          keyboardEvent.preventDefault()\n          keyboardEvent.stopPropagation()\n\n          this.show()\n        }\n      }\n\n      packages.window.addEventListener('keydown', this.handler)\n    }\n\n    this.debouncedSearchUpdate = Aeppic.debounce(() => this._updateSearch(), 250)\n\n    locals.options = [\n      // {\n      //   display: 'Alle Inhalte',\n      //   formIds: [],\n      // },\n      // {\n      //   display: 'Kunden',\n      //   formIds: ['8fc08287-dbcc-4e41-9d5d-28e4cd828943'],\n      // },\n      // {\n      //   display: 'Aufgaben',\n      //   formIds: ['0deb4864-cbb6-420c-99ee-337c7444ab24'],\n      // },\n      // {\n      //   display: 'Dateien',\n      //   formIds: ['dbee6e16-d63a-493c-bba6-505f79918f9f', 'a04c8913-db48-4e80-b20d-0f3cc17a778c'],\n      // },\n      // {\n      //   display: 'Projekte',\n      //   formIds: ['0b6a2b21-9425-466e-9e8d-57ec39cc95e1']\n      // },\n      // {\n      //   display: 'Termine',\n      //   formIds: ['dcf7ec7a-fde9-4dd2-b861-90a3a81ab01c']\n      // },\n      // {\n      //   onlySearchOnSelected: true,\n      //   divide: true,\n      //   display: 'Alle Kommentare',\n      //   formIds: ['cf155969-ede1-43a4-9b10-3a697b19db91']\n      // },\n    ]\n\n    await this._onCompanyUpdate(params.company)\n\n    watchParam('company', async (newCompany) => await this._onCompanyUpdate(newCompany))\n\n    this._generatePrewarmDocuments()\n  }\n\n  async _onCompanyUpdate(company) {\n    // no idea why this check is needed\n    if (company?.id === this.company?.id) {\n      return\n    }\n\n    this.company = await Aeppic.get(company)\n    await this._updateSearchOptions()\n\n    locals.selectedOptions = [locals.options[0]]\n\n    const pins = await Aeppic.new('4030802f-2b7a-42b7-9d80-0261a8926167', this.company.id)\n    pins.data = {\n      identifier: 'pins',\n      label: 'Meine Pins',\n      namedIcon: 'far fa-thumbtack',\n      layout: { id: '12ef5790-dfe1-478c-ab9d-c46496936f8f', v: '', text: '' },\n    }\n\n    const lastChanges = await Aeppic.new('4030802f-2b7a-42b7-9d80-0261a8926167', this.company.id)\n    lastChanges.data = {\n      identifier: 'my-last-changes',\n      label: 'Meine letzten Änderungen',\n      namedIcon: 'far fa-pen',\n      layout: { id: 'daec4d20-49ab-44a6-8989-11e93e16604b', v: '', text: '' },\n    }\n\n    const notifyEvents = await Aeppic.new('4030802f-2b7a-42b7-9d80-0261a8926167', this.company.id)\n    notifyEvents.data = {\n      identifier: 'my-notify-events',\n      label: 'Meine zu benachrichtigenden Ereignisse',\n      namedIcon: 'far fa-bells',\n      layout: { id: '8925a107-fe15-40a1-8ac4-0c1646050ec0', v: '', text: '' },\n    }\n\n    const myComments = await Aeppic.new('4030802f-2b7a-42b7-9d80-0261a8926167', this.company.id)\n    myComments.data = {\n      identifier: 'my-comments',\n      label: 'Meine letzten Kommentare',\n      namedIcon: 'far fa-comment',\n      layout: { id: '4ae0b80a-8a78-4419-858b-cdeeb84b6c83', v: '', text: '' },\n    }\n\n    locals.namedSearches = [\n      pins.cloneAsDocument(),\n      lastChanges.cloneAsDocument(),\n      notifyEvents.cloneAsDocument(),\n      myComments.cloneAsDocument(),\n    ]\n\n    locals.ready = true\n\n    $on('show', () => this.show())\n    // this.show()\n  }\n\n  async _generatePrewarmDocuments() {\n    const formIds = locals.formIdsToFind\n\n    locals.prewarmDocuments = await Promise.all(\n      formIds.map(async (formId) => {\n        const document = await Aeppic.new(formId, this.company)\n        return document.cloneAsDocument()\n      })\n    )\n  }\n\n  async selectedNamedSearch(namedSearch) {\n    params.debug && console.log({ namedSearch })\n\n    locals.selectedNamedSearch = namedSearch\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $refs.list.$emit('focus-entry')\n  }\n\n  async resetSelectedNamedSearch() {\n    locals.selectedNamedSearch = null\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $refs.input.focus()\n  }\n\n  onInput() {\n    locals.searchWaitingForUserOk = true\n    locals.searchDocuments = []\n  }\n\n  onEnter() {\n    locals.searchWaitingForUserOk = false\n    this.debouncedSearchUpdate()\n  }\n\n  async _updateSearch() {\n    const baseSearchParts = []\n    const wildcardSearchParts = []\n    const wildcardQueryParts = []\n    const perfectNameQueryParts = []\n    const searchFormIds = []\n\n    let searchRealm = ''\n    if (locals.limitSearchToDocument) {\n      searchRealm = locals.limitSearchToDocument.id\n    } else {\n      searchRealm = this.company.id\n    }\n    baseSearchParts.push(`a:${searchRealm}`)\n\n    let hasSelectedOptionsForms = false\n\n    if (locals.selectedOptions) {\n      for (const option of locals.selectedOptions) {\n        searchFormIds.push(...option.formIds)\n\n        const ids = option.formIds.map((id) => `f.id:${id}`).join(' OR ')\n\n        if (ids) {\n          baseSearchParts.push(`(${ids})`)\n\n          hasSelectedOptionsForms = true\n        }\n      }\n    }\n\n    const value = locals.inputValue?.trim()\n\n    if (value) {\n      const sanitized = value.replace(/[^A-zäüöß|0-9|\\s]/gi, '')\n      const sanitizedButAlsoWithDot = value.replace(/[^A-zäüöß|0-9|\\s\\.]/gi, '')\n\n      const parts = sanitized.split(' ').filter((part) => !!part)\n\n      if (parts) {\n        perfectNameQueryParts.push(sanitized)\n\n        wildcardQueryParts.push(...parts)\n\n        const partsForWildcard = sanitized\n          .split(' ')\n          .filter((part) => !!part)\n          .map((part) => `*${part}*`)\n          .join(' AND ')\n\n        wildcardSearchParts.push(`(${partsForWildcard})`)\n      }\n    }\n\n    if (!wildcardSearchParts.length) {\n      return\n    }\n\n    if (!hasSelectedOptionsForms && locals.formIdsToFind.length) {\n      baseSearchParts.push(`(${locals.formIdsToFind.map((formId) => `f.id:${formId}`).join(' OR ')})`)\n      searchFormIds.push(...locals.formIdsToFind)\n    }\n\n    const baseSearch = baseSearchParts.join(' AND ')\n    const wildCardSearch = `${baseSearch} AND ${wildcardSearchParts.join(' AND ')}`\n    // const perfectNameSearch = `${baseSearch} AND ${perfectNameQueryParts.join(' AND ')}`\n\n    locals.searchLoading = true\n    locals.searchLoadingIcon = true\n    locals.perfectSearchCompleted = false\n    // const timeout = Aeppic.setTimeout(() => {\n    //   locals.searchLoadingIcon = true\n    // }, 300)\n\n    locals.searchDocuments = []\n\n    const addToSearchDocuments = (docsToAdd) => {\n      const sortedDocumentsByFormId = new Map()\n      locals.options.forEach((option) => option.formIds.forEach((formId) => sortedDocumentsByFormId.set(formId, [])))\n      sortedDocumentsByFormId.set('other', [])\n\n      for (const document of docsToAdd) {\n        const formId = document.f.id\n\n        if (sortedDocumentsByFormId.has(formId)) {\n          sortedDocumentsByFormId.get(formId).push(document)\n        } else {\n          sortedDocumentsByFormId.get('other').push(document)\n        }\n      }\n\n      const sortedDocuments = []\n\n      for (const [formId, docs] of sortedDocumentsByFormId) {\n        sortedDocuments.push(...docs)\n      }\n\n      const alreadyFoundDocumentsSet = new Set(locals.searchDocuments.map((doc) => doc.id))\n\n      const documentsToAdd = sortedDocuments.filter((doc) => alreadyFoundDocumentsSet.has(doc.id) === false)\n\n     params.debug &&  console.log('_updateSearch')\n\n      locals.searchDocuments.push(...documentsToAdd)\n    }\n\n    const perfectDocuments = await Aeppic.find(\n      Aeppic.Query.descendants(searchRealm)\n        .forms(searchFormIds)\n        .where('data.name')\n        .startsWithOneOf(perfectNameQueryParts),\n      { size: 25, sort: locals.searchSort }\n    )\n    addToSearchDocuments(perfectDocuments)\n\n    locals.perfectSearchCompleted = true\n\n    // TODO: improv! This shall give the designs of the first row of results enough time to display.\n    //        But this only works, if the design lookups are already done by this point\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    const wildCardDocuments = await Aeppic.find(wildCardSearch, { size: 25, sort: locals.searchSort })\n    addToSearchDocuments(wildCardDocuments)\n\n    // Aeppic.clearTimeout(timeout)\n\n    locals.searchLoadingIcon = false\n    locals.searchLoading = false\n\n    return\n\n    // const [perfectDocuments, wildCardDocuments] = await Promise.all([\n    //   // Aeppic.find(perfectNameSearch, { size: 25, sort: locals.searchSort }),\n    //   Aeppic.find(Aeppic.Query.descendants(searchRealm).forms(searchFormIds).where('data.name').startsWithOneOf(perfectNameQueryParts), { size: 25, sort: locals.searchSort }),\n    //   // Aeppic.find(Aeppic.Query.descendants(searchRealm).forms(searchFormIds).where('data.name').containsOneOf(wildcardQueryParts), { size: 25, sort: locals.searchSort }),\n    //   Aeppic.find(wildCardSearch, { size: 25, sort: locals.searchSort }),\n    // ])\n\n    // const documents = [...[...perfectDocuments, ...wildCardDocuments].reduce((result, document) => {\n    //   if (result.has(document.id)) {\n    //     return result\n    //   }\n\n    //   result.set(document.id, document)\n\n    //   return result\n    // }, new Map()).values()]\n\n    // const sortedDocumentsByFormId = new Map()\n    // locals.options.forEach((option) => option.formIds.forEach((formId) => sortedDocumentsByFormId.set(formId, [])))\n    // sortedDocumentsByFormId.set('other', [])\n\n    // for (const document of documents) {\n    //   const formId = document.f.id\n\n    //   if (sortedDocumentsByFormId.has(formId)) {\n    //     sortedDocumentsByFormId.get(formId).push(document)\n    //   } else {\n    //     sortedDocumentsByFormId.get('other').push(document)\n    //   }\n    // }\n\n    // const sortedDocuments = []\n\n    // for (const [formId, docs] of sortedDocumentsByFormId) {\n    //   console.log(formId, docs)\n    //   sortedDocuments.push(...docs)\n    // }\n\n    // // console.log('_updateSearch', { perfectNameSearch, wildCardSearch, sortedDocuments })\n    // console.log('_updateSearch')\n    // locals.searchDocuments = sortedDocuments\n\n    // Aeppic.clearTimeout(timeout)\n\n    // locals.searchLoadingIcon = false\n    // locals.searchLoading = false\n  }\n\n  setSelectedOptions(option) {\n    locals.selectedOptions = [option]\n\n    this._updateSearch()\n\n    $refs.input.focus()\n  }\n\n  limitRealmToDocument(document) {\n    params.debug && console.log({ document })\n\n    locals.limitSearchToDocument = document\n    locals.inputValue = ''\n\n    this._updateSearch()\n\n    $refs.input.focus()\n  }\n\n  resetLimitSearchToDocument() {\n    locals.limitSearchToDocument = null\n\n    this._updateSearch()\n\n    $refs.input.focus()\n  }\n\n  async show() {\n    locals.inputValue = ''\n    locals.selectedOptions = [locals.options[0]]\n    locals.selectedNamedSearch = null\n    locals.show = true\n  }\n\n  get lastModifiedFilter() {\n    // return `(${locals.formsFilter}) modified.by:${Aeppic.Account.id}`.trim()\n    return `modified.by:${Aeppic.Account.id} AND ${locals.formIdsToFindAsQuery}`.trim()\n  }\n\n  navigateTo(doc, options) {\n    locals.show = false\n\n    if (params.showUi === false) {\n      $emit('selected', doc)\n    } else {\n      Aeppic.navigateTo(doc, options)\n    }\n  }\n\n  drillInto(doc, options) {\n    locals.show = false\n\n    if (params.showUi === false) {\n      $emit('selected', doc)\n    } else {\n      Aeppic.drillInto(doc, options)\n    }\n  }\n\n  // not everything might be found by the user. This defines the baseline of what the user might find\n  async _updateSearchOptions() {\n    // const presetAppsOrder = [\n    //   '9d6ee173-26fe-4472-a271-7667f717094e',\n    //   '59edbdbc-2cab-426a-bb42-6e57c5158e4f',\n    // ]\n\n    const companyChildren = await Aeppic.find(`p:${this.company.id}`, { size: 999 })\n    const uniqueCompanyChildrenForms = [...new Set(companyChildren.map((child) => child.f.id))]\n    const companyChildrenForms = await Promise.all(uniqueCompanyChildrenForms.map((childId) => Aeppic.get(childId)))\n\n    const companyApps = [\n      ...(await Promise.all(\n        companyChildrenForms.map((f) => Aeppic.get(f.a[f.a_forms.findIndex((a_form) => a_form === 'application-form')]))\n      )),\n      ...(await Aeppic.getAll([\n        '77ee8815-2c3a-4bb5-abd9-90541a545a24', // App: Bizpin\n        '14c27659-92d7-4b43-8c4f-25f4cceae591', // App: Kommentare\n      ])),\n    ]\n\n    const installableAppsDocument = companyChildren.find((child) => child.f.id === this.FORMS.InstallableApps)\n\n    // const sortedCompanyApps = []\n\n    // for (const appId of presetAppsOrder) {\n    //   const i = companyApps.findIndex(app => app && app.id === appId)\n\n    //   if (i !== -1) {\n    //     sortedCompanyApps.push(companyApps[i])\n    //     companyApps.splice(i, 1)\n    //   }\n    // }\n\n    const sortedCompanyApps = []\n\n    for (const app of companyApps) {\n      if (!app) {\n        continue\n      }\n\n      const alreadyAdded = !!sortedCompanyApps.find((a) => a && a.id === app.id)\n\n      if (alreadyAdded) {\n        continue\n      }\n\n      sortedCompanyApps.push(app)\n      // companyApps.splice(i, 1)\n    }\n\n    // sortedCompanyApps.push(...companyApps)\n\n    const formIds = new Set()\n    const topFilterOptions = []\n\n    const allCompanySearchFilters = []\n\n    await Promise.all(\n      sortedCompanyApps.map(async (app) => {\n        if (!app) {\n          return\n        }\n\n        allCompanySearchFilters.push(...(await Aeppic.getAll(app.data.searchFilters)))\n\n        app.data.searchableForms?.forEach((formRef) => formRef && formIds.add(formRef.id))\n      })\n    )\n\n    const sortedAllCompanySearchFilters = await Aeppic.sort(allCompanySearchFilters, [\n      { field: 'data.onlySearchOnSelected', descending: false },\n      { field: 'data.priority' },\n      { field: 'data.name' },\n      'id',\n    ])\n\n    // TODO: onlySearchOnSelectedWithAppCatalog\n\n    const mustOnlySearchOnSelected = (filter) => {\n      if (filter.data.onlySearchOnSelectedWithAppCatalog?.length) {\n        if (installableAppsDocument) {\n          const mustOnlySearchOnSelected = !!installableAppsDocument.data.catalogs.find((catalogRef) =>\n            filter.data.onlySearchOnSelectedWithAppCatalog.find(\n              (onlySearchOnCatalogRef) => onlySearchOnCatalogRef.id === catalogRef.id\n            )\n          )\n\n          return mustOnlySearchOnSelected\n        }\n      }\n    }\n\n    await Promise.all(\n      sortedAllCompanySearchFilters.map(async (filter) => {\n        if (!filter) {\n          return\n        }\n\n        params.debug && console.log(filter.data.name, mustOnlySearchOnSelected(filter), filter)\n\n        const onlySearchOnSelected = mustOnlySearchOnSelected(filter) ?? filter.data.onlySearchOnSelected\n\n        const previousTopFilterOption =\n          topFilterOptions.length >= 1 ? topFilterOptions[topFilterOptions.length - 1] : null\n\n        topFilterOptions.push({\n          identifier: filter.id,\n          display: filter.data.name,\n          formIds: filter.data.forms.map((f) => f.id),\n          onlySearchOnSelected: onlySearchOnSelected ?? false,\n          heading: onlySearchOnSelected ? 'Zum Suchen auswählen' : '',\n          divide: !onlySearchOnSelected && !!previousTopFilterOption?.heading,\n        })\n      })\n    )\n\n    params.debug && console.log(sortedAllCompanySearchFilters.map((x) => x.data.name))\n\n    locals.options = [\n      {\n        identifier: 'all',\n        display: 'Alle Inhalte',\n        formIds: [],\n      },\n      ...topFilterOptions,\n    ]\n\n    params.debug && console.log({ options: locals.options, formIds: [...formIds] })\n\n    // add form ids from search filters to searchable formIds\n    locals.options.forEach((option) => {\n      option.formIds?.forEach((formId) => formIds.add(formId))\n    })\n\n    const formIdsOfOptionsWithOnlySearchOnSelected = locals.options\n      .filter((option) => option.onlySearchOnSelected)\n      .map((o) => o.formIds)\n      .flat()\n\n    locals.formIdsToFind = [...formIds].filter((formId) => !formIdsOfOptionsWithOnlySearchOnSelected.includes(formId))\n    locals.formIdsToFindAsQuery = `(${locals.formIdsToFind.map((formId) => `f.id:${formId}`).join(' OR ')})`\n  }\n\n  // async updateAvailableForms() {\n  //   const company = await Aeppic.get(this.company.id)\n  //   const forms = await Aeppic.Preferences.getSettingForDocument('bizpin:search:forms', company)\n\n  //   if (!forms) {\n  //     locals.formsFilter = ''\n  //     locals.availableFilters.forms = []\n  //     return\n  //   }\n\n  //   locals.availableFilters.forms = forms\n\n  //   locals.formIdsToFind.push(...forms.map(form => form.id))\n  //   locals.formsFilter = forms.map(form => `f.id:${form.id}`).join(' OR ')\n  // }\n\n  close() {\n    if (locals.limitSearchToDocument) {\n      this.resetLimitSearchToDocument()\n    } else {\n      locals.show = false\n    }\n  }\n\n  destroy() {\n    packages.window.removeEventListener('keydown', this.handler)\n  }\n}\n","css":"","name":"rd:Global Search Btn","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"d4ce6dec568c3dc1"}],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<div class=\"flex\" v-if=\"params.showUi !== false\">\n  <ae-layout\n    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n    param-icon=\"far fa-search\"\n    param-text=\"Suchen...\"\n    @selected=\"controller.show()\"\n    class=\"w-full\"\n    param-classes=\"w-full rounded-md bg-secondary-50 dark:bg-secondary-700\"\n    param-key-hint=\"Strg K\"\n    :param-disabled=\"!locals.ready\"\n    param-border=\"border-secondary-200 dark:border-secondary-400\"\n  ></ae-layout>\n</div>\n\n<div\n  v-if=\"locals.show\"\n  class=\"fixed z-50 left-0 right-0 top-0 bottom-0 bg-gray-900/50 pt-20 pb-6\"\n  @click.stop=\"controller.close()\"\n  @keydown.escape=\"controller.close()\"\n>\n  <div class=\"absolute right-0 top-0 p-2\">\n    <ae-layout\n      layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n      param-icon=\"far fa-times\"\n      @selected=\"controller.close()\"\n    ></ae-layout>\n  </div>\n  <div\n    class=\"m-auto w-[700px] max-w-[90%] bg-white dark:bg-secondary-800 border rounded-md overflow-hidden max-h-full flex flex-col min-h-[400px]\"\n    @click.stop=\"$refs.popup?.close()\"\n  >\n    <div v-if=\"params.contextText\" class=\"bg-white dark:bg-secondary-800 flex items-center p-4\">\n      {{ params.contextText }}\n    </div>\n    <div class=\"bg-gray-100 dark:bg-secondary-700 flex gap-2 p-4 items-center\">\n      <ae-icon v-if=\"!locals.searchLoading\" class=\"far fa-search text-gray-500 text-lg\"></ae-icon>\n      <ae-icon\n        v-if=\"locals.searchLoading\"\n        :class=\"[locals.searchLoadingIcon ? 'opacity-100' : 'opacity-0']\"\n        class=\"far fa-circle-notch fa-spin text-lg text-gray-500 transition-opacity duration-500\"\n      ></ae-icon>\n\n      <input\n        class=\"w-full bg-gray-100 dark:bg-secondary-700 outline-none\"\n        v-model=\"locals.inputValue\"\n        @input=\"controller.onInput()\"\n        placeholder=\"Suche eingeben und mit ENTER bestätigen\"\n        v-focus\n        @keydown.down=\"$refs.list.$emit('focus-entry')\"\n        @keydown.enter=\"controller.onEnter()\"\n        ref=\"input\"\n      />\n\n      <ae-layout\n        layout-id=\"8bc795f2-7ac8-4b95-9019-0b27b178a36e\"\n        :param-options=\"locals.options\"\n        :param-selected-identifiers=\"[locals.selectedOptions[0]?.identifier]\"\n        @selected=\"controller.setSelectedOptions($event)\"\n        class=\"w-[250px]\"\n      ></ae-layout>\n\n      <!-- <button @click.stop=\"$refs.popup.toggle($event)\">\n      <ae-icon class=\"fa fa-filter text-gray-500\"></ae-icon>\n      </button> -->\n    </div>\n\n    <div v-if=\"locals.limitSearchToDocument\" class=\"flex flex-col p-2\">\n      <div class=\"flex gap-1\">\n        <div>Suche in</div>\n\n        <div class=\"flex\">\n          <ae-design name=\"title\" :document-id=\"locals.limitSearchToDocument.f.id\"></ae-design>\n          <span>:</span>\n        </div>\n\n        <ae-design name=\"title\" :document=\"locals.limitSearchToDocument\"></ae-design>\n\n        <div class=\"flex-1\"></div>\n\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          param-icon=\"far fa-chevron-left\"\n          param-text=\"Zurück zur globalen Suche\"\n          @selected=\"controller.resetLimitSearchToDocument()\"\n        ></ae-layout>\n      </div>\n    </div>\n    <div class=\"flex flex-col p-2 overflow-auto transition-all\" v-if=\"locals.inputValue\">\n      <!-- <div class=\"text-sm text-neutral-500 dark:text-neutral-300 mb-2 flex gap-2 items-center\">\n          <ae-icon class=\"fa fa-search\"></ae-icon>\n        <div>Ergebnisse</div>\n      </div> -->\n\n      <div v-if=\"locals.searchWaitingForUserOk\" class=\"text-gray-800 flex flex-col\">\n        <div class=\"text-gray-700\">Mit der ENTER-Taste Suche bestätigen</div>\n\n        <div class=\"flex justify-center\">\n          <ae-layout\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-magnifying-glass\"\n            param-text=\"Suchen\"\n            @selected=\"controller.onEnter()\"\n            :param-primary=\"true\"\n          ></ae-layout>\n        </div>\n      </div>\n      <template v-else>\n        <!-- <div v-if=\"locals.searchLoading\" class=\"flex justify-center\">\n          <ae-icon :class=\"[locals.searchLoadingIcon ? 'opacity-100' : 'opacity-0']\" class=\"far fa-circle-notch fa-spin text-lg text-gray-500 transition-opacity duration-500\"></ae-icon>\n        </div>  -->\n        <ae-list\n          v-if=\"locals.perfectSearchCompleted\"\n          list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n          :documents=\"locals.searchDocuments\"\n          @selected=\"controller.navigateTo($event)\"\n          :param-empty-text=\"locals.perfectSearchCompleted && !locals.searchLoading ? 'Keine Ergebnisse gefunden.' : ''\"\n          :param-divide=\"true\"\n          param-design=\"rd:search-card\"\n          :param-design-params=\"{ readonly: true }\"\n          ref=\"list\"\n          @focus-out=\"$refs.input.focus()\"\n          @button-right=\"controller.limitRealmToDocument($event)\"\n        ></ae-list>\n      </template>\n    </div>\n    <div v-else-if=\"!locals.selectedNamedSearch\" class=\"p-2 overflow-auto\">\n      <!-- NOTE: the key is nescessary here because after the results ae-list is rendered once some of the namedSearches will not be correctly passed down -->\n      <!--      This is a platform bug. -->\n      <ae-list\n        :key=\"id(!!locals.inputValue)\"\n        list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n        :documents=\"locals.namedSearches\"\n        :watch=\"false\"\n        :param-no-watch=\"true\"\n        @selected=\"controller.selectedNamedSearch($event)\"\n        :param-divide=\"true\"\n        param-design=\"rd:search-card\"\n        :param-design-params=\"{ readonly: true, disableButtonRight: true, useDocumentIcon: true }\"\n        ref=\"list\"\n        @focus-out=\"$refs.input.focus()\"\n      ></ae-list>\n    </div>\n    <div v-else-if=\"locals.selectedNamedSearch\" class=\"overflow-auto\">\n      <div class=\"flex gap-1 items-center my-4\">\n        <ae-design name=\"rd:icon\" :document=\"locals.selectedNamedSearch\"></ae-design>\n        <ae-design name=\"title\" :document=\"locals.selectedNamedSearch\"></ae-design>\n        <div class=\"flex-1\"></div>\n\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          param-icon=\"far fa-chevron-left\"\n          param-text=\"Zurück zur globalen Suche\"\n          @selected=\"controller.resetSelectedNamedSearch()\"\n        ></ae-layout>\n      </div>\n\n      <ae-layout\n        :layout-id=\"locals.selectedNamedSearch.data.layout.id\"\n        :params=\"{ company: params.company, formIdsToFind: locals.formIdsToFind, formIdsToFindAsQuery: locals.formIdsToFindAsQuery }\"\n        ref=\"list\"\n        @selected=\"controller.drillInto($event, arguments[1])\"\n        @focus-out=\"controller.resetSelectedNamedSearch()\"\n      ></ae-layout>\n    </div>\n\n    <div class=\"flex-1\"></div>\n    <div class=\"border-t p-2 flex items-center gap-1\">\n      <ae-layout layout-id=\"9fdb8db1-ffb9-4e5a-ac0a-90d73f80b167\" param-icon=\"far fa-arrow-down\"></ae-layout>\n      <ae-layout layout-id=\"9fdb8db1-ffb9-4e5a-ac0a-90d73f80b167\" param-icon=\"far fa-arrow-up\"></ae-layout>\n      <div class=\"text-xs text-neutral-500 dark:text-neutral-300 mr-4\">zum navigieren</div>\n\n      <ae-layout\n        layout-id=\"9fdb8db1-ffb9-4e5a-ac0a-90d73f80b167\"\n        param-icon=\"far fa-reply fa-flip-vertical\"\n      ></ae-layout>\n\n      <div class=\"text-xs text-neutral-500 dark:text-neutral-300 mr-4\">zum auswählen</div>\n\n      <ae-layout layout-id=\"9fdb8db1-ffb9-4e5a-ac0a-90d73f80b167\" param-text=\"ESC\"></ae-layout>\n\n      <div class=\"text-xs text-neutral-500 dark:text-neutral-300 mr-4\">zurück/zum schließen</div>\n    </div>\n\n    <!-- <div class=\"mt-4 flex flex-col p-2\" v-else>\n      <div class=\"text-sm text-neutral-500 dark:text-neutral-300 mb-2 flex gap-2 items-center\">\n        <ae-icon class=\"fa fa-history\"></ae-icon>\n        <div>Zuletzt von mir geändert</div>\n      </div>\n\n      <ae-list list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                :root-document-id=\"params.company.id\"\n                query-id=\"71d5633a-9dbd-4c96-b6e0-1c6ffc5ef0f1\"\n                :search-options=\"{ size: 5 }\"\n                :sort=\"{ field: 'modified.at', descending: true }\"\n                :filter=\"controller.lastModifiedFilter\"\n                @selected=\"controller.navigateTo($event)\"\n                :param-divide=\"true\"\n                param-design=\"rd:search-card\"\n                :param-design-params=\"{ readonly: true }\"\n                ref=\"list\"\n                @focus-out=\"$refs.input.focus()\"\n                @button-right=\"controller.limitRealmToDocument($event)\"\n\n      ></ae-list>\n    </div> -->\n\n    <!-- <ae-popup ref=\"popup\">\n      <div class=\"flex-col\">\n        <div class=\"bg-gray-100 p-2 min-w-[100px]\">\n          Filter\n        </div>\n        <div class=\"p-2\">\n          TODO\n        </div>\n      </div>\n    </ae-popup> -->\n  </div>\n\n  <ae-list\n    v-show=\"false\"\n    list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n    :documents=\"locals.prewarmDocuments\"\n    :watch=\"false\"\n    param-design=\"rd:search-card\"\n    :suspend=\"true\"\n  ></ae-list>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"896c9789-d13f-4fdc-9b30-9b1d6df4a08b","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-03-12T14:19:59+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"d98e0ddd-7901-4cc6-864a-813fe8fb196a","previous":{"v":"e2178e2b21896341"},"stamps":[],"t":1773325199382,"v":"052302d9b4408dd2"},{"a":["system","lists","e476f910-4a94-40a9-b815-dc5935b4b822"],"a_depth":3,"a_forms":["system-folder-form","folder","list-form"],"created":{"at":"2025-11-18T09:25:04+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1763457904336,"data":{"applies":"","controller":"class Controller {\n/////////////////////////////////////\n//\n//  Layers is an array consisting of objects with the following fields:\n//  \n//  This is for your custom layout:\n//  layout: {\n//            id: 'Your Custom Layout Id', \n//            params: {The params you want in your custom layout.},\n//          } \n//  groupFunction: (async) (document) => {GroupKey}\n//  sortGroupFunction: (async) (GroupKey[]) => (GroupKey[])\n//  \n//  \n//  For the last layer (the actual list) use an object like this:\n//  \n//  list: {\n//            id: 'The Id of the List you want to use.', \n//            params: {The params you want in your final list.},\n//          } \n//  \n//  \n//  \n//  \n//  \n//  \n//  \n//  \n/////////////////////////////////////\n  async init() {\n    locals.DOCUMENTS = {\n      masterList: '922e8251-6e60-45a4-9df6-3d434363ac01',\n      defaultVerticalGroupedListLayout: 'f67a5e19-1dba-40c2-88f3-90b924837899',\n    }\n\n\n    if (!Array.isArray(params.layers) || params.layers.length === 0) {\n      throw new Error(\"You must configure at least one layer\")\n    }\n\n    const layers = [...params.layers]\n    locals.layer = layers.shift()\n    locals.layers = layers\n\n    locals.groups = []\n    locals.isLastLayer = locals.layers.length === 0\n\n\n    if (!locals.isLastLayer) {\n      locals.groups = await this.getGroups(params.documents, locals.layer)\n\n      watchParam('documents', async (documents) => {\n        locals.groups = await this.getGroups(documents, locals.layer)\n      })\n    }\n  }\n\n  async getGroups(documents, layer) {\n    const groupFunction = layer.groupFunction\n\n    if (!groupFunction || typeof groupFunction !== 'function') {\n      throw new Error('Provide a groupFunction')\n    }\n\n    let keys = await Promise.all(documents.map(async (document) => {\n      return await groupFunction(document)\n    }))\n\n    let groups = {}\n\n    for (let i = 0; i < documents.length; i++)  {\n      const key = keys[i]\n      if (!groups[key]) {\n        groups[key] = [] \n      }\n      groups[key].push(documents[i])\n    }\n    \n    const sort = layer.sortGroupFunction\n    if (typeof sort === 'function') {\n      return await sort(groups)\n    }\n\n    return groups\n  }\n}","css":"","name":"rd:Grouped","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<ae-list\n  v-if=\"locals.isLastLayer\"\n  :list-id=\"locals.layer.list?.id || locals.DOCUMENTS.masterList\"\n  :params=\"locals.layer.list?.params\"\n  :documents=\"params.documents\"\n  :sort=\"params.list?.sort\"\n  class=\"size-full\"\n  :class=\"locals.layer.list?.classes\"\n  v-on=\"$listeners\"\n></ae-list>\n<ae-layout\n  v-else\n  :layout-id=\"locals.layer.layout.id || locals.DOCUMENTS.defaultVerticalGroupedListLayout\"\n  :params=\"{...locals.layer.layout.params, layers: locals.layers, groups: locals.groups}\"\n  class=\"size-full\"\n  v-on=\"$listeners\"\n></ae-layout>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"daafafaf-e40a-4837-adcb-75bd25f67143","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-11-19T10:55:46+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"e476f910-4a94-40a9-b815-dc5935b4b822","previous":{"v":"eb1dc1f9abbd7591"},"stamps":[],"t":1763549746462,"v":"43cb5839f264038e"},{"id":"6b954487-ceaa-4f19-aab6-5a7b23a74b63","v":"78407bfadc2862e5","previous":{"v":"52f7a263c2332124"},"p":"007eb0e3-8b9a-4516-bba4-41372ebd7c42","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:Height limited Empfänger Form Field Layout","applies":"","template":"<div class=\"ae-form-field p-4 h-full flex flex-col gap-1 overflow-hidden\">\n  <label :for=\"id('input_id_for_label')\" \n          class=\"font-medium text-neutral-600 dark:text-neutral-200 flex items-center gap-1\"\n          >\n    <span>\n    Empfänger\n    </span>\n  </label>\n\n  <!--  add readonly here to prevent receiver removal-->\n  <ae-control name=\"rd:ref\" \n            :data-readonly=\"params.document.data.versendet\"\n            :document=\"params.document\"\n            field-name=\"empfaenger\"\n            :params=\"{ \n              ...params.form.getFieldControlParams('empfaenger'), \n              useScroller: true,\n              scrollerHeight: 36,\n            }\"\n            class=\"flex-1 h-0\"\n            :readonly=\"params.document.data.versendet\"\n  ></ae-control>\n</div> ","css":"","controller":"","packages":[]},"locks":[],"created":{"at":"2024-08-29T10:35:17+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-12-19T15:51:27+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1734623487502,"ct":1724927717306,"a_depth":3,"a":["apps","f416e371-07cc-4987-a6de-5934ef5ff3e4","007eb0e3-8b9a-4516-bba4-41372ebd7c42"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","144e85c0-d7f9-4b20-8928-be30f0c78bda","647b2571-aea1-4247-8adb-b43bb4c94afc"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2024-11-21T15:05:57+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1732201557587,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Fee: 'b84eed9f-0ab5-4b17-9aab-af6aa9a7b318',\n    }\n\n    locals.visible = false\n    locals.fee = null\n\n    const trackingIsEnabled = await Aeppic.Preferences.getSetting('bizpin:timetracking:enabled')\n    if (!trackingIsEnabled) {\n      return\n    }\n\n    locals.visible = await this._isTrackedTimeAdmin()\n\n    if (!locals.visible) {\n      return\n    }\n\n\n    watchParam('document', async doc => await this.findOrCreateFee(doc))\n\n    this.findOrCreateFee(params.document)\n  }\n\n  async findOrCreateFee(doc) {\n    const fee = await Aeppic.findOne(`p:${doc.id} f.id:${this.FORMS.Fee}`)\n\n    let ensuredFee = fee\n    if (!fee) { \n      const locks = await Aeppic.getAll(await Aeppic.Preferences.getSettingForDocument(`apps:0924db0f-7095-4b51-8966-bad1e45d68ec:employeeCostLocks`, params.document.a[0]))\n      const newFee = await Aeppic.new(this.FORMS.Fee, doc)\n\n      locks.forEach(lock => newFee.addLock(lock))\n\n\n      Aeppic.save(newFee)\n \n      ensuredFee = newFee\n    }\n\n    locals.fee = await Aeppic.get(ensuredFee)\n  }\n\n  async _isTrackedTimeAdmin() {\n    if (Aeppic.Account && Aeppic.Account.data.isAdmin) {\n      return true\n    }\n\n    const securityFolder = await this._getSecurityFolder()\n\n    const trackedTimeGroup = await Aeppic.get(securityFolder.data.trackedTimeGroup)\n\n    if (trackedTimeGroup) {\n      return Aeppic.findOne(`id:${Aeppic.Account.id} data.groups:${trackedTimeGroup.id}`)\n    }\n\n    return false\n  }\n\n  async _getSecurityFolder() {\n    if (!params.document || !params.document.a) {\n      return null\n    }\n\n    const securityFolder = await Aeppic.findOne(`a:${params.document.a[0]} AND f.id:81939b86-a48e-480e-afd1-cb2907568550`)\n    return securityFolder\n  }\n}","css":"","name":"rd:Honorar Management","packages":[],"template":"<div v-if=\"locals.visible\" class=\"border rounded-md bg-white p-2\">\n  <label>\n    Honorar Management\n  </label>\n\n  <ae-form  :document=\"locals.fee\"\n            layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n            :auto-save=\"true\"\n            :auto-save-after=\"100\"\n            :readonly=\"params.readonly\"\n  ></ae-form>\n  \n</div>     "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"7213891a-dc5d-4580-9dca-1bd0412f0b60","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2024-12-02T14:32:07+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"647b2571-aea1-4247-8adb-b43bb4c94afc","previous":{"v":"2902922da9af282a"},"stamps":[],"t":1733149927726,"v":"3f207a5338445b27"},{"id":"9fdb8db1-ffb9-4e5a-ac0a-90d73f80b167","v":"5efa1c3e6c1b2038","cloneOf":{"id":"80e59dec-29b1-45f1-8391-f5621cf9f0b2","v":"d5889d639b6adaa2","text":"Button"},"originalCloneOf":{"id":"80e59dec-29b1-45f1-8391-f5621cf9f0b2","v":"d5889d639b6adaa2","text":"Button"},"previous":{"v":"bae1c033d5f1b104"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"rd:Icon","applies":"","packages":[],"template":"<!-- text-gray-700 -->\n<button class=\"relative py-2 px-2\n              flex items-center\n              rounded-full bg-gray-200 dark:bg-slate-700\n              \"\n        :class=\"params.classes\"\n> \n  <ae-icon v-if=\"params.icon\" class=\"text-sm\" :class=\"params.icon\"></ae-icon>\n  <ae-design v-if=\"params.iconDesignDocumentId\" name=\"rd:icon\" :document-id=\"params.iconDesignDocumentId\"></ae-design>\n  <ae-icon v-if=\"params.iconRight\" :class=\"params.iconRight\"></ae-icon>\n  <div v-if=\"params.text\" class=\"text-[10px]\">{{params.text}}</div>\n\n  <div v-if=\"params.count\"\n    class=\"pointer-events-none absolute right-[2px] top-[2px] bg-gray-500 text-white rounded-full w-4 h-4 flex items-center justify-center\"\n    :class=\"[params.count <= 9 && 'text-[12px]', params.count <= 99 && 'text-[10px]', params.count >= 100 && 'text-[8px]']\"\n  >\n    <div class=\"font-bold\">\n      {{ params.count }}\n    </div>\n  </div> \n</button>\n  ","css":"","controller":""},"locks":[],"created":{"at":"2023-01-11T10:47:02+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2024-02-19T12:40:13+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1708346413603,"ct":1673434022513,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","fb822f2f-880c-4676-be8b-cc557e822bc4"],"a_depth":4,"a_forms":["folder","application-form","form-folder","form"],"created":{"at":"2024-03-27T13:31:05+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1711546273544,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      CostEstimateGuess: '5997797d-4d12-47d4-a311-f9115344cd04',\n      AssigneeRequestDocument: 'a9904076-b0a6-4ea3-8d3a-db0d1ba3e1cb',\n    }\n\n    locals.ready = false\n    locals.canEdit = false\n    locals.assigneRequestDocument = null\n    this.costEstimateKeys = [\n      'AppEnergyProjects_LeistungCostEstimateCalculated',\n      'AppEnergyProjects_LeistungCostEstimateGuess',\n    ]\n    locals.createdCostEstimateGuess = false\n    locals.costEstimateGuess = null\n    locals.costEstimateCalculated = null\n    locals.canEditCostEstimates = false\n\n    watchParam('documentId', async () => {\n      locals.createdCostEstimateGuess = false\n\n      await Promise.all([\n        this._setup(),\n        this._renewAssigneRequestDocument(),\n        this._updateCost(this.costEstimateKeys[0]),\n        this._updateCost(this.costEstimateKeys[1]),\n      ])\n    })\n\n    this.deleteHandler = () => {\n      locals.document = null\n    }\n\n    $on('delete', this.deleteHandler)\n\n    await Promise.all([\n      this._setup(),\n      this._renewAssigneRequestDocument(),\n      this._updateCost(this.costEstimateKeys[0]),\n      this._updateCost(this.costEstimateKeys[1]),\n    ])\n\n    locals.ready = true\n  }\n\n  async _updateCost(relationKey) {\n    if (!relationKey) {\n      throw new Error('Missing relationKey AppEnergyProjects_LeistungCostEstimate[...]')\n    }\n\n    if (this.costEstimateKeys.includes(relationKey) === false) {\n      throw new Error('Unsupported relationKey')\n    }\n\n    let doc = null\n    try {\n      doc = await Aeppic.resolve(params.documentId, relationKey)\n    } catch (error) {\n      // no relation document created yet\n    }\n\n    if (relationKey === this.costEstimateKeys[0]) {\n      locals.costEstimateCalculated = doc\n    } else if (relationKey === this.costEstimateKeys[1]) {\n      locals.costEstimateGuess = doc\n    } else {\n      console.error('unhandled')\n    }\n  }\n\n  async createCostEstimate() {\n    if (locals.createdCostEstimateGuess) {\n      return\n    }\n    locals.createdCostEstimateGuess = true\n\n    if (!locals.canEditCostEstimates) {\n      return\n    }\n\n    if (locals.costEstimateCalculated || locals.costEstimateGuess) {\n      return\n    }\n\n    const document = await Aeppic.get(params.documentId)\n\n    const costEstimateLocks = await Aeppic.getAll(\n      await Aeppic.Preferences.getSettingForDocument(\n        `apps:0924db0f-7095-4b51-8966-bad1e45d68ec:costEstimateLocks`,\n        document.a[0],\n      ),\n    )\n\n    const costEstimate = await Aeppic.new(this.FORMS.CostEstimateGuess, params.documentId)\n    costEstimateLocks.forEach((lock) => costEstimate.addLock(lock))\n    Aeppic.save(costEstimate)\n\n    locals.costEstimateGuess = costEstimate.cloneAsDocument()\n    await this._updateCost(this.costEstimateKeys[1])\n  }\n\n  async _renewAssigneRequestDocument() {\n    if (!params.documentId) {\n      locals.assigneRequestDocument = null\n      return\n    }\n\n    locals.assigneRequestDocument = await Aeppic.new(this.FORMS.AssigneeRequestDocument, params.documentId)\n  }\n\n  async _setup() {\n    if (params.documentId) {\n      locals.document = await Aeppic.edit(params.documentId)\n    } else if (params.document) {\n      if (Aeppic.isEditableDocument(params.document)) {\n        locals.document = params.document\n      } else {\n        locals.document = await Aeppic.edit(params.document)\n      }\n    } else {\n      locals.document = null\n    }\n\n    locals.canEdit = await Aeppic.canEdit(locals.document)\n    locals.canEditCostEstimates =\n      (await Aeppic.Commands.execute('845f8c83-d859-4d43-9043-9b9395b37939', params.documentId))?.value?.ok === true\n  }\n\n  async closeAssigneChangeDialog() {\n    $refs.dialog && $refs.dialog.close()\n\n    await this._renewAssigneRequestDocument()\n  }\n\n  async changeAssigneForAllTasks() {\n    const commandResult = await Aeppic.Commands.execute('e5450e16-f55f-41d8-b048-708ab8d5b98d', locals.document, {\n      assignee: locals.assigneRequestDocument.data.verantwortlich,\n    })\n\n    if (!commandResult.ok) {\n      console.error('Could not changeAssigneForAllTasks')\n    }\n\n    this.closeAssigneChangeDialog()\n  }\n}\n","css":"","name":"rd:Inline Leistungs Form","packages":[],"template":"<div v-if=\"locals.document\" class=\"flex flex-col overflow-x-hidden\">\n  <section class=\"flex items-center mb-1 gap-4 flex-wrap\">\n    <ae-design\n      name=\"rd:editable-title\"\n      :document=\"locals.document\"\n      class=\"text-neutral-600 dark:text-neutral-200\"\n    ></ae-design>\n    <div class=\"flex-1\"></div>\n\n    <ae-design\n    name=\"rd:timetracking-progress\"\n    :document=\"locals.document\"\n    :params=\"{ minWidth: '100%', hideTotals: true, durationEstimateField: 'beauftragteZeit', durationRelation: 'AppTimeTracking-StatisticsTotalDescendantsDuration' }\" \n    class=\"w-32\"\n    data-test=\"tracked-commissioned-time\"\n  ></ae-design> \n\n    <template v-if=\"locals.ready\">\n      <ae-layout\n        v-if=\"!locals.costEstimateGuess && locals.canEditCostEstimates\"\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        param-icon=\"far fa-euro-sign\"\n        param-title=\"Kosten (manuell) eintragen\"\n        param-border=\"border border-neutral-100\"\n        @selected=\"controller.createCostEstimate()\"\n        :param-disabled=\"locals.createdCostEstimateGuess || locals.costEstimateCalculated || locals.costEstimateGuess\"\n        data-test=\"createCostEstimate\"\n      ></ae-layout>\n      <div\n        v-if=\"locals.costEstimateCalculated\"\n        class=\"flex items-center border rounded-md border-neutral-100\"\n        title=\"Kosten (berechnet)\"\n        data-test=\"costEstimateCalculated\"\n        >\n        <ae-icon class=\"far fa-euro-sign\"></ae-icon>\n        <ae-icon class=\"far fa-computer\"></ae-icon>\n        <ae-design\n        class=\"pl-1\"\n        name=\"rd:number\"\n        :document=\"locals.costEstimateCalculated\"\n        :param-readonly=\"true\"\n        param-title=\"(berechnet) / Überschreibt manuelle Kosten\"\n        ></ae-design>\n      </div>\n      <div\n        v-if=\"locals.costEstimateGuess\"\n        class=\"flex items-center border rounded-md border-neutral-100 text-sm\"\n        title=\"Kosten (manuell)\"\n        data-test=\"costEstimateGuess\"\n      >\n        <ae-icon class=\"far fa-euro-sign\"></ae-icon>\n        <ae-icon class=\"far fa-user\"></ae-icon>\n        <ae-design\n          class=\"pl-1\"\n          name=\"rd:number\"\n          :document=\"locals.costEstimateGuess\"\n          :param-readonly=\"locals.costEstimateCalculated\"\n        ></ae-design>\n      </div>\n    </template>\n\n    <ae-layout\n      v-if=\"locals.canEdit\"\n      layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n      @selected=\"$refs.dialog.show()\"\n      param-text=\"Alle Aufgaben einem Verantwortlichen zuordnen\"\n      param-icon=\"far fa-user-plus\"\n      param-border=\"border\"\n      param-classes=\"text-xs\"\n      data-test=\"assignTasksToUser\"\n    ></ae-layout>\n  </section>\n\n  <div class=\"flex items-center gap-1 w-full overflow-x-hidden border rounded-md\">\n    <ae-list\n      :documents=\"locals.document.data.aufgaben\"\n      list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n      param-design=\"rd:card-inner\"\n      @selected=\"Aeppic.drillInto($event, arguments[1])\"\n      class=\"flex-1 overflow-hidden border-r border-r-neutral-100 p-1\"\n      :param-design-params=\"{ readonly: params.readonly }\"\n      param-empty-text=\"Diese Leistung hat keine Aufgaben.\"\n    ></ae-list>\n\n    <ae-layout\n      v-if=\"!params.readonly && locals.canEdit\"\n      layout-id=\"0ded34c5-1221-4511-af93-d897a79f1369\"\n      :params=\"{ document: locals.document, buttonLayoutId: '80e59dec-29b1-45f1-8391-f5621cf9f0b2', removeReferenceFromParentField: params.fieldName, buttonParams: { icon: 'far fa-times', title: 'Leistung inkl. aller Aufgaben löschen', classes: 'hover:text-red-500', border: 'border', disabled: params.readonly || !locals.canEdit }}\"\n    ></ae-layout>\n  </div>\n</div>\n\n<ae-dialog ref=\"dialog\" v-if=\"locals.assigneRequestDocument\">\n  <div slot=\"header\" class=\"flex justify-between items-center\">\n    <div>Verantworlichen für alle Aufgaben überschreiben</div>\n    <div>\n      <ae-layout\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        @selected=\"controller.closeAssigneChangeDialog()\"\n        param-icon=\"far fa-times\"\n        param-title=\"Abbrechen\"\n        param-border=\"border\"\n      ></ae-layout>\n    </div>\n  </div>\n  <div slot=\"body\">\n    <ae-form\n      layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n      :document=\"locals.assigneRequestDocument\"\n      :watch=\"false\"\n    ></ae-form>\n  </div>\n  <div slot=\"commands\" class=\"flex flex-end p-2\">\n    <ae-layout\n      layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n      @selected=\"controller.changeAssigneForAllTasks()\"\n      param-text=\"Verantworlichen überschreiben\"\n      param-icon=\"far fa-save\"\n      :param-primary=\"true\"\n    ></ae-layout>\n  </div>\n</ae-dialog>\n\n<ae-layout\n  layout-id=\"6ee77ae8-b2f6-4fce-8fbc-788a55d5f7da\"\n  ref=\"removeConfirmDialog\"\n  @delete=\"controller.removeReference($event)\"\n></ae-layout>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"586680e3-9456-4391-a265-dcde8995f49a","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2026-07-14T08:44:45+00:00","backedBy":"","by":"b7485498-f1f3-4ab1-87d1-9cb63ea890c8","client":"server","from":"","impersonatedBy":""},"p":"fb822f2f-880c-4676-be8b-cc557e822bc4","previous":{"v":"43850e67c385407e"},"stamps":[],"t":1784018685007,"v":"70b0c068224e4a16"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"7487988f-6580-45ce-ac84-14893a6876b2","text":"List Filter","v":"0141683e8643f105"},"created":{"at":"2023-08-31T07:58:25+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1693468705202,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.form = null\n    this.state = {\n      search: {\n        active: '',\n      },\n      sort: {\n        active: {\n          field: '',\n          descending: false,\n        },\n        options: [],\n        dropdownItems: [],\n      },\n      filters: {\n        active: [\n          // SELECT\n          // {\n          //   values: [{ display: 'Herr', value: 'MALE' }],\n          //   field: { #form.getField('fielName') }\n          // }\n          // SWITCH\n        ],\n        options: [],\n      },\n    }\n\n    this._updateFilterDebounced = Aeppic.debounce(\n      () => {\n        this.announceFilter()\n        this._persistState()\n      },\n      300,\n      this\n    )\n\n    locals.sort = this.state.sort\n    locals.filters = this.state.filters\n    locals.search = this.state.search\n    locals.view = {\n      search: true,\n    }\n\n    await this._initialize(params.listFormId)\n\n    watchParam('listFormId', async (listFormId) => await this._initialize(listFormId))\n\n    // await Aeppic.nextRenderPass()\n    // $refs.filters.open({ target: $refs.filterButton.$el })\n  }\n\n  async _initialize(listFormId) {\n    if (!listFormId) {\n      console.error('Missing listFormId')\n      return\n    }\n\n    let resolvedFormFromServer = false\n    // try to resolve without async so the list, where this filter is included, does not render twice\n    try {\n      this.form = Aeppic.Model.getMostRecentForm(listFormId)\n    } catch (e) {\n      this.form = await Aeppic.getForm(listFormId)\n      resolvedFormFromServer = true\n    }\n\n    if (!this.form && resolvedFormFromServer === false) {\n      this.form = await Aeppic.getForm(listFormId)\n    }\n\n    if (!this.form?.id) {\n      throw new Error('Missing form id. Cannot generate storageKey')\n    }\n\n    this._updateActiveSortByInitialSort()\n\n    const sortableFields = []\n    const filterableFields = []\n\n    for (const field of this.form.fields) {\n      const filterCheck = this._isFormFieldFilterable(field)\n      if (filterCheck.result) {\n        filterableFields.push(filterCheck)\n      }\n\n      const sortCheck = this._isFormFieldSortable(field)\n      if (sortCheck.result) {\n        sortableFields.push(sortCheck)\n      }\n    }\n\n    this.state.sort.options = sortableFields\n    this.state.sort.dropdownItems = [\n      ...this.state.sort.options.map((opt) => {\n        // console.log(opt, opt.field.name)\n\n        let iconByControl = ''\n\n        if (opt.placeholder.control?.name === 'email') {\n          iconByControl = 'far fa-at'\n        } else if (opt.placeholder.control?.name === 'url') {\n          iconByControl = 'far fa-globe'\n        } else if (opt.placeholder.control?.name === 'phone') {\n          iconByControl = 'far fa-phone fa-rotate-90'\n        }\n\n        return {\n          identifier: 'data.' + opt.field.name,\n          text: Aeppic.translate(opt.placeholder.label || opt.field.name),\n          icon: iconByControl,\n        }\n        // return { identifier: 'project', text: 'Info', icon: 'far fa-tasks' }\n      }),\n      // NOTE@rsch: removed on 30.06.25 - ideally we would not offer any sorting if nothing is configured. But this would break a lot of list sortings right now\n      // { identifier: 'created.at', text: 'Erstelldatum', icon: 'far fa-birthday-cake' },\n      // { identifier: 'modified.at', text: 'Änderungsdatum', icon: 'far fa-pen' },\n    ]\n\n    const sortFields = this._parseParamSortFields()\n\n    if (sortFields.includes('modified.at')) {\n      this.state.sort.dropdownItems.push({ identifier: 'modified.at', text: 'Änderungsdatum', icon: 'far fa-pen' })\n    }\n    if (sortFields.includes('created.at')) {\n      this.state.sort.dropdownItems.push({ identifier: 'created.at', text: 'Erstelldatum', icon: 'far fa-birthday-cake' })\n    }\n\n    this.state.filters.options = filterableFields\n\n    this._loadPersistedState()\n\n    this.announceFilter()\n    this.announceSort()\n  }\n\n  _loadPersistedState() {\n    if (!Aeppic.LocalStorage.isAvailable) {\n      return\n    }\n\n    const persisted = Aeppic.LocalStorage.getValue(this._storageKey)\n\n    if (!persisted) {\n      return\n    }\n\n    const state = {\n      sort: {\n        active: persisted.sort,\n      },\n      filters: {\n        active: [],\n      },\n    }\n\n    if (persisted.filters) {\n      for (const persistedFilter of persisted.filters) {\n        // restore pointer to field Object by fieldName of persisted\n        const option = this.state.filters.options.find((option) => option.field.name === persistedFilter.fieldName)\n\n        const filter = {\n          ...option,\n          values: persistedFilter.values,\n        }\n\n        if (filter.field) {\n          state.filters.active.push(filter)\n        }\n      }\n    }\n\n    if (state.filters.active) {\n      this.state.filters.active = state.filters.active\n    }\n    if (state.sort.active) {\n      this.state.sort.active = state.sort.active\n    }\n    params.debug && console.log({persisted, state})\n  }\n\n  _persistState() {\n    if (!Aeppic.LocalStorage.isAvailable) {\n      return\n    }\n\n    const state = {\n      sort: locals.sort.active,\n      filters: locals.filters.active.map((filter) => ({\n        fieldName: filter.field.name,\n        values: filter.values,\n      })),\n    }\n\n    Aeppic.LocalStorage.setValue(this._storageKey, state)\n  }\n\n  get _storageKey() {\n    if (params.storageKey) {\n      return params.storageKey\n    }\n\n    return `pref-user@layout=${layout.id}@form=${this.form.id}`\n  }\n\n  _updateActiveSortByInitialSort() {\n    // TODO: what about manual sorting?\n    // Currently one has NOT to use this Layout to make manual sorting possible\n\n    const sort = {\n      field: '',\n      descending: false,\n    }\n\n    // sort will be enriched by THIS controller to always include id-field.\n    //    This means, params.initialSort might be an array.\n    const initialSort = Array.isArray(params.initialSort) ? params.initialSort[0] : params.initialSort\n\n    if (initialSort) {\n      if (typeof initialSort === 'string') {\n        sort.field = initialSort\n      } else {\n        sort.field = initialSort.field\n        sort.descending = initialSort.descending\n      }\n    }\n\n    sort.field = sort.field || 'data.name'\n\n    this.state.sort.active = sort\n  }\n\n  updateSort() {\n    this.announceSort()\n    this._persistState()\n  }\n\n  announceSort() {\n    if (params.disableSort) {\n      return\n    }\n\n    const nullifiedDescending =\n      locals.sort.active.descending === '' || locals.sort.active.descending == null\n        ? null\n        : locals.sort.active.descending\n\n    const sort = [\n      {\n        field: locals.sort.active.field,\n        descending: nullifiedDescending,\n      },\n      { field: 'id' }, // always fallback to id\n    ]\n\n    $emit('sort', sort)\n  }\n\n  updateFilter() {\n    this._updateFilterDebounced()\n  }\n\n  announceFilter() {\n    if (params.disableFilter && params.disableSearch) {\n      return\n    }\n\n    const parts = []\n\n    for (const active of this.state.filters.active) {\n      const filters = active.values\n        .map((value) => this._buildNewFilterValue(active.field, value))\n        .filter((f) => f != null)\n\n      if (filters.length) {\n        // join these filters with OR because one single filter might have multiple values selected\n        //  example:  a user selected 3 status values from the status-field filter. But the status-field is a non-cardinality select field.\n        //            now we show the user all documents with any of those 3 status values.\n        parts.push(`(${filters.join(' OR ')})`)\n      }\n    }\n  \n    if (this.state.search.active) {\n      const searchParts = this.state.search.active\n        .trim()\n        .replace(/\\s{2,}/g, ' ')\n        .split(/\\s/)\n\n\n      for (const searchPart of searchParts) {\n      let searchQueryStringParts = []\n        searchQueryStringParts.push(`*${searchPart}*`)\n\n        // non-text values do not support wildcards\n        searchQueryStringParts.push(`${searchPart}`)\n\n        const search = `(${searchQueryStringParts.join(' OR ')})`\n        parts.push(search)\n      }\n    }\n\n    const filter = parts.join(' AND ')\n\n    params.debug && console.log('emitFilter [parts]', parts, '[filter]', filter)\n\n    $emit('filter', filter)\n  }\n\n  _buildNewFilterValue(field, filterValue) {\n    // remember to check for subTypes first, then fallback to types.\n    // this is because a subType switch can be of type number or string\n\n    const resultPrefix = `data.${field.name}`\n\n    params.debug && console.log('_buildNewFilterValue', resultPrefix, filterValue)\n\n    if (field.subType === 'select') {\n      // return `${resultPrefix}:\"${filterValue.value}\"`\n      return `${resultPrefix}:\"${filterValue}\"`\n    }\n\n    if (field.subType === 'date') {\n      params.debug && console.log('subType.date', { field, filterValue })\n\n      const fieldControlParams = this.form.getFieldControlParams(field.name)\n\n      if (fieldControlParams?.type === 'year-month') {\n        const { start, end } = filterValue\n        const paddedStart = Aeppic.DateTime.fromISO(start).startOf('month').minus({ days: 1 }).toFormat('yyyy-LL-dd')\n        const paddedEnd = Aeppic.DateTime.fromISO(end).endOf('month').toFormat('yyyy-LL-dd')\n\n        params.debug && console.log({ paddedStart, paddedEnd })\n\n        return `${resultPrefix}:[${paddedStart} TO ${paddedEnd}]`\n      } else {\n        // FIXME: not yet supported by Aeppic \"yyyy-LL-dd'T'HH:mm:ssZZ\"\n        // const start = filterValue.start ? Aeppic.DateTime.fromISO(filterValue.start).toFormat(\"yyyy-LL-dd\") : '*'\n        // const end = filterValue.end ? Aeppic.DateTime.fromISO(filterValue.end).toFormat(\"yyyy-LL-dd\") : '*'\n        const start = filterValue.start ? Aeppic.DateTime.fromISO(filterValue.start).toFormat('yyyy-LL-dd') : '*'\n\n        const end = filterValue.end ? Aeppic.DateTime.fromISO(filterValue.end).toFormat('yyyy-LL-dd') : start\n\n        params.debug && console.log({ start, end })\n\n        return `${resultPrefix}:[${start}/d TO ${end}+1d-1s]`\n      }\n    }\n\n    // if (field.type === 'number') {\n    //   // TODO: support less than and greater than\n    //   return filterValue.value\n    // }\n\n    if (field.type === 'boolean') {\n      if (filterValue === null) {\n        return nul;l\n      }\n      return `${resultPrefix}:${filterValue}`\n    }\n\n    if (field.type === 'object') {\n      if (field.subType === 'ref') {\n        if (filterValue.id) {\n          return `${resultPrefix}.id:${filterValue.id}`\n        }\n\n        return null\n      }\n    }\n  }\n\n  _isFormFieldSortable(field) {\n    const sortFields = this._parseParamSortFields()\n\n    if (sortFields.length && sortFields.includes(`data.${field.name}`) === false) {\n      return { result: false }\n    }\n\n    // NOTE: @rsch/2024-06-30: Sorting with refs should be working since Jan 22\n    // const fieldTypeIsObjectButNotRef = field.type === 'object' && field.subType !== 'ref'\n    // if (fieldTypeIsObjectButNotRef) {\n    //   return { result: false }\n    // }\n\n\n    const unsupportedControls = ['attachment']\n\n    const placeholder = this.form.getPlaceholder(field.name)\n\n    const isSortable =\n      placeholder && (!placeholder.control || unsupportedControls.includes(placeholder.control.name) === false)\n\n    return {\n      result: isSortable,\n      placeholder,\n      field,\n    }\n  }\n\n  _isFormFieldFilterable(field) {\n    const filterFields = this._parseParamFilterFields()\n\n    if (filterFields.length && filterFields.includes(`data.${field.name}`) === false) {\n      return { result: false }\n    }\n\n    const unsupportedSubTypes = ['image', 'address', 'geolocation', 'file', 'text', 'number']\n\n    if (unsupportedSubTypes.includes(field.subType)) {\n      return { result: false }\n    }\n\n    const unsupportedControls = ['attachment', 'mails']\n    const placeholder = this.form.getPlaceholder(field.name)\n\n    const isFilterable =\n      placeholder && (!placeholder.control || unsupportedControls.includes(placeholder.control.name) === false)\n\n    if (!isFilterable) {\n      return {\n        result: false,\n      }\n    }\n\n    const params = this.form.getFieldControlParams(field.name)\n\n    return {\n      result: isFilterable,\n      placeholder,\n      field,\n      params,\n    }\n  }\n\n  _parseParamFilterFields() {\n    if (!params.filterFields) {\n      return []\n    }\n\n    return params.filterFields.split(',')\n  }\n\n  _parseParamSortFields() {\n    if (!params.sortFields) {\n      return []\n    }\n\n    return params.sortFields.split(',')\n  }\n\n  // event methods\n  toggleFilter(event) {\n    const { filter, option } = event\n\n    // console.log(this.state.filters.options.find(o => o === filter))\n    const activeIndex = this.state.filters.active.findIndex((active) => active.field === filter.field)\n\n    if (activeIndex >= 0) {\n      const active = this.state.filters.active[activeIndex]\n\n      const valueIndex = active.values.findIndex((v, indexx) => {\n        if (typeof v === 'object') {\n          if ('value' in v) {\n            return v.value === option.value\n          }\n\n          return v.id === option.id\n        }\n\n        return v === option\n      })\n\n      if (valueIndex >= 0) {\n        active.values.splice(valueIndex, 1)\n\n        const removeEmptyFilterFromActives = active.values.length === 0\n        if (removeEmptyFilterFromActives) {\n          this.state.filters.active.splice(active, 1)\n        }\n      } else {\n        active.values.push(option)\n      }\n    } else {\n      this.state.filters.active.push({\n        field: filter.field,\n        values: [option],\n      })\n    }\n\n    this.updateFilter()\n  }\n\n  setFilter(event) {\n    const { filter, values } = event\n    params.debug && console.log('## => setFilter', values)\n\n    const sanitzedValues = values === null ? [] : values\n\n    if (Array.isArray(sanitzedValues) === false) {\n      throw new Error(`Provide array not ${typeof values}`)\n    }\n\n    // console.log(filter, values)\n\n    const option = {\n      field: filter.field,\n      values: sanitzedValues,\n    }\n\n    const activeIndex = this.state.filters.active.findIndex((active) => active.field === filter.field)\n\n    if (activeIndex >= 0) {\n      const extendDateField = filter.field.subType === 'date' && option.values[0]\n\n      if (extendDateField) {\n        option.values[0] = { ...this.state.filters.active[0].values[0], ...option.values[0] }\n      }\n\n      const hasNoValues =\n        option.values.length === 0 || (extendDateField && !option.values[0].start && !option.values[0].end)\n\n      if (hasNoValues) {\n        this.state.filters.active.splice(activeIndex, 1)\n      } else {\n        this.state.filters.active.splice(activeIndex, 1, option)\n      }\n    } else {\n      this.state.filters.active.push(option)\n    }\n\n    this.updateFilter()\n  }\n\n  resetSearchFilters() {\n    this.state.search.active = ''\n\n    this.updateFilter()\n  }\n\n  resetFilters() {\n    this.state.filters.active = []\n\n    this.updateFilter()\n  }\n\n  onSortSelected(sortDropdownItem) {\n    locals.sort.active.field = sortDropdownItem.identifier\n\n    this.updateSort()\n  }\n}\n","css":"._CSS-bar {\n  display: flex;\n  flex-wrap: wrap;\n  padding: var(--ae-space-1);\n}\n\n._CSS-sort {\n  margin-left: var(--ae-space-3);\n  display: flex;\n  flex: 1;\n}\n\n._CSS-filters {\n  margin-left: var(--ae-space-2);\n\n  display: flex;\n  align-items: center;\n}\n\n._CSS ._CSS-filter-button--active {\n  color: var(--ae-primary);\n}\n\n\n._CSS-popup {\n  max-height: 60vh;\n  overflow: auto;\n}","name":"rd:List Filter","packages":[],"template":"<div v-if=\"!params.disableSortFilter && (!params.disableSort || !params.disableFilter)\" \n    class=\"flex gap-2 bg-white border border-slate-200 rounded-md items-center\"\n    :data-test=\"'layout' + '_' + layout.id\"\n>\n\n  <div class=\"flex gap-1 bg-slate-50 p-1 rounded-l-md items-center\" v-if=\"!params.disableSort && $listeners.sort\">\n    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              :param-icon=\"locals.sort.active.descending ? 'far fa-sort-alpha-up-alt' : 'far fa-sort-alpha-down'\"\n              @selected=\"locals.sort.active.descending = !locals.sort.active.descending; controller.updateSort()\"\n              param-border=\"border-slate-200\"\n              param-title=\"Sortierung aufsteigend/absteigend\"\n              :param-disabled=\"!locals.sort.dropdownItems.length\"\n              data-test=\"sort-order-button\"\n    ></ae-layout>\n\n\n    <ae-layout layout-id=\"017828fa-4448-499d-bfaf-45ef6b470b43\"\n              :param-buttons=\"locals.sort.dropdownItems\"\n              :param-collapsed=\"true\"\n              :param-selected-identifier=\"locals.sort.active.field\"\n              @selected=\"controller.onSortSelected($event)\"\n              param-border=\"border\"\n              param-title=\"Sortierung\"\n              :param-disabled=\"!locals.sort.dropdownItems.length\"\n              data-test=\"sort-button\"\n    ></ae-layout>\n  </div>\n\n  <div class=\"flex gap-1 p-1\" v-if=\"!params.disableFilter && $listeners.filter\">\n    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              :param-icon=\"locals.filters.active.length ? 'fa fa-funnel-dollar text-amber-600' : 'far fa-filter'\"\n              param-border=\"border\"\n              param-title=\"Filter\"\n              :param-count=\"locals.filters.active.length\"\n              :param-disabled=\"!locals.filters.options.length\"\n              ref=\"filterButton\"\n              @selected=\"$refs.filters.toggle({ target: $refs.filterButton.$el })\"\n              data-test=\"filter-popup-button\"\n    ></ae-layout> \n  </div>\n\n  <template v-if=\"!params.disableSearch\"> \n    <!-- <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              param-icon=\"far fa-search\"\n              @selected=\"locals.view.search = true\"\n              v-if=\"!locals.view.search\"\n              class=\"p-1\"\n              param-title=\"Filtern nach Text\"\n              param-border=\"border\"\n    ></ae-layout> -->\n    <div xv-else class=\"flex w-full p-1\">\n      <!-- @keydown.esc.prevent=\"{ locals.view.search = false; controller.resetSearchFilters() }\" -->\n      <input    class=\"w-full outline-none bg-transparent flex-1 placeholder:italic\" \n                spellcheck=\"false\"\n                v-model=\"locals.search.active\" \n                @xblur=\"locals.view.search = false\" \n                @input=\"() => controller.updateFilter()\"\n                @keydown.esc.prevent=\"controller.resetSearchFilters()\"\n                v-focus=\"!!params.initialFocusSearch\"\n                ref=\"input\" \n                type=\"text\"\n                placeholder=\"Filtern nach Text\"\n                data-test=\"filter-input\"\n        >\n          <!-- <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              param-icon=\"far fa-times\"\n              @selected=\"{ locals.view.search = false; controller.resetSearchFilters() }\"\n          ></ae-layout> -->\n    </div>\n  </template>\n</div>\n\n<ae-popup ref=\"filters\" placement=\"bottom\">\n  <div class=\"max-h-[60vh] p-1 overflow-auto\" slot-scope=\"scope\">\n   <ae-layout     v-if=\"params.listFormId\"\n                  layout-id=\"30e5f4a0-a1fc-4af7-9e47-14b76caecf58\"\n                  :param-document=\"params.document\"\n                  :param-options=\"locals.filters.options\"\n                  :param-active=\"locals.filters.active\"\n                  :param-hide-path=\"true\"\n                  :param-list-form-id=\"params.listFormId\"\n                  @toggle=\"controller.toggleFilter($event)\"\n                  @set=\"controller.setFilter($event)\"\n                  @reset=\"controller.resetFilters()\"\n      ></ae-layout>\n  </div>\n</ae-popup>\n "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"98daed5e-24e9-4ef5-b10c-b4b658123513","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-05-05T12:36:48+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"7487988f-6580-45ce-ac84-14893a6876b2","text":"List Filter","v":"0141683e8643f105"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"ae3ef2c782ef73ca"},"stamps":[],"t":1777984608498,"v":"3252e5ceeb06b7e6"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2023-09-04T08:48:48+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1744290885037,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.ready = false  \n    // locals.modifiedFormForDisplay = null\n    // locals.filterSettingsByFilter = new Map()\n\n    // watchParam('options', (newOptions) => this._updateFilterSettings(newOptions) )\n\n    // this._updateFilterSettings(params.options) \n\n    await this._initializeTemporaryDocument(params.active)\n\n    // watchParam('active', async (active) => {\n    //   console.log('watchParam.active', active)\n    //   // this._updateTemporaryDocumentData(active)\n    // })\n\n    locals.ready = true \n  } \n\n  async _initializeTemporaryDocument(paramActive) {\n    locals.ready = false\n\n    locals.temporaryForm = null\n    locals.temporaryDocument = null\n\n    const selectorForm = await Aeppic.getForm(params.listFormId)\n\n    if (!selectorForm) {\n      throw new Error('Provide params.listFormId')\n    }\n\n    const temporaryForm = await Aeppic.buildTemporaryForm(selectorForm)\n\n    const parsedFormdown = await Aeppic.Parser.formdown(temporaryForm.data.definition)\n\n    // some fields need to be patched manually after the form is modified\n    const setFieldsToValue = {}\n\n    // make some fields cardinality to allow a user to select multiple filter arguments (e.g. \"show me documents with category A OR B\")\n    for (const fieldName in parsedFormdown.fields) {\n      const field = parsedFormdown.fields[fieldName]\n\n      field.tags.required = false\n\n      if (field.subType === 'select') {\n        field.cardinality = { max: 'n', min: '0' }\n        parsedFormdown.default[fieldName] = []\n      }\n\n\n      if (field.subType === 'date') {\n        const hasTimeFieldName = `${field.name}__hasTime`\n        const toFieldName = `${field.name}__to`\n\n        const unmodifiedPlaceholder = temporaryForm.getPlaceholder(field.name)\n\n        if (!unmodifiedPlaceholder) {\n          continue\n        }        \n\n        const placeholder = parsedFormdown.placeholders[unmodifiedPlaceholder.index]\n\n        if (!placeholder.control) {\n          placeholder.control = {}\n        }\n\n        field.cardinality = null\n        placeholder.control.name = 'datetime-range'\n        setFieldsToValue[fieldName] = ''\n\n        if (placeholder?.control?.parameters?.hasTime == null) {\n          placeholder.control = {\n            ...placeholder.control,\n            parameters: {\n              ...placeholder.control?.parameters,\n              hasTime: {\n                value: hasTimeFieldName\n              },\n            } \n          } \n  \n          parsedFormdown.default[hasTimeFieldName] = false\n\n          parsedFormdown.fields[hasTimeFieldName] = {\n            name: hasTimeFieldName,\n            cardinality: null,\n            defaultValue: true,\n            description: null,\n            filter: null,\n            required: false,\n            type: \"boolean\",\n            subType: \"switch\",\n            tags: {},\n            settings: { \"help\": { \"text\": \"\", \"html\": \"\" } }\n          }\n        }\n   \n        if (placeholder?.control?.parameters?.to == null) {\n          placeholder.control = {\n            ...placeholder.control,\n            parameters: {\n              ...placeholder.control?.parameters,\n              to: {\n                value: toFieldName,\n              }\n            }\n          }  \n\n          parsedFormdown.default[toFieldName] = ''\n\n          parsedFormdown.fields[toFieldName] = {\n            name: toFieldName,\n            cardinality: null,\n            defaultValue: \"\",\n            description: null,\n            filter: null,\n            required: false,\n            type: \"string\",\n            subType: \"date\",\n            tags: {},\n            settings: { \"help\": { \"text\": \"\", \"html\": \"\" } }\n          }\n        }\n      }\n    }\n      \n    locals.temporaryForm = await Aeppic.buildTemporaryForm(temporaryForm)\n    locals.temporaryForm._info = parsedFormdown\n    locals.temporaryForm._fields = Object.values(parsedFormdown.fields) \n\n    // FIXME: this is a hack to copy over the location/parent/ancestor chain of the current document\n    //        Fix by expand buildTemporaryEditableDocument to accept a parentDocument as a parameter\n    // NOTE: do NOT use Aeppic.new here, because we modified the temporaryForm in unintended ways and thus field-setter errors will appear\n    locals.temporaryDocument = await Aeppic.buildTemporaryEditableDocument(locals.temporaryForm)\n    locals.temporaryDocument.__base.a = params.document.a.concat()\n    locals.temporaryDocument.__base.a_forms = params.document.a_forms.concat()\n\n    for (const fieldName in setFieldsToValue) {\n      locals.temporaryDocument.data[fieldName] = setFieldsToValue[fieldName]\n    }\n\n    this._updateTemporaryDocumentData(paramActive)\n\n    locals.ready = true\n  }   \n\n  async _updateTemporaryDocumentData(paramActive) {\n    for (const active of paramActive) { \n      const { field, values, placeholder: placeholderOfActive, params: paramsOfActive } = active\n      \n      const placeholder = locals.temporaryForm.getPlaceholder(field.name)\n      const params = locals.temporaryForm.getPlaceholderControlParams(placeholder.index)\n\n      params.debug && console.log(field.name, { field, values }, params)\n       \n      if (placeholder?.control?.name === 'datetime-range') {\n        locals.temporaryDocument.data[field.name] = values[0]?.start || ''\n\n        if (params.to) {\n          locals.temporaryDocument.data[params.to] = values[0]?.end || ''\n        }\n        if (params.hasTime) {\n          locals.temporaryDocument.data[params.hasTime] = values[0]?.hasTime ?? false\n        }\n      } else {\n        locals.temporaryDocument.data[field.name] = values\n      }\n    }\n  }\n\n  // _updateFilterSettings(options) { \n  //   const settingsMap = new Map()\n\n  //   for (const filter of options) {\n  //     if (filter.field.subType !== 'ref') {\n  //       continue\n  //     }\n\n  //     const fieldInfo = filter.field\n  //     const fieldParams = filter.params\n\n  //     if (!fieldParams) {\n  //       console.warn(`[WARN]: Ignoring field ${filter.field.name}`)  \n  //       continue\n  //     } \n \n  //     const settings = {\n  //         filter: {\n  //         base: fieldInfo.joinedFilter && `${fieldInfo.joinedFilter.replace(/'/g, '\"')}`,\n  //         targetDocument: params.document,\n  //         ancestorForm: fieldParams.ancestorForm,\n  //         queryLimitCommand: fieldParams.queryLimitCommand,\n  //         ancestorSearchLimit: fieldParams.ancestorSearchLimit,\n  //         ancestorId: fieldParams.ancestorId,\n  //         parentId: fieldParams.parentId,\n  //         formIds: fieldParams.forms,\n  //       },\n  //       search: { \n  //         size: 20,\n  //         sort: [{\n  //           field: 'data.name',\n  //           descending: false\n  //         },\n  //         {\n  //           field: 'modified.at',\n  //           descending: true\n  //         }],\n  //         searchAllFields: false\n  //       },\n  //     }\n\n  //     settingsMap.set(filter, settings)\n  //   } \n\n  //   locals.filterSettingsByFilter = settingsMap\n  // }\n\n  toggle(filter, option) {\n    $emit('toggle', { filter, option })\n  }\n\n  setFilter(filter, values) {\n    params.debug && console.log('setFilter', filter.field.name, { filter, values })\n    $emit('set', { filter, values })\n  }\n\n  resetAll() {\n    for (const field of locals.temporaryForm.fields) {\n      if (field.cardinality) {\n        locals.temporaryDocument.data[field.name] = []        \n      } else {\n        locals.temporaryDocument.data[field.name] = field.defaultValue\n      }\n    }\n\n    $emit('reset')\n  }\n\n  resetFilter(filter) {\n    const field = locals.temporaryForm.getField(filter.field.name)\n    console.log(field)\n    \n    if (field.cardinality) {\n      locals.temporaryDocument.data[field.name] = []  \n    } else {\n      locals.temporaryDocument.data[field.name] = field.defaultValue\n    }\n\n    this.setFilter(filter, null)\n  }\n\n  isActive(filter, option) {\n    if (!params.active) {\n      return null\n    }\n\n    const active = this.getActive(filter)\n\n    return active && active.values.find(v => {\n      if (typeof v === 'object') {\n        return v.value === option.value\n      }\n\n      return v === option\n    }) !== undefined\n  }\n\n  getActive(filter) {\n    if (!params.active) {\n      return null\n    }\n\n\n    // compare by pointer to field\n    return params.active.find(active => active.field === filter.field)\n  }\n\n  isEmpty(filter) {\n    const isActiveWithAnyValue = params.active.some(active => active.field === filter.field && active.values.length)\n    params.debug && console.debug(filter.field.name, { filter, isActiveWithAnyValue, active: params.active,  })\n\n    return !isActiveWithAnyValue\n  }\n\n  fieldUpdated(filterAndPlaceholder, change) {\n    const { filter, placeholder, params } = filterAndPlaceholder\n\n    if (placeholder?.control?.name === 'datetime-range') {\n      const changedDateFields = {\n        start: change.value,\n        end: locals.temporaryDocument.data[params.to] ?? undefined,\n        hasTime: locals.temporaryDocument.data[params.hasTime] ?? undefined,\n      }\n\n      // console.log('WITH DATE fieldUpdated', filter.field.name, filter.params.to, filter.params.hasTime, JSON.stringify(locals.temporaryDocument.data), changedDateFields.end, changedDateFields.hasTime)\n      \n      this.setFilter(filter, [changedDateFields])\n      return\n    }\n\n    const valueAsArray = Array.isArray(change.value) ? change.value : [change.value]\n\n    this.setFilter(filter, valueAsArray)\n  }\n\n\n  getPlaceholderForDisplay(indexOfPlaceholder) {\n    // return locals.modifiedFormForDisplay.placeholders[indexOfPlaceholder]  \n    return locals.temporaryForm?.info.placeholders[indexOfPlaceholder]  \n  }\n} \n","css":"","name":"rd:List Filter Selector","packages":[],"template":"<!-- <ae-form layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n          :document=\"locals.temporaryDocument\"\n></ae-form> -->\n<!-- FIXME: navigation still working -->\n<!-- @ae-will-navigate.capture.stop.prevent @ae-drill-into.capture.stop.prevent -->\n<div class=\"flex flex-col\" v-if=\"locals.ready\">\n  <div class=\"flex items-center border-b -mx-1 p-1\">\n    <ae-layout\n      layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n      param-text=\"Alle zurücksetzen\"\n      param-icon=\"far fa-broom\"\n      class=\"text-amber-500\"\n      @selected=\"controller.resetAll()\"\n      :param-disabled=\"!params.active?.length\"\n    ></ae-layout>\n\n    <div class=\"flex-1\"></div>\n\n    <div\n      class=\"text-neutral-600\"\n      ref=\"info\"\n      @click.stop=\"$refs.popup.show({ target: $refs.info })\"\n      @mouseover=\"$refs.popup.show({ target: $refs.info })\"\n      @mouseleave=\"$refs.popup.close()\"\n      aria-title=\"Nicht-aktive Filter werden <i>kursiv</i> dargestellt.\n          Zum Aktivieren eines Filters eine Option auswählen/durchschalten.\n          Das Löschen eines Filters ist einfach per Aufräum-Button möglich.\"\n    >\n      <ae-icon class=\"far fa-info-circle\"></ae-icon>\n    </div>\n\n    <ae-popup ref=\"popup\" :close-delay=\"500\">\n      <div\n        class=\"whitespace-pre-line p-1 break-words\"\n        @mouseenter=\"$refs.popup.cancelClose()\"\n        @mouseleave=\"$refs.popup.close()\"\n      >Nicht-aktive Filter werden <i>kursiv</i> dargestellt.\n        Zum Aktivieren eines Filters eine Option auswählen/durchschalten. \n        Das Löschen eines Filters ist per Aufräum-Button <ae-icon class=\"far fa-broom\"></ae-icon> möglich.\n      </div>\n    </ae-popup>\n  </div>\n\n  <!-- {{locals.temporaryDocument?.data }} -->\n\n  <div\n    v-for=\"filter of params.options\"\n    v-if=\"controller.getPlaceholderForDisplay(filter.placeholder.index)?.control?.name !== 'children' && controller.getPlaceholderForDisplay(filter.placeholder.index)?.control?.name !== 'mails'\"\n    class=\"flex flex-col gap-1 p-2 -mx-1 pb-6\"\n    :class=\"[ controller.isEmpty(filter) ? 'italic text-neutral-500' : 'bg-slate-50' ]\"\n  >\n    <!-- {{ controller.getPlaceholderForDisplay(filter.placeholder.index).index }} -->\n    <div class=\"flex items-center\">\n      <div>\n        {{\n        Aeppic.translate(controller.getPlaceholderForDisplay(filter.placeholder.index)?.label)\n        }}\n      </div>\n\n      <div class=\"flex-1\"></div>\n\n      <ae-layout\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        :param-title=\"'&quot;' + controller.getPlaceholderForDisplay(filter.placeholder.index)?.label + '&quot; zurücksetzen'\"\n        param-icon=\"far fa-broom\"\n        class=\"text-neutral-500\"\n        @selected=\"controller.resetFilter(filter)\"\n        :param-disabled=\"controller.isEmpty(filter)\"\n      ></ae-layout>\n    </div>\n\n    <!-- {{ filter.field.subType }}\n    {{ filter.field.type }}\n    {{filter.field.defaultValue}} -->\n\n    <section \n      v-if=\"!controller.getPlaceholderForDisplay(filter.placeholder.index)?.label\"\n    >\n      [kein Label gefunden für] {{ filter.field.name }}\n    </section>\n    <section v-else>\n      <!-- {{controller.getPlaceholderForDisplay(filter.placeholder.index)?.control?.name }} -->\n      <!-- aaa {{ filter.params }} -->\n      <!-- bbb {{ { ...locals.temporaryForm.getPlaceholderControlParams(filter.placeholder.index), confirmRemove: false } }} -->\n      <!-- {{ controller.getPlaceholderForDisplay(filter.placeholder.index)?.control }} -->\n      <ae-control\n        :name=\"(controller.getPlaceholderForDisplay(filter.placeholder.index)?.control?.name && 'rd:' + controller.getPlaceholderForDisplay(filter.placeholder.index)?.control?.name) || 'rd:' + filter.field.subType\"\n        :document=\"locals.temporaryDocument\"\n        :field-name=\"filter.field.name\"\n        @field-updated=\"controller.fieldUpdated({ filter, placeholder: controller.getPlaceholderForDisplay(filter.placeholder.index), params: locals.temporaryForm.getPlaceholderControlParams(filter.placeholder.index) }, $event)\"\n        :params=\"{ ...locals.temporaryForm.getPlaceholderControlParams(filter.placeholder.index), confirmRemove: false }\"\n      ></ae-control>\n    </section>\n  </div>\n\n  <!-- <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n  param-text=\"Alle zurücksetzen\"\n  param-icon=\"far fa-broom\"\n  class=\"text-amber-500 border-t -mx-1 p-1\"\n  @selected=\"controller.resetAll()\"\n  :param-disabled=\"!params.active?.length\"\n  ></ae-layout> -->\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"30e5f4a0-a1fc-4af7-9e47-14b76caecf58","inheritedLocks":[null,null,null],"locks":[],"meta":{},"modified":{"at":"2026-05-11T07:46:41+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"a53e4a838659e31d"},"stamps":[],"t":1778485601639,"v":"053c9bafcd38f5d9"},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","05787127-986a-494f-a69e-8733c1176596"],"a_depth":3,"a_forms":["folder","application-form","form-folder"],"created":{"at":"2026-07-14T09:35:30+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"ct":1784021730455,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.chain = []          // decided entries: { document, isNew }, index = level depth\n    locals.viewDepth = 0       // level currently being viewed/decided (<= locals.chain.length)\n    locals.draftsByAnchor = new Map() // anchor doc id -> cached tail of locals.chain, kept across branch switches\n    locals.existingOptions = []\n    locals.mode = 'choose'\n    locals.saving = false\n\n    const resumeChain = await this.buildResumeChain()\n\n    if (resumeChain) {\n      locals.chain = resumeChain\n      await this.enterLevel(resumeChain.length)\n    } else {\n      await this.enterLevel(0)\n    }\n  }\n\n  get levels() {\n    return params.levels\n  }\n\n  get startingDocument() {\n    return params.startingDocument\n  }\n\n  // Prefills the chain from params.resumeFromDocument, a real document somewhere\n  // inside this hierarchy (e.g. opened via a \"detail\" URL param upstream). Returns\n  // null - falling back to a normal empty start - unless it's genuinely a descendant\n  // of startingDocument whose own form and ancestor forms line up with `levels`.\n  async buildResumeChain() {\n    const resumeDoc = params.resumeFromDocument\n\n    if (!resumeDoc) {\n      return null\n    }\n\n    const anchorIndex = resumeDoc.a.indexOf(this.startingDocument.id)\n\n    if (anchorIndex === -1) {\n      console.warn('rd:LocationDrilldown: resumeFromDocument is not under startingDocument, ignoring', resumeDoc.id)\n      return null\n    }\n\n    const levelIndex = this.levels.findIndex(level => level.form === resumeDoc.f.id)\n\n    if (levelIndex === -1) {\n      console.warn('rd:LocationDrilldown: resumeFromDocument form does not match any configured level, ignoring', resumeDoc.id)\n      return null\n    }\n\n    for (let i = 0; i < levelIndex; i++) {\n      if (resumeDoc.a_forms[anchorIndex + 1 + i] !== this.levels[i].form) {\n        console.warn('rd:LocationDrilldown: resumeFromDocument ancestor chain does not match configured levels, ignoring', resumeDoc.id)\n        return null\n      }\n    }\n\n    const ancestorIds = resumeDoc.a.slice(anchorIndex + 1, anchorIndex + 1 + levelIndex)\n    const ancestors = ancestorIds.length > 0 ? await Aeppic.getAll(ancestorIds) : []\n\n    return [...ancestors, resumeDoc].map(document => ({ document, isNew: false }))\n  }\n\n  get isFinished() {\n    return locals.viewDepth === this.levels.length\n  }\n\n  // The last configured level (Anlage) saves directly - there is nothing\n  // after it worth walking into, so \"Weiter\" has no business appearing there.\n  get isLastLevel() {\n    return locals.viewDepth === this.levels.length - 1\n  }\n\n  get currentLevel() {\n    return this.levels[locals.viewDepth]\n  }\n\n  get currentEntry() {\n    return locals.chain[locals.viewDepth]\n  }\n\n  get parentDocument() {\n    return locals.viewDepth === 0 ? this.startingDocument : locals.chain[locals.viewDepth - 1].document\n  }\n\n  get finalDocument() {\n    return locals.chain[locals.chain.length - 1]?.document\n  }\n\n  get hasUnsavedWork() {\n    return locals.chain.some(entry => entry.isNew)\n  }\n\n  async enterLevel(depth) {\n    locals.viewDepth = depth\n\n    if (depth >= this.levels.length) {\n      return\n    }\n\n    locals.existingOptions = await Aeppic.find(Aeppic.Query.children(this.parentDocument.id).form(this.currentLevel.form))\n\n    const existingEntry = locals.chain[depth]\n\n    if (existingEntry) {\n      locals.mode = existingEntry.isNew ? 'new' : 'choose'\n      return\n    }\n\n    if (locals.existingOptions.length === 0) {\n      await this.createNew()\n    } else {\n      locals.mode = 'choose'\n    }\n  }\n\n  async chooseExisting(document) {\n    // An existing document is already complete - nothing to fill in, move straight on.\n    await this.commitAt(locals.viewDepth, document, false)\n    await this.enterLevel(locals.viewDepth + 1)\n  }\n\n  async createNew() {\n    // Stays at this level: shows the mini-form until the user confirms with \"Weiter\".\n    const editable = await Aeppic.new(this.currentLevel.form, this.parentDocument, { allowMissingParent: true })\n    await this.commitAt(locals.viewDepth, editable, true)\n  }\n\n  // Switching tabs (Vorhandene/Neu) should not discard an in-progress draft -\n  // only mint a fresh document the first time; re-selecting \"Neu erstellen\"\n  // just resumes editing whatever is already there.\n  async selectNewMode() {\n    if (this.currentEntry && this.currentEntry.isNew) {\n      locals.mode = 'new'\n      return\n    }\n\n    await this.createNew()\n  }\n\n  async commitAt(depth, document, isNew) {\n    locals.mode = isNew ? 'new' : 'choose'\n\n    // Replacing an earlier decision: archive whatever hung below it, keyed by\n    // the document being replaced - so picking that same document again later\n    // brings its old sub-branch back instead of throwing it away.\n    if (locals.chain.length > depth) {\n      const oldEntry = locals.chain[depth]\n      const rest = locals.chain.slice(depth + 1)\n\n      if (rest.length > 0) {\n        locals.draftsByAnchor.set(oldEntry.document.id, rest)\n      }\n    }\n\n    locals.chain = [...locals.chain.slice(0, depth), { document, isNew }]\n\n    const cached = !isNew && locals.draftsByAnchor.get(document.id)\n\n    if (cached) {\n      locals.draftsByAnchor.delete(document.id)\n      locals.chain = [...locals.chain, ...cached]\n    }\n  }\n\n  async advance() {\n    if (!this.currentEntry) {\n      return // nothing decided at this level yet\n    }\n\n    await this.enterLevel(locals.viewDepth + 1)\n  }\n\n  async goBack() {\n    if (locals.viewDepth === 0) {\n      return // never above the starting document\n    }\n\n    await this.enterLevel(locals.viewDepth - 1)\n  }\n\n  async jumpTo(depth) {\n    if (depth < 0 || depth > locals.chain.length) {\n      return\n    }\n\n    await this.enterLevel(depth)\n  }\n\n  finish() {\n    locals.saving = true\n\n    for (const entry of locals.chain) {\n      if (entry.isNew) {\n        Aeppic.save(entry.document)\n      }\n    }\n\n    $emit('finished', this.finalDocument)\n  }\n}\n","css":"","name":"rd:LocationDrilldown","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<!--\n  @param {Array} levels - ordered [{ form: <formId>, label: <string>, fields: <string[]> }], root to leaf.\n  @param {Object} startingDocument - real, already-saved document the drilldown starts under.\n    Never shown as an editable step and never navigable-above.\n-->\n<div class=\"h-full w-full bg-transparent p-2 md:p-4\">\n  <div class=\"mx-auto max-w-5xl w-full h-full overflow-y-auto relative flex flex-col gap-4 pb-2\">\n\n    <div class=\"sticky top-0 z-20 bg-white dark:bg-slate-800 rounded-md shadow-sm border border-neutral-200 flex items-center gap-2 shrink-0 px-4 py-3 flex-wrap\">\n      <template v-for=\"(level, index) in controller.levels\">\n        <div\n          :key=\"index\"\n          class=\"flex items-center gap-2 text-sm font-semibold\"\n          :class=\"[\n            index === locals.viewDepth ? 'text-primary-600' : 'text-neutral-400',\n            index <= locals.chain.length && 'cursor-pointer'\n          ]\"\n          @click=\"index <= locals.chain.length && controller.jumpTo(index)\"\n        >\n          <span class=\"w-6 h-6 flex items-center justify-center rounded-full border\"\n                :class=\"index === locals.viewDepth ? 'border-primary-500 bg-primary-50' : 'border-neutral-300'\">\n            {{ index + 1 }}\n          </span>\n          {{ level.label }}\n          <i v-if=\"index < controller.levels.length - 1\" class=\"fa fa-chevron-right text-neutral-300 text-xs mx-2\"></i>\n        </div>\n      </template>\n    </div>\n\n    <div v-if=\"!controller.isFinished\" class=\"shrink-0 flex flex-col gap-3\">\n      <div v-if=\"locals.existingOptions.length > 0\" class=\"flex gap-2\">\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          param-text=\"Vorhandene auswählen\"\n          :param-primary=\"locals.mode === 'choose'\"\n          @selected=\"locals.mode = 'choose'\"\n        ></ae-layout>\n        <ae-layout\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          param-text=\"Neu erstellen\"\n          :param-primary=\"locals.mode === 'new'\"\n          @selected=\"controller.selectNewMode()\"\n        ></ae-layout>\n      </div>\n\n      <div v-if=\"locals.mode === 'choose' && locals.existingOptions.length > 0\" class=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2\">\n        <ae-design\n          v-for=\"doc in locals.existingOptions\"\n          :key=\"doc.id\"\n          name=\"rd:card\"\n          :document=\"doc\"\n          @selected=\"controller.chooseExisting(doc)\"\n        ></ae-design>\n      </div>\n\n      <ae-form\n        v-if=\"locals.mode === 'new' && controller.currentEntry\"\n        :key=\"'level_' + locals.viewDepth + '_' + controller.currentEntry.document.id\"\n        :document=\"controller.currentEntry.document\"\n        layout-id=\"5c8ac4b6-e1a9-4cdf-af03-553dbc4d80d5\"\n        :view=\"{only: {fields: controller.currentLevel.fields, standaloneControls: []}}\"\n        :watch=\"true\"\n        :readonly=\"false\"\n      ></ae-form>\n    </div>\n\n    <ae-design v-else name=\"rd:card\" :document=\"controller.finalDocument\" class=\"shrink-0\"></ae-design>\n\n    <div class=\"sticky bottom-0 z-20 bg-white dark:bg-slate-800 rounded-md shadow-sm border border-neutral-200 flex justify-between shrink-0 px-4 py-3\">\n      <ae-layout\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        param-text=\"Zurück\"\n        param-icon=\"fa fa-arrow-left\"\n        :param-disabled=\"locals.viewDepth === 0\"\n        @selected=\"controller.goBack()\"\n        param-border=\"border border-neutral-300\"\n      ></ae-layout>\n\n      <div class=\"flex gap-2\">\n        <ae-layout\n          v-if=\"controller.currentEntry || controller.isFinished\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          :param-text=\"controller.hasUnsavedWork ? 'Speichern' : 'Öffnen'\"\n          param-icon=\"fa fa-check\"\n          :param-primary=\"controller.isFinished\"\n          :param-border=\"!controller.isFinished && 'border border-neutral-300'\"\n          :param-disabled=\"locals.saving\"\n          @selected=\"controller.finish()\"\n        ></ae-layout>\n\n        <ae-layout\n          v-if=\"!controller.isLastLevel && controller.currentEntry\"\n          layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n          param-text=\"Weiter\"\n          param-icon-right=\"fa fa-arrow-right\"\n          :param-primary=\"true\"\n          @selected=\"controller.advance()\"\n        ></ae-layout>\n      </div>\n    </div>\n\n  </div>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"3061199a-8356-4c4e-9ace-77523847678e","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-07-16T07:02:55+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"05787127-986a-494f-a69e-8733c1176596","previous":{"v":"62e1ce391db54f6a"},"stamps":[],"t":1784185375017,"v":"a03763896daa4f3e"},{"a":["apps","009b3a60-72d5-46f6-8dc6-7f9001e03283","b676aa47-5082-403c-bf82-6aeead137ec1"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2024-11-05T16:42:39+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1730824959548,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Login: 'fcc74d30-8252-46d2-8f59-6002eab2761b',\n    }\n\n    this.configureTailwind()\n\n    locals.loading = true\n    locals.username = ''\n    locals.password = ''\n    locals.remember = false\n    locals.passwordResetRequired = false\n    locals.newPassword = ''\n    locals.newPasswordRepeat = ''\n    locals.resetPasswordRunning = false\n\n    const supportedTypes = new Set(['AZURE', 'USER_PASSWORD', 'RESET_PASSWORD'])\n\n    locals.allowedTypes = []\n    locals.type = ''\n    locals.loginTitle = ''\n\n    locals.companyLogoSrc = ''\n    locals.companyBannerSrc = ''\n    locals.companyBackgroundSrc = ''\n\n    const loginSettings = await Aeppic.findOne(`p:root f.id:${this.FORMS.Login}`, { sort: 'id' })\n\n    if (loginSettings?.data.types) {\n      loginSettings.data.types.forEach((type) => {\n        if (supportedTypes.has(type)) {\n          locals.allowedTypes.push(type)\n        }\n      })\n    } else {\n      locals.allowedTypes = ['USER_PASSWORD']\n    }\n\n    let primaryLoginType = ''\n\n    if (loginSettings?.data.primaryType && locals.allowedTypes.includes(loginSettings.data.primaryType)) {\n      primaryLoginType = loginSettings.data.primaryType\n    }\n\n    locals.type = primaryLoginType || locals.allowedTypes[0] || ''\n\n    locals.loginTitle = loginSettings?.data.title || 'Bizpin Collaboration Software'\n\n    locals.companyLogoSrc = loginSettings?.data.logo.dataUrl\n      ? Aeppic.Content.getSrc(loginSettings, 'logo')\n      : '/api/docs/5a5cfd6a-1748-4c6a-a2a1-64490c6e28ae/fields/file/_content?version=initial&dataUrl=aeppic-local%3A%2F%2F82284574-24dd-4f19-a51f-ac7b62565a1c%2F1' // bizpin color svg\n\n    locals.companyBannerSrc = loginSettings?.data.banner.dataUrl\n      ? Aeppic.Content.getSrc(loginSettings, 'banner')\n      : '/api/docs/322bd762-239d-4dd7-ac77-2536bc55234b/fields/file/_content?version=37f6b3de7e94252b&dataUrl=aeppic-local%3A%2F%2F8ffe4469-3c1c-4e62-a2a3-766488601830%2F5' // Bizpin Login Default Banner\n\n    locals.companyBackgroundSrc = loginSettings?.data.backgroundImage.dataUrl\n      ? Aeppic.Content.getSrc(loginSettings, 'backgroundImage')\n      : '/api/docs/ac205f27-d612-4f02-a648-c0a70cc3f5b9/fields/file/_content?version=b99d6efafca17be8&dataUrl=aeppic-local%3A%2F%2F8ffe4469-3c1c-4e62-a2a3-766488601830%2F3' // blue abstract wave\n    locals.backgroundImageClass = loginSettings?.data.backgroundImage.dataUrl\n      ? `bg-[url('${locals.companyBackgroundSrc}')]`\n      : `bg-[url('${locals.companyBackgroundSrc}')] bg-blend-luminosity`\n\n    locals.loginRunning = false\n    locals.error = null\n    locals.loading = false\n    locals.resetRunning = false\n\n    this._loginWithToken()\n  }\n\n  async sleep(duration) {\n    return new Promise((resolve) => setTimeout(resolve, duration))\n  }\n\n  async _loginWithToken() {\n    const token = params.queryParams?.token\n\n    if (!token) {\n      return\n    }\n\n    // const check = await Aeppic.Commands.execute('d88bb61a-924a-4668-80fb-5b0f1ead11c2', 'root', { token })\n    const check = await Aeppic.fetch(\n      'api/docs/root/_executeCommand?commandId=d88bb61a-924a-4668-80fb-5b0f1ead11c2&apiToken=6lag9gDVbBf90Mr6IfhJ3Iw0VuPaIfNzOnCIZm7R3m47QJQOem8e4S8b9NhZnlOo8zvA2U3ppiTbx0RifFp0QdTOgjXcqrJjp2wW5VM9imQ8bvf3kTqD19tsdjIawXoT',\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json;charset=utf-8',\n        },\n        body: JSON.stringify({\n          parameters: {\n            token,\n          },\n        }),\n      },\n    )\n\n    if (!check.ok) {\n      console.error(check.error)\n      return\n    }\n\n    const { ok, value, error } = await check.json()\n\n    if (!ok) {\n      console.error(error)\n      return\n    }\n\n    if (!value?.account?.data.name) {\n      return\n    }\n\n    Aeppic.login(value.account.data.name, '')\n    // remove token from queryParams. ATTENTION: only works when navigation does actually runs navigations (= the normal bizpin app layout)\n    Aeppic.navigateTo(Aeppic.Root?.params?.pageDocumentId || '', { token: undefined })\n  }\n\n  configureTailwind() {\n    try {\n      if (typeof tailwind !== 'undefined') {\n        // https://tailwindcss.com/docs/screens\n        if (tailwind.config.theme === undefined) {\n          tailwind.config.theme = {\n            extend: {},\n          }\n        }\n\n        tailwind.config.theme.extend.screens = {\n          '3xl': '2000px',\n        }\n      }\n\n      // FIXME: implement loading company CI\n      // const companyCi = await Aeppic.findOne(`p:${companyId} f.id:81da74f7-1abf-48c1-add1-18266cd4c30e`)\n\n      // if (companyCi) {\n      //   try {\n      //     tailwind.config.theme.extend.colors = JSON.parse(companyCi.data.colors)\n      //   } catch (error) {\n      //     console.error(`Error parsing company CI: ${error}`)\n      //   }\n      // } else {\n      tailwind.config.theme.extend.colors = {\n        primary: tailwind.colors.blue,\n        secondary: tailwind.colors.slate,\n        'brand-accent': tailwind.colors.lime,\n        'brand-accent-secondary': tailwind.colors.fuchsia,\n        info: tailwind.colors.indigo,\n        warn: tailwind.colors.amber,\n        error: tailwind.colors.rose,\n      }\n      // }\n    } catch (e) {\n      console.error('Error config tailwind', e)\n    }\n  }\n\n  async loginWithAzure() {\n    if (locals.loginRunning) {\n      return\n    }\n\n    locals.loginRunning = true\n    locals.error = null\n\n    let clientId = await Aeppic.Preferences.getSetting('aeppic:oauth:clientId')\n    let tenantId = await Aeppic.Preferences.getSetting('aeppic:oauth:tenantId')\n    let redirectUri = await Aeppic.Preferences.getSetting('aeppic:oauth:redirectUri')\n\n    try {\n      let token = await packages.OAuth.authenticateWithMicrosoftAzureAD(clientId, tenantId, redirectUri)\n      let decoded = packages.OAuth.decodeJWTToken(token)\n      locals.token = token\n      locals.decoded = decoded\n\n      let { oid: user_id, preferred_username: user_email } = decoded\n\n      // let user_info_response = await Aeppic.fetch(`/api/services/7acd77d2-3b2b-48e5-813f-aabbb50f7f35/users/${user_id}`)\n\n      // if (!user_info_response.ok) {\n      //   locals.error = \"Error getting user info\"\n      //   return\n      // }\n\n      // let user_info = await user_info_response.json()\n\n      // if (!user_info) {\n      //   locals.error = 'Unknown User'\n      //   return\n      // } else if (user_info.id !== user_id) {\n      //   locals.error = 'Wrong User Returned'\n      //   return\n      // }\n\n      let forward_response = await Aeppic.fetch(\n        `/api/services/7acd77d2-3b2b-48e5-813f-aabbb50f7f35/users/${user_id}/_forward`,\n        { method: 'POST' },\n      )\n\n      if (!forward_response.ok) {\n        locals.error = 'Could not forward user to server'\n        locals.loginRunning = false\n\n        return\n      }\n\n      await new Promise((r) => Aeppic.setTimeout(r, 500))\n\n      await Aeppic.login('oauth', token)\n      // keep locals.loginRunning\n    } catch (error) {\n      locals.error = error.toString() || 'Azure Login failed'\n      locals.loginRunning = false\n    }\n  }\n\n  setType(loginType) {\n    if (locals.loginRunning) {\n      return\n    }\n\n    locals.error = null\n    locals.username = ''\n    locals.password = ''\n    locals.remember = false\n    locals.passwordResetRequired = false\n    locals.newPassword = ''\n    locals.newPasswordRepeat = ''\n    locals.resetPasswordRunning = false\n    locals.resetSuccessMessage = null\n\n    locals.type = loginType\n  }\n\n  async loginUserPassword() {\n    if (locals.loginRunning) {\n      return\n    }\n\n    locals.loginRunning = true\n    locals.error = null\n\n    // await this.sleep(2000)\n\n    try {\n      const loginResult = await Aeppic.login(locals.username.trim(), locals.password.trim(), locals.remember)\n\n      if (loginResult.ok) {\n        locals.error = null\n\n        // FIXME: not implemented / buggy\n        // Aeppic.navigateHome()\n\n        Aeppic.navigateTo(Aeppic.HomePage)\n\n        // // FIXME: reload needed to reload to Bizpin Root Layout\n        // Aeppic.reload()\n      } else if (loginResult.resetPassword === true) {\n        locals.error = null\n        locals.passwordResetRequired = true\n        locals.newPassword = ''\n        locals.newPasswordRepeat = ''\n      } else {\n        locals.error = 'Unbekannter Benutzername oder falsches Passwort'\n        // if (loginResult.status === 404) {\n        //   locals.error = {\n        //     unkownUser: true\n        //   }\n        // } else {\n        //   locals.error = {\n        //     wrongPassword: true\n        //   }\n        // }\n      }\n    } catch (error) {\n      console.error('Error login', error)\n    }\n\n    await Aeppic.nextRenderPass()\n    locals.loginRunning = false\n  }\n\n  async completeRequiredPasswordReset() {\n    if (locals.resetPasswordRunning) {\n      return\n    }\n\n    locals.error = null\n\n    const username = locals.username.trim()\n    const currentPassword = locals.password\n    const newPassword = locals.newPassword\n    const newPasswordRepeat = locals.newPasswordRepeat\n\n    if (!newPassword || !newPasswordRepeat) {\n      locals.error = 'Bitte geben Sie das neue Passwort zweimal ein.'\n      return\n    }\n\n    if (newPassword !== newPasswordRepeat) {\n      locals.error = 'Die neuen Passwörter stimmen nicht überein.'\n      return\n    }\n\n    if (newPassword === currentPassword) {\n      locals.error = 'Das neue Passwort darf nicht dem aktuellen Passwort entsprechen.'\n      return\n    }\n\n    locals.resetPasswordRunning = true\n\n    try {\n      if (typeof Aeppic.resetPassword === 'function') {\n        const result = await Aeppic.resetPassword(username, currentPassword, newPassword, locals.remember)\n\n        if (result.ok && result.auth) {\n          locals.error = null\n          Aeppic.navigateTo(Aeppic.HomePage)\n          return\n        }\n\n        if (result.ok) {\n          Aeppic.reload()\n          return\n        }\n      } else {\n        const headers = {\n          Accept: 'application/json',\n          'Content-Type': 'application/x-www-form-urlencoded',\n        }\n        const body = 'username=' + encodeURIComponent(username)\n          + '&password=' + encodeURIComponent(currentPassword)\n          + '&newPassword=' + encodeURIComponent(newPassword)\n          + (locals.remember ? '&remember=true' : '')\n        const response = await Aeppic.fetch('api/auth/_resetPassword', {\n          method: 'POST',\n          headers,\n          body,\n          credentials: 'include',\n        })\n\n        if (response.ok) {\n          Aeppic.reload()\n          return\n        }\n      }\n\n      locals.error = 'Das Passwort konnte nicht geändert werden. Bitte prüfen Sie Ihre Eingaben und versuchen Sie es erneut.'\n    } catch (error) {\n      console.error('Error resetting required password', error)\n      locals.error = 'Unerwarteter Fehler beim Ändern des Passworts. Bitte versuchen Sie es erneut.'\n    }\n\n    locals.resetPasswordRunning = false\n  }\n\n  async resetUser() {\n    if (locals.resetRunning) {\n      return\n    }\n\n    locals.error = ''\n    locals.resetRunning = true\n\n    // TODO: Commands.execute is not working for anonymous accounts\n    // const result = await Aeppic.Commands.execute('7cb2206d-75a0-41bb-89f6-7d077056bc5c', 'root', {\n    //   username: locals.username,\n    //   baseUrl\n    // })\n    const httpRequest = await Aeppic.fetch(\n      'api/docs/root/_executeCommand?commandId=7cb2206d-75a0-41bb-89f6-7d077056bc5c&apiToken=6lag9gDVbBf90Mr6IfhJ3Iw0VuPaIfNzOnCIZm7R3m47QJQOem8e4S8b9NhZnlOo8zvA2U3ppiTbx0RifFp0QdTOgjXcqrJjp2wW5VM9imQ8bvf3kTqD19tsdjIawXoT',\n      {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json;charset=utf-8',\n        },\n        body: JSON.stringify({\n          parameters: {\n            username: locals.username,\n          },\n        }),\n      },\n    )\n\n    const response = await httpRequest.json()\n\n    if (!httpRequest.ok || !response.ok) {\n      locals.error = 'Unerwarteter Fehler bei der Ausführung. Bitte versuchen Sie es erneut.'\n    } else {\n      locals.resetSuccessMessage = 'Wir haben Ihnen eine E-Mail geschickt, falls der Benutzername existiert. Bitte klicken Sie den enthaltenen Bestätigungslink an, um ein neues Passwort zu setzen.\\nFalls Sie keine Nachricht erhalten haben prüfen Sie auch ihren Spam-Ordner.'\n    }\n\n    locals.resetRunning = false\n  }\n}\n","css":"","name":"rd:Login Layout","packages":[{"id":"9f494938-bd27-4274-ba21-6bea3ceb87b0","text":"OAuth","v":"3e63cb21e9450f75"}],"template":"<div class=\"absolute top-0 left-0 right-0 bottom-0 bg-[#0e3c79] overflow-auto pb-10 bg-cover bg-center\"\n    :class=\"[ locals.backgroundImageClass ]\"\n    :data-test=\"'layout' + '_' + layout.id\"\n>\n  <div class=\"flex gap-20 flex-row flex-wrap justify-center mt-4 lg:mt-20\">\n    <section class=\"w-[400px] max-w-[400px] overflow-hidden flex flex-col text-white\">\n      <img class=\" max-h-[100px] max-w-[400px] object-left-top object-contain\" alt=\"Unternehmens Logo\" :src=\"locals.companyLogoSrc\">\n      <div class=\"text-3xl font-bold ml-4\">{{ locals.loginTitle }}</div>\n    </section>\n\n    <section class=\"w-[400px] max-w-[400px] overflow-hidden flex flex-col gap-4 bg-white rounded-md shadow\">\n      <img class=\"rounded-t-md max-h-[400px] max-w-[400px] object-contain\" alt=\"Unternehmens Banner\" :src=\"locals.companyBannerSrc\">\n\n      <div v-if=\"locals.error\" class=\"p-4 bg-red-200 text-red-700\" data-test=\"login_error\">\n        {{ locals.error }}\n      </div>\n\n      <div v-if=\"locals.type === 'AZURE'\" class=\"p-4 flex flex-col gap-10\">\n        <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    :param-icon=\"locals.loginRunning ? 'far fa-spinner-third fa-spin text-primary-500' : 'fab fa-microsoft'\"\n                    :param-text=\"locals.loginRunning ? '' : 'mit Azure AD anmelden'\"\n                    @selected=\"controller.loginWithAzure()\"\n                    :param-disabled=\"locals.loginRunning\"\n                    :param-primary=\"true\"\n                    data-test=\"login_execute\"\n        ></ae-layout>\n                    <!-- param-border=\"border border-neutral-200\" -->\n\n\n        <ae-layout v-if=\"locals.allowedTypes.includes('USER_PASSWORD')\" \n                    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" \n                    param-icon=\"\" \n                    param-text=\"Alternative Anmeldemethode\"\n                    @selected=\"controller.setType('USER_PASSWORD')\"\n                    :param-disabled=\"locals.loginRunning\"\n                    param-classes=\"text-sm text-gray-500\"\n                    data-test=\"login_switch-user-password\"\n          ></ae-layout>\n      </div>\n\n      <div v-else-if=\"locals.type === 'USER_PASSWORD'\" class=\"p-4 flex flex-col gap-10\">\n        <!-- TODO: use form again for 'fill out field here'-errors. remove because the form breaks on clicking toggle-button -->\n        <section v-if=\"!locals.passwordResetRequired\" class=\"flex flex-col gap-2\" :class=\"{ '': locals.loginRunning }\">\n          <input type=\"text\" v-model=\"locals.username\" required placeholder=\"Benutzername\" @xinput=\"locals.error = null\"\n                class=\"w-full border rounded-md py-1 px-2 flex gap-1 bg-white placeholder:italic\"\n                :param-disabled=\"locals.loginRunning\"\n                v-focus\n                @keydown.enter=\"controller.loginUserPassword()\"\n                data-test=\"login_username\"\n          />\n\n          <input type=\"password\" v-model=\"locals.password\" placeholder=\"Passwort\" @xinput=\"locals.error = null\" \n                class=\"w-full border rounded-md py-1 px-2 flex gap-1 bg-white placeholder:italic\"\n                :param-disabled=\"locals.loginRunning\"\n                @keydown.enter=\"controller.loginUserPassword()\"\n                data-test=\"login_password\"\n          />\n\n          <!-- <label style=\"cursor: pointer;\"><input type=\"checkbox\" v-model=\"locals.remember\">Angemeldet bleiben</label> -->\n          <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" \n                    :param-icon=\"locals.remember ? 'far fa-toggle-on' : 'far fa-toggle-off'\" \n                    param-text=\"Angemeldet bleiben\"\n                    @selected=\"locals.remember = !locals.remember\"\n                    param-border=\"border border-neutral-200\"\n                    :param-disabled=\"locals.loginRunning\"\n                    @keydown.enter=\"controller.loginUserPassword()\"\n                    data-test=\"login_remember\"\n          ></ae-layout>\n\n          <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      :param-icon=\"locals.loginRunning ? 'far fa-spinner-third fa-spin text-primary-500' : 'far fa-sign-in'\"\n                      param-text=\"Anmelden\"\n                      @selected=\"controller.loginUserPassword()\"\n                      :param-disabled=\"locals.loginRunning || !locals.username\"\n                      :param-primary=\"true\"\n                      data-test=\"login_execute\"\n          ></ae-layout>\n\n          <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      param-text=\"Passwort vergessen\"\n                      @selected=\"controller.setType('RESET_PASSWORD')\"\n                      :param-disabled=\"locals.loginRunning\"\n                      data-test=\"login_switch-resetpassword\"\n                      class=\"text-xs\"\n          ></ae-layout>\n\n          <ae-layout v-if=\"locals.allowedTypes.includes('AZURE')\" \n                    class=\"mt-10\"\n                    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" \n                    param-icon=\"fab fa-microsoft\" \n                    param-text=\"mit Azure AD anmelden\" \n                    param-classes=\"text-sm text-gray-500\"\n                    @selected=\"controller.setType('AZURE')\"\n                    :param-disabled=\"locals.loginRunning\"\n                    data-test=\"login_switch-azure\"\n            ></ae-layout>\n        </section>\n        <section v-else class=\"flex flex-col gap-2\" :class=\"{ '': locals.resetPasswordRunning }\">\n          <div class=\"text-sm text-gray-700\" data-test=\"login_password-reset-required\">\n            Bitte vergeben Sie ein neues Passwort für {{ locals.username }}.\n          </div>\n\n          <input type=\"password\" v-model=\"locals.newPassword\" required placeholder=\"Neues Passwort\" @xinput=\"locals.error = null\"\n                class=\"w-full border rounded-md py-1 px-2 flex gap-1 bg-white placeholder:italic\"\n                :param-disabled=\"locals.resetPasswordRunning\"\n                v-focus\n                @keydown.enter=\"controller.completeRequiredPasswordReset()\"\n                data-test=\"login_new_password\"\n          />\n\n          <input type=\"password\" v-model=\"locals.newPasswordRepeat\" required placeholder=\"Neues Passwort wiederholen\" @xinput=\"locals.error = null\"\n                class=\"w-full border rounded-md py-1 px-2 flex gap-1 bg-white placeholder:italic\"\n                :param-disabled=\"locals.resetPasswordRunning\"\n                @keydown.enter=\"controller.completeRequiredPasswordReset()\"\n                data-test=\"login_new_password_repeat\"\n          />\n\n          <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      :param-icon=\"locals.resetPasswordRunning ? 'far fa-spinner-third fa-spin text-primary-500' : 'far fa-key'\"\n                      param-text=\"Passwort ändern und anmelden\"\n                      @selected=\"controller.completeRequiredPasswordReset()\"\n                      :param-disabled=\"locals.resetPasswordRunning || !locals.newPassword || !locals.newPasswordRepeat\"\n                      :param-primary=\"true\"\n                      data-test=\"login_complete-required-password-reset\"\n          ></ae-layout>\n\n          <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      param-text=\"Zurück zur Anmeldung\"\n                      @selected=\"controller.setType('USER_PASSWORD')\"\n                      :param-disabled=\"locals.resetPasswordRunning\"\n                      data-test=\"login_cancel-required-password-reset\"\n          ></ae-layout>\n        </section>\n      </div>\n      <div v-else-if=\"locals.type === 'RESET_PASSWORD'\" class=\"p-4 flex flex-col gap-10\">\n        <section class=\"flex flex-col gap-2\" :class=\"{ '': locals.loginRunning }\">\n          <input type=\"text\" v-model=\"locals.username\" required placeholder=\"Benutzername\" @xinput=\"locals.error = null\"\n                class=\"w-full border rounded-md py-1 px-2 flex gap-1 bg-white placeholder:italic\"\n                :param-disabled=\"locals.resetRunning || locals.resetSuccessMessage\"\n                v-focus\n                @keydown.enter=\"controller.resetUser()\"\n                data-test=\"reset_username\"\n          />\n\n          <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      :param-icon=\"locals.resetRunning ? 'far fa-spinner-third fa-spin text-primary-500' : 'far fa-sign-in'\"\n                      param-text=\"Passwort zurücksetzen anfordern\"\n                      @selected=\"controller.resetUser()\"\n                      :param-disabled=\"locals.resetRunning || !locals.username || locals.resetSuccessMessage\"\n                      :param-primary=\"!locals.resetSuccessMessage\"\n                      data-test=\"reset_execute\"\n          ></ae-layout>\n\n          <div v-if=\"locals.resetSuccessMessage\" data-test=\"reset_sucess\" class=\"whitespace-pre-line\">\n            {{locals.resetSuccessMessage}}\n          </div>\n\n          <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      param-text=\"Zurück zur Anmeldung\"\n                      @selected=\"controller.setType('USER_PASSWORD')\"\n                      :param-disabled=\"locals.resetRunning\"\n                      :param-primary=\"locals.resetSuccessMessage\"\n                      data-test=\"reset_switch-user-password\"\n          ></ae-layout>\n        </section>\n      </div>\n    </section>\n  </div>\n\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"0cf9d513-88c6-406f-bb73-dcdfe544e85d","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-07-10T12:02:26+00:00","backedBy":"","by":"b7485498-f1f3-4ab1-87d1-9cb63ea890c8","client":"server","from":"","impersonatedBy":""},"p":"b676aa47-5082-403c-bf82-6aeead137ec1","previous":{"v":"32218c8bc1514eed"},"stamps":[],"t":1783684946010,"v":"5aa49304473c1d7a"},{"id":"d3762fb9-ac88-41b8-a472-c6f5795f0142","v":"9d03dae056318430","previous":{"v":"83e6300bafa58147"},"p":"3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:Mail Share Layout","applies":"","template":"\n<div class=\"ae-dialog-region ae-stacking-context ae-app ae-theme ae-light _CSS-app-container\"\n      v-responsive\n      @drop.prevent\n      @dragover.prevent\n      @ae-drill-into.prevent.stop\n      @ae-will-navigate.prevent.stop\n>\n  <div class=\"_CSS-app\">\n    {{ params.pageDocumentId}}\n        <ae-design  name=\"title\"\n                :document-id=\"params.pageDocumentId\"\n                :param-share=\"locals.share\"\n    ></ae-design>\n    <ae-design  name=\"rd:page-shared\"\n                :document-id=\"params.pageDocumentId\"\n                :param-share=\"locals.share\"\n    ></ae-design>\n  </div>\n</div>\n\n","css":"._CSS-app-container {\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n}\n\n._CSS-app {\n  width: 100%;\n  height: 100%;\n  overflow-y: scroll;\n  overflow-x: hidden; \n  -webkit-overflow-scrolling: touch;\n  background: var(--ae-background-100);\n  color: var(--ae-background-900);\n}","controller":"async init() {\n  this.SHARES_FOLDER_ID = '4f2ebae5-4382-4717-9a10-83dcebfe34dd'\n\n  const shareIdentifier = packages.window.location.pathname.split('/').slice(-1)[0]\n\n  if (!shareIdentifier) {\n    return\n  }\n\n  locals.share = await Aeppic.findOne(`p:${this.SHARES_FOLDER_ID} data.identifier:${shareIdentifier}`) \n\n  if (!locals.share) {\n    locals.share = await Aeppic.findOne(`p:${params.pageDocumentId} data.identifier:${shareIdentifier}`)\n  }\n}","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"f67e8e185e6d963b","text":"Window"}]},"locks":[],"created":{"at":"2024-05-07T13:50:24+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-05-08T11:53:25+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1715169205878,"ct":1715089828442,"a_depth":3,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","0c440c7a-219d-4465-9cbe-2d0eff6ec7ad","85cd7d8f-35be-4092-a40c-274f50729126"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2019-09-13T09:20:43+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","client":"server","from":""},"ct":1740666014602,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      ManualTimeEntry: '2c135a0b-43d4-4bde-a5dd-49eb4539279b',\n      ErfassteZeit: 'f9279010-1935-4139-abbb-82d928aa09dc'\n    }\n\n    this.NEW_COMMANDS = {\n      TrackedTime: '600b9480-9ea0-473f-86b0-b63c05ccb24d'\n    }\n\n    locals.timer = await this.getTimer()\n  }\n\n  async getTimer() {\n    let timer = null\n\n    const existingTimer = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.ManualTimeEntry}`)\n\n    if (existingTimer) {\n      timer = await Aeppic.edit(existingTimer)\n    } else {\n      timer = await Aeppic.new(this.FORMS.ManualTimeEntry, Aeppic.Account.id)\n      timer.data.abrechenbar = true\n    }\n\n    if (params.document || params.documentId) {\n      const target = params.document || (await Aeppic.get(params.documentId))\n\n      if (target) {\n        timer.addReference('dokument', target)\n      }\n    }\n\n    return timer\n  }\n\n  async save() {\n    console.log('save', locals.timer)\n\n    if (\n      !locals.timer.data.dokument.id ||\n      !locals.timer.data.dauer ||\n      Object.keys(locals.timer.data.dauer).length === 0\n    ) {\n      return\n    }\n\n    // NOTE (2025-03-03): saving only for historical purposes? not needed. removed for now\n    // Aeppic.save(locals.timer)\n\n    Aeppic.delete(locals.timer)\n\n    const trackedTimeResult = await Aeppic.Commands.execute(this.NEW_COMMANDS.TrackedTime, locals.timer.data.dokument, {\n      Account: Aeppic.Account,\n      ProfilePage: Aeppic.ProfilePage\n    })\n\n    if (!trackedTimeResult.ok) {\n      console.error('Error creating tracked time', trackedTimeResult.error)\n      return\n    }\n\n    const trackedTime = trackedTimeResult.value\n\n    trackedTime.data = {\n      ...trackedTime.data,\n      ...{\n        name: locals.timer.data.name,\n        dauer: locals.timer.data.dauer,\n        tag: locals.timer.data.tag,\n        abrechenbar: locals.timer.data.abrechenbar\n      }\n    }\n\n    Aeppic.save(trackedTime)\n\n    // TODO: navigate to data.dokument? show track completion?\n\n    $emit('close')\n  }\n}\n","css":"._CSS-timer {\n  height: 100%;\n\n  display: flex;\n  flex-flow: column;\n}\n\n\n._CSS-actions {\n  display: flex;\n  justify-content: flex-end;\n}","name":"rd:Manual Time Entry","packages":[],"template":"<div class=\"_CSS-timer\" v-if=\"locals.timer\">\n  <ae-form :document=\"locals.timer\"\n            layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n  ></ae-form>\n  \n  <div style=\"flex:1\"></div>\n  \n  <div class=\"_CSS-actions\">\n    <button class=\"ae-button ae-button--primary\" @click=\"controller.save()\" :disabled=\"!locals.timer.data.dokument.id\">\n      Speichern\n    </button>\n  </div> \n\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"4aa68c04-72ed-4f25-9b4f-7a6b6449f614","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-05-11T13:21:08+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"85cd7d8f-35be-4092-a40c-274f50729126","previous":{"v":"d8ba103fd140690c"},"stamps":[],"t":1778505668119,"v":"9ff01aa8c78a0c3b"},{"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2022-05-23T14:23:35+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1678711089838,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      AufgabeCore: '0deb4864-cbb6-420c-99ee-337c7444ab24',\n      AufgabeEnergyLeistung: '88b1f60e-71f6-46f5-94ea-3d7bbe972950',\n      // MeineAufgabeArc: '90877d25-bbae-421e-9ea7-0631dcbf11c2',\n      // MeineAufgabeBizpin: '544d11b1-a156-4568-aeb3-2a60b2b57807',\n      Termin: 'e6b7aced-aaa0-49a4-b573-cfa307595402',\n      Wiedervorlage: '53eecc66-c1a1-47da-b9df-67cc2b8b60f5',\n      Aktivitaet: '84ede5f8-c5af-4113-8235-4b7fa528e265',\n    }\n\n    locals.tasks = []\n    locals.activities = []\n    locals.appointments = []\n    locals.documents = []\n\n    // NOTE: deactivated because it is also not visible in calendar. So no need to add it here\n    // const followups = await this.getFollowups()\n\n    this._update({ tasks: params.tasks, activities: params.activities, appointments: params.appointments })\n\n    watchParam('tasks', (tasks) => this._update({ tasks }))\n    watchParam('activities', (activities) => this._update({ activities }))\n    watchParam('appointments', (appointments) => this._update({ appointments }))\n\n    // params.debug && console.log({ documents, filtered: locals.documents }, params.date)\n  }\n\n  _update(opts) {\n    const { tasks, activities, appointments } = opts \n\n    if (tasks) {\n      locals.tasks = packages.SearchHelpers.filterDocumentsToInterval(\n        Aeppic,\n        {\n          start: params.date.start,\n          end: params.date.end,\n          fieldName: 'data.bisStart',\n          fullDays: true,\n        },\n        tasks\n      )\n    }\n\n    if (appointments) {\n      locals.appointments = packages.SearchHelpers.filterDocumentsToInterval(\n        Aeppic,\n        {\n          start: params.date.start,\n          end: params.date.end,\n          fieldName: 'data.start',\n          fullDays: true,\n        },\n        appointments\n      )\n    }\n\n    if (activities) {\n      locals.activities = packages.SearchHelpers.filterDocumentsToInterval(\n        Aeppic,\n        {\n          start: params.date.start,\n          end: params.date.end,\n          fieldName: 'data.wann',\n          fullDays: true,\n        },\n        activities\n      )\n    }\n\n    locals.documents = [...locals.tasks, ...locals.appointments, ...locals.activities]\n  }\n\n  _buildQuery(profilePageId, calendars, attendeesFieldName) {\n    const startDateAsIso = params.date.start.minus({ week: 1 }).toISO()\n    const endDateAsIso = params.date.end.plus({ week: 1 }).toISO()\n\n    const query = Aeppic.Query.descendants(Aeppic.Account.a[0])\n      .forms(calendars.map((r) => r.form))\n      .where(attendeesFieldName)\n      .is(profilePageId)\n\n    if (calendars.length) {\n      query.subQuery((q) => {\n        for (const calendar of calendars) {\n          q.or\n            .where(calendar.fields.start)\n            .isInRange(startDateAsIso, endDateAsIso)\n            .or.where(calendar.fields.end)\n            .isInRange(startDateAsIso, endDateAsIso)\n        }\n      })\n    }\n\n    return query\n  }\n\n  getStartAndEnd(startValue, endValue) {\n    const start = startValue ? Aeppic.DateTime.fromISO(startValue) : null\n    const end = endValue ? Aeppic.DateTime.fromISO(endValue) : null\n\n    const dayStart = start.startOf('day')\n    const dayEnd = end ? end.endOf('day') : start.endOf('day')\n\n    // FIXME: this -/+ days stuff is nescessary because the server's find() does not know the local timezone.\n    const startMinus1Day = dayStart.plus({ days: -1 })\n    const endPlus1Day = dayEnd.plus({ days: 1 })\n\n    return {\n      start: dayStart,\n      end: dayEnd,\n      startMinus1Day,\n      endPlus1Day,\n    }\n  }\n\n  async getFollowups() {\n    const queryString = `p:${Aeppic.Account.id} f.id:${this.FORMS.Wiedervorlage}`\n\n    const findOptions = {\n      sort: {\n        field: 'data.date',\n        descending: false,\n      },\n    }\n\n    const intervalOptions = {\n      start: params.date.start,\n      end: params.date.end,\n      fieldName: 'data.date',\n      fullDays: true,\n    }\n\n    params.debug && console.log('getFollowups', queryString, findOptions, intervalOptions)\n\n    return packages.SearchHelpers.findInterval(Aeppic, intervalOptions, queryString, findOptions)\n  }\n}\n","css":"\n._CSS-body {\n  display: flex;\n  flex-flow: column;\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  background: var(--ae-ui-background);\n\n  padding: var(--ae-size-2);\n}\n","name":"rd:Meine Aufgaben & Termine im Zeitraum","packages":[{"id":"9fbc0645-b97a-4b98-8520-02670f21ac0b","text":"Aeppic Search Helpers","v":"8c5eaad78929f3bc"}],"template":"<!-- <div class=\"_CSS-body bg-green-200\"> -->\n  <!-- <ae-list  v-if=\"params.view === 'calendar'\"\n            list-id=\"cda28cd1-b41b-4193-b3e2-1d590c400741\"\n            :documents=\"locals.documents\"\n            @selected=\"Aeppic.drillInto($event, arguments[1])\"\n            :params=\"{ date: params.date.start, \n                      calendars: locals.calendars, \n                      query: locals.query, \n                      debug: false,\n                      documentToCalendarMapper: (doc) => controller.mapDocumentToCalendar(doc),\n                      hideControlBar: true,\n                      view: 'week'\n                    }\" \n            class=\"h-full\"\n  ></ae-list> -->\n<ae-list   list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n          param-design=\"rd:agenda,rd:search-card\" \n          :documents=\"locals.documents\"\n          @selected=\"Aeppic.drillInto($event, arguments[1])\"\n          :params=\"{ date: params.date, \n                    query: locals.query, \n                  }\" \n          class=\"h-full\"\n          :param-empty-text=\"params.emptyText\"\n  ></ae-list>\n<!-- </div> -->\n<!-- {{locals.query}} -->\n<!-- {{params}}\n{{ locals.documents }}\n{{ locals.calendarConfiguration }} -->\n "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"9f48b6a6-ded4-4543-b70a-4bd21a58f117","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-01-09T10:54:45+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"0d2ed632-691b-479a-8003-008b4a6d815e","previous":{"v":"b66c5f7dac1f10b1"},"stamps":[],"t":1767956085597,"v":"bfc73d95cdc17392"},{"id":"8925a107-fe15-40a1-8ac4-0c1646050ec0","v":"197ed1bbdba8e515","cloneOf":{"id":"daec4d20-49ab-44a6-8989-11e93e16604b","v":"77ffaf385b64efbc","text":"rd:Zuletzt von mir geändert"},"originalCloneOf":{"id":"daec4d20-49ab-44a6-8989-11e93e16604b","v":"77ffaf385b64efbc","text":"rd:Zuletzt von mir geändert"},"previous":{"v":"initial"},"p":"d98e0ddd-7901-4cc6-864a-813fe8fb196a","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:Meine beobachteten Ereignisse","applies":"","template":"  <div class=\"text-sm text-neutral-500 mb-2 flex gap-2 items-center\">\n    <ae-icon class=\"fa fa-history\"></ae-icon>\n    <div>Von mir zu benachrichtigende Ereigniss-Orte</div>\n  </div>\n\n  <ae-list list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n            :documents=\"locals.documents\"\n            :sort=\"{ field: 'data.name' }\"\n            :filter=\"locals.filter\"\n            :param-divide=\"true\"\n            param-design=\"rd:search-card\" \n            :param-design-params=\"{ readonly: true, disableButtonRight: true }\"\n            ref=\"list\"\n            @selected=\"$emit('selected', $event)\"\n            @focus-out=\"$emit('focus-out')\"\n            :param-initial-focus-entry=\"true\" \n  ></ae-list> \n  ","css":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      ActivitySubscription: '1daa73c2-8f35-4b05-956a-4870f7d2a5ef'\n    }\n\n    const filter = `f.id:${this.FORMS.ActivitySubscription} created.by:${Aeppic.Account.id}`\n\n    const subs = await Aeppic.find(filter, { size: 9999 })\n    locals.documents = await Promise.all(subs.map(sub => Aeppic.get(sub.p)))\n\n    $on('focus-entry', async event => {\n      await Aeppic.nextRenderPass()\n      await Aeppic.nextRenderPass()\n\n      $refs.list.$emit('focus-entry', event)\n    })\n  }\n}  ","packages":[]},"locks":[],"created":{"at":"2023-08-02T14:36:46+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-08-02T14:43:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1690987414903,"ct":1690987006774,"a_depth":3,"a":["apps","9302d29e-bf32-4350-a5fd-18b542d1b5db","d98e0ddd-7901-4cc6-864a-813fe8fb196a"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"4ae0b80a-8a78-4419-858b-cdeeb84b6c83","v":"41673ee1ddbfdfd5","cloneOf":{"id":"daec4d20-49ab-44a6-8989-11e93e16604b","v":"77ffaf385b64efbc","text":"rd:Zuletzt von mir geändert"},"originalCloneOf":{"id":"daec4d20-49ab-44a6-8989-11e93e16604b","v":"77ffaf385b64efbc","text":"rd:Zuletzt von mir geändert"},"previous":{"v":"initial"},"p":"d98e0ddd-7901-4cc6-864a-813fe8fb196a","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:Meine letzten Kommentare","applies":"","template":"  <div class=\"text-sm text-neutral-500 mb-2 flex gap-2 items-center\">\n    <ae-icon class=\"fa fa-history\"></ae-icon>\n    <div>Meine letzten Kommentare</div>\n  </div>\n\n  <ae-list list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n            :root-document-id=\"params.company.id\"\n            query-id=\"71d5633a-9dbd-4c96-b6e0-1c6ffc5ef0f1\"\n            :search-options=\"{ size: 10 }\"\n            :sort=\"{ field: 'modified.at', descending: true }\"\n            :filter=\"controller.lastModifiedFilter\"\n            :param-divide=\"true\"\n            param-design=\"rd:search-card\"\n            :param-design-params=\"{ readonly: true, disableButtonRight: true }\"\n            ref=\"list\"\n            @selected=\"$emit('selected', $event.p, { highlightComment: $event.id })\"\n            @focus-out=\"$emit('focus-out')\"\n            :param-initial-focus-entry=\"true\" \n  ></ae-list> \n","css":"","controller":"class Controller {\n  init() {\n    $on('focus-entry', async event => {\n      await Aeppic.nextRenderPass()\n      await Aeppic.nextRenderPass()\n\n      $refs.list.$emit('focus-entry', event)\n    })\n  }\n\n  get lastModifiedFilter() {\n    return `modified.by:${Aeppic.Account.id} AND f.id:cf155969-ede1-43a4-9b10-3a697b19db91`.trim()\n  }\n}","packages":[]},"locks":[],"created":{"at":"2024-10-01T08:18:58+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-10-01T08:22:51+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1727770971096,"ct":1727770738998,"a_depth":3,"a":["apps","9302d29e-bf32-4350-a5fd-18b542d1b5db","d98e0ddd-7901-4cc6-864a-813fe8fb196a"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","9302d29e-bf32-4350-a5fd-18b542d1b5db","d98e0ddd-7901-4cc6-864a-813fe8fb196a"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2023-04-12T13:13:44+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1681305224679,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Pins: '271894b3-6ed5-49f2-9234-9fdd5f7c02aa'\n    }\n\n    locals.pinned = false\n    locals.pins = null\n\n    const pinsDocument = await this.getOrCreatePinsDocument()\n\n    locals.pins = pinsDocument \n\n    $on('focus-entry', async event => {\n      await Aeppic.nextRenderPass()\n      await Aeppic.nextRenderPass()\n\n      $refs.list.$emit('focus-entry', event)\n    })\n\n    Aeppic.watch(pinsDocument, (updatedPinsDocument) => {\n      locals.pins = updatedPinsDocument\n      this.update(params.document)\n    })\n\n    watchParam('document', doc => this.update(doc))\n    this.update(params.document)\n  }\n\n  async getOrCreatePinsDocument() {\n    let pinsDocument = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.Pins}`, { sort: { field: 'created.at', descending: true } })\n\n    if (!pinsDocument) {\n      const newDocument = await Aeppic.new(this.FORMS.Pins, Aeppic.Account.id)\n      Aeppic.save(newDocument)\n\n      pinsDocument = newDocument.cloneAsDocument()\n    }\n\n    return pinsDocument\n  }\n\n  update(doc) {\n    if (!locals.pins || !doc) {\n      return\n    }\n\n    locals.pinned = !!locals.pins.data.pinnedDocuments.find(d => doc.id === d.id)\n  }\n\n  async toggle() {\n    const included = !!locals.pins.data.pinnedDocuments.find(d => params.document.id === d.id)\n    \n    let remove = false\n    let add = false\n\n    if (included) {\n      remove = true\n      locals.pinned = false\n    } else {\n      add = true\n      locals.pinned = true\n    }\n\n    const editablePinsDocument = await Aeppic.edit(locals.pins)\n\n    if (remove) {\n      editablePinsDocument.removeReference('pinnedDocuments', params.document)\n    } else if (add) {\n      editablePinsDocument.addReference('pinnedDocuments', params.document)\n    }\n\n    Aeppic.save(editablePinsDocument) \n  }\n}","css":"","name":"rd:Meine Pins","packages":[],"template":"<div class=\"\">\n  <!-- <div class=\"text-sm text-neutral-500 flex items-center gap-2\">\n    <div>Pins</div>\n  </div> -->\n\n  <!-- <ae-form layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n          :document=\"locals.pins\"\n  ></ae-form> -->\n \n  <ae-list\n          list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n          :documents=\"locals.pins?.data.pinnedDocuments\"\n          :watch-documents=\"false\"\n          param-design=\"rd:pinned\"\n          ref=\"list\"\n          @selected=\"$emit('selected', $event)\"\n          @focus-out=\"$emit('focus-out')\"\n          :param-initial-focus-entry=\"true\" \n          param-empty-text=\"Pinnen Sie Documents über das Stecknadel-Icon.\"\n  ></ae-list>\n</div>    "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"12ef5790-dfe1-478c-ab9d-c46496936f8f","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-05-06T13:22:33+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"d98e0ddd-7901-4cc6-864a-813fe8fb196a","previous":{"v":"05a18ff431dd16a2"},"stamps":[],"t":1746537753662,"v":"90abe84d206ba502"},{"id":"175d2914-d624-4185-b8ac-a26423269d27","v":"b56cc801aabb4244","previous":{"v":"e32569e90d4442ea"},"p":"594e6b26-7310-4d00-aad9-2a577ccab542","f":{"id":"layout-form","v":"009ca1eb13023717","text":"Layout"},"data":{"name":"rd:month-range-chart","applies":"","template":"<div class=\"h-full w-full flex flex-col gap-4\">\n  <div v-if=\"locals.fromDocument && locals.toDocument\" class=\"flex flex-wrap items-end gap-4\">\n    <div>\n      <div class=\"text-xs font-semibold text-neutral-500 dark:text-neutral-400 mb-1\">Von</div>\n      <ae-control :document=\"locals.fromDocument\"\n                  field-name=\"value\"\n                  name=\"rd:date\"\n                  :params=\"{ type: 'year-month', min: controller.minMonth, max: controller.maxMonth }\"\n                  @field-updated=\"controller.onDateChanged()\"\n      ></ae-control>\n    </div>\n    <div>\n      <div class=\"text-xs font-semibold text-neutral-500 dark:text-neutral-400 mb-1\">Bis</div>\n      <ae-control :document=\"locals.toDocument\"\n                  field-name=\"value\"\n                  name=\"rd:date\"\n                  :params=\"{ type: 'year-month', min: controller.minMonth, max: controller.maxMonth }\"\n                  @field-updated=\"controller.onDateChanged()\"\n      ></ae-control>\n    </div>\n  </div>\n\n  <div>\n    <header v-if=\"params.title\" class=\"font-bold text-lg truncate mb-2\">{{ params.title }}</header>\n    <div v-if=\"locals.loading\" class=\"text-sm text-neutral-400 py-8 text-center\">Lade...</div>\n    <div v-show=\"!locals.loading\" class=\"relative\" style=\"height: 320px; width: 100%;\">\n      <canvas ref=\"chart\"></canvas>\n    </div>\n  </div>\n</div>\n","css":"","controller":"class Controller {\n  async init() {\n    this.MONTH_NAMES = ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez']\n    this.DATE_FORM = '59080466-d827-498c-8f77-cf1000df0658'\n    this.chart = null\n    this.requestId = 0\n\n    locals.loading = true\n    locals.chartLabels = []\n    locals.dataSets = []\n\n    const thisMonth = DateTime.local().startOf('month')\n    const parent = (params.document && params.document.id) || 'root'\n\n    locals.fromDocument = await Aeppic.new(this.DATE_FORM, parent, { skipDefaults: true })\n    locals.toDocument = await Aeppic.new(this.DATE_FORM, parent, { skipDefaults: true })\n\n    locals.fromDocument.data.value = thisMonth.minus({ months: 2 }).toISO()\n    locals.toDocument.data.value = thisMonth.toISO()\n\n    await this.reload()\n  }\n\n  get oneYearAgo() {\n    return DateTime.local().startOf('month').minus({ years: 1 })\n  }\n\n  get minMonth() {\n    return this.oneYearAgo.toISO()\n  }\n\n  get maxMonth() {\n    return DateTime.local().startOf('month').toISO()\n  }\n\n  onDateChanged() {\n    this.normalizeRange()\n    this.reload()\n  }\n\n  // Clamp both ends to [oneYearAgo, thisMonth] independently, then swap if picked backwards --\n  // clamping before swapping (rather than after) keeps the invariant correct even when both\n  // stored values have drifted past a bound (e.g. a long-idle session before the first click).\n  normalizeRange() {\n    const min = this.oneYearAgo\n    const thisMonth = DateTime.local().startOf('month')\n    const clamp = (d) => (d < min ? min : d > thisMonth ? thisMonth : d)\n\n    let from = DateTime.fromISO(locals.fromDocument.data.value)\n    let to = DateTime.fromISO(locals.toDocument.data.value)\n\n    from = clamp(from.isValid ? from : min)\n    to = clamp(to.isValid ? to : thisMonth)\n\n    if (from > to) {\n      const swap = from\n      from = to\n      to = swap\n    }\n\n    locals.fromDocument.data.value = from.toISO()\n    locals.toDocument.data.value = to.toISO()\n  }\n\n  buildMonthBuckets(from, to) {\n    const buckets = []\n    let cursor = from.startOf('month')\n    const end = to.startOf('month')\n\n    while (cursor <= end) {\n      buckets.push({ year: cursor.year, month: cursor.month, label: this.MONTH_NAMES[cursor.month - 1] + ' ' + cursor.year })\n      cursor = cursor.plus({ months: 1 })\n    }\n\n    return buckets\n  }\n\n  countByMonth(docs, buckets) {\n    const counts = new Array(buckets.length).fill(0)\n\n    for (const doc of docs) {\n      const docDate = DateTime.fromISO(doc.created.at)\n      const index = buckets.findIndex((b) => b.year === docDate.year && b.month === docDate.month)\n\n      if (index !== -1) {\n        counts[index]++\n      }\n    }\n\n    return counts\n  }\n\n  async reload() {\n    if (!params.fetchSeries) {\n      console.error('rd:month-range-chart requires param-fetch-series -- a (from, to) => Promise<[{ documents, label, backgroundColor, borderColor }]> callback')\n      return\n    }\n\n    const requestId = ++this.requestId\n    locals.loading = true\n\n    try {\n      const from = DateTime.fromISO(locals.fromDocument.data.value).startOf('month')\n      const to = DateTime.fromISO(locals.toDocument.data.value).endOf('month')\n\n      const series = await params.fetchSeries(from, to)\n      if (requestId !== this.requestId) return // a newer reload() started meanwhile -- drop this stale result\n\n      const buckets = this.buildMonthBuckets(from, to)\n\n      locals.chartLabels = buckets.map((b) => b.label)\n      locals.dataSets = series.map((s) => ({\n        data: this.countByMonth(s.documents, buckets),\n        label: s.label,\n        backgroundColor: s.backgroundColor,\n        borderColor: s.borderColor,\n        borderWidth: 1,\n      }))\n    } catch (err) {\n      if (requestId !== this.requestId) return\n      console.error('rd:month-range-chart: fetchSeries failed', err)\n      locals.chartLabels = []\n      locals.dataSets = []\n    }\n\n    if (requestId !== this.requestId) return\n    locals.loading = false\n\n    await Aeppic.nextRenderPass()\n    this.renderChart()\n  }\n\n  renderChart() {\n    if (!$refs.chart) return\n\n    if (this.chart) {\n      this.chart.destroy()\n    }\n\n    this.chart = new Chart($refs.chart, {\n      type: 'bar',\n      data: {\n        labels: locals.chartLabels,\n        datasets: locals.dataSets,\n      },\n      options: {\n        responsive: true,\n        maintainAspectRatio: false,\n        scales: {\n          y: { beginAtZero: true, ticks: { precision: 0 } },\n        },\n        plugins: {\n          legend: { position: 'top' },\n        },\n      },\n    })\n  }\n\n  destroy() {\n    if (this.chart) {\n      this.chart.destroy()\n    }\n  }\n}\n","packages":[],"parameters":[],"parametersDescriptions":[],"parametersTypes":[],"parametersControls":[],"parametersCardinalities":[]},"locks":[],"created":{"at":"2026-08-06T13:50:25+00:00","by":"e24f1d78-6fbd-4f97-9fb0-b1af9bd6bd13","backedBy":"","impersonatedBy":"","from":"","client":"server"},"modified":{"at":"2026-08-06T13:56:33+00:00","by":"e24f1d78-6fbd-4f97-9fb0-b1af9bd6bd13","backedBy":"","impersonatedBy":"","from":"","client":"server"},"t":1786024593424,"ct":1786024225343,"a_depth":3,"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","594e6b26-7310-4d00-aad9-2a577ccab542"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2022-05-11T08:54:15+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1771329038266,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.showPlaceholder = true\n    locals.shownOnce = false\n    locals.showDeleteInDeveloperActions = false\n\n    watchParam('document', () => {\n      // hide popup content again when document change to prevent unneeded watchers etc.\n      locals.shownOnce = false\n    })\n  }\n\n  async show(event) {\n    locals.shownOnce = true\n    \n    $refs.popup.toggle(event)\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    locals.showPlaceholder = false\n  } \n\n  showWiedervorlage() { \n    $refs.followup.$emit('show')\n    this.closePopup()\n  }\n\n  async closePopup() {\n    $refs.popup.close()\n  }\n\n}","css":"","name":"rd:More Actions Btn","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"fa fa-ellipsis-v\"\n            @selected=\"controller.show($event)\"\n            param-border=\"border-slate-200\"\n            :data-test=\"'layout' + '_' + layout.id\"\n></ae-layout>\n\n<ae-popup ref=\"popup\">\n  <div class=\"\">\n    <div v-if=\"locals.shownOnce\" class=\"min-w-[228px] min-h-[228px] z-10 top-0 left-0 right-0 bg-white\">\n      <div class=\"p-2 text-neutral-500 bg-neutral-50 border-b flex gap-2 items-center\">\n        <!-- <ae-design name=\"icon\" :document-id=\"params.document.f.id\"></ae-design> -->\n        <ae-design name=\"title\" :document-id=\"params.document.f.id\"></ae-design>\n\n        <div class=\"flex-1\"></div> \n  \n        <ae-design name=\"rd:creation-info\" :document=\"params.document\"></ae-design>\n      </div> \n\n      <div class=\"p-2 flex flex-col gap-1\">\n        <ae-design class=\"mb-3\" name=\"rd:more-dropdown-actions\" :document=\"params.document\" @close=\"controller.closePopup()\" :param-view=\"params.view\"></ae-design>\n<!-- \n        <ae-layout layout-id=\"262e95e6-f1f8-477c-834b-89d533027e1e\"\n                  :param-document=\"params.document\"\n                  :param-commands=\"['3e8121a3-26c3-4b56-8c32-c7aa7b28870a']\"\n        ></ae-layout>  -->\n\n \n        <ae-design name=\"rd:security-access-button\" :document=\"params.document\" @open=\"controller.closePopup()\"></ae-design>\n        <ae-layout layout-id=\"693c1015-8129-4d2a-b781-1ae6cf8ada73\" :param-document=\"params.document\" @open=\"controller.closePopup()\"></ae-layout>\n\n        <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  param-icon=\"far fa-alarm-clock\"\n                  param-text=\"Wiedervorlage\"\n                  param-classes=\"w-full\"\n                  @selected=\"controller.showWiedervorlage()\"\n        ></ae-layout> \n\n        <ae-design name=\"rd:history-button\" :document=\"params.document\" @open=\"controller.closePopup()\"></ae-design>\n\n        <ae-layout layout-id=\"4373ea43-cc54-40f4-8d94-a4329d2dcf66\" :param-document=\"params.document\" :param-view=\"params.view\" :param-tab=\"params.tab\"></ae-layout>\n\n        <div class=\"mt-3 p-1 flex\" v-if=\"!params.disableDelete\">\n          <!-- <ae-icon class=\"fa fa-trash\"></ae-icon>\n          Löschen -->\n          <ae-layout layout-id=\"0ded34c5-1221-4511-af93-d897a79f1369\"\n                      :param-document=\"params.document\"\n                      :params=\"{ buttonLayoutId: '80e59dec-29b1-45f1-8391-f5621cf9f0b2', buttonParams: { icon: 'far fa-trash', text: 'Löschen', classes: 'justify-center w-full text-red-500' } }\"\n                      class=\"flex-1\"\n                      @open=\"controller.closePopup()\"\n                      @visible=\"locals.showDeleteInDeveloperActions = false\"\n                      @invisible=\"locals.showDeleteInDeveloperActions = true\"\n          ></ae-layout> \n        </div>\n\n        <div v-if=\"Aeppic.Account?.data.allowDevMode\" class=\"mt-4\">\n          <div class=\"text-red-500\">Developer Aktionen. VORSICHT!</div>\n          <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                      param-icon=\"far fa-cog\"\n                      param-text=\"Upgrade document\"\n                      param-classes=\"w-full\"\n                      @selected=\"Aeppic.upgrade(params.document)\"\n          ></ae-layout>\n          <ae-layout v-if=\"locals.showDeleteInDeveloperActions\"\n                      layout-id=\"0ded34c5-1221-4511-af93-d897a79f1369\"\n                      :param-document=\"params.document\"\n                      :params=\"{ allowStructuralDelete: true, buttonLayoutId: '80e59dec-29b1-45f1-8391-f5621cf9f0b2', buttonParams: { icon: 'far fa-trash', text: 'Löschen', classes: 'justify-center w-full text-red-500' } }\"\n                      @open=\"controller.closePopup()\"\n          ></ae-layout>\n        </div>\n      </div>\n      \n      <ae-layout layout-id=\"6660c0f5-a770-41a3-8bce-5210f8c0bba7\" :param-document=\"params.document\" ref=\"followup\"></ae-layout>\n    </div>\n  </div>\n\n</ae-popup>\n\n\n\n"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"fc349b35-90c8-43c6-a13d-e4bf52dfc28a","inheritedLocks":[null,null,null,null],"locks":[],"meta":{},"modified":{"at":"2026-07-29T07:07:23+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"552f9f0e173081ae"},"stamps":[],"t":1785308843644,"v":"af9b72f2fd9b76a6"},{"a":["apps","14c27659-92d7-4b43-8c4f-25f4cceae591","fd76d7d9-ff93-4e79-810e-a4106783fd98"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2023-08-04T14:28:46+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1691159326711,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.STAMPS = {\n      CommentPublish: '04a939a8-6732-4f94-ad75-6f17ac417136'\n    }\n\n    this.FORMS = {\n      Comment: 'cf155969-ede1-43a4-9b10-3a697b19db91',\n      Notification: '6d164aff-df9b-470d-9632-cfb6f5892509',\n      Ping: '42cf6e7a-e304-49a6-86e1-c94d84f1d0d9',\n      Employee: 'd2ac3563-3c3f-4f02-b923-9b67abf98d10',\n      Group: 'group'\n    }\n\n    // locals.pingEmployeeSelectorSettings = {\n    //   filter: {\n    //     ancestorId: params.document.a[0],\n    //     base: `(f.id:${this.FORMS.Employee} OR f.id:${this.FORMS.Group})`,\n    //   }\n    // }\n\n    // locals.mentionEmployeeSelectorSettings = {\n    //   filter: {\n    //     ancestorId: params.document.a[0],\n    //     base: `f.id:${this.FORMS.Employee}`,\n    //   }\n    // }\n\n    locals.newComment = null\n\n    if (params.document) {\n      await this.createNewComment()\n    }\n\n    watchParam('document', async (doc) => {\n      await this.createNewComment(doc)\n    })\n  }\n\n  async createNewComment(document) {\n    locals.newComment = null\n\n    const newComment = await Aeppic.new(this.FORMS.Comment, params.document)\n    newComment.hidden = true\n    Aeppic.commit(newComment)\n\n    locals.newComment = newComment\n  }\n\n  async save() {\n    const filledOut = !!locals.newComment.data.content\n\n    if (!filledOut) {\n      return\n    }\n\n    const isPing = !!(params.receiver?.length)\n\n    let editable = locals.newComment\n\n    if (isPing) {\n      editable = await this.newPing(params.receiver)\n    }\n    \n    editable.data.content = locals.newComment.data.content\n\n    editable.hidden = false\n\n    Aeppic.save(editable)\n\n    $emit('commented', editable.cloneAsDocument())\n\n    if (!isPing) {\n      const comment = await Aeppic.get(editable)\n      Aeppic.stamp(comment, this.STAMPS.CommentPublish)\n    }\n\n    await this.createNewComment()\n  } \n  \n  async newPing(receiversParam) {\n    const receivers = await Aeppic.getAll(receiversParam)\n\n    const ping = await Aeppic.new(this.FORMS.Ping, params.document)\n\n    if (!receivers) {\n      throw new Error('Could not resolve receivers')\n    }\n\n    ping.data = {\n      document: await Aeppic.asReference(params.document),\n      who: await Aeppic.asReference(Aeppic.Account)\n    }\n\n    receivers.forEach(r => ping.addReference('receiver', r))\n\n    return ping\n  }\n}","css":"","name":"rd:New Comment","packages":[],"template":"<ae-control v-if=\"locals.newComment\"\n            name=\"editor-comment\"\n            :document=\"locals.newComment\"\n            field-name=\"content\"\n            :params=\"{ withoutBorder: true, withoutMenu: true, placeholderText: params.placeholderText || 'Hier schreiben...' }\"\n            ref=\"editor\"\n            @keydown.enter.native.prevent.capture=\"controller.save()\"\n></ae-control>\n "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"b3343e33-5143-4e4e-9143-e6ac24f68651","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-10-16T13:02:02+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"fd76d7d9-ff93-4e79-810e-a4106783fd98","previous":{"v":"d1d98910c33c393c"},"stamps":[],"t":1760619722606,"v":"b4fdc8f618a58908"},{"id":"695a3ec2-bddc-4cb0-b610-a093ef4a4ecd","v":"53e9d37e3aa407d8","previous":{"v":"3925d98fcb33e6c3"},"p":"177b1d7c-255c-4d16-b367-e9622b4db575","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:New Dialog Layout","applies":"","template":"<ae-dialog  ref=\"executionDialog\"\n            :backdrop-close=\"false\"\n            :dialog-size=\"controller.dialogSize\"\n\n>\n  <div v-if=\"locals.dialog\" slot=\"header\" slot-scope=\"scope\" class=\"flex justify-between items-center\">\n    <div>\n    {{ locals.dialog.data.title || locals.dialog.data.name }} \n    </div>\n\n     <template v-if=\"locals.cancelCommand\"> \n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  param-icon=\"far fa-times\"\n                 :xparam-icon=\"locals.cancelCommand.data.namedIcon\"\n                 :param-title=\"locals.cancelCommand.data.label || locals.cancelCommand.data.text\"\n                 @selected=\"controller.executeDialogCommand(locals.cancelCommand)\"\n                 param-border=\"border\"\n                :data-test=\"'dialog-' + locals.dialog.id + '_command-' + locals.cancelCommand.id\"\n      ></ae-layout>\n    </template>\n  </div>\n\n  <div slot=\"body\" @ae-drill-into.stop.prevent @ae-will-navigate.stop.prevent class=\"h-full flex flex-col justify-stretch\">\n    <ae-design  v-if=\"locals.dialog && locals.dialog.data.design && locals.targetDocument\"\n                :name=\"locals.dialog.data.design\"\n                :document=\"locals.targetDocument\"\n                :edit=\"locals.dialog.data.editable\"\n                :watch=\"false\"\n                :params=\"{ executionError: locals.executionError }\"\n                class=\"flex-1\"\n                @close=\"controller.closeExecutionDialog()\"\n    ></ae-design>\n\n    <p v-if=\"locals.dialog && locals.dialog.data.message\"\n      style=\"white-space:pre-line;\"\n      v-html=\"Aeppic.Parser.markdown(locals.dialog.data.message)\"\n      class=\"flex-1\"\n    >\n    </p>\n \n    <div class=\"flex-1\" v-if=\"locals.executionError\">\n      <ae-icon class=\"far fa-exclamation-circle text-red-500\"></ae-icon>\n      {{ Aeppic.translate(locals.executionError) }}\n    </div>\n  </div>\n\n\t<div v-if=\"locals.dialog && locals.commands.length\" slot=\"commands\" slot-scope=\"scope\" class=\"p-4 flex gap-1 \">\n    <template v-for=\"(command, index) of locals.commands\"> \n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                 :param-icon=\"command.data.namedIcon\"\n                 :param-text=\"command.data.label || command.data.name\"\n                 :param-primary=\"index === locals.commands.length - 1\"\n                 @selected=\"controller.executeDialogCommand(command.id)\"\n                 param-border=\"border\"\n                 :data-test=\"'dialog-' + locals.dialog.id + '_command-' + command.id\"\n      ></ae-layout>\n    </template>\n\t</div>\n</ae-dialog> \n","css":"","controller":"class Controller {\n  init() {\n    locals.dialog = null\n    locals.executionError = null\n    locals.targetDocument = null\n    locals.commands = []\n    locals.cancelCommand = null\n\n    $on('show', (options) => this._show(options))\n\n    $emit('ready')\n  } \n\n  async _show(options) {\n    locals.dialog = options.dialog && await Aeppic.get(options.dialog)\n    const command = options.command && await Aeppic.get(options.command)\n    const commandParams = options.commandParams ?? {}\n    console.log('NEW', { document: options.document, command, commandParams })\n\n    locals.commandParams = commandParams\n\n    const targetDocument = options.document || await this._executeCommand(command.id, params.document, locals.commandParams)\n    if (Aeppic.isEditableDocument(targetDocument)) {\n      locals.targetDocument = targetDocument\n    } else {\n      locals.targetDocument = await Aeppic.edit(targetDocument)\n    }\n\n    if ('hidden' in locals.targetDocument) {\n      locals.targetDocument.hidden = true\n    }\n       \n    locals.executionError = null\n\n    if (locals.dialog) {\n      const allCommands = Array.from(await Aeppic.getAll(locals.dialog.data.commands)).reverse()\n\n      const { cancel, rest } = allCommands.reduce((result, command) => {\n        if (command) {\n          if (!result.cancel && command.data.name.toLowerCase().trim() === 'cancel') {\n            result.cancel = command\n          } else {\n            result.rest.push(command)\n          }\n        }\n \n        return result\n      }, { cancel: null, rest: [] })\n\n      locals.commands = rest\n      locals.cancelCommand = cancel\n    }\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n    \n    $refs.executionDialog.show()\n  }\n\n  async _form() {\n    if (!params.document) {\n      return null\n    }\n\n    return Aeppic.getForm(params.document.f.id)\n  }\n\n  closeExecutionDialog() {\n    $refs.executionDialog && $refs.executionDialog.close()\n\n    locals.targetDocument = null\n    locals.executionError = null\n\n    $emit('close')\n  }\n\n  async executeDialogCommand(commandId) {\n    const commandResult = await this._executeCommand(commandId, locals.targetDocument, locals.commandParams)\n\n    if (!commandResult) {\n      return\n    }\n\n    this.closeExecutionDialog()\n  }\n\n  async _executeCommand(commandId, doc, commandParams) {\n    console.log(commandId, doc)\n\n    const command = await Aeppic.get(commandId)\n\n    // FIXME: if the import code following the commandExecution would not be needed, one could use the Command's options { navigation: true } to execute potential navigation\n    const commandResult = await Aeppic.Commands.execute(command, doc, {  ...commandParams, Account: Aeppic.Account, ProfilePage: Aeppic.ProfilePage })\n\n    if (!commandResult.ok || (commandResult.value && 'ok' in commandResult.value && !commandResult.value.ok)) {\n      const message = commandResult.value && commandResult.value.message || commandResult.error || 'error:execution'\n\n      locals.executionError = message\n      console.error(commandResult)\n      \n      return false\n    }\n\n    let result = commandResult.value\n\n    if (commandResult.value != null) {\n      if ('value' in commandResult.value) {\n        result = commandResult.value.value\n      } else {\n        result = commandResult.value\n      }\n    }\n\n    if (result) {\n      const resultAlreadyImported = await Aeppic.get(result)\n\n      if (!resultAlreadyImported) {\n        await Aeppic.import(result)\n      }\n\n      if (!Aeppic.isEditableDocument(result)) {\n        result = await Aeppic.edit(result)\n      }\n    }\n\n    switch (command.data.navigation) {\n      case 'drillInto': \n        Aeppic.drillInto(result)\n        break\n      case 'navigate': \n        Aeppic.navigateTo(result)\n        break\n      case 'back': \n        Aeppic.navigateBack()\n        break\n      case 'dialog':\n        console.error('Dialog command navigation not implemented yet')\n        break\n      case 'no':\n      default:\n    }\n\n    return result || true\n  }\n\n  get dialogSize() {\n    const size = {\n      height: null,\n      width: null,\n    }\n\n    if (Aeppic.Device !== 'Desktop') {\n      return size\n    }\n\n    size.height = (locals.dialog && locals.dialog.data.dialogHeight) || '90vh'\n    size.width = (locals.dialog && locals.dialog.data.dialogWidth) || '60vw'\n\n    return size\n  }\n\n  destroy() {\n    this.closeExecutionDialog()\n  }\n} ","packages":[]},"locks":[],"created":{"at":"2023-12-20T09:15:51+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2025-01-13T15:17:39+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1736781459052,"ct":1707227173472,"a_depth":2,"a":["system","177b1d7c-255c-4d16-b367-e9622b4db575"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9","cc50ceda-c259-4f93-95e2-83aff7d0c595"],"a_depth":5,"a_forms":["system-folder-form","folder","form","folder","layout-form"],"created":{"at":"2025-10-07T13:55:36+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759845336700,"data":{"applies":"","controller":"","css":"","name":"rd:news card","packages":[],"template":"<article\n  class=\"rounded-md surface-container p-2\"\n>\n  <header\n    class=\"flex gap-2 items-center\"\n  >\n    <div\n      class=\"flex items-center justify-center size-12 text-3xl\"\n    >\n      <ae-icon\n        class=\"far fa-circle size-full \"\n      ></ae-icon>\n    </div>\n    <div class=\"flex-1\">\n      <span class=\"block\">\n        {{ params.author }}\n      </span>\n      <span class=\"block\">\n        {{ params.date }}\n      </span>\n    </div>\n\n  </header>\n  <div>\n    <h2 class=\"font-bold text-2xl\">\n      {{ params.title }}\n    </h2>\n    <div class=\"overflow-hidden text-ellipsis h-16\">\n      {{ params.article }} \n    </div>\n  </div>\n  <footer class=\"mt-2\">\n    <ae-layout\n      layout-id=\"6b4808fe-9df8-4c1b-8f68-0e60bc17dd15\"\n      param-icon=\"far fa-arrow-right\"\n      param-importance=\"tertiary\"\n      param-size=\"xSmall\"\n      param-text=\"Weiter Lesen\"\n    ></ae-layout> \n  </footer>\n</article>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"06eba173-63d7-45d6-84a8-1b603008194b","inheritedLocks":[null,null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-07T13:55:55+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"cc50ceda-c259-4f93-95e2-83aff7d0c595","previous":{"v":"initial"},"stamps":[],"t":1759845355778,"v":"a32d49fdf8240519"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2023-01-11T14:39:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1682583407456,"data":{"applies":"","controller":"class Controller {\n  init() {\n\n    this.onResizeHandler = (windowWidth) => {\n      // const titleWidth = Math.floor(windowWidth / 4)\n      // const titleWidth = 360\n\n      if (windowWidth < 640) { // xs \n        locals.editableTitleWidth = `180px`\n      } else if (windowWidth < 768) { // sm\n        locals.editableTitleWidth = `260px`\n      } else if (windowWidth < 1280) { // xl\n        locals.editableTitleWidth = `180px`\n      } else if (windowWidth < 1536) { // 2xl\n        locals.editableTitleWidth = `360px`\n      } else {\n        locals.editableTitleWidth = `500px`\n      }\n\n      // console.log({  windowWidth, titleWidth, editableTitleWidth: locals.editableTitleWidth })   \n    }\n\n    locals.editableTitleWidth = '200px'\n\n    locals.showHeaderActions = false\n    locals.showHeaderActionsList = false\n\n    locals.tab = params.pageParams?.tab || ''\n\n    this.onResizeHandler(params.windowWidth)\n    watchParam('windowWidth', (value) => this.onResizeHandler(value))\n    watchParam('pageParams', (pageParams) => {\n      locals.tab = pageParams?.tab || ''\n    })\n\n    this.handler = (clickEvent) => {\n      if (!locals.showHeaderActions) {\n        return\n      }\n\n      const clickIsInContainer = clickEvent.composedPath().find(p => p === $refs.headerActionsContainer)\n\n      if (!clickIsInContainer) {\n        this.closeHeaderActions()\n      }\n    }\n  }\n\n  get sharedContextScopeName() {\n    return `layoutName:pageDocument,documentId:${params.pageDocument.id}`\n  }\n\n  mounted() {\n    const el = $refs.root\n    if (!el) {\n      return\n    }\n\n    el.setAttribute('data-aeppic-sharedscope', this.sharedContextScopeName)\n    this.shared = Aeppic.SharedContext.forElement(el)\n\n    this.shared.set('page', {\n      // filters: '',\n    })\n  }\n\n  openHeaderActions() {\n    if (locals.showHeaderActions) {\n      return\n    }\n\n    this._setupClick()\n\n    locals.showHeaderActions = true\n\n    Aeppic.setTimeout(() => {\n      locals.showHeaderActionsList = true\n    }, 450)\n  }\n\n\n  _setupClick() {\n    packages.window.addEventListener('click', this.handler)\n  }\n\n  _tearDownClick() {\n    packages.window.removeEventListener('click', this.handler)\n  }\n\n\n  closeHeaderActions() {\n    this._tearDownClick()\n\n    locals.showHeaderActions = false\n    locals.showHeaderActionsList = false\n  }\n\n  widenTitleWidth() {\n    console.log($refs.titleContainer?.parentElement.clientWidth, params)\n    if (params.windowWidth >= 1024) {\n      // locals.editableTitleWidth = '65vw'\n      locals.editableTitleWidth = $refs.titleContainer?.parentElement.clientWidth + 'px'\n    }\n  }\n\n  resetTitleWidth() {\n    this.onResizeHandler(params.windowWidth)\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) {\n    if (!$refs[refName] || !$refs[refName].$el || !$refs[refName].$el.children) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n  selectedTab(tab) {\n    locals.tab = tab\n    this.persistSelectedTab(tab)\n\n    if (Aeppic.Root.params?.queryParams?.tab !== tab) {\n      // navigation is only used to persist the tab in the URL. \n      // If tab is already in url, do not navigate\n      Aeppic.navigateTo(params.pageDocument, {...Aeppic.Root.params.queryParams, tab })\n    }\n  }\n\n  persistSelectedTab(tab) {\n    if (!params.pageDocument?.f?.id) {\n      return\n    }\n\n    const tabPersistanceKey = `bp-tab-lA-form-ancestor_${params.pageDocument.f.id}_${params.pageDocument.a?.[0]}`\n    Aeppic.LocalStorage.setValue(tabPersistanceKey, tab)\n  }\n\n\n  destroy() {\n    this._tearDownClick()\n  }\n} ","css":"","name":"rd:Page Document Layout","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"d4ce6dec568c3dc1"}],"template":"<section\n  v-if=\"!params.hide\"\n  class=\"w-full h-full flex flex-col overflow-hidden bg-neutral-50 dark:bg-slate-700 relative\"\n  ref=\"root\"\n>\n  <header class=\"px-2 h-[52px] w-full flex items-center gap-2\">\n    <section class=\"relative\" v-if=\"params.showBurgerMenu\">\n      <ae-layout\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        param-icon=\"fa fa-bars\"\n        @selected=\"$emit('toggle-overlay-menu')\"\n        class=\"mr-2\"\n        param-border=\"border border-primary-200\"\n      ></ae-layout>\n\n      <div\n        v-if=\"locals.activitiesMenuEntry && locals.activitiesMenuEntry.unread != null && locals.activitiesMenuEntry.unread > 0\"\n        class=\"absolute right-0 top-0 pointer-events-none flex items-center justify-center rounded-full h-5 w-5 bg-red-200 border border-red-400 text-red-900 text-sm\"\n      >\n        {{ locals.activitiesMenuEntry.unread }}\n      </div>\n    </section>\n\n    <ae-design\n      v-if=\"!params.noNavigation\"\n      name=\"rd:navigation\"\n      :document=\"params.pageDocument\"\n      :param-transparent-forms=\"params.transparentForms\"\n      :param-is-drilled=\"params.isDrilled\"\n    ></ae-design>\n        \n    <ae-design \n    name=\"rd:quick-edit\"\n    :document=\"params.pageDocument\"\n    :param-readonly=\"params.readonly || params.pageDocument?.a?.length === 1\"\n    ></ae-design>\n\n\n    <div v-if=\"params.isDrilled\" class=\"hidden md:flex items-center gap-1\">\n      <ae-layout\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        @selected=\"$emit('back')\"\n        param-icon=\"far fa-chevron-up\"\n        :param-disabled=\"!params.canGoBack\"\n        param-border=\"border-secondary-200\"\n      ></ae-layout>\n\n      <ae-layout\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        @selected=\"$emit('forward')\"\n        param-icon=\"far fa-chevron-down\"\n        :param-disabled=\"!params.canGoForward\"\n        param-border=\"border-secondary-200\"\n      ></ae-layout>\n    </div>\n\n    <ae-design\n      name=\"rd:tabs\" \n      :document=\"params.pageDocument\"\n      @selected=\"controller.selectedTab($event)\"\n      :watch=\"false\"\n      :param-view=\"params.view\"\n      :param-window-width=\"params.windowWidth\"\n      :param-tab=\"params.pageParams?.tab\"\n      :param-debug=\"false\"\n      class=\"shrink-0 overflow-hidden flex-grow p-1\"\n    ></ae-design>\n\n    <ae-design v-if=\"params.windowWidth >= 1024\"\n      class=\"h-full overflow-hidden max-w-full\"\n      name=\"rd:page-toolbar\"\n      :document=\"params.pageDocument\"\n      @toolbar=\"controller.dispatchEventChildren('page', 'toolbar', $event)\"\n      :params=\"{ ...params.pageParams, view: params.view, windowWidth: params.windowWidth }\"\n    ></ae-design> \n    \n\n    <ae-design v-if=\"params.windowWidth >= 1024\"\n      name=\"rd:more-actions\"\n      :document=\"params.pageDocument\"\n      class=\"max-w-full\"\n      :params=\"params.pageParams\"\n      :param-window-width=\"params.windowWidth\"\n      :param-view=\"params.view\"\n      :param-tab=\"locals.tab\"\n    ></ae-design>\n\n    <ae-layout layout-id=\"e328702a-6cac-44eb-801b-e75fbd946a09\" :param-document=\"params.pageDocument\" :param-pins-document=\"params.currentUserDocuments?.pinsDocument\"></ae-layout>\n\n    <ae-design\n      v-if=\"params.pageDocument?.a_depth > 1\"\n      name=\"rd:cloud-save-watcher\"\n      :document=\"params.pageDocument\"\n      :watch=\"false\"\n    ></ae-design>\n\n    <ae-layout\n      layout-id=\"fc349b35-90c8-43c6-a13d-e4bf52dfc28a\"\n      :param-document=\"params.pageDocument\"\n      :param-disable-delete=\"params.pageParams?.disableDelete\"\n      :param-view=\"params.view\"\n      :param-tab=\"locals.tab\"\n    ></ae-layout>\n  </header>\n\n  <section class=\"flex-1 overflow-hidden\">\n    <div v-if=\"Aeppic.Account?.data.allowDevMode && (!params?.pageParams || !('readonly' in params.pageParams))\" class=\"text-red-500\">\n      [DEV] provide BOOLEAN for params.pageParams.readonly!\n    </div>\n    <ae-design\n      ref=\"page\"\n      class=\"w-full h-full overflow-hidden\"\n      name=\"rd:page\"\n      :document=\"params.pageDocument\"\n      :params=\"{ ...params.pageParams, tab: locals.tab, view: params.view, windowWidth: params.windowWidth }\"\n    ></ae-design>\n  </section>\n</section>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"0e40bb7a-7f76-425a-8b07-3dbb6208d277","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-07-30T06:40:20+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"d6e777e9c0240ce1"},"stamps":[],"t":1785393620685,"v":"eb2918e0f7d12faa"},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9","d55ee142-2da7-4d53-84b4-15a7fc71c1fb"],"a_depth":5,"a_forms":["system-folder-form","folder","form","folder","layout-form"],"created":{"at":"2025-10-07T13:56:45+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759845405247,"data":{"applies":"","controller":"class Cotroller {\n  init() {\n    locals.tones = [...Array.from({ length: 10 }, (_, i) => i), ...Array.from({ length: 17 }, (_, i) => (i * 5) + 10), ...Array.from({ length: 10 }, (_, i) => i + 91)]\n    const isExtended = !['primary', 'secondary', 'tertiary', 'neutral', 'neutral-variant', 'error'].includes(params.color)\n    this.prefix = `--color-${isExtended ? 'extended-' : ''}${params.color}-${params.fixed ? 'fixed-' : ''}`\n  }\n\n  backgroundColor(tone) {\n    return `var(${this.prefix}${tone})`\n  }\n\n  color(tone) {\n    let newTone = 0\n    if (tone >= 80 || tone <= 20) {\n      newTone = 100 - tone\n    } else if (tone < 50) {\n      newTone = 100\n    } else {\n      newTone = 0\n    }\n\n    newTone = (Math.ceil(newTone / 5) * 5)\n    return `var(${this.prefix}${newTone})`\n  }\n}","css":"","name":"rd:palette","packages":[],"template":"<div\n  class=\"flex w-full\"\n>\n  <div\n    v-for=\"tone in locals.tones\"\n    class=\"flex-1 text-center py-2\"\n    :style=\"{'background-color': controller.backgroundColor(tone), 'color': controller.color(tone)}\"\n  >\n    {{ tone }}\n  </div>\n\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"bce3252e-29ca-40c5-af9b-bb35e5742aea","inheritedLocks":[null,null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-07T13:58:25+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"d55ee142-2da7-4d53-84b4-15a7fc71c1fb","previous":{"v":"d647073418932848"},"stamps":[],"t":1759845505558,"v":"f3f1e2d78822a7ac"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2021-06-14T11:30:12+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1623670212009,"data":{"applies":"","controller":"class Controller {\n  get left() {\n    return params.left || params.parts?.[0] || null\n  }\n\n  get right() {\n    return params.right || params.parts?.[1] || null\n  }\n\n  get percent() {\n    const left = this.left?.weight ?? 0\n    const right = this.right?.weight ?? 0\n    const total = left + right\n    const percentile = 100 / total\n\n    return {\n      left: left * percentile,\n      right: right * percentile,\n    }\n  }\n}","css":"\n._CSS-progress {\n  display: flex;\n  justify-content: center;\n  position: relative;\n  xborder: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-progress__title {\n  display: flex;\n  justify-content: center;\n  font-size: 14px;\n  height: 20px;\n  color: var(--ae-foreground-l2);\n}\n\n._CSS-progress__value {\n  height: 8px;\n\n  display: flex;\n  justify-content: center;\n  color: var(--ae-background-800);\n  font-size: var(--ae-font-size-2);\n  white-space: nowrap;\n}\n\n._CSS-progress__value:first-child {\n  border-top-left-radius: var(--ae-border-radius);\n  border-bottom-left-radius: var(--ae-border-radius);\n}\n._CSS-progress__value:last-child {\n  border-top-right-radius: var(--ae-border-radius);\n  border-bottom-right-radius: var(--ae-border-radius);\n}\n\n._CSS-progress__value > * {\n  padding: 7px;\n}\n\n._CSS-progress__overdue {\n  background: var(--ae-accent-red-400);\n}\n\n\n._CSS-progress__open {\n  background: var(--ae-background-300);\n  xbackground: transparent;\n}\n\n._CSS-progress__closed {\n  background: var(--ae-primary-500);\n  xbackground: var(--ae-accent-green-700);\n}\n","name":"rd:progress bar with left and right","packages":[],"template":"<div v-if=\"params.debug\" class=\"text-xs font-mono\">\n\t{{controller.right}}\n\t{{controller.left}}\n\t{{controller.percent}}\n</div>\n\n<div v-if=\"controller.right\" class=\"w-full flex flex-col\"\n\t:data-test=\"'layout' + '_' + layout.id\">\n\t<div v-if=\"controller.percent.right > 0\" class=\"h-[8px] rounded-md w-full bg-gradient-to-r\"\n\t\t:class=\"[ 'from-' + controller.left.color, 'via-' + controller.left.color, 'to-' + controller.right?.color,  \n\t\t'via-[' + Number(controller.percent.left - 5).toFixed(0) + '%]', 'to-[' + Number(controller.percent.left + 5).toFixed(0) + '%]']\">\n\t</div>\n\t<div v-else class=\"h-[8px] rounded-md w-full bg-gradient-to-r\" :class=\"[ 'bg-' + controller.left.color]\">\n\t</div>\n\n\t<div class=\"flex gap-2 text-xs\">\n\t\t<div :title=\"controller.left.label\" class=\"truncate\" data-test=\"left-value\">\n\t\t\t<span :class=\"['text-' + controller.left.textColor || 'text-' + controller.left.color]\">\n\t\t\t\t{{ controller.left.value }}\n\n\t\t\t\t<span v-if=\"params.showValueLabel\">\n\t\t\t\t\t{{ controller.left.label }}\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t</div>\n\t\t<div v-if=\"controller.percent.right > 0 && controller.percent.right <= 100\" :title=\"controller.right.label\"\n\t\t\tclass=\"truncate\" data-test=\"right-value\">\n\t\t\t<span :class=\"['text-' + controller.right.textColor || 'text-' + controller.right.color]\">\n\t\t\t\t{{ controller.right.value }}\n\n\t\t\t\t<span v-if=\"params.showValueLabel\">\n\t\t\t\t\t{{ controller.right.label }}\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t</div>\n\n\t\t<div class=\"flex-1\"></div>\n\n\t\t<div v-if=\"controller.right.infoValue\" class=\"text-xs text-lime-600 flex items-center gap-0.5 truncate\"\n\t\t\t:title=\"controller.right.infoLabel || ''\" data-test=\"info-value\">\n\t\t\t<ae-icon v-if=\"controller.right.infoIcon\" :class=\"controller.right.infoIcon\"></ae-icon>\n\t\t\t{{ controller.right.infoValue }}\n\t\t</div>\n\t</div>\n</div>\n<section v-else-if=\"controller.left\" class=\"w-full flex flex-col\"\n\t:data-test=\"'layout' + '_' + layout.id\">\n\t<div class=\"h-[8px] rounded-md w-full\" :class=\"['bg-' + controller.left.color]\">\n\t</div>\n\n\t<div class=\"flex gap-2 text-xs\">\n\t\t<div :title=\"controller.left.label\">\n\t\t\t<span class=\"\" :class=\"['text-' + controller.left.textColor || 'text-' + controller.left.color]\" data-test=\"left-value\">\n\t\t\t\t{{ controller.left.value }}\n\n\t\t\t\t<span v-if=\"params.showValueLabel\">\n\t\t\t\t\t{{ controller.left.label }}\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t</div>\n\t</div>\n</section>\n\n<!-- <div class=\"_CSS-card__progress\" style=\"flex: 1;\">\n\t<div class=\"_CSS-progress__title\" v-if=\"params.label\">{{ Aeppic.translate(params.label) }}</div>\n\t<div class=\"_CSS-progress\" style=\"position:relative; display:flex;\">\n\t\t<div v-for=\"part of params.parts\" v-if=\"part.value\" :title=\"part.label\" class=\"_CSS-progress__value\" :style=\"{ width: part.percent + '%', background: part.color }\" :class=\"part.class\">\n\t\t\t<span v-if=\"!params.hideValue\">\n        {{ part.value }}\n        <span v-if=\"params.showValueLabel\">\n          {{ part.label }}\n        </span>\n      </span>\n\t\t</div>\n\t</div>\n</div> -->"},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"101e5b7e-208a-42e3-951a-ee305efd3758","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-04-21T11:58:43+00:00","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"4c36910f6c3a9531"},"stamps":[],"t":1776772723026,"v":"04dd92a55779d69f"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2026-04-21T11:58:59+00:00","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"ct":1776772739485,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    const example = {\n      label: 'text',\n      percent: 32.123,\n      value: 32,\n      color: 'var(--ae-accent-red)'\n    }\n  }\n}","css":"\n._CSS-progress {\n  display: flex;\n  justify-content: center;\n  position: relative;\n  xborder: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-progress__title {\n  display: flex;\n  justify-content: center;\n  font-size: 14px;\n  height: 20px;\n  color: var(--ae-foreground-l2);\n}\n\n._CSS-progress__value {\n  height: 8px;\n\n  display: flex;\n  justify-content: center;\n  color: var(--ae-background-800);\n  font-size: var(--ae-font-size-2);\n  white-space: nowrap;\n}\n\n._CSS-progress__value:first-child {\n  border-top-left-radius: var(--ae-border-radius);\n  border-bottom-left-radius: var(--ae-border-radius);\n}\n._CSS-progress__value:last-child {\n  border-top-right-radius: var(--ae-border-radius);\n  border-bottom-right-radius: var(--ae-border-radius);\n}\n\n._CSS-progress__value > * {\n  padding: 7px;\n}\n\n._CSS-progress__overdue {\n  background: var(--ae-accent-red-400);\n}\n\n\n._CSS-progress__open {\n  background: var(--ae-background-300);\n  xbackground: transparent;\n}\n\n._CSS-progress__closed {\n  background: var(--ae-primary-500);\n  xbackground: var(--ae-accent-green-700);\n}\n","name":"rd:progress bar with multiple parts","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<div class=\"_CSS-card__progress\" style=\"flex: 1;\">\n\t<div class=\"_CSS-progress__title\" v-if=\"params.label\">{{ Aeppic.translate(params.label) }}</div>\n\t<div class=\"_CSS-progress\" style=\"position:relative; display:flex;\">\n\n\t\t<div v-for=\"part of params.parts\" v-if=\"part.value\" :title=\"part.label\" class=\"_CSS-progress__value\" :style=\"{ width: part.percent + '%', background: part.color }\" :class=\"part.class\">\n\t\t\t<span v-if=\"!params.hideValue\">\n        {{ part.value }}\n        <span v-if=\"params.showValueLabel\">\n          {{ part.label }}\n        </span>\n      </span>\n\t\t</div>\n\t\t<!-- <div v-if=\"controller.count.closed\" title=\"Erledigte\" class=\"_CSS-progress__value _CSS-progress__closed\" :style=\"{ width: controller.progress.closed + '%' }\">\n\t\t\t<span>\n        {{ controller.count.closed }}\n        </span>\n\t\t</div>\n\t\t<div v-if=\"controller.count.open\" title=\"Offene\" class=\"_CSS-progress__value _CSS-progress__open\" :style=\"{ width: controller.progress.open + '%' }\">\n\t\t\t<span>\n        {{ controller.count.open }}\n        </span>\n\t\t</div>\n\t\t<div v-if=\"controller.count.overdue\" title=\"Überfällige\" class=\"_CSS-progress__value _CSS-progress__overdue\" :style=\"{ width: controller.progress.overdue + '%' }\">\n\t\t\t<span>\n        {{ controller.count.overdue }}\n        </span>\n\t\t</div>\n\t\t<div v-if=\"!controller.count.all\" title=\"Keine Aufgaben erstellt\">\n\t\t\t<ae-icon class=\"fa fa-empty-set\"></ae-icon>\n\t\t</div> -->\n\t</div>\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"b20de0e2-5660-44fc-aea2-82965627f078","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-04-21T11:59:21+00:00","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"initial"},"stamps":[],"t":1776772761549,"v":"16153bc1fe81b64e"},{"id":"13a7a826-223c-4622-99d6-26246b137dfd","v":"a289d3e9da4ee335","previous":{"v":"ea7770a3ee173698"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"rd:Quick Edit","applies":"","packages":[],"template":"<input  class=\"w-full \"\n        :value=\"params.document.data[params.fieldName]\"\n        ref=\"anchor\"\n        @click.stop.prevent\n        @focus.prevent\n>\n\n<ae-popup ref=\"popup\" @close=\"$emit('done')\">\n  <template #default>\n    <div class=\"text-base\">\n      <ae-form :document=\"params.document\" \n              :view=\"params.formView\"\n              :auto-save=\"true\"\n              layout-id=\"efdb156e-9350-4cb3-8e00-4a69adec691b\"\n      ></ae-form>\n    </div>\n  </template>\n</ae-popup>  ","css":"","controller":"class Controller {\n  async init() {\n    if (params.show) {\n\n      await Aeppic.nextRenderPass()\n      $refs.popup.show({ target: $refs.anchor })\n    }\n  }\n}"},"locks":[],"created":{"at":"2022-09-21T11:51:45+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-09-21T12:06:05+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1663761965771,"ct":1663761105799,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"cloneOf":{"id":"ed2cc4c2-d2a0-4969-8da7-49fb3d539cc9","text":"Ref popup","v":"0810e95e66efc9aa"},"created":{"at":"2023-09-27T14:53:53+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1695826433708,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.filter = ''\n    locals.uiFilters = []\n    locals.selectedUiFilter = null\n\n    if (params.uiFilters) {\n      locals.uiFilters = params.uiFilters\n      locals.selectedUiFilter = locals.uiFilters.find(f => f.selected === true) || null\n\n      if (locals.selectedUiFilter) {\n        $emit('ui-filter', locals.selectedUiFilter)\n      }\n    } \n\n\n    this.show = (eventData) => {\n      console.log('show', { eventData })\n      // if (!$refs.popup.visible) {\n        locals.filter = ''\n      // }\n\n      $refs.popup.show(eventData)\n    }\n\n    this.toggle = (eventData) => {\n      locals.filter = ''\n      $refs.popup.toggle(eventData) \n    }\n\n    this.close = () => {\n      $refs.popup.close()\n    }\n\n    $on('show', this.show) \n    $on('toggle', this.toggle)\n    $on('close', this.close)\n\n    if (params.show) {\n      await Aeppic.nextRenderPass()\n\n      this.show({\n        target: $refs.popup.$el.parentNode\n      })\n    }\n  }\n\n  selectedUiFilter(uiFilter) {\n    locals.selectedUiFilter = uiFilter\n\n    $emit('ui-filter', uiFilter)\n  }\n\n  onSelected(event) {\n    if (params.keepOpenAfterSelection != true) {\n      this.close()\n    }\n    $emit('selected', event)\n  }\n\n  onRemove(event) {\n    if (params.keepOpenAfterSelection != true) {\n      this.close()\n    }\n    $emit('remove', event)\n  }\n\n  get searchPlaceholder() {\n    if (params.showCreate) {\n      return 'Tippen um zu suchen oder neu zu erstellen'\n    }\n\n    return 'Tippen um zu suchen'\n  }\n\n  get emptyText() {\n    if (locals.filter) {\n      return `Keine Ergebnisse für \"${locals.filter}\"`\n    }\n\n    return 'Keine Ergebnisse'\n  }\n\n  selectedProminentPickCommand() {\n    if (params.keepOpenAfterSelection != true) {\n      this.close()\n    }\n\n    $emit('selected-prominent-pick-command')\n  }\n\n  selectedAddAll() {\n    if (params.keepOpenAfterSelection != true) {\n      this.close()\n    }\n\n    $emit('selected-add-all')\n  }\n}\n","css":"","name":"rd:Ref popup","packages":[],"template":"<ae-popup ref=\"popup\"\n        @show=\" $refs.input && $refs.input.focus()\"\n        placement=\"bottom-start\"\n        :max-width=\"400\"\n> \n  <template #default=\"scope\">\n    <div data-test=\"popup_refselect\"> <!-- wrapper for default ae-popup styles, which we do not want -->\n    <div class=\"flex flex-col min-h-[400px] h-[400px] w-[390px] bg-white dark:bg-slate-800 rounded-md dark:text-white\" @click.stop>\n      <section class=\"flex justify-between items-center p-2\">\n        <div>\n        {{ params.title || 'Auswählen' }}\n        </div>\n\n         <ae-layout v-if=\"params.prominentPickCommand\"\n                    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" \n                    @selected=\"controller.selectedProminentPickCommand()\"\n                    :param-text=\"params.prominentPickCommand.data.label || params.prominentPickCommand.data.name\"\n                    :param-icon=\"params.prominentPickCommand.data.namedIcon\"\n                    param-border=\"border\"\n        ></ae-layout>   \n        \n        \n        <ae-layout v-if=\"params.showAddAll\"\n                    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" \n                    @selected=\"controller.selectedAddAll()\"\n                    param-text=\"Alle\"\n                    param-title=\"Alle auswählen\"\n                    param-icon=\"far fa-check-double\"\n                    param-border=\"border\"\n        ></ae-layout> \n\n        \n        <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" \n                  @selected=\"scope.close()\"\n                  param-icon=\"far fa-times\"\n        ></ae-layout> \n      </section>\n\n      \n      <section class=\"flex flex-col overflow-hidden\">\n        <section v-if=\"locals.uiFilters.length\" class=\"flex gap-1\">\n          <div v-for=\"uiFilter in locals.uiFilters\" class=\"p-1\">\n            <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" \n                      @selected=\"controller.selectedUiFilter(uiFilter)\"\n                      :param-text=\"uiFilter.label || uiFilter.name\"\n                      :param-icon=\"uiFilter.namedIcon\"\n                      :param-primary=\"locals.selectedUiFilter === uiFilter\"\n                      param-border=\"border border-secondary-200\"\n            ></ae-layout>\n          </div>\n        </section>\n\n        <section class=\"flex justify-between gap-2 p-1\">\n          <div class=\"flex-1 flex gap-1 relative\">\n            <div v-if=\"!params.nofilter\" \n                  class=\"flex-1 overflow-hidden flex p-1 border hover:border-slate-200 rounded-md\"\n            >\n              <input  class=\"w-full outline-none bg-transparent\"\n                      ref=\"input\"\n                      :readonly=\"params.readonly\"\n                      type=\"text\"\n                      v-model=\"locals.filter\"\n                      @input=\"$emit('filter', locals.filter)\"\n                      :placeholder=\"controller.searchPlaceholder\"\n                      v-focus\n                      @keydown.down=\"$refs.list.$emit('focus-entry')\"\n                      @keydown.esc=\"scope.close()\"\n              >\n            </div>\n            <ae-icon v-if=\"params.loading\" class=\"far fa-spinner fa-spin absolute right-0 top-2 right-1\"></ae-icon>\n          </div>\n           \n          <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" \n                    v-if=\"params.showCreate\"\n                    @selected=\"$emit('create', locals.filter)\"\n                    param-text=\"Erstellen\"\n                    :param-disabled=\"!locals.filter || params.loading\"\n                  param-border=\"border\" \n\n          ></ae-layout>   \n        </section>\n        <section class=\"overflow-auto\">\n          <ae-list\n            class=\"m-1 ease-in duration-300\"\n            :class=\"{ 'opacity-25': params.loading }\"\n            ref=\"list\"\n            :list-id=\"params.listId || '922e8251-6e60-45a4-9df6-3d434363ac01'\"\n            @selected=\"controller.onSelected($event)\"\n            @remove=\"controller.onRemove($event)\"\n            :documents=\"params.items\"\n            :param-selected-items=\"params.selectedItems\"\n            :param-item-labels=\"params.itemLabels\"\n            :param-design=\"params.design || 'rd:search-card'\"\n            :param-design-params=\"{ ...params.designParams, hidePath: params.hidePath, useDocumentIcon: true }\"\n            :param-divide=\"true\"\n            :param-empty-text=\"controller.emptyText\" \n            @focus-out=\"$refs.input.focus()\"\n            :watch-documents=\"params.watchItems\"\n            ></ae-list>\n        </section>\n\n      <!-- <ae-list\n        ref=\"list\"\n        param-min-column-width=\"100%\"\n        class=\"_CSS-popup__list\"\n        :list-id=\"params.listId || '2dab232c-2c8a-4aa4-b3f9-6023a7116161'\"\n        @selected=\"controller.onSelected($event)\"\n        @remove=\"controller.onRemove($event)\"\n        :documents=\"params.items\"\n        :param-selected-items=\"params.selectedItems\"\n        :param-item-labels=\"params.itemLabels\"\n        :param-design=\"params.design || 'search-card'\"\n        :param-design-params=\"{ ...params.designParams, hidePath: params.hidePath, fullPath: params.fullPath, minimizedInfo: true }\"\n        @focus-base=\"$refs.input && $refs.input.focus()\"\n        :param-interactive=\"true\"\n        param-gap=\"tiny\"\n        :watch-documents=\"params.watchItems\"\n        ></ae-list> -->\n        <div class=\"_CSS-search-limit\" v-if=\"params.items && (params.searchSize === params.items.length)\">\n          Die Suche ist begrenzt auf {{params.searchSize}} Einträge.\n        </div> \n\n        <ae-layout class=\"m-2\" \n                  v-if=\"params.items && (params.searchSize === params.items.length)\"\n                  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" \n                  @selected=\"$emit('load-more')\"\n                  param-text=\"Mehr Einträge laden\"\n                  :param-primary=\"true\"\n        ></ae-layout> \n      </section>\n    </div>\n    </div>\n  </template>\n  \n</ae-popup> "},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"7a96896f-0d13-4a80-8143-5f84c9b5e790","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-05-07T13:13:46+00:00","backedBy":"","by":"b7485498-f1f3-4ab1-87d1-9cb63ea890c8","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"ed2cc4c2-d2a0-4969-8da7-49fb3d539cc9","text":"Ref popup","v":"0810e95e66efc9aa"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"71b0c49048909f78"},"stamps":[],"t":1778159626174,"v":"f063bea0f6eaa871"},{"id":"b477c02e-0e5a-4baf-b782-3e0e64d8816c","v":"db8caa059de7535a","previous":{"v":"51df7389c1c826f5"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:Ref Remove Confirmation Dialog","applies":"","template":"<!-- NOTE: if all removed references are (now or in future) delete, this is fine.\n           If not, one may want to show a different explation what is going to happen -->\n\n<ae-dialog ref=\"deleteDialog\" title=\"Verweis löschen\" :backdrop-close=\"false\" v-if=\"locals.show\">\n  <div slot=\"header\" slot-scope=\"scope\" class=\"flex justify-between\">\n    <span v-if=\"locals.documents\">\n      Dokumente entfernen\n    </span>\n    <span v-if=\"locals.document\" class=\"flex items-center gap-1\">\n      <ae-design name=\"form-title\" :document=\"locals.document\" class=\"inline\"></ae-design>\n      <span>entfernen</span>\n    </span>\n    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                param-icon=\"far fa-times\"\n                @selected=\"scope.close()\"\n                param-border=\"border\"\n    ></ae-layout>\n  </div>\n  <div slot=\"body\" class=\"\">\n    <div v-if=\"locals.document\" class=\"flex gap-1\">\n      Möchten Sie <span v-if=\"locals.document.data.name\" class=\"font-bold\">{{ locals.document.data.name }}</span> (<ae-design name=\"form-title\" :document=\"locals.document\" class=\"inline italic\"></ae-design>) entfernen?\n    </div>\n\n    <div v-if=\"locals.documents\" class=\"flex flex-col \">\n      <div class=\"flex gap-2 items-center border-b\">\n        Möchten Sie {{ locals.documents?.length }} Dokumente entfernen?\n\n        <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    param-icon=\"fa fa-list\"\n                    :param-text=\"locals.showDocuments ? 'ausblenden' : 'anzeigen'\"\n                    param-border=\"border\"\n                    @selected=\"locals.showDocuments = !locals.showDocuments\"\n        ></ae-layout>\n      </div>\n\n      <ae-list  v-if=\"locals.showDocuments\"\n                list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n               :documents=\"locals.documents\"\n               param-design=\"rd:search-card\"\n      ></ae-list>\n    </div>\n    <!-- <p>\n      Der Verweis wird entfernt und das Ziel des Verweises permanent gelöscht.<br>\n      Die Daten bleiben in der Historie erhalten, sind aber nicht durch einen Nutzer wiederherstellbar.\n    </p> -->\n  </div>\n  <div slot=\"commands\" slot-scope=\"scope\" class=\"p-1 flex gap-1 items-center\">\n    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                param-icon=\"far fa-trash\"\n                param-text=\"Entfernen\"\n                @selected=\"controller.deleteDocument()\"\n                :param-primary=\"true\"\n    ></ae-layout>\n  </div>\n</ae-dialog>   ","css":"","controller":"class Controller {\n  init() {\n    locals.show = false\n    locals.document = null\n    locals.documents = null\n    locals.eventData = null\n    locals.showDocuments = false\n\n    this.show = async (eventData) => {\n      locals.document = null\n      locals.documents = null\n      locals.showDocuments = false\n      \n      locals.eventData = eventData\n\n      if (Array.isArray(eventData)) {\n        locals.documents = eventData  \n        locals.showDocuments = eventData.length <= 50\n      } else {\n        locals.document = await Aeppic.get(eventData)\n      }\n\n      locals.show = true\n\n      await Aeppic.nextRenderPass()\n      $refs.deleteDialog.show()\n    }\n\n    this.close = () => { \n      $refs.deleteDialog.close()\n      locals.show = false\n    }\n\n    $on('show', this.show)\n    $on('close', this.close)\n  }\n\n  destroy() {\n    $refs.deleteDialog && $refs.deleteDialog.close()\n  }\n\n  async deleteDocument() {\n    $refs.deleteDialog.close()\n\n    $emit('delete', locals.eventData)\n    // Aeppic.delete(params.document.id)\n\n    // if (params.removeReferenceFromParentField) {\n    //   const parent = await Aeppic.edit(params.document.p)\n    //   parent.removeReference(params.removeReferenceFromParentField, params.document)\n    //   Aeppic.save(parent)\n    // }\n  }\n}","packages":[]},"locks":[],"created":{"at":"2024-06-18T13:39:11+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2024-06-18T14:03:24+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1718719404695,"ct":1718717959487,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2023-09-27T14:48:52+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1755864586626,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.debug = params.debug ?? false\n    this.updateRunning = false\n    this.scheduledUpdate = false\n\n    locals.selectedUiFilter = ''\n\n    locals.ready = false\n    locals.search = {\n      loading: false,\n    }\n    locals.prominentPickCommand = null\n\n    // *   EXAMPLE SETTINGS   * /\n    // ==========================\n    // const settings = {\n    //   filter: {\n    //     base: '',\n    //     targetDocument: params.document,\n    //     queryLimitCommand: '',\n    //     ancestorSearchLimit: '',\n    //     ancestorForm: '',\n    //     ancestorId: '',\n    //     parentId: '',\n    //     formIds: '',\n    //     locationForm: '',\n    //   },\n    //   search: {\n    //     size: 20,\n    //     sort: {\n    //       field: 'data.name',\n    //       descending: false\n    //     },\n    //     searchAllFields: false,\n    //     includeHidden: true,\n    //   },\n    // }\n\n    if (!params.settings) {\n      throw new Error('Provide params.settings')\n    }\n\n    console.debug(params.settings)\n \n    this._lastRawFilter = ''\n\n    locals.selectedRefId = null\n    locals.items = []\n\n    $on('show', (clickEvent) => this.show(clickEvent))\n\n    this.SETTINGS = await this._sanitizeSettingsParam()\n\n    if (params.prominentPickCommand) {\n      locals.prominentPickCommand = await Aeppic.get(params.prominentPickCommand)\n    }\n\n    if (params.uiFilterCommand) {\n      const commandResult = await Aeppic.Commands.execute(params.uiFilterCommand, this.SETTINGS.filter.targetDocument, { Account: Aeppic.Account, ProfilePage: Aeppic.ProfilePage })\n      if (!commandResult.ok) {\n        console.error(commandResult.error)\n      } else {\n        locals.uiFilters = commandResult.value\n      }\n    }\n\n    locals.ready = true\n  }\n\n  async _sanitizeSettingsParam() {\n    const settings = {\n      ... {filter: {}, search: {}},\n      ...params.settings,\n    }\n\n    if (settings.filter.targetDocument) {\n      if (settings.filter.targetDocument.a_forms.length === 0) {\n        console.error('FIXME: targetDocument for filter is missing a_forms!')\n      }\n      // FIXME: WHY was this nescesarry? This breaks some controls in the toolbar/list filter because it uses a temporary document of a temporary form. With only editableDocument passed in it is fine\n      // FIXME: newly created editableDocuments are (SOMETIMES?) missing a_forms (a_forms:[])\n      // if (Aeppic.isEditableDocument(settings.filter.targetDocument)) {\n      //   settings.filter.targetDocument = settings.filter.targetDocument.cloneAsDocument()\n      // }\n    } else {\n      console.warn('Provide settings.filter.targetDocument. FALLBACK to pageDocumentId')\n      settings.filter.targetDocument = await Aeppic.get(Aeppic.Root.params.pageDocumentId)\n    }\n \n    return settings\n  } \n\n\n  async show(clickEvent) {\n    locals.items = []\n\n    await this.filterItems()\n \n    await Aeppic.nextRenderPass()\n    \n    const fakeEvent = {\n      target: $refs.popupAnchor\n    }\n \n    $refs.popup.$emit('show', clickEvent || fakeEvent)\n  }\n\n  async selectedUiFilter(uiFilter) {\n    locals.selectedUiFilter = uiFilter.filter\n\n    await this.filterItems(this._lastRawFilter)\n  }\n\n  async filterItems(rawFilter = '') {\n    if (this.updateRunning || this.scheduledUpdate) {\n      if (this.scheduledUpdate) {\n        clearTimeout(this.scheduledUpdate)\n        this.scheduledUpdate = null\n      }\n\n      if (this.updateRunning) {\n        this.scheduledUpdate = Aeppic.setTimeout(() => {\n          this.scheduledUpdate = null\n\n          this.filterItems(rawFilter)\n        }, 2000)\n      }\n\n      return \n    }\n\n    this.updateRunning = true\n    this._lastRawFilter = rawFilter \n\n    const searchParts = [await this._getQueryStringOfSettings()]\n\n    if (locals.selectedUiFilter) {\n      searchParts.push(`(${locals.selectedUiFilter})`)\n    }\n\n    if (rawFilter !== '') {\n      const filter = rawFilter.trim()\n\n      if (filter.indexOf(':') === -1) {\n        filter.split(/\\s/).map(part => searchParts.push(`*${part}*`) )\n      } else {\n        searchParts.push(filter)\n      }\n    } \n\n    const fullSearch = searchParts.filter(p => !!p?.trim()).join(' AND ')\n    this.debug && console.log(fullSearch, 'with size', this.searchSize)\n\n    const searchSettings = this.SETTINGS.search || {}\n\n    const items = []\n    try {\n      items.push(...await Aeppic.find(fullSearch, {\n        size: this.searchSize,\n        sort: searchSettings.sort || null,\n        searchAllFields: searchSettings.searchAllFields || null,\n        includeHidden: searchSettings.includeHidden ?? null,\n      }))\n    } catch (e) {\n      console.error(e)\n    }\n\n    if (!this.scheduledUpdate) {\n      locals.items = items\n    }\n\n\n    this.updateRunning = false\n  }\n\n  get isLoading() {\n    return !!this.updateRunning || !!this.scheduledUpdate\n  } \n\n  async _getQueryStringOfSettings() {\n    const searchParts = []\n\n    const queryLimiting = await this._getQueryLimit()\n\n    this.debug && console.log('queryLimiting', queryLimiting)\n\n    if (queryLimiting) {\n      searchParts.push(queryLimiting)\n    }\n\n    if (this.SETTINGS.filter.base) {\n      searchParts.push(`(${this.SETTINGS.filter.base})`)\n    }\n\n    return searchParts.join(' AND ')\n  }\n\n  async _getQueryLimit() {\n    const parts = []\n\n    const filterSettings =  this.SETTINGS.filter\n\n    if (filterSettings.queryLimitCommand) {\n      const commandResult = await Aeppic.Commands.execute(filterSettings.queryLimitCommand, filterSettings.targetDocument, {\n        Account: Aeppic.Account,\n        ProfilePage: Aeppic.ProfilePage\n      }, {})\n\n      if (commandResult.ok && typeof commandResult.value === 'string') {\n        if (commandResult.value) {\n          parts.push(commandResult.value)\n        }\n      } else {\n        console.error('queryLimitCommand error', commandResult)\n      }\n    }\n\n    const ancestorSearchLimit = filterSettings.ancestorSearchLimit != null && filterSettings.ancestorSearchLimit !== ''  ? Number(filterSettings.ancestorSearchLimit) : null\n\n    if (ancestorSearchLimit !== null) {\n      if (!Number.isNaN(ancestorSearchLimit)) {\n        if (ancestorSearchLimit === 0) {\n          parts.push(`a:${filterSettings.targetDocument.id}`)\n        } else if (filterSettings.targetDocument.a.length < ancestorSearchLimit) {\n          console.error('ancestorSearchLimit is out of bounds: limit is greater than filterSettings.targetDocument ancestors')\n        } else {\n          this.debug && console.log(filterSettings.targetDocument.a, filterSettings.targetDocument.p)\n          parts.push(`a:${filterSettings.targetDocument.a[filterSettings.targetDocument.a.length - ancestorSearchLimit]}`)\n        }\n      } else {\n        console.error('ancestorSearchLimit isNaN', filterSettings.ancestorSearchLimit)\n      }\n    }\n\n    const ancestorForm = filterSettings.ancestorForm // || 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df' // fallback to 'Unternehmen'\n\n    if (ancestorForm) {\n      this.debug && console.log({ td: filterSettings.targetDocument })\n      const ancestorIndex = filterSettings.targetDocument['a_forms'].findIndex(formId => formId === ancestorForm)\n\n      if (ancestorIndex === -1) {\n        console.error(`ancestorForm is out of bounds: ${ancestorForm} is not in a_forms`)\n        // parts.push(`a:${filterSettings.targetDocument.a[1]}`)\n      } else {\n        const ancestorId = filterSettings.targetDocument.a[ancestorIndex]\n\n        parts.push(`a:${ancestorId}`)\n      }\n    }\n\n    if (filterSettings.locationForm != null) {\n      parts.push(`a_forms:${filterSettings.locationForm}`)\n    }\n\n    if (filterSettings.ancestorIndex != null) {\n      parts.push(`a:${filterSettings.targetDocument.a[filterSettings.ancestorIndex]}`)\n    }\n\n    if (filterSettings.ancestorId) {\n      parts.push(`a:${filterSettings.ancestorId}`)\n    }\n\n    if (filterSettings.parentId) {\n      parts.push(`p:${filterSettings.parentId}`)\n    }\n\n    if (filterSettings.formIds) {\n      const forms = filterSettings.formIds.split(',').filter(id => !!id).map(id => `f.id:${id}`)\n\n      parts.push(`(${forms.join(' OR ')})`)\n    }\n\n    return parts.join(' AND ')\n  }\n\n  async loadMoreItems(fixedSearchSize) {\n    this.overwrittenSearchSize = fixedSearchSize || (this.overwrittenSearchSize ? this.overwrittenSearchSize + 100 : 100)\n\n    await this.filterItems(this._lastRawFilter)\n  }\n\n  get showCreate() {\n    // TODO: maybe this layout should handle creation too? Currently it just does an $emit('create-and-link')\n    return params.showCreate\n  }\n\n  get showFullPath() {\n    if (typeof params.showFullPath === 'boolean') {\n      return params.showFullPath\n    }\n\n    return Aeppic.Account && Aeppic.Account.data.isAdmin\n  }\n\n   get searchSize() {\n    if (this.overwrittenSearchSize) {\n      return this.overwrittenSearchSize\n    }\n\n    if (this.SETTINGS.search.size) {\n      const paramAsNumber = Number(this.SETTINGS.search.size)\n      if (!Number.isNaN(paramAsNumber)) {\n        return paramAsNumber\n      }\n    }\n\n    return 10\n  }\n\n  selected(event) {\n    this.debug && console.log('ref-sel-but selected', event)\n\n    if (!event) {\n      return\n    }\n\n    if (typeof event === 'object' && 'id' in event) {\n      locals.selectedRefId = event.id\n    } else {\n      locals.selectedRefId = null\n    }\n\n    $emit('selected', event)\n  }\n\n  async evaluateProminentPickCommand() {\n    const result = await Aeppic.Commands.execute(locals.prominentPickCommand, this.SETTINGS.filter.targetDocument, { Account: Aeppic.Account, ProfilePage: Aeppic.ProfilePage })\n\n    if (!result.ok) {\n      console.error(result.error)\n      return\n    }\n\n    this.selected(result.value)\n  }\n\n  async evaluateAddAll() {\n    // TODO: what if this results in more than 500 items?\n    await this.loadMoreItems(500)\n\n    this.selected(locals.items)\n  }\n} ","css":"._CSS {\n  min-width: 0;\n  display: flex;\n}\n\n._CSS-button {\n  min-width: 0;\n  display: flex;\n  align-items: center;\n}\n\n._CSS-button__design {\n  margin-left: var(--ae-size-2);\n}","name":"rd:Ref Selection Button","packages":[],"template":"<div v-if=\"locals.ready\" :data-test=\"'layout' + '_' + layout.id\">\n  <div ref=\"popupAnchor\"></div>\n  <ae-layout\n    v-if=\"!params.hideButton\"\n    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n    @selected=\"controller.show()\"\n    :param-text=\"params.text\"\n    :param-title=\"params.title\"\n    :param-disabled=\"params.readonly\"\n    :param-icon=\"params.icon || 'far fa-plus'\"\n    :param-document-id=\"params.showSelected && locals.selectedRefId\"\n    data-test=\"button-add\"\n  ></ae-layout>\n\n  <ae-layout\n    layout-id=\"7a96896f-0d13-4a80-8143-5f84c9b5e790\"\n    ref=\"popup\"\n    :params=\"{ readonly: params.readonly, \n              items: locals.items, \n              hidePath: params.hidePath, \n              searchSize: controller.searchSize, \n              keepOpenAfterSelection: params.keepOpenAfterSelection, \n              showCreate: controller.showCreate, \n              fullPath: controller.showFullPathm, \n              title: params.title, \n              loading: controller.isLoading, \n              prominentPickCommand: locals.prominentPickCommand,\n              uiFilters: locals.uiFilters,\n              design: params.pickerDesign,\n              showAddAll: params.showAddAll,\n            }\"\n    @filter=\"controller.filterItems($event)\"\n    @ui-filter=\"controller.selectedUiFilter($event)\"\n    @selected=\"controller.selected($event)\"\n    @selected-prominent-pick-command=\"controller.evaluateProminentPickCommand()\"\n    @selected-add-all=\"controller.evaluateAddAll()\"\n    @load-more=\"controller.loadMoreItems()\"\n    @create=\"$emit('create-and-link', $event) && $refs.popup.$emit('close')\"\n  ></ae-layout>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"ef23b6bd-ec74-4701-ab8d-71a6d67fd9e4","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-05-07T13:03:10+00:00","backedBy":"","by":"b7485498-f1f3-4ab1-87d1-9cb63ea890c8","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"e19bf0a0a8b3e380"},"stamps":[],"t":1778158990628,"v":"03a8fdf8f3c8feb2"},{"id":"f267dd57-fdeb-4af7-92ac-20da43d471de","v":"97bf3b47efacbef5","previous":{"v":"8c27986a93140e17"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:ref-inline-add","applies":"","template":"<!-- {{locals.render}}\n<br>\nis{{!!locals.editableDocument}}\n{{ locals.editableDocument?.id }}{{ locals.editableDocument?.v }}\n{{ locals.editableDocument?.editVersion }}\n==> {{locals.editableDocument?.data.name}} -->\n\n<!-- <div class=\"text-blue-500\">\n{{ locals.editableDocument?.id }} {{ locals.editImmediately }}\n</div> -->\n\n<ae-design v-if=\"locals.editableDocument\" \n          name=\"rd:ref-card\" \n          :document=\"locals.editableDocument\"\n          :params=\"{ \n            ...params.designParams, \n            inlineAdd: true, \n            editImmediately: locals.editImmediately \n          }\"\n          class=\"py-1\"\n          :key=\"locals.editableDocument.id\"\n          :watch=\"false\"\n></ae-design>\n","css":"","controller":"class Controller {\n  async init() {\n    // console.log('initi')\n\n    locals.editableDocument = null\n    locals.render = Aeppic.DateTime.now().toISO()\n    locals.editImmediately = false\n\n    watchParam('document', (doc) => {\n      if (doc.id === locals.editableDocument?.p) {\n        return\n      }\n\n      this._newDoc(doc)\n    })\n\n    await this._newDoc(params.document)\n  }\n\n  async _newDoc(parentDocumentOfChild, editImmediately) {\n    if (this.watcher) {\n      this.watcher.stop()\n      this.watcher = null\n    }\n\n    const newDocument = await Aeppic.new(params.fieldInfo.formRef, parentDocumentOfChild)\n    newDocument.hidden = true\n\n    locals.editableDocument = newDocument\n    locals.editImmediately = !!editImmediately\n\n    // console.log('_newDoc', locals.editableDocument.id)\n\n    // if saved: add document to parent and create a new document\n    this.watcher = Aeppic.watch(locals.editableDocument.id, async (_, reason) => {\n      if (!reason.updated) {\n        return\n      }\n\n      locals.editableDocument.hidden = false\n\n      params.document.addReference(params.fieldName, locals.editableDocument, params.addReferenceOptions) \n\n      Aeppic.save(locals.editableDocument)\n\n      this.watcher?.stop()\n      this.watcher = null\n\n      $emit('saved')\n\n      await this._newDoc(parentDocumentOfChild, true)\n    })\n  }\n  \n \n}","packages":[]},"locks":[],"created":{"at":"2023-02-24T15:56:14+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2024-08-30T08:52:06+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1725007926052,"ct":1677254174615,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"36614477-3d62-4545-bcc6-cba534a6331d","text":"Reload Notification Button","v":"55cdd0deaf6b3697"},"created":{"at":"2023-01-11T12:39:03+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1764337177071,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.missedChangesTimeoutId = null\n    locals.reloadNoficationTriggered = false\n\n    this._setupReloadNotification()\n\n    if (params.simulate) {\n      this._showReloadNotification()\n    }\n  }\n\n  _setupReloadNotification() {\n      Aeppic.on('server:changed', () => {\n        console.log('changes:server-changed')\n        this._showReloadNotification()\n        this._setupAutomaticReload()\n      })\n\n      this.missedChangesTimeoutId = null\n\n      Aeppic.on('changes:missed', () => {\n        console.log('changes:missed')\n        if (this.missedChangesTimeoutId) {\n          clearTimeout(this.missedChangesTimeoutId)\n        }\n\n        this.missedChangesTimeoutId = setTimeout(() => {\n          this._showReloadNotification()\n        }, 5000)\n      })\n\n      Aeppic.on('changes:missed-found', () => {\n        console.log('changes:missed-found')\n        if (this.missedChangesTimeoutId) {\n          clearTimeout(this.missedChangesTimeoutId)\n        }\n      })\n  }\n\n  _showReloadNotification() {\n    console.log('showReloadNotifation')\n    locals.reloadNoficationTriggered = true\n\n    $emit('show')\n  }\n\n  async _setupAutomaticReload() {\n    const minuteMs = 60 * 1000\n    \n    let userSavedAnyDocument = false\n\n    Aeppic.on('change', () => {\n      // user saved any document\n      userSavedAnyDocument = true\n    })\n\n    let lastActivePageDocumentId = Aeppic.Root.params?.pageDocumentId\n\n    Aeppic.setInterval(() => {\n      const currentPageDocumentId = Aeppic.Root.params?.pageDocumentId\n      const pageDocumentDidChange = lastActivePageDocumentId !== currentPageDocumentId\n\n      console.log('Automatic Reload?', { pageDocumentDidChange, userSavedAnyDocument })\n\n      if (pageDocumentDidChange || userSavedAnyDocument) {\n        // reset for next interval execution\n        userSavedAnyDocument = false\n        lastActivePageDocumentId = currentPageDocumentId\n\n        return\n      }\n\n      console.warn('Automatic reload starting...')\n\n      Aeppic.reload()\n    }, 10 * minuteMs)\n    // const nowMs = Aeppic.DateTime.now().toMillis()\n\n    // const randomMinutes = Math.floor(Math.random() * 61)\n    // const differenceToNowMs = Aeppic.DateTime.now().set({ hour: 22, minute: randomMinutes }).diff(Aeppic.DateTime.now()).as('milliseconds')\n\n    // if (Number.isNaN(differenceToNowMs) || differenceToNowMs <= 0) {\n    //   // do not schedule a time in the past to reload. This will lead to reload loops\n    //   return\n    // }\n\n    // const targetDateTimeMs = nowMs + differenceToNowMs\n\n    // console.warn('Setup automatic reload to ' + new Date(targetDateTimeMs))\n\n    // Aeppic.setTimeout(() => {\n    //   console.warn('Automatic reload starting...')\n\n    //   Aeppic.reload()\n    // }, differenceToNowMs)\n  }\n}\n  ","css":"._CSS-action-button {\n  transition: scale 0.2s ease-in-out;\n  /* margin: 0 16px; */\n  \n}\n\n._CSS-action-button {\n  display:flex;\n  align-items: center;\n}\n\n._CSS-action-button._CSS-action-button--active {\n  color: var(--ae-primary);\n}\n\n._CSS-action-button:hover {\n  transform:scale(1.1);\n}\n\n","name":"rd:Reload Notification Button","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<ae-layout v-if=\"params.button && locals.reloadNoficationTriggered\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-info-circle\"\n            param-text=\"Wir empfehlen diese Seite neu zu laden um die neusten Daten zu erhalten\"\n            param-title=\"Wir empfehlen diese Seite neu zu laden um die neusten Daten zu erhalten.\"\n            @selected=\"$refs.popup.show($event)\"\n            :param-classes=\"params.classes\"\n></ae-layout>\n<ae-layout v-if=\"params.icon  && locals.reloadNoficationTriggered\"\n            layout-id=\"9fdb8db1-ffb9-4e5a-ac0a-90d73f80b167\"\n            param-icon=\"far fa-info-circle\"\n            class=\"text-red-500\"\n            :param-classes=\"params.classes\"\n            param-title=\"Wir empfehlen diese Seite neu zu laden um die neusten Daten zu erhalten.\"\n></ae-layout>\n\n<ae-popup ref=\"popup\" :max-width=\"400\"\n base-attachment=\"top right\" popup-attachment=\"center center\" :close-delay=\"200\">\n  <div slot=\"popup\" class=\"p-4\" slot-scope=\"scope\">    \n    <p>Ihr Bizpin war nicht durchgängig mit dem Server verbunden und hat einige Daten-Änderungen nicht erhalten.</p>\n    <p>Wir empfehlen Ihnen bei nächster Möglichkeit neuzuladen.</p>\n\n    <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                @selected=\"Aeppic.reload()\"\n                :params=\"{ primary: true, text: 'Jetzt Bizpin neuladen', icon: 'far fa-sync' }\"\n    ></ae-layout>\n  </div>\n</ae-popup>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"60476e05-80d4-45a6-ab35-8964e834a9c3","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-11-28T14:39:17+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"36614477-3d62-4545-bcc6-cba534a6331d","text":"Reload Notification Button","v":"55cdd0deaf6b3697"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"6aa7632582ba938e"},"stamps":[],"t":1764340757951,"v":"8dff77b6f91f96ca"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2024-01-25T16:13:05+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1706199284453,"data":{"applies":"","controller":"class Controller {\n  async init() {\n  this.FORMS = {\n      Login: 'fcc74d30-8252-46d2-8f59-6002eab2761b',\n    }\n    this.configureTailwind()\n\n    locals.hasPrefilledToken = (params.queryParams?.token)\n    locals.token = params.queryParams?.token || ''\n    locals.password = ''\n    locals.passwordConfirmation = ''\n    locals.logo = null\n \n    locals.passwordTestResult = {\n      ok: false,\n      tests: [],\n      confirmation: false,\n    }\n\n    // this.testLength = /.{8}/, // 8 or more letters\n    // this.testCapitalLetter = /[A-Z]/, // capital letter\n    // this.testDigit = /\\d/, // digit\n    // this.testSpecialCharacter = /((?!\\s)\\W)/, // special character\n    // this.testWhitespace = /^[\\S]+$/ // no whitespace\n\n    this.tests = [\n      /.{8}/, // 8 or more letters\n      /[A-Z]/, // capital letter\n      /\\d/, // digit\n      /((?!\\s)\\W)/, // special character\n      /^[\\S]+$/, // no whitespace\n    ]\n\n\n    // !tests.every(regex => regex.test(password))\n\n\n    locals.errors = []\n    locals.running = false\n    locals.executed = false\n\n    const loginSettings = await Aeppic.findOne(`p:root f.id:${this.FORMS.Login}`, { sort: 'id' })\n\n    locals.companyLogoSrc = loginSettings?.data.logo.dataUrl\n      ? Aeppic.Content.getSrc(loginSettings, 'logo')\n      : '/api/docs/5a5cfd6a-1748-4c6a-a2a1-64490c6e28ae/fields/file/_content?version=initial&dataUrl=aeppic-local%3A%2F%2F82284574-24dd-4f19-a51f-ac7b62565a1c%2F1' // bizpin color svg\n\n    locals.companyBannerSrc = loginSettings?.data.banner.dataUrl\n      ? Aeppic.Content.getSrc(loginSettings, 'banner')\n      : '/api/docs/322bd762-239d-4dd7-ac77-2536bc55234b/fields/file/_content?version=37f6b3de7e94252b&dataUrl=aeppic-local%3A%2F%2F8ffe4469-3c1c-4e62-a2a3-766488601830%2F5' // Bizpin Login Default Banner\n\n    locals.companyBackgroundSrc = loginSettings?.data.backgroundImage.dataUrl\n      ? Aeppic.Content.getSrc(loginSettings, 'backgroundImage')\n      : '/api/docs/ac205f27-d612-4f02-a648-c0a70cc3f5b9/fields/file/_content?version=b99d6efafca17be8&dataUrl=aeppic-local%3A%2F%2F8ffe4469-3c1c-4e62-a2a3-766488601830%2F3' // blue abstract wave\n    locals.backgroundImageClass = loginSettings?.data.backgroundImage.dataUrl\n      ? `bg-[url('${locals.companyBackgroundSrc}')]`\n      : `bg-[url('${locals.companyBackgroundSrc}')] bg-blend-luminosity`\n\n  }\n\n    configureTailwind() {\n    try {\n      if (typeof tailwind !== 'undefined') {\n        // https://tailwindcss.com/docs/screens\n        if (tailwind.config.theme === undefined) {\n          tailwind.config.theme = {\n            extend: {},\n          }\n        }\n\n        tailwind.config.theme.extend.screens = {\n          '3xl': '2000px',\n        }\n      }\n\n      // FIXME: implement loading company CI\n      // const companyCi = await Aeppic.findOne(`p:${companyId} f.id:81da74f7-1abf-48c1-add1-18266cd4c30e`)\n\n      // if (companyCi) {\n      //   try {\n      //     tailwind.config.theme.extend.colors = JSON.parse(companyCi.data.colors)\n      //   } catch (error) {\n      //     console.error(`Error parsing company CI: ${error}`)\n      //   }\n      // } else {\n      tailwind.config.theme.extend.colors = {\n        primary: tailwind.colors.blue,\n        secondary: tailwind.colors.slate,\n        'brand-accent': tailwind.colors.lime,\n        'brand-accent-secondary': tailwind.colors.fuchsia,\n        info: tailwind.colors.indigo,\n        warn: tailwind.colors.amber,\n        error: tailwind.colors.rose,\n      }\n      // }\n    } catch (e) {\n      console.error('Error config tailwind', e)\n    }\n  }\n\n  updatePasswordTestResult() { \n    const result = {\n      ok: false,\n      testsOk: false,\n      tests: [],\n      confirmation: locals.password === locals.passwordConfirmation\n    }\n    const password = locals.password\n\n    result.tests = this.tests.map(regex => regex.test(password))\n    \n    result.testsOk = result.tests.every(value => value === true)\n    result.ok = result.testsOk === true && result.confirmation === true && (locals.hasPrefilledToken || locals.token)\n\n    locals.passwordTestResult = result\n  }\n\n\n  get successful() {\n    return locals.errors.length === 0 && locals.executed && !locals.running\n  }\n\n  async resetPassword() {\n    function sleep(milliseconds) {\n      return new Promise(resolve => setTimeout(resolve, milliseconds))\n    }\n\n    locals.running = true\n    locals.executed = true\n\n    if (locals.password != locals.passwordConfirmation) {\n      locals.errors = ['translate:param-password-confirmation-failed']\n      locals.running = false\n      return\n    }\n\n    // TODO: Commands.execute is not working for anonymous accounts\n    // const result = await Aeppic.Commands.execute('5b8a9204-29f0-4ad1-9bbb-8c61b05249bb', Aeppic.Root.layout.id, {\n    //   token: locals.token,\n    //   password: locals.password\n    // })\n    const httpRequest = await Aeppic.fetch('api/docs/root/_executeCommand?commandId=5b8a9204-29f0-4ad1-9bbb-8c61b05249bb&apiToken=XtEnNKBzAx21oecVJB9qrxdG', {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json;charset=utf-8'\n      },\n      body: JSON.stringify({\n        parameters: {\n          token: locals.token,\n          password: locals.password\n        }\n      })\n    })\n\n    await sleep(2000)\n\n\n    if (httpRequest.ok) {\n      const result = await httpRequest.json()\n\n      if (result.value.ok) {\n        locals.errors = []\n      } else {\n        locals.errors = [result.value.message || 'translate:invalid-token|Ungültiger Token']\n      }\n\n    } else {\n      locals.errors = ['translate:error:execution']\n    }\n\n    locals.running = false\n  }\n}","css":" ","name":"rd:Reset Password Layout","packages":[],"template":"<div class=\"absolute top-0 left-0 right-0 bottom-0 bg-[#0e3c79] overflow-auto pb-10 bg-cover bg-center\"\n    :class=\"[ locals.backgroundImageClass ]\"\n    :data-test=\"'layout' + '_' + layout.id\"\n>\n\n  <div class=\"ae-stacking-context h-full w-full \">\n    <div class=\"w-full flex gap-20 mt-4 lg:mt-20\">\n    <div class=\"w-full p-4 bg-white max-w-[400px] mx-auto rounded-md shadow\"> \n      <img v-if=\"locals.companyLogoSrc\" class=\"ml-2 max-h-[44px] max-w-[130px] object-contain\" :src=\"locals.companyLogoSrc\">\n\n      <div class=\"flex flex-col gap-4\" :class=\"{ '': controller.successful }\">\n\n        <template v-if=\"!locals.hasPrefilledToken\">\n          <label for=\"_CSS-token\">Anmeldecode</label>\n          <input class=\"w-full border rounded-md py-1 px-2 flex gap-1 bg-white placeholder:italic\" :disabled=\"controller.successful\" id=\"_CSS-token\" type=\"text\" v-model=\"locals.token\" @input=\"controller.updatePasswordTestResult()\">\n        </template>\n\n        <div class=\"flex flex-col gap-1\">\n          <div>Passwort-Anforderungen</div>\n          <ul>\n            <li><ae-icon v-if=\"locals.passwordTestResult.tests[0]\" class=\"far fa-check-circle text-green-500\"></ae-icon> <ae-icon v-else class=\"far fa-times-circle\"></ae-icon> Mindestens 8 Zeichen</li>\n            <li><ae-icon v-if=\"locals.passwordTestResult.tests[1]\" class=\"far fa-check-circle text-green-500\"></ae-icon> <ae-icon v-else class=\"far fa-times-circle\"></ae-icon> Mindestens 1 Großbuchstabe</li> \n            <li><ae-icon v-if=\"locals.passwordTestResult.tests[2]\" class=\"far fa-check-circle text-green-500\"></ae-icon> <ae-icon v-else class=\"far fa-times-circle\"></ae-icon> Mindestens 1 Zahl</li>\n            <li><ae-icon v-if=\"locals.passwordTestResult.tests[3]\" class=\"far fa-check-circle text-green-500\"></ae-icon> <ae-icon v-else class=\"far fa-times-circle\"></ae-icon> Mindestens 1 Sonderzeichen</li>\n            <li><ae-icon v-if=\"locals.passwordTestResult.tests[4]\" class=\"far fa-check-circle text-green-500\"></ae-icon> <ae-icon v-else class=\"far fa-times-circle\"></ae-icon> keine Leerzeichen</li> \n          </ul>\n        </div>\n\n        <label for=\"_CSS-password\">Passwort</label>\n        <input class=\"w-full border rounded-md py-1 px-2 flex gap-1 bg-white placeholder:italic\" :disabled=\"controller.successful\" id=\"_CSS-password\" type=\"password\" v-model=\"locals.password\" minlength=\"8\" @input=\"controller.updatePasswordTestResult()\">\n\n        <label for=\"_CSS-passwordConfirmation\">Passwort Bestätigung</label>\n        <input class=\"w-full border rounded-md py-1 px-2 flex gap-1 bg-white placeholder:italic\" :disabled=\"controller.successful\" id=\"_CSS-passwordConfirmation\" type=\"password\" v-model=\"locals.passwordConfirmation\" @input=\"controller.updatePasswordTestResult()\">\n        <div v-if=\"locals.passwordTestResult.testsOk && !locals.passwordTestResult.confirmation\">\n          <ae-icon class=\"far fa-times-circle\"></ae-icon> Passwörter sind nicht gleich.\n        </div>\n        <div v-else>&nbsp;</div>\n\n        <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    :param-primary=\"true\"\n                    param-text=\"Passwort ändern\"\n                    :param-disabled=\"!locals.passwordTestResult.ok || locals.running || controller.successful\"\n                    @selected=\"controller.resetPassword()\"\n        ></ae-layout>\n      </div>\n    \n      <section v-if=\"locals.running\" class=\"mt-6\">\n        <ae-icon class=\"far fa-spinner-third fa-spin\"></ae-icon> Passwort wird überprüft...\n      </section>\n    \n      <section class=\"mt-6\" v-if=\"locals.executed && !locals.running\">\n        <section v-if=\"controller.successful\" class=\"\">\n          <div> \n            <ae-icon class=\"far fa-check text-green-500\"></ae-icon>\n            <span>Passwort erfolgreich geändert.</span>\n          </div>\n\n          <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              :param-primary=\"true\"\n              param-text=\"Zum Login\"\n              @selected=\"$refs.linkHome.click()\"\n          ></ae-layout>\n          <a v-show=\"false\" href=\"/\" ref=\"linkHome\"></a>\n        </section>\n        <section v-else class=\"\">\n          <div v-for=\"error of locals.errors\" class=\"flex gap-1 items-center\">\n            <ae-icon class=\"far fa-exclamation-triangle text-red-500\"></ae-icon>{{ Aeppic.translate(error) }}\n          </div>\n        </section>\n      </section>\n\n    </div>  \n    </div>\n  </div>\n\n</div>\n "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"ea5a8b47-307a-4c0e-aa8e-068334e463ff","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-03-26T15:16:44+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"9201b0e7795f9fee"},"stamps":[],"t":1774538204406,"v":"3a79a291bef6f832"},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9","d55ee142-2da7-4d53-84b4-15a7fc71c1fb"],"a_depth":5,"a_forms":["system-folder-form","folder","form","folder","layout-form"],"created":{"at":"2025-10-07T13:57:15+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759845435584,"data":{"applies":"","controller":"class Controller {\n  init() {\n    const semanticColors = [...params.extendedColors ?? []]\n    locals.roleColors = ['primary', 'secondary', 'tertiary', 'neutral', 'neutral-variant', 'error', ...semanticColors]\n  }\n}","css":"._CSS-color-container {\n  @apply p-2 flex items-center text-center justify-center;\n}","name":"rd:scheme-presentation","packages":[],"template":"<section>\n  <h1>{{ params.schemaTitle }}</h1>\n  <div \n    class=\"flex flex-col gap-3\"\n  >\n    <div\n      class=\"flex flex-col w-full\"\n    >\n      <div\n        class=\"flex w-full\"\n      >\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-inverse-surface)', 'color': 'var(--color-inverse-on-surface)'}\"\n        >\n          Inverse Surface\n        </div>\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-inverse-on-surface)', 'color': 'var(--color-inverse-surface)'}\"\n        >\n          Inverse On Surface\n        </div>\n      </div>\n      <div\n        class=\"flex w-full\"\n      >\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-surface-dim)', 'color': 'var(--color-on-surface)'}\"\n        >\n          Surface Dim\n        </div>\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-surface)', 'color': 'var(--color-on-surface)'}\"\n        >\n          Surface\n        </div>\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-surface-bright)', 'color': 'var(--color-on-surface)'}\"\n        >\n          Surface Bright\n        </div>\n      </div>\n      <div\n        class=\"flex w-full\"\n      >\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-surface-container-lowest)', 'color': 'var(--color-on-surface)'}\"\n        >\n          Surf. Container Lowest\n        </div>\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-surface-container-low)', 'color': 'var(--color-on-surface)'}\"\n        >\n          Surf. Container Low\n        </div>\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-surface-container)', 'color': 'var(--color-on-surface)'}\"\n        >\n          Surf. Container\n        </div>\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-surface-container-high)', 'color': 'var(--color-on-surface)'}\"\n        >\n          Surf. Container High\n        </div>\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-surface-container-highest)', 'color': 'var(--color-on-surface)'}\"\n        >\n          Surf. Container Highest\n        </div>\n      </div>\n      <div\n        class=\"flex w-full\"\n      >\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-on-surface)', 'color': 'var(--color-surface)'}\"\n        >\n          On Surface\n        </div>\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-on-surface-variant)', 'color': 'var(--color-surface)'}\"\n        >\n          On Surface Variant\n        </div>\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-outline)', 'color': 'var(--color-surface)'}\"\n        >\n          Outline\n        </div>\n        <div\n          class=\"flex-1 _CSS-color-container\"\n          :style=\"{'backgroundColor': 'var(--color-outline-variant)', 'color': 'var(--color-surface)'}\"\n        >\n          Outline Variant\n        </div>\n      </div>\n    </div>\n    <div\n      class=\"flex w-full\"\n    >\n      <div\n        class=\"flex-1 _CSS-color-container\"\n        :style=\"{'backgroundColor': 'var(--color-shadow)', 'color': 'white'}\"\n      >\n        Scrim\n      </div>\n      <div\n        class=\"flex-1 _CSS-color-container\"\n        :style=\"{'backgroundColor': 'var(--color-shadow)', 'color': 'white'}\"\n      >\n        Shadow\n      </div>\n    </div>\n\n    <div\n      class=\"flex flex-col gap-1\"\n      v-for=\"color in locals.roleColors\"\n    >\n      <ae-layout\n        v-if=\"color !== 'neutral' && color !== 'neutral-variant'\"\n        layout-id=\"20ad2cb5-eba7-4d3a-90c8-b8aaa9882530\"\n        class=\"w-full\"\n        :param-color=\"color\"\n      ></ae-layout>\n      <div\n        v-else\n      >\n        {{ color }}\n      </div>\n      <ae-layout\n        layout-id=\"bce3252e-29ca-40c5-af9b-bb35e5742aea\"\n        class=\"w-full\"\n        :param-color=\"color\"\n      ></ae-layout>\n      <ae-layout\n        layout-id=\"bce3252e-29ca-40c5-af9b-bb35e5742aea\"\n        class=\"w-full\"\n        :param-color=\"color\"\n        :param-fixed=\"true\"\n      ></ae-layout>\n    </div>\n  \n  </div>\n</section>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"87b0b799-2c06-4d89-ad71-f75835b6be4d","inheritedLocks":[null,null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-10T08:21:09+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"d55ee142-2da7-4d53-84b4-15a7fc71c1fb","previous":{"v":"711cdee9232c6ba0"},"stamps":[],"t":1760084469404,"v":"d4eca40292a4f7cc"},{"a":["apps","5a8a5d3c-f995-43ef-8d37-1f8a5e4550da","a266683d-c5cc-48db-aa99-a306d20ae787"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"072c0d3c-68f4-4b7c-9803-d6513f60e507","text":"Selection v2 Commands for params.document","v":"1c271e14e9fce8c4"},"created":{"at":"2023-07-28T08:41:04+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1690533664521,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this.FORMS = {\n      CommandGroup: 'command-group-form',\n      Command: 'command-form'\n    }\n\n    hideComponent()\n\n    locals.commands = []\n    locals.commandParams = {}\n\n    this.onSelectionsChangeHandler = () => this.onSelectionsChange()\n    packages.Selections.addOnChangeHandler(this.onSelectionsChangeHandler)\n\n    this.onChangeHandler = () => this.onChange()\n\n    this.onSelectionsChange()\n  }\n\n  updateVisibility() {\n    const hasCommands = locals.commands && locals.commands.length > 0\n    const hasSelectionResult = this.selection && this.selection.result()\n\n    if (hasCommands && hasSelectionResult) {\n      showComponent()\n    } else {\n      hideComponent()\n    }\n  }\n\n  async onSelectionsChange() {\n    params.debug && console.log('onSelectionsChange')\n    const selection = this.selection\n\n    if (selection) {\n      selection.addOnChangeHandler(this.onChangeHandler)\n      locals.commandParams = { selectionResult: selection.result() }\n      const commands = await Aeppic.find(`p:${params.document.f.id} f.id:${this.FORMS.Command} data.name:selection*`)\n\n      locals.commands = await this._filterVisibleCommands(commands, params.document)\n\n      params.debug && console.log({ selection, commands, visibleCommands: locals.commands })\n\n      this.updateVisibility()\n      return\n    }\n\n    locals.commands = []\n    locals.commandParams = {}\n\n    this.updateVisibility()\n  }\n\n  async _filterVisibleCommands(commands, document) {\n    const visibleCommands = await Promise.all(\n      commands.map(async (command) => {\n        if (command.f.id === this.FORMS.CommandGroup) {\n          if (!command.data.commands.length) {\n            return\n          }\n\n          if (!command.data.name.startsWith('rd:')) {\n            return\n          }\n \n          return  { command }\n        }\n\n        // hasRight check\n\n        const hasRight = await Aeppic.Commands.hasRightToExecute(command, document) \n        params.debug && console.log(command.data.name, { hasRight, command })\n\n        if (!hasRight) {\n          console.warn(`Current account does not have rights to execute ${command.data.name}`, { command, document })\n          return { command, disabled: true }\n        }\n\n        if (!('isVisible' in Aeppic.Commands)) { \n          return { command }\n        }\n\n        if (await Aeppic.Commands.isVisible(command, document)) {\n          return { command }\n        }\n\n        return null\n      })\n    )\n\n    return visibleCommands.filter(c => c != null)\n  }\n \n  onChange() {\n    params.debug && console.log('onChange')\n    \n    const selection = this.selection\n\n    if (selection) {\n      locals.commandParams = { selectionResult: selection.result() }\n    } else {\n      locals.commandParams = {}\n    }\n\n    this.updateVisibility()\n  }\n\n  get selection() {\n    return packages.Selections.get(params.selectionId || params.document.f.id)\n  }\n\n  destroy() {\n    if (packages.Selections) {\n      packages.Selections.removeOnChangeHandler(this.onSelectionsChangeHandler)\n    }\n  }\n}","css":"","name":"rd:Selection v2 Commands for params.document","packages":[{"id":"d648078c-4579-4023-a4ec-b7b9cf639b70","text":"Selection Manager v2","v":"2717577f8f96b28a"}],"template":"<div v-if=\"Array.isArray(locals.commands) && locals.commands.length && controller.selection?.result() \">\n  <ae-layout  layout-id=\"fde4ed81-1f72-4e27-b2bf-f1291c4ec7ea\"\n              v-for=\"command of locals.commands\"\n              :param-command=\"command.command\"\n              :param-disabled=\"command.disabled\"\n              :param-target=\"params.document\"\n              :param-options=\"locals.commandParams\"\n              param-border=\"border\"\n  ></ae-layout>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"0089d022c95c78e9"},"id":"d1bbb072-bf50-4d51-b1bd-685c1a9f7844","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-03-12T14:17:36+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"072c0d3c-68f4-4b7c-9803-d6513f60e507","text":"Selection v2 Commands for params.document","v":"1c271e14e9fce8c4"},"p":"a266683d-c5cc-48db-aa99-a306d20ae787","previous":{"v":"6140e477854e7050"},"stamps":[],"t":1773325056092,"v":"16e034755fce3262"},{"a":["apps","634a96fa-b352-4447-85c8-fced840e2693","79f0bb0e-40ac-49b6-869a-6de582dab712"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2024-05-13T08:32:22+00:00","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1715589150988,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    locals.password = ''\n    locals.result = {}\n    locals.bizpinLogo = null\n    locals.companyLogo = null\n    locals.companyName = ''\n\n    // locals.autoLogin = params.queryParams && 'auto' in params.queryParams\n\n    locals.status = {\n      done: false,\n      running: true,\n      once: false,\n    }\n\n    this._resetResult()\n\n    if (this.tailwindSupported) {\n      await this._configureTailwind()\n    }\n\n    const logos = (await this._executeCommandRequest('1d813333-564a-4085-a890-2cde885a4b77', params.pageDocumentId, {})).value\n\n    if (logos) {\n      const company = await Aeppic.get(logos.company)\n      locals.bizpinLogo = Aeppic.Content.getSrc(await Aeppic.get(logos.applicationLogo), 'file')\n      locals.companyLogo = Aeppic.Content.getSrc(company, 'logo')\n      locals.companyName = company?.data.name\n    }\n\n\n    await this.loadStylesheets()\n\n    // if (locals.autoLogin) {\n      await this.execute(true)\n    // }\n\n\n    this.onClickOpenNewTabInsteadOfNavigation = (event) => {\n      if (event.target.tagName !== 'A') {\n        return\n      }\n\n      const href = event.target.getAttribute('href')\n      if (!href) {\n        return\n      }\n\n      if (!href.startsWith('http') && !href.startsWith('www')) {\n        return\n      }\n\n      event.preventDefault()\n      \n      packages.window.open(href, '_blank');\n    }\n\n    packages.window.addEventListener('click', this.onClickOpenNewTabInsteadOfNavigation)\n  }\n\n  async loadStylesheets() {\n    const sheets = await Aeppic.getAll([\n      '91bb8b92-51d5-441f-be02-dec27ab3429d',\n    ])\n\n    Promise.all(sheets.map(sheet => sheet && Aeppic.loadStylesheet(sheet)))\n  }\n\n  async execute(tryAutoLogin) {\n    locals.status.running = true\n\n    const sleep = async (timeout = 1000) => {\n      return new Promise((resolve) => {\n        setTimeout(() => resolve(), timeout)\n      })\n    }\n\n    // await sleep(1000)\n\n    const commandOptions = {\n      password: locals.password,\n    }\n\n    const commandResult = await this._executeCommandRequest('72c8d9dd-09f6-4f58-9bd2-38cb266cf286', params.pageDocumentId, commandOptions)\n\n    if (!commandResult.ok || commandResult.value.error) {\n      this._setStatusNoResult()\n      this._resetResult()\n      console.error('error', commandResult)\n      return\n    }\n\n    const { commandId = '', layoutId = '', structuralDocuments: baseStructuralDocuments, targetDocument, shareDocument } = commandResult.value\n\n    commandOptions.shareDocument = shareDocument\n\n    const documentResults = await this._executeCommandRequest(commandId, targetDocument.id, commandOptions)\n\n    if (!documentResults.ok) {\n      if (tryAutoLogin) {\n        this._setStatusNoResultAutoLogin()\n      } else {\n        this._setStatusNoResult()\n        console.error('error', documentResults)\n      }\n\n      this._resetResult()\n\n      return\n    }\n\n    const { documents, structuralDocuments } = documentResults.value\n\n    const importingPromises = []\n\n    if (baseStructuralDocuments && baseStructuralDocuments.length) {\n      importingPromises.push(Aeppic.import(baseStructuralDocuments))\n    }\n\n    if (structuralDocuments && structuralDocuments.length) {\n      importingPromises.push(Aeppic.import(structuralDocuments))\n    }\n\n    const cloned = JSON.parse(JSON.stringify(documents))\n    importingPromises.push(Aeppic.import(cloned))\n\n    locals.result = { ...documentResults.value, ...{ targetDocument, layoutId, documents, commandId, structuralDocuments: null } }\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    const importResults = await Promise.all(importingPromises)\n    console.log(importingPromises)\n\n    this._setStatusDone()\n  }\n\n  async _executeCommandRequest(commandId, targetId, paramParams) {\n    const params = paramParams || {}\n\n    // TODO: Commands.execute is not working for anonymous accounts\n    const httpRequest = await Aeppic.fetch(`api/docs/${targetId}/_executeCommand?commandId=${commandId}&apiToken=a12d191b4622a6cbd475e9e838ee`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json;charset=utf-8'\n      },\n      body: JSON.stringify({\n        parameters: params\n      })\n    })\n\n\n    if (httpRequest.ok) {\n      const result = await httpRequest.json()\n      return result\n    } else {\n      return { ok: false }\n    }\n  }\n\n  _resetResult() {\n    locals.result = JSON.parse(JSON.stringify(\n      {\n        layoutId: '',\n        documents: []\n      }\n    ))\n  }\n\n  _setStatusNoResult() {\n    locals.status.once = true\n    locals.status.running = false\n    locals.status.done = false\n  }\n  \n  _setStatusDone() {\n    locals.status.once = true\n    locals.status.running = false\n    locals.status.done = true\n  }\n\n  _setStatusNoResultAutoLogin() {\n    locals.status.once = false\n    locals.status.running = false\n    locals.status.done = false\n  }\n\n  get tailwindSupported() {\n    return (typeof tailwind !== 'unknown')\n  }\n\n  async _configureTailwind() { \n    if (typeof tailwind != 'undefined') {\n      tailwind.config = {\n        darkMode: 'selector'\n      }\n\n      tailwind.config.theme = { extend: {} }\n\n      tailwind.config.theme.extend.screens = {\n        '3xl': '2000px',  \n      }\n\n      const pageDocument = await Aeppic.get(params.pageDocumentId)\n      const companyCi = await Aeppic.findOne(`p:${pageDocument.a[1]} f.id:81da74f7-1abf-48c1-add1-18266cd4c30e`)\n\n      if (companyCi) {\n        try {\n          tailwind.config.theme.extend.colors = JSON.parse(companyCi.data.colors)\n        } catch (error) {\n          console.error(`Error parsing company CI: ${error}`)\n        }\n      } else {\n        tailwind.config.theme.extend.colors = {\n          primary: tailwind.colors.blue,\n          secondary: tailwind.colors.slate,\n          'brand-accent': tailwind.colors.lime,\n          'brand-accent-secondary': tailwind.colors.fuchsia,\n          info: tailwind.colors.indigo,\n          warn: tailwind.colors.amber,\n          error: tailwind.colors.rose,\n        }\n      }\n    } else {\n      console.error('Tailwind not configured')\n    }\n  }\n\n  destroy() {\n    packages.window.removeEventListener('click', this.onClickOpenNewTabInsteadOfNavigation)\n  }\n} ","css":"","name":"rd:Shared Layout Executor","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"cc146accf5ec1930"}],"template":"<section class=\"h-full w-full flex flex-col ae-expand-region bg-neutral-50 \">\n  <div class=\"h-full overflow-hidden ae-dialog-region flex flex-col \">\n    <div class=\"bg-white shadow text-sm py-1 px-2 flex items-center gap-4 z-10\">\n      <img v-if=\"locals.companyLogo\" class=\"h-7 sm:h-11 w-auto\" :src=\"locals.companyLogo\"></img>\n      <div v-if=\"locals.companyName\">{{ locals.companyName }}</div>\n    </div>\n\n    <section class=\"overflow-y-scroll flex-1\">\n      <section v-if=\"!locals.status.done && (!locals.result.layoutId && !locals.result.documents.length)\"\n              class=\"flex flex-col gap-2 items-center p-4\"\n      >\n        <label :for=\"id('password')\">Passwort</label>\n        <input :id=\"id('password')\" :disabled=\"locals.status.running\" type=\"password\" v-model=\"locals.password\" autofocus autocomplete=\"new-password\"\n                class=\"border p-1 rounded-md\" @keydown.enter=\"controller.execute()\"\n        >\n\n        <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                  @selected=\"controller.execute()\"\n                  param-text=\"Passwort prüfen\"\n                  :param-disabled=\"locals.status.running\"\n                  :param-primary=\"true\"\n        ></ae-layout>  \n      </section>\n      <section v-if=\"locals.status.running\"\n                class=\"flex flex-col gap-2 items-center p-4\"\n      >\n        <ae-icon class=\"far fa-spinner-third fa-spin fa-3x\"></ae-icon>\n        <div>Lade Daten ...</div>\n      </section>\n      <section v-if=\"locals.status.once && !locals.result.layoutId && !locals.result.documents.length\"\n                class=\"flex flex-col gap-2 items-center p-4\"\n      >\n        <div>\n        Falsches Passwort oder keine Freigabe aktiv.\n        </div>\n      </section>\n      <ae-layout v-if=\"locals.result.layoutId\"\n                :layout-id=\"locals.result.layoutId\"\n                :param-result=\"locals.result\"\n                :param-page-document-id=\"locals.result.targetDocument.id\"\n                v-show=\"locals.status.done\"\n                class=\"xoverflow-y-scroll p-4\"\n      ></ae-layout>\n      <section class=\"mx-auto max-w-5xl p-4\" v-else-if=\"locals.result.documents.length\">\n        <ae-list \n                  list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                  :documents=\"locals.result.documents\"\n                  param-design=\"rd:search-card\"\n                  :param-design-params=\"{ readonly: true }\"\n                  v-show=\"locals.status.done\"\n        ></ae-list>\n      </section>\n\n    </section>\n\n    <section class=\"bg-white shadow-inner flex items-center justify-between text-sm py-1 px-2\">\n      <div class=\"whitespace-nowrap flex items-center gap-1\">Ein Service von \n          <a href=\"https://bizpin.de?utm_source=share\" target=\"_blank\">\n            <img v-if=\"locals.bizpinLogo\" class=\"h-7 sm:h-9 w-auto\" :src=\"locals.bizpinLogo\"></img>\n            <div v-else>Bizpin</div>\n          </a>\n      </div>\n      <div>\n        © 2024 - Exapris GmbH\n      </div>\n    </section>\n  </div>\n</section>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"39883b9e-c058-45e2-bf28-d4668b6035a0","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-09-25T15:37:32+00:00","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"79f0bb0e-40ac-49b6-869a-6de582dab712","previous":{"v":"5a9ddeb36d8ec8e7"},"stamps":[],"t":1758814652312,"v":"38103458d4ea668f"},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9","d55ee142-2da7-4d53-84b4-15a7fc71c1fb"],"a_depth":5,"a_forms":["system-folder-form","folder","form","folder","layout-form"],"created":{"at":"2025-10-07T13:57:45+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759845465362,"data":{"applies":"","controller":"class Controller {\n  init() {\n    const isExtended = !['primary', 'secondary', 'tertiary', 'surface', 'surface-variant', 'error'].includes(params.color)\n    const prefix = `var(--color-${isExtended ? 'extended-' : ''}`\n    const postfix = ')'\n\n    const colorLabel = params.color[0].toUpperCase() + params.color.slice(1);\n\n    const color =            `${prefix}${params.color}${postfix}`\n    const on =               `${prefix}on-${params.color}${postfix}`\n    \n    const container =        `${prefix}${params.color}-container${postfix}`\n    const onContainer =      `${prefix}on-${params.color}-container${postfix}`\n    \n    const fixed =            `${prefix}${params.color}-fixed${postfix}`\n    const onFixed =          `${prefix}on-${params.color}-fixed${postfix}`\n    \n    const dim =              `${prefix}${params.color}-dim${postfix}`\n    const fixedDim =         `${prefix}${params.color}-fixed-dim${postfix}`\n    \n    const onFixedVariant =   `${prefix}on-${params.color}-fixed-variant${postfix}`\n    const inverse =          `${prefix}inverse-${params.color}${postfix}`\n\n    locals.colors = [\n      {\n        label: `${colorLabel}`,\n        backgroundColor: color,\n        textColor: on,\n      },\n      {\n        label: `${colorLabel} Container`,\n        backgroundColor: container,\n        textColor: onContainer,\n      },\n      {\n        label: `${colorLabel} Fixed`,\n        backgroundColor: fixed,\n        textColor: onFixed,\n      },\n      {\n        label: `On ${colorLabel} Fixed Variant`,\n        backgroundColor: onFixedVariant,\n        textColor: fixed,\n      },\n      {\n        label: `${colorLabel} Dim`,\n        backgroundColor: dim,\n        textColor: on,\n      },\n\n\n\n      {\n        label: `On ${colorLabel}`,\n        backgroundColor: on,\n        textColor: color,\n      },\n      {\n        label: `On ${colorLabel} Container`,\n        backgroundColor: onContainer,\n        textColor: container,\n      },\n      \n      {\n        label: `On ${colorLabel} Fixed`,\n        backgroundColor: onFixed,\n        textColor: fixed,\n      },\n      \n      {\n        label: `${colorLabel} Fixed Dim`,\n        backgroundColor: fixedDim,\n        textColor: onFixed,\n      },\n      \n      {\n        label: `Inverse ${colorLabel}`,\n        backgroundColor: inverse,\n        textColor: `var(--color-inverse-surface)`,\n      }\n    ]\n  }\n}","css":"","name":"rd:single-color","packages":[],"template":"<template>\n  <div class=\"grid grid-cols-5 grid-rows-2 gap-1\">\n    <div\n      v-for=\"color in locals.colors\"\n      :key=\"color.label\"\n      class=\"flex items-center justify-center text-center p-2\"\n      :style=\"{\n        'backgroundColor': color.backgroundColor,\n        'color': color.textColor,\n      }\"\n    >\n      {{ color.label }}\n    </div>\n  </div>\n</template>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"20ad2cb5-eba7-4d3a-90c8-b8aaa9882530","inheritedLocks":[null,null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-10T08:21:31+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"d55ee142-2da7-4d53-84b4-15a7fc71c1fb","previous":{"v":"ddbe6702cfc1a5e8"},"stamps":[],"t":1760084491348,"v":"512bb686e9b0d7d3"},{"a":["system","lists"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2022-09-07T15:19:27+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1737472342723,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.rerenderCounter = 0 \n    locals.editingIndex = null\n\n    this.editHandler = (index) => this.edit(index)\n    $on('focus-at-index', this.editHandler)\n  }\n\n  add() {\n    if (!params.readonly) {\n      return\n    }\n\n    $emit('add')\n  }\n\n removeIfEmpty(index) {\n    const field = params.entries\n\n    if (!field[index]) {\n      $emit('remove', { index })\n    }\n  }\n\n  edit(index) {\n    locals.rerenderCounter += 1\n    \n    if (index === locals.editingIndex) {\n      locals.editingIndex = null\n    } else {\n      locals.editingIndex = index\n    }\n  }\n\n  get additionalLinkAttribute() {\n    return params.additionalLinkAttribute || null\n  }\n\n  get canAddMore() {\n    if (params.readonly) {\n      return false\n    }\n\n    if (params.cardinality) {\n      if (params.cardinality.max === 'n') {\n        return true\n      }\n\n      return params.entries.length < params.cardinality.max\n    }\n\n    return !params.entries[0]\n  }\n}","css":"","name":"rd:String List as Tags","packages":[],"template":"<div class=\"border rounded-md flex bg-white\" @click.stop=\"controller.add()\" :class=\"params.borderColor\">\n  <div class=\"flex items-center border-r py-1 px-2 text-neutral-500\" @click.stop>\n    <ae-icon :class=\"params.icon\"></ae-icon>\n  </div>\n\n  <div class=\"flex-1 flex flex-wrap gap-1 overflow-hidden py-1 px-2 bg-neutral-100\">\n    <div\n      v-for=\"(entry, index) of params.entries\"\n      class=\"bg-white border rounded-full p-1 pl-2 flex items-center gap-2 flex-1 overflow-hidden\"\n      @click.stop\n      :class=\"[params.classMinEntryWidth || 'min-w-52']\"\n    >\n      <template v-if=\"locals.editingIndex === index\">\n        <ae-layout\n          v-if=\"params.addLayoutId\"\n          :layout-id=\"params.addLayoutId\"\n          :params=\"{ \n              ...params.addLayoutParams,\n              value: entry,\n           }\"\n          class=\"flex-1\"\n          @input=\"$emit('update', { index, value: $event })\"\n        ></ae-layout>\n        <input\n          v-else\n          v-focus\n          class=\"flex-1\"\n          @input=\"$emit('update', { index, value: $event.target.value })\"\n          :value=\"entry\"\n          @blur=\"controller.removeIfEmpty(index)\"\n          @keydown.enter=\"controller.edit(index)\"\n          @keydown.esc=\"controller.edit(index)\"\n          :key=\"'_CSS-editing-index_' + locals.rerenderCounter\"\n        />\n      </template>\n      <template v-else>\n        <ae-layout\n          v-if=\"params.entryLayoutId\"\n          :layout-id=\"params.entryLayoutId\"\n          :params=\"{ \n                        ...params.entryLayoutParams,\n                        value: entry,\n                     }\"\n          class=\"flex-1\"\n        ></ae-layout>\n        <a\n          v-else\n          class=\"truncate hover:underline flex-1\"\n          :href=\"params.hrefPrefix ? params.hrefPrefix + entry : entry\"\n          v-bind:[controller.additionalLinkAttribute]=\"entry\"\n          target=\"_blank\"\n          :title=\"entry\"\n        >\n          {{ entry }}\n        </a>\n      </template>\n\n      <!-- <div class=\"flex-1\"></div> -->\n\n      <div v-show=\"false\">\n        entry: {{ entry }} isEditing: {{ locals.editingIndex === index }} locals.editingIndex: {{locals.editingIndex}}\n        {{ '_CSS-editing-index_' + locals.rerenderCounter }}\n      </div>\n\n      <!-- v-if=\"locals.editingIndex === index && !params.readonly\" -->\n      <ae-layout\n        v-if=\"!params.readonly\"\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        @selected=\"$emit('remove', { index })\"\n        param-icon=\"far fa-trash\"\n        param-classes=\"bg-neutral-100 hover:bg-neutral-200 text-xs rounded-full\"\n        param-title=\"Löschen\"\n      ></ae-layout>\n\n      <ae-layout\n        v-if=\"!params.readonly\"\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        @selected=\"controller.edit(index)\"\n        param-icon=\"far fa-edit\"\n        param-classes=\"bg-neutral-100 hover:bg-neutral-200 text-xs rounded-full\"\n        param-title=\"Bearbeiten\"\n      ></ae-layout>\n    </div>\n\n    <div v-if=\"!params.readonly && controller.canAddMore\" class=\"flex items-center\">\n      <ae-layout\n        layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n        @selected=\"$emit('add')\"\n        param-text=\"Hinzufügen\"\n        param-classes=\"border border-inherit text-xs rounded-full\"\n      ></ae-layout>\n    </div>\n  </div>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"866974ba-6e69-483b-8933-2ec6ac66ef1c","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-03-12T11:33:43+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"lists","previous":{"v":"603f675a10dbf803"},"stamps":[],"t":1773315223652,"v":"c8e34afbcfb0abbb"},{"a":["apps","75c6f72a-08a2-44f4-a29c-86b58be26f96","ab120df9-69d9-43ca-9433-3704ec2598ab"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"2a8a4535-b320-4fa1-b1e3-2b6f583c6540","text":"Table Date Control","v":"35994ba08533113c"},"created":{"at":"2024-11-21T14:17:16+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1732198636359,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this.debug = params.debug || true\n    this.formattingStrings = {\n      month: 'yyyy-LL-01',\n      year: 'yyyy-01-01',\n      day: 'yyyy-LL-dd',\n    }\n\n    locals.controls = {\n      start: '',\n      end: '',\n      type: 'month'\n    }\n    const { dates, start, end } = this.parseDocumentDates(params.document.data.dateColumns)\n    locals.dates = dates\n    locals.controls.start = start\n    locals.controls.end = end\n\n    this.parseDocumentDates(params.document.data.dateColumns)\n  }\n\n  parseDocumentDates(value) {\n    const result = {\n      dates: [],\n      start: '',\n      end: '',\n    }\n\n    const parts = value.split(',')\n    \n    for (let i = 0; i < parts.length; i+= 1) {\n      const part = parts[i]\n\n      if (!part.startsWith(locals.controls.type)) {\n        console.warn(`Invalid part \"${part}\"`)\n        continue\n      }\n\n\n      const date = part.replace(/(month|year|day)\\./gi, '')\n      if (i === 0) {\n        result.start = date\n      } else if (i === parts.length - 1) {\n        result.end = date\n      }\n\n      result.dates.push(date)\n    }\n\n    return result\n  }\n\n  _sanitizeControls(startChanged, endChanged) {\n    const inititalStart = locals.controls.start || Aeppic.DateTime.local().toFormat(this.formattingStrings[locals.controls.type])\n    const inititalEnd = locals.controls.end || inititalStart\n    this.debug && console.log('start', inititalStart)\n    this.debug && console.log('end', inititalEnd)\n\n    const endBeforeStart = Aeppic.DateTime.fromISO(inititalStart).diff(Aeppic.DateTime.fromISO(inititalEnd)) > 0\n    this.debug && console.log('endBeforeStart', endBeforeStart)\n\n    if (!endBeforeStart) {\n      locals.controls.start = inititalStart\n      locals.controls.end = inititalEnd\n    } else {\n      if (startChanged) {\n        locals.controls.start = inititalStart\n        locals.controls.end = inititalStart\n      } else if (endChanged) {\n        locals.controls.start = inititalEnd\n        locals.controls.end = inititalEnd\n      }\n    }\n  }\n\n  async update(value) {\n    this._sanitizeControls(!!value.start, !!value.end)\n    const newValue = { ...locals.controls, ...value }\n\n    for (const key of ['start', 'end']) {\n      if (newValue[key]) {\n        newValue[key] = Aeppic.DateTime.fromISO(newValue[key]).toFormat(this.formattingStrings[locals.controls.type])\n      }\n    }\n\n    locals.controls = newValue\n    locals.dates = this.updateDates()\n    console.log({ dates: locals.dates })\n    if (locals.dates.length) {\n      const datesString = locals.dates.map(date => `${locals.controls.type}.${date}`).join(',')\n      \n      // $emit('dates', datesString)\n\n      await this.updateTableDates(datesString)\n    }\n  }\n\n  updateDates() {\n    const dates = []\n\n    if (!locals.controls.start | !locals.controls.end) {\n      return dates\n    }\n\n    const start = Aeppic.DateTime.fromISO(locals.controls.start)\n    const end = Aeppic.DateTime.fromISO(locals.controls.end)\n\n    dates.push(start.toFormat(this.formattingStrings[locals.controls.type]))\n\n    let steppedDate = start\n    let run = true\n    while(run) {\n      steppedDate = steppedDate.plus({ [locals.controls.type]: 1 })\n\n      if (steppedDate.diff(end, 'days').toObject().days > 0) {\n        run = false\n        break\n      }\n\n      const date = steppedDate.toFormat(this.formattingStrings[locals.controls.type])\n      dates.push(date)\n    }\n\n    return dates\n  }\n\n\n  async updateTableDates(datesString) {\n    const editable = await Aeppic.edit(params.document)\n    editable.data.dateColumns = datesString\n    Aeppic.save(editable)\n  }\n}\n ","css":"","name":"rd:Table Date Control","packages":[],"template":"<div class=\"h-full flex gap-2 items-center\">\n  <div class=\"flex gap-1 items-center\">\n    <label class=\"\">\n      von\n    </label>\n    <ae-layout layout-id=\"1a42b378-3876-4ef9-b0bc-9557009a1d69\" :params=\"{ value: locals.controls.start, type: 'year-month' }\" @input=\"controller.update({ start: $event })\"></ae-layout>\n  </div>\n\n  <div class=\"flex gap-1 items-center\">\n    <label class=\"\">\n      bis\n    </label>\n    <ae-layout layout-id=\"1a42b378-3876-4ef9-b0bc-9557009a1d69\" :params=\"{ value: locals.controls.end, type: 'year-month' }\" @input=\"controller.update({ end: $event })\"></ae-layout>\n  </div>\n</div>\n\n<!-- <div v-if=\"Aeppic.Account.data.allowDevMode\">\n\t{{locals.controls}} {{locals.dates}}\n</div> -->"},"f":{"id":"layout-form","text":"Layout","v":"aeefd024c2682948"},"id":"069020f6-5f5a-4d9d-b7b0-c3acfd582d59","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-06-10T08:47:22+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"2a8a4535-b320-4fa1-b1e3-2b6f583c6540","text":"Table Date Control","v":"35994ba08533113c"},"p":"ab120df9-69d9-43ca-9433-3704ec2598ab","previous":{"v":"e3c7c12fa64df301"},"stamps":[],"t":1749545242061,"v":"626973fe457c3360"},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2025-01-23T15:44:20+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1737647075478,"data":{"applies":"","controller":"class Controller {\n  init() {\n    // locals.key = params.document.id + params.document.v\n    locals.columnData = params.columns.map((columnName) => this.dataByColumnName(params.document, columnName))\n\n    watchParam('document', (newDocument) => {\n      // locals.key = newDocument.id + newDocument.v\n      locals.columnData = params.columns.map((columnName) => this.dataByColumnName(newDocument, columnName))\n    })\n  }\n\n  dataByColumnName(document, columnName) { \n    if (!columnName) {\n      return []\n    }\n\n    if (columnName.startsWith('date.')) {\n      return this.valueByDateColumn(document, columnName)\n    }\n\n    return Aeppic.Functions.resolveField(document, columnName)\n    // return this.resolveField(document, columnName)\n  }\n\n  valueByDateColumn(document, columnName) {\n    const [ rawDatePart, rawFieldPart ] = columnName.split('_')\n    const accessor = rawDatePart.replace(/date\\.(month|year|day)\\./gi, '')\n    const field = this.dataByColumnName(document, rawFieldPart)\n\n    if (!field || field === '{}') {\n      return null\n    }\n\n    const parsed = JSON.parse(field)\n    const value = parsed[accessor]\n\n    return value\n  }\n\n  resolveField(obj, path) {\n    const parts = path.split('.')\n    let value = obj\n\n    for (const part of parts) {\n      if (value == null) {\n        if (part === 'raw') {\n          return value\n        }\n\n        return undefined\n      }\n\n      value = value[part]\n    }\n\n    if (value === obj) {\n      value = null\n    }\n\n    return value\n  }\n\n  getSelectedOption(columnName) {\n    const key = `${params.document.f.id}-${columnName}`\n    return params.formFieldOptionsByValue[key]\n  }\n}","css":"","name":"rd:table row with layouts","packages":[],"template":"<div class=\"flex h-full\" @click.stop=\"$emit('selected', params.document)\">\n  <div\n    class=\"overflow-hidden h-full\"\n    v-for=\"(column, index) of params.columns\"\n    :style=\"{ 'min-width': params.fixedColumnWidths[index] || params.columnWidths[index], \n            'max-width': params.fixedColumnWidths[index] || params.columnWidths[index],\n              'background': params.columnColors?.[index]\n     }\"\n  >\n    <template v-if=\"params.designs?.[index]\">\n      <!-- DESIGN {{params.designs[index]}} -->\n      <ae-design-selector\n        :watch=\"false\" \n        :name=\"params.designs[index]\" \n        :document=\"params.document\" \n        :params=\"{ columnName: column, designName: params.designs[index], fieldName: column } \"\n        :watch-design=\"false\"\n      ></ae-design-selector>\n    </template>\n    <template v-else-if=\"params.layouts?.[index]\">\n      <!-- LAYOUT {{params.layouts[index]}} -->\n      <ae-layout :layout-id=\"params.layouts[index]\" \n                  :params=\"{ document: params.document, field: locals.columnData[index], fieldName: column }\" \n                  class=\"h-full\"\n                  @selected=\"$emit('selected', $event)\"\n      ></ae-layout>\n    </template>\n    <template v-else>\n      <div v-if=\"column === 'modified.at' || column === 'created.at'\" data-cell-created-or-modified-at>\n        {{ Aeppic.DateTime.fromISO(locals.columnData[index], { setZone: true }).toLocal().toLocaleString(Aeppic.DateTime.DATETIME_SHORT) }}\n      </div>\n      <div v-else-if=\"params.columnsTypes[index] === 'ref'\" data-cell-ref>\n        {{ locals.columnData[index].map(ref => ref.text).join(', ') }}\n      </div>\n      <div v-else-if=\"column.startsWith('date.')\" data-cell-custom-repeating-date-sums>\n        <template v-if=\"locals.columnData[index]\">\n          <template v-if=\"params.sumsType[index]?.control?.name === 'sums-by-date' && \n            params.sumsType[index].control.parameters.type.value === 'currency'\">\n            {{ new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(locals.columnData[index]) }}\n          </template>\n          <template v-else>\n            {{ new Intl.NumberFormat('de-DE').format(locals.columnData[index]) }}\n          </template>\n        </template>\n      </div>\n      <div v-else-if=\"params.columnsTypes[index] === 'text'\" class=\"truncate\" data-cell-text>\n        {{ locals.columnData[index].join(', ') }}\n      </div>\n      <div v-else-if=\"params.columnsTypes[index] === 'select'\" data-cell-select>\n        {{ locals.columnData[index].map(value => controller.getSelectedOption(params.columns[index])[value]?.display ?? '').join(', ') }}\n      </div>\n      <div  v-else-if=\"params.columnsTypes[index] === 'date' && locals.columnData[index]\" data-cell-date>\n        {{ locals.columnData[index].map(value => value && Aeppic.DateTime.fromISO(value, { setZone: true }).toLocal().toLocaleString(Aeppic.DateTime.DATETIME_SHORT)).join(', ') }}\n      </div>\n      <div v-else-if=\"params.columnsTypes[index] === 'file'\" data-cell-file>\n        {{ locals.columnData[index].map(file => file.name).join(', ') }}\n      </div>\n      <div v-else-if=\"params.columnsTypes[index] === 'switch'\" data-cell-switch>\n        <ae-icon v-for=\"value of locals.columnData[index]\" v-if=\"value\" class=\"far fa-check-square\"></ae-icon>\n      </div>\n      <div v-else-if=\"params.columnsTypes[index] === 'number'\" data-cell-number>\n        {{ locals.columnData[index].map(value => value && new Intl.NumberFormat('de-DE').format(value)).join(', ') }}\n      </div>\n      <div v-else-if=\"params.columnsTypes[index] === 'duration'\" data-cell-duration>\n        {{ locals.columnData[index].map(value => value && Aeppic.DateTimeDuration.fromObject(value).toFormat(\"hh'h' mm'm\")).join(', ') }} \n      </div>\n      <div v-else data-cell-raw>\n        t:{{params.columnsTypes?.[index]}}\n        d:{{ params.designs?.[index] }}\n        l:{{ params.layouts?.[index] }}\n        v:{{ locals.columnData[index] }}\n      </div>\n    </template>\n  </div>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"eb8fe939-55b9-4cd0-b82b-add8fe3da6af","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-03-06T13:17:49+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"a885b76b78248e1b"},"stamps":[],"t":1772803069830,"v":"d22b66f0e794b25d"},{"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","2add3026-2869-40ea-9e6d-dcb14ef0ba19"],"a_depth":4,"a_forms":["folder","application-form","form-folder","form"],"created":{"at":"2025-01-24T14:16:16+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1737733041703,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this.update(params.field?.[0])\n\n    watchParam('field', (newField) => {\n      this.update(newField?.[0])\n    })\n  }\n\n  update(field) {\n    locals.progress = field ? JSON.parse(field) : null\n  }\n}\n","css":"._CSS {\n  max-width: 200px;\n  margin: 0 0.5rem;\n}\n\n._CSS-progress {\n  display: flex;\n  position: relative;\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-progress__title {\n  display: flex;\n  justify-content: center;\n  font-size: 14px;\n  height: 20px;\n  color: var(--ae-foreground-l2);\n}\n\n._CSS-progress__value {\n  height: 8px;\n\n  display: flex;\n  justify-content: center;\n  color: var(--ae-foreground-l1);\n}\n\n._CSS-progress > ._CSS-progress__value:first-child {\n  border-top-left-radius: var(--ae-border-radius);\n  border-bottom-left-radius: var(--ae-border-radius);\n}\n\n._CSS-progress > ._CSS-progress__value:last-child {\n  border-top-right-radius: var(--ae-border-radius);\n  border-bottom-right-radius: var(--ae-border-radius);\n}\n\n._CSS-progress__value > * {\n  padding: 7px;\n}\n\n._CSS-progress__overdue {\n  background: rgb(255, 122, 109);\n}\n\n\n._CSS-progress__open {\n  background: rgb(182, 182, 182);\n}\n\n._CSS-progress__closed {\n  background: rgba(9, 113, 178, 0.708);\n  /* background: rgb(129, 203, 0); */\n}\n","name":"rd:table:tasks LAYOUT","packages":[],"template":"<div\n  v-if=\"locals.progress\"\n  class=\"_CSS-progress\"\n  style=\"position: relative; display: flex\"\n  :data-test=\"'layout' + '_' + layout.id\"\n>\n  <div\n    v-if=\"locals.progress.closed\"\n    title=\"Erledigte\"\n    class=\"_CSS-progress__value _CSS-progress__closed\"\n    :style=\"{ width: locals.progress.closedPercentile + '%' }\"\n    data-test=\"tasks-closed\"\n    >\n    <span> {{ locals.progress.closed }} </span>\n  </div>\n  <div\n  v-if=\"locals.progress.open\"\n  title=\"Offene\"\n  class=\"_CSS-progress__value _CSS-progress__open\"\n  :style=\"{ width: locals.progress.openPercentile + '%' }\"\n  data-test=\"tasks-open\"\n  >\n    <span> {{ locals.progress.open }} </span>\n  </div>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"4cb8a972-3438-4d4e-a2b0-af06e71cd592","inheritedLocks":[null,null,null,null,null],"locks":[],"meta":{},"modified":{"at":"2026-03-03T14:13:06+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","previous":{"v":"29e4e3091cf5a1fd"},"stamps":[],"t":1772547186558,"v":"6e8c6c21cfec68d3"},{"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","2add3026-2869-40ea-9e6d-dcb14ef0ba19"],"a_depth":4,"a_forms":["folder","application-form","form-folder","form"],"created":{"at":"2025-05-22T11:43:07+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1747914190216,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.title = ''\n    locals.linkTarget = ''\n\n    this.updateLink(params.document)\n\n    this.update(params.field?.[0])\n\n    watchParam('field', (newField) => {\n      this.update(newField?.[0])\n    })\n\n    watchParam('document', (newDocument) => {\n      this.updateLink(newDocument)\n    })\n  }\n\n  updateLink(document) {\n    if (!document) {\n      locals.linkTarget = ''\n      return\n    }\n\n    if (document.f.id === '2add3026-2869-40ea-9e6d-dcb14ef0ba19') {\n      // is energy project projection\n      locals.linkTarget = document.data.document.id || ''\n    } else {\n      locals.linkTarget = document.id\n    }\n  }\n\n  update(field) {\n    locals.title = field || ''\n  }\n}\n","css":"","name":"rd:table:title-as-link LAYOUT","packages":[],"template":"<a class=\"w-full block ae-link truncate\" :href=\"locals.linkTarget\" :title=\"locals.title\" @click.stop.prevent=\"$emit('selected', params.document)\" @click.right.stop>\n  {{ locals.title }}\n</a>\n\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"86863fd6-025c-4545-a1d0-400acbabab34","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2025-05-22T12:07:40+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","previous":{"v":"c9205a2585a22c62"},"stamps":[],"t":1747915660680,"v":"1812df2dec528c9b"},{"id":"020dab30-d265-44a6-bdf5-da5801762212","v":"3e6021799839ec01","p":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:table:tracked-time LAYOUT","applies":"","template":"<template v-if=\"locals.duration.millis\">\n  <ae-icon class=\"far fa-hourglass-end\"></ae-icon>\n  {{ locals.duration.readable  }}\n</template>","css":"._CSS {\n  max-width: 200px;\n  margin: 0 0.5rem;\n}\n\n._CSS-progress {\n  display: flex;\n  position: relative;\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-progress__title {\n  display: flex;\n  justify-content: center;\n  font-size: 14px;\n  height: 20px;\n  color: var(--ae-foreground-l2);\n}\n\n._CSS-progress__value {\n  height: 8px;\n\n  display: flex;\n  justify-content: center;\n  color: var(--ae-foreground-l1);\n}\n\n._CSS-progress > ._CSS-progress__value:first-child {\n  border-top-left-radius: var(--ae-border-radius);\n  border-bottom-left-radius: var(--ae-border-radius);\n}\n\n._CSS-progress > ._CSS-progress__value:last-child {\n  border-top-right-radius: var(--ae-border-radius);\n  border-bottom-right-radius: var(--ae-border-radius);\n}\n\n._CSS-progress__value > * {\n  padding: 7px;\n}\n\n._CSS-progress__overdue {\n  background: rgb(255, 122, 109);\n}\n\n\n._CSS-progress__open {\n  background: rgb(182, 182, 182);\n}\n\n._CSS-progress__closed {\n  background: rgba(9, 113, 178, 0.708);\n  /* background: rgb(129, 203, 0); */\n}\n","controller":"class Controller {\n  init() {\n    locals.duration = {\n      millis: 0,\n      readable: '-'\n    }\n    this.update(params.field?.[0])\n\n    watchParam('field', (newField) => {\n      this.update(newField?.[0])\n    })\n\n  }\n\n  update(field) {\n    locals.duration = {\n      millis: field,\n      readable: field === 0 ? '-' : Aeppic.DateTimeDuration.fromMillis(field).toFormat(\"hh'h' mm 'm'\")\n    }\n  }\n}\n ","packages":[]},"locks":[],"created":{"at":"2024-12-04T14:08:09+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2025-01-24T14:20:18+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1737733043786,"ct":1737733043786,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","2add3026-2869-40ea-9e6d-dcb14ef0ba19"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[],"previous":{"v":"5e5eaddee0c400b6","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"}},"meta":{"modified":{"at":"2025-01-24T15:37:23+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","2add3026-2869-40ea-9e6d-dcb14ef0ba19"],"a_depth":4,"a_forms":["folder","application-form","form-folder","form"],"created":{"at":"2025-01-24T14:16:11+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1737733046034,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this.update(params.field?.[0])\n\n    watchParam('field', (newField) => {\n      this.update(newField?.[0])\n    })\n\n  }\n\n  update(fieldParam) {\n    if (!fieldParam) {\n      locals.formulare = 0\n      locals.uploads = 0\n      return\n    }\n    \n    const field = JSON.parse(fieldParam)\n    \n    locals.formulare = field.mails || 0\n    locals.uploads = field.uploads || 0\n  }\n}\n\n ","css":"._CSS {\n  max-width: 200px;\n}\n\n._CSS-progress {\n  display: flex;\n  position: relative;\n}\n\n._CSS-progress__title {\n  display: flex;\n  justify-content: center;\n  font-size: 14px;\n  height: 20px;\n  color: var(--ae-foreground-l2);\n}\n\n._CSS-progress__value {\n  height: 8px;\n\n  display: flex;\n  justify-content: center;\n  color: var(--ae-foreground-l1);\n}\n\n._CSS-progress__value > * {\n  padding: 7px;\n}\n\n._CSS-progress__overdue {\n  background: rgb(255, 122, 109);\n}\n\n\n._CSS-progress__open {\n  background: rgb(182, 182, 182);\n}\n\n._CSS-progress__closed {\n  background: rgba(9, 113, 178, 0.708);\n  /* background: rgb(129, 203, 0); */\n}\n","name":"rd:table:uploads LAYOUT","packages":[],"template":"<div class=\"h-full flex flex-col p-1 overflow-hidden gap-1 text-xs\">\n<div v-if=\"locals.formulare\" class=\"flex-1 flex items-center gap-1 rounded-md bg-blue-200 text-blue-900 border-blue-900 px-1\">\n  <ae-icon class=\"far fa-envelope\"></ae-icon> {{ locals.formulare }} \n</div>\n<div v-if=\"locals.uploads\" class=\"flex-1 flex items-center gap-1 rounded-md bg-teal-200 text-teal-900 border-teal-900 px-1\">\n  <ae-icon class=\"far fa-file-alt\"></ae-icon> {{ locals.uploads }} \n</div>\n</div>     "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"44072156-8871-4a28-8f49-40ec52dd40d4","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2025-05-22T12:14:56+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","previous":{"v":"c895345a894f73f0"},"stamps":[],"t":1747916096676,"v":"cdc44ca8a7ee9fb8"},{"a":["apps","0c440c7a-219d-4465-9cbe-2d0eff6ec7ad","85cd7d8f-35be-4092-a40c-274f50729126"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2022-05-13T12:11:39+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1740666014604,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Timer: '9b1d0329-8699-4382-bda3-8eae27e35d03'\n    }\n\n    locals.allowedForms = []\n    locals.dialogLayout = ''\n    locals.canTrack = true\n    locals.existingTimer = null\n\n    this.subscribeTimer()\n  }\n\n  async canTrack() {\n    if (!Aeppic.Account || Aeppic.Account.data.isGroupAccount) {\n      return false\n    }\n\n    const enabled = await Aeppic.Preferences.getSetting('bizpin:timetracking:enabled')\n    if (!enabled) {\n      return false\n    }\n\n    const document = params.document || await Aeppic.get(params.documentId)\n\n    if (document) {\n      const documentIsTrackable = locals.allowedForms.find(f => f.id === document.f.id)\n\n      if (!documentIsTrackable) {\n        return false\n      }\n\n      const canEdit = await Aeppic.canEdit(document)\n\n      if (!canEdit) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n\n  get isRunning() {\n    return !!locals.existingTimer?.data.running\n  }\n\n  get isGlobalTimer() {\n    return params.document == null && params.documentId == null\n  }\n\n  async subscribeTimer() { \n    const timer = await Aeppic.findOne(`p:${Aeppic.Account.id} f.id:${this.FORMS.Timer}`)\n\n    if (!timer) {\n      return \n    }\n\n    Aeppic.watch(timer, async (newTimer) => {\n      locals.existingTimer = await Aeppic.edit(newTimer)  \n    })\n\n    locals.existingTimer = await Aeppic.edit(timer)\n  } \n\n  async show(dialogLayout) {\n    locals.dialogLayout = dialogLayout\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $refs.dialog.show()\n  }\n}","css":"._CSS-popup {\n  padding: var(--ae-size-2) 0;\n  background-color: white;\n  box-shadow: var(--ae-shadow-2);\n  transition: opacity .15s, visibility 1s;\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-list__entry {\n  display: flex;\n  flex-flow: row;\n  align-items: center;\n  cursor: pointer;\n  padding: 0.5rem;\n}\n\n._CSS-list__entry:hover {\n  background: var(--ae-background-200);\n}\n\n\n._CSS-button--active {\n  color: var(--ae-accent-red) !important;\n}\n\n._CSS ._CSS-action-button--overlay {\n  color: var(--ae-ui-background);\n    filter: drop-shadow( 0px 0px 1px rgba(0,0,0,1) ) drop-shadow( 0px 0px 10px rgba(0,0,0,0.8));\n\n}\n\n._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n._CSS ._CSS-button--left {\n  margin-right: 0;\n}\n\n\n._CSS ._CSS-button--right {\n  margin-left: 0;\n}\n\n._CSS-split-button:hover {\n  background: var(--ae-background-100);\n  border-radius: var(--ae-border-radius);\n}","name":"rd:Time Tracking Status","packages":[],"template":"<!-- {{ new Date() }} -->\n\n<template v-if=\"locals.canTrack && (controller.isRunning || !params.onlyTimer)\">\n  <div class=\"flex items-center gap-2 bg-secondary-50 dark:bg-secondary-700 rounded-lg p-1\"\n      :class=\"{ 'border': controller.isRunning }\"\n  >\n    <template v-if=\"controller.isRunning\">\n      <ae-layout    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    @selected=\"controller.show('timer')\"\n                    :param-icon=\"controller.isRunning ? 'fa fa-stop': 'far fa-play-circle'\"\n                    :class=\"{ 'text-error-500': controller.isRunning }\"\n                    xparam-border=\"border\"\n                    :param-title=\"controller.isRunning ? 'Timer stoppen' : 'Timer starten'\"\n      ></ae-layout> \n      <ae-control :document=\"locals.existingTimer\"\n                    name=\"rd:timer\"\n                    field-name=\"dauer\"\n                    param-started-field=\"started\"\n                    param-stopped-field=\"ended\"\n                    :param-interval=\"30 * 1000\"\n                    param-display-format=\"hh:mm\"\n                    class=\"w-auto text-neutral-500 dark:text-neutral-300\"\n      ></ae-control> \n\n      <div class=\"flex-1\"></div> \n\n      <ae-layout    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    v-if=\"locals.existingTimer?.data.dokument.id && params.onlyTimer\"\n                    @selected=\"Aeppic.drillInto(locals.existingTimer.data.dokument)\"\n                    param-icon=\"far fa-external-link text-sm text-neutral-500 dark:text-neutral-700\"\n                    :param-title=\"locals.existingTimer.data.dokument.text\"\n                    xparam-border=\"border\"\n      ></ae-layout> \n    </template>\n\n\n    <template v-if=\"!params.onlyTimer\">\n      <ae-layout    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    @selected=\"controller.show('timer')\"\n                    param-icon=\"far fa-play-circle\"\n                    param-title=\"Timer starten\"\n                    param-border=\"border\"\n      ></ae-layout> \n      <ae-layout    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    @selected=\"controller.show('manual')\"\n                    param-icon=\"far fa-hourglass-half\"\n                    param-title=\"Manuellen Zeiteintrag erstellen\"\n                    param-border=\"border\"\n      ></ae-layout> \n\n      <ae-layout    layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                    @selected=\"controller.show('estimate')\"\n                    param-icon=\"far fa-question\"\n                    param-title=\"Schätzung bearbeiten\"\n                    param-border=\"border\"\n      ></ae-layout> \n    </template>\n  </div>\n\n  <ae-dialog v-if=\"locals.dialogLayout\" ref=\"dialog\" @close=\"locals.dialogLayout = ''\" :full-screen=\"Aeppic.Device === 'Phone'\" :backdrop-close=\"false\" :dialog-size=\"{ width: 'var(--ae-dialog__width--medium)', height: 'var(--ae-dialog__height--medium)' }\">\n    <template v-slot:header=\"scope\">\n    <div class=\"_CSS-dialog__header\">\n      Timer\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n    <template v-slot:body=\"scope\">\n      <ae-layout v-if=\"locals.dialogLayout === 'timer'\"\n                  layout-id=\"e3306061-a60e-46ad-adcd-1b86f5e2fcdb\" \n                  :param-document=\"params.document\"\n                  :param-document-id=\"params.documentId\"\n                  :param-allowed-target-forms=\"locals.allowedForms\"\n                  @close=\"scope.close()\"\n      ></ae-layout>\n      <ae-layout v-if=\"locals.dialogLayout === 'manual'\"\n                  layout-id=\"4aa68c04-72ed-4f25-9b4f-7a6b6449f614\"\n                  :param-document=\"params.document\"\n                  :param-document-id=\"params.documentId\"\n                  :param-allowed-target-forms=\"locals.allowedForms\"\n                  @close=\"scope.close()\"\n      ></ae-layout>\n      <ae-layout v-if=\"locals.dialogLayout === 'estimate'\"\n                  layout-id=\"4642a086-2247-48c6-b155-5879b098503c\"\n                  :param-document=\"params.document\"\n                  :param-document-id=\"params.documentId\"\n                  @close=\"scope.close()\"\n      ></ae-layout>\n    </template>\n  </ae-dialog>\n\n</template> "},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"ca6783b2-ce5e-4115-a28e-da2c8cdbf38e","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-03-03T11:34:21+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"85cd7d8f-35be-4092-a40c-274f50729126","previous":{"v":"b2c20115d9b18a78"},"stamps":[],"t":1772537661841,"v":"25a5ca8a9be04a30"},{"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","98c77209-1245-43d6-90b5-8625183f470c","ec23f7cc-9648-48de-a971-693f2d7f56e0"],"a_depth":5,"a_forms":["folder","application-form","form-folder","form","design-form"],"created":{"at":"2025-06-20T12:38:38+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1750423118608,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      trackedTimeProjection: \"0f673271-cd1a-448f-871b-ecb273136aeb\",\n      trackedTime: \"f9279010-1935-4139-abbb-82d928aa09dc\",\n      group: \"group\",\n      projectCore: \"0b6a2b21-9425-466e-9e8d-57ec39cc95e1\",\n      projectEnergy: \"98c77209-1245-43d6-90b5-8625183f470c\",\n      service: {},\n      taskCore: \"0deb4864-cbb6-420c-99ee-337c7444ab24\",\n      taskService: \"88b1f60e-71f6-46f5-94ea-3d7bbe972950\",\n      account: \"account\",\n      mitarbeiter: \"d2ac3563-3c3f-4f02-b923-9b67abf98d10\",\n      coreFilter: '20198da6-b5b1-40c7-a27b-336c11740f25',\n      energyFilter: 'f8aadef0-6297-4578-b5eb-66d6ad8921b0',\n    }\n\n    this.SERVICEFORMS = {\n      kfwEnev: '4862401e-e182-451c-a855-ef2e9b9441c5',\n      enev: 'fa3777b5-bfff-43ac-a5c5-ea15486dd334',\n      energieausweis: '11a327ee-c8e6-453a-bcdd-f585877f2fd8',\n      blowerDoorTest: '9f8071fd-6f25-489e-8562-4399701546b0',\n      brandschutz: '281c6bd6-2e24-42ba-868e-b63cbba4254f',\n      brandschutzbauleitung: '34d811a8-9de0-4b20-bc24-c55826a06748',\n      schallschutz: '03c16e2b-302e-4c2c-93c1-931679919e0b',\n      schallschutzKontrollen: '2c01a15d-c14d-44c6-adc5-d9b3fdc692b7',\n      schallschutzmessung: '328998fb-7e67-4fca-b40b-377d9a07776d',\n      simulation: '5ff471b3-1769-408b-825a-69d6416757c3',\n      architektur: '41da8494-ec0a-4b13-bad7-162f3f1fbba4',\n      wohngebaeudeSanierung: 'c97e431f-1d18-4f45-9915-591932d2cd23',\n      nichtWohngebaeudeSanierung: '873e5be1-18d7-47ae-9ea5-438bce403e61',\n      wohngebaeudeNeubau: '5acb56fa-2bad-4e9b-8385-ab82c2562b47',\n      nichtWohngebaeudeNeubau: '81e1dec7-0c25-4694-9724-d1a86f8dc0db',\n      elektrotechnik: 'cf2ae9d1-57f8-4604-887f-9bc97fe74495',\n      heizungLueftungSanitaer: '1c428116-bc5b-4c71-8a84-0f7c50c2dbe6',\n      tragwerksplanung: '748a3d2b-9bbb-4134-a09d-4a7797fdc639',\n      nachhaltigkeit: '680d9cf2-25de-4237-840d-64fb9e68b1a2',\n      sachverstaendige: '39a8e8f7-4840-4ffd-ad15-21fc5d56b277'\n    }\n\n    this.COMMANDS = {\n      createTrackedTimeProjection: \"4157ddb8-be74-4aa0-beca-8c9b6fc1ae8d\",\n    }\n\n    this.debug = params.debug ?? false\n    locals.ready= false // Side is presentable\n    locals.loaded = false // Data is still being loaded\n\n    this.projections = []\n    this.project = null\n    locals.toolbarFilter = ''\n    locals.toolbarSort = null\n    locals.hasRights = false\n    locals.listShown = false\n\n    this.project = await Aeppic.get(params.projectId)\n\n    if (!this.project) {\n      throw Error(`Cannot find project with id: ${params.projectId}`)\n    }\n\n    locals.projectFormId = this.project.f.id\n    locals.pseudoDoc = await Aeppic.new(this.FORMS.trackedTimeProjection, this.project.id)\n\n    locals.hasRights = await this.hasRightsForThisLayout()\n\n    locals.ready = true\n\n    this.trackedTimesInProject = await this._getTrackedTimes()\n    this.projections = await this._getTrackedTimeProjections(this.trackedTimesInProject)\n    this.adoptFilter()\n    \n    locals.loaded = true\n    locals.test = this.filteredCumulatedTime()\n  }\n\n\n\n\n\n\n\n\n\n  get isEnergyProject() {\n    return this.project.f.id === this.FORMS.projectEnergy\n  }\n\n  get isCoreProject() {\n    return this.project.f.id === this.FORMS.projectCore\n  }\n\n  isServiceTask(task) {\n    return task.f.id === this.FORMS.taskService\n  }\n\n  isCoreTask(task) {\n    return task.f.id === this.FORMS.taskCore\n  }\n\n  async _createTrackedTimeEditableDocument(trackedTimeDocument) {\n    const parameters = {}\n    const options = {}\n    return await Aeppic.Commands.execute(this.COMMANDS.createTrackedTimeProjection, trackedTimeDocument.id, parameters, options)\n  }\n\n  async _getTrackedTimeProjections(trackedTimes) {\n    this.debug && console.log('Tracked Times:', trackedTimes)\n    const results = await Promise.all(this.trackedTimesInProject.map(doc => this._createTrackedTimeEditableDocument(doc)))\n    const documents = []\n    for (const result of results) {\n      if (result.error) {\n        this.debug && console.log(result.error)\n      } else {\n        documents.push(result.document)\n      }\n    }\n    this.debug && console.log('Tracked Time Projections:' ,documents)\n    return documents\n  }\n\n  async _getTrackedTimes() {\n    // Projects track their tasks in a field called Aufgaben. This goes against my assumption, that they just had tasks as children\n    let taskIds = []\n    if (this.isEnergyProject) {\n      const services = (await Aeppic.getAll(this._getServiceIdsFromEnergyProject())).filter(doc => !!doc)\n      taskIds = [...taskIds, ...this._getTaskIdsFromDocumentsWithAufgabenField(services)]\n      taskIds = [...taskIds, ...this._getTaskIdsFromDocumentsWithAufgabenField([this.project])]\n\n    } else if (this.isCoreProject) {\n      const childrenTasks = await Aeppic.find(`f.id:${this.FORMS.taskCore} p:${this.project.id}`)\n      taskIds = [...taskIds, ...childrenTasks.map(task => task.id)]\n    }\n    const uniqueTaskIds = [...new Set(taskIds)]\n    const tasksQuery = uniqueTaskIds.length > 0 ? (' (' + uniqueTaskIds.map(id => 'p:' + id).join(' OR ') + ')') : ''\n    const queryForTrackedTimes = `a:${this.project.id} f.id:${this.FORMS.trackedTime}` + tasksQuery\n    return Aeppic.find(queryForTrackedTimes, {size: 9999})\n  }\n\n  _getServiceIdsFromEnergyProject(){\n    const serviceIds = new Set()\n    if (!this.isEnergyProject) {\n      return []\n    }\n\n    for (const serviceKey of Object.keys(this.SERVICEFORMS)) {\n      const serviceRefs = this.project.data[serviceKey]\n      if (!Array.isArray(serviceRefs)) {\n        continue\n      }\n      for (const reference of serviceRefs) {\n        const id = reference.id\n        if (!id) {\n          continue\n        }\n        serviceIds.add(id)\n      }\n    }\n    return [...serviceIds]\n  }\n\n  _getTaskIdsFromDocumentsWithAufgabenField(docs) {\n    if (!Array.isArray(docs)) {\n      return []\n    }\n    const taskIds = new Set()\n    for (const doc of docs) {\n      if (!Array.isArray(doc.data?.aufgaben)) {\n        continue\n      }\n      doc.data.aufgaben.map(ref => ref?.id).filter(id => !!id).forEach(id => taskIds.add(id))\n    }\n    return [...taskIds]\n  }\n\n  get filteredProjections() {\n    const result = []\n    if (!Array.isArray(this.projections)) {\n      return result\n    }\n    for (const projection of this.projections) {\n      const matches = Aeppic.Model.match(projection, locals.filter)\n      if (matches) {\n        result.push(projection)\n      }\n    }\n    return result\n  }\n\n  get filterForm() {\n    if (this.isEnergyProject) {\n      return this.FORMS.energyFilter\n    } else if (this.isCoreProject) {\n      return this.FORMS.coreFilter\n    }\n  }\n\n  async hasRightsForThisLayout() {\n    if (!params.enabledCommandId) {\n      return true\n    }\n\n    try {\n      const enabledCommandResult = await Aeppic.Commands.execute(params.enabledCommandId, this.project, {\n        Account: Aeppic.Account\n      })\n\n      return enabledCommandResult.ok && enabledCommandResult.value && enabledCommandResult.value.ok === true\n    } catch(e) {\n      console.error(`[${control.data.name}]: params.enabledCommandId returned error`)\n      return false\n    }\n  }\n\n  filteredCumulatedTime() {\n    const zeroDuration = Aeppic.DateTimeDuration.fromObject({})\n    \n    if (!Array.isArray(this.filteredProjections)) {\n      return zeroDuration\n    }\n\n\n    return this.filteredProjections.reduce((totalDuration, projection) => {\n      const dauerObject = projection.data?.dauer\n\n      if (!dauerObject) {\n        return totalDuration\n      }\n\n      const currentDuration = Aeppic.DateTimeDuration.fromObject(dauerObject)\n      return totalDuration.plus(currentDuration)\n    }, zeroDuration)\n  }\n\n  incrementRenderedTrackedTimes() {\n    locals.renderedTrackedTimes = locals.renderedTrackedTimesIncrement\n    locals.renderedTrackedTimesIncrement = locals.renderedTrackedTimesIncrement * 2\n  }\n\n  async adoptFilter() {\n    locals.listShown = false\n    await Aeppic.nextRenderPass()\n    locals.filter = locals.toolbarFilter\n    locals.sort = locals.toolbarSort\n  }\n\n  navigateToTrackedTime(event) {\n    console.log(event.data.trackedTime.id)\n    const trackedTimeId = event.data.trackedTime.id\n    const trackedTime = this.trackedTimesInProject.find(doc => doc.id === trackedTimeId)\n    if (trackedTime) {\n      Aeppic.drillInto(trackedTime)\n    }\n  }\n}","css":"","name":"rd:TimeTracking Analysis","packages":[],"template":"<template\n  v-if=\"locals.ready\"\n>\n  <template\n    v-if=\"locals.hasRights\"\n  >\n    <div\n      class=\"h-full flex flex-col\"\n    >\n      <section\n        class=\"mb-3\"\n      >\n        <div\n          class=\"flex gap-4 items-center mb-2\"\n        >\n          <!-- add ,data.service -->\n          <ae-design\n            class=\"text-[1em] x-ml-2 -mr-8 w-auto\"\n            name=\"rd:toolbar\"\n            :document=\"locals.pseudoDoc\"\n            :param-list-form-id=\"controller.filterForm\"\n            :param-disable-sort=\"false\"\n            :param-disable-search=\"true\"\n            :param-disable-new=\"true\"\n            param-sort-fields=\"data.profile,data.datum,data.service,data.taskCore,data.taskService\"\n            @filter=\"locals.toolbarFilter = $event\"\n            @sort=\"locals.toolbarSort = $event\"\n          >\n          </ae-design>\n          <ae-layout\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-text=\"Filter übernehmen\"\n            param-title=\"Erst nach Drücken werden die eingestellten Filter übernommen.\"\n            param-border=\"border border-secondary\"\n            @selected=\"controller.adoptFilter()\"\n          >\n          </ae-layout>\n          <div\n            class=\"flex-1 flex justify-end\"\n          >\n            <ae-layout\n              class=\"flex inline-flex justify-end\"\n              layout-id=\"a7c668bb-022c-4ffd-94bb-b3430fa73dbb\"\n              :params=\"{ documents: controller.filteredProjections, includeParentName: false, includeFields: ['project','name','datum','dauer','abrechenbar','abgerechnet','service','task','profile']}\"\n            >\n            </ae-layout>\n          </div>\n        </div>\n        <div\n          class=\"flex gap-4 items-center justify-between\"\n        >\n          <div>\n            <template\n              v-if=\"locals.loaded\"\n            >\n              <span>\n                {{  controller.filteredProjections.length ? controller.filteredProjections.length : 'Keine'  }} erfasste Zeit{{  (controller.filteredProjections?.length !== 1) ? 'en' : ''  }}:\n                <ae-icon\n                  class=\"far fa-sigma\"\n                >\n                </ae-icon>\n                {{  controller.filteredCumulatedTime().toFormat(\"hh'h ' mm'm'\")  }}\n              </span>\n            </template>\n            <template\n              v-else\n            >\n              <ae-icon\n                class=\"fa fa-spinner-third fa-spin\"\n              ></ae-icon>\n            </template>\n          </div>\n          <ae-layout\n            v-if=\"controller.filteredProjections.length > locals.renderedTrackedTimes\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            :param-text=\"locals.listShown ? 'Verstecke Liste' : 'Zeige Liste an'\"\n            :param-icon=\"locals.listShown ? 'far fa-minus' : 'far fa-plus'\"\n            param-title=\"\"\n            param-border=\"border border-secondary\"\n            @selected=\"locals.listShown = !locals.listShown\"\n          >\n          </ae-layout>\n        </div>\n\n      </section>\n\n      <ae-list\n        v-if=\"locals.listShown\"\n        list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n        class=\"flex-1\"\n        :documents=\"controller.filteredProjections\"\n        param-design=\"rd:line-item\"\n        :param-design-params=\"{ hideProject: true, readonly: true }\"\n        :sort=\"locals.sort\"\n        :param-page-size=\"50\"\n        :watchDocuments=\"false\"\n        @selected=\"controller.navigateToTrackedTime($event)\"\n      ></ae-list>\n    </div>\n    \n\n  </template>\n  <template\n    v-else\n  >\n    <h2 class=\"mb-2\">Sie haben nicht die erforderlichen Rechte um die Zusammenfassung der erfassten Zeiten zu sehen.</h2>\n  </template>    \n</template>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"27f748b3-9689-4d05-ac75-63f0cc1ce432","inheritedLocks":[null,null,null,null,null,null],"locks":[],"modified":{"at":"2025-09-15T12:13:34+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"ec23f7cc-9648-48de-a971-693f2d7f56e0","previous":{"v":"b3c24205add33051"},"stamps":[],"t":1757938414729,"v":"8dc609fdfa2ec582"},{"a":["apps","009b3a60-72d5-46f6-8dc6-7f9001e03283","b676aa47-5082-403c-bf82-6aeead137ec1"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2024-11-04T14:56:13+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1730732173532,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.TOAST_DEFAULTS = {\n      text: '',\n      title: 'Information',\n      // target: {\n      //   id: '62a77b60-94ae-497b-8852-c3de0cb2d0dd'\n      // },\n      // design: 'toast-upload--finished',\n      timeout: 10000,\n      // close: true,\n      color: 'white',\n      icon: 'far fa-cloud-upload',\n      imageSrc: '',\n    }\n\n    locals.userRequestedPauseTimeout = false\n    locals.renderCounter = 0\n    locals.toasts = []\n    locals.show = false\n\n    $on('show', (toast) => this.addToast(toast))\n\n    Aeppic.on('bizpin:show-toast', (event) => this.addToast(event))\n\n    this.updateDefaultToastImage(params.company?.id)\n\n    watchParam('company', newCompany => this.updateDefaultToastImage(newCompany?.id))\n\n\n    // $emit('register-listener', 'show-toast')\n\n    // this.onError = (...error) => {\n    //   console.warn(...error)\n    //   this.addToast({\n    //     id: Aeppic.uuid(),\n    //     text: error[0],\n    //     color: 'lime',\n    //   }) \n    // } \n\n  }\n\n  async updateDefaultToastImage(companyId) {\n    const companyLogoSquare = Aeppic.Content.getThumbnailSrc(await Aeppic.get(companyId), 'logoSquare')\n\n    if (companyLogoSquare) {\n      this.TOAST_DEFAULTS.imageSrc = companyLogoSquare || ''\n    } else {\n      const companyLogo = Aeppic.Content.getThumbnailSrc(await Aeppic.get(companyId), 'logo')\n      this.TOAST_DEFAULTS.imageSrc = companyLogo || ''\n    }\n  }\n\n\n\n  destroy() {\n    clearInterval(this.closeIntervalTimer)\n  }\n\n  async addDemo() {\n    const imageDocuments = [\n      '9744abd0-017e-4616-9feb-8e6b75531dec',\n      'e18215a3-e475-4f5c-8995-61dcfeebe99c',\n      '6d458186-35d5-42c3-82c6-a31768731b1c',\n      '1d3be345-8c4a-430e-ad81-e8f5ba202315',\n      'd52eb4c6-e8ce-483f-a80d-326a48ca493c',\n      'ca29ed98-d879-4beb-aae8-db93f8fa0b48',\n      '9547b003-34a4-4637-8430-81dfd5a858b1',\n      '38986362-132e-4189-bc13-210e25ee6955',\n      '39420871-4e27-4060-ae82-50bb1a17e10e',\n      'e0bb30ff-e0ad-4da0-ab4e-dbc75e7d93c6',\n      'd37bece8-ece2-4ab6-8be1-85a04c6882bf',\n      '0926d157-82ae-405c-909a-107b84c7430e',\n      '2911cf8b-7e49-48ff-903d-e3c1730c2098',\n      'b89066e2-343f-47bc-b9b8-8dda3f86bbf7',\n      '8fd8eab8-9b84-430b-b5a5-fe771c7c344a',\n      '99439ffb-3d71-4791-a4f8-8c41da241619',\n      '26eaaf4d-b8e5-40a8-8deb-1490a367778a',\n      '0e150899-5b4b-4b5a-9185-e550e141de64',\n      '265d6895-0e8a-4e0f-bffe-6d9b2ade5c32',\n      '2dfe724e-d3c3-46c8-a951-48af3b3f61e9',\n      '22d9fae8-7c80-4f6c-9db6-42d3fc1b9e69',\n    ] \n\n    const randomImageDocumentId = imageDocuments[Math.floor(Math.random() * imageDocuments.length)]\n\n    const toastImageSrc = Aeppic.Content.getSrc(await Aeppic.get(randomImageDocumentId), 'file')\n\n    this.addToast({\n      title: 'Demo',\n      text: 'This is a demo text',\n      imageSrc: toastImageSrc,\n    }) \n  }\n \n  addToast(toast) {\n    Aeppic.setTimeout(() => {\n      // if (!toast.id) {\n      //   console.warn('Could not add toast: toast.id is null')\n      //   return\n      // }\n  \n      const t = { \n        ...this.TOAST_DEFAULTS, \n        ...JSON.parse(JSON.stringify(toast)),\n        id: Aeppic.uuid(),\n        created: {\n          at: Aeppic.DateTime.local().toISO()\n        }\n      }\n\n      t._renderKey = this._getRenderKey(t)\n\n\n      if (locals.toasts.length > 10) {\n        locals.toasts = locals.toasts.slice(1)\n      }\n\n      locals.toasts.push(t)\n\n      this._closeAutomatically() \n    }, 100)\n  }\n\n  _closeAutomatically() {\n    if (this.closeIntervalTimer) {\n      return\n    }\n\n    this.closeIntervalTimer = setInterval(() => {\n      if (locals.userRequestedPauseTimeout) {\n        return\n      } \n\n      const activeTaosts = locals.toasts.filter(t => {\n        if (t.timeout <= 0) {\n          return true\n        }\n\n        const millis = -Aeppic.DateTime.fromISO(t.created.at).diffNow().as('milliseconds')\n\n        return millis <= t.timeout\n      })\n\n      locals.toasts = activeTaosts\n\n      if (locals.toasts.length === 0) {\n        clearInterval(this.closeIntervalTimer)\n        this.closeIntervalTimer = null\n      }\n    }, 1000)\n  }\n\n  _getRenderKey(toast) {\n    const key = `${toast.id}_${locals.renderCounter}`\n    locals.renderCounter += 1\n    return key\n  }\n\n  removeToast(index) {\n    locals.toasts.splice(index, 1)\n  }\n} ","css":"\n._CSS-slide-leave-active,\n._CSS-slide-enter-active {\n  transition: all 0.5s;\n}\n\n._CSS-slide-enter {\n  transform: translate(100%, 0);\n}\n._CSS-slide-leave-to {\n  transform: translate(100%, 0);\n}\n","name":"rd:Toasts Handler Layout","packages":[],"template":"<!-- <button @click=\"controller.addDemo()\" style=\" pointer-events:auto;\">\n  ADD DEMO TOAST\n</button> -->\n  \n\n<div class=\"fixed right-2 top-2 z-50\">\n  <transition-group name=\"_CSS-slide\" tag=\"div\" class=\"flex flex-col gap-2\">\n    <template v-if=\"locals.toasts.length\">\n        <div v-for=\"(toast, index) of locals.toasts\" \n          class=\"shadow-md w-[400px] h-[90px] overflow-hidden rounded-md flex gap-2 overflow-hidden\" \n          :class=\"['bg-' + toast.color]\"\n          :key=\"toast._renderKey\"\n          @mouseenter=\"locals.userRequestedPauseTimeout = true\"\n          @mouseleave=\"locals.userRequestedPauseTimeout = false\"\n        >\n          <!-- {{ toast }} -->\n          <img v-if=\"toast.imageSrc\" class=\"h-[90px] rounded-l-md\" :src=\"toast.imageSrc\" :alt=\"toast.imageAlt\">\n\n          <div class=\"flex-1 flex flex-col gap-1 overflow-hidden p-1\">\n            <div class=\"overflow-hidden flex justify-between\">\n              <div class=\"text-sm truncate\" :title=\"toast.title\">\n              {{ toast.title }}\n              </div>\n\n               <ae-layout  layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n                            param-icon=\"far fa-times\"\n                            param-border=\"border border-secondary-200\"\n                            @selected=\"controller.removeToast(index)\"\n                            param-classes=\"text-xs\"\n              ></ae-layout>\n            </div>\n\n            <div class=\"overflow-auto\" >\n            {{ toast.text }}\n            </div>\n          </div>\n        </div>\n    </template>\n  </transition-group>\n</div>\n\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"a2e87b3b-adb6-45dd-be77-a041a1ac5a28","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-09-08T14:51:29+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"b676aa47-5082-403c-bf82-6aeead137ec1","previous":{"v":"1da497cab37cae33"},"stamps":[],"t":1757343089862,"v":"a5c42195e04553d5"},{"a":["apps","144e85c0-d7f9-4b20-8928-be30f0c78bda","647b2571-aea1-4247-8adb-b43bb4c94afc"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"2f55f820-a5fe-4b77-8808-5dcd57067416","text":"Tracked Time","v":"2eb93feb10da8a41"},"created":{"at":"2023-02-21T09:34:30+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1676972070351,"data":{"applies":"","controller":"class Controller {\n  // timetracking dienst für automatisch erstelle zeiten\n  async init() {\n    this.FORMS = {\n      Employee: 'd2ac3563-3c3f-4f02-b923-9b67abf98d10',\n    }\n\n    this.ACCOUNT_FORM = 'account'\n    this.PROJECT_FORMS = [\n      '17c3a5d3-90ba-4592-961b-0800873ef9c1',\n      '98c77209-1245-43d6-90b5-8625183f470c',\n      '0b6a2b21-9425-466e-9e8d-57ec39cc95e1',\n    ]\n    this.DURATION_FORMAT = `hh'h' mm'm'`\n\n    this.realm = null\n    this.createdBySearch = null\n\n    locals.visible = false\n    locals.documents = []\n    this.changeMonthBy = 0\n    locals.readableDate = ''\n\n    const trackingIsEnabled = await Aeppic.Preferences.getSetting('bizpin:timetracking:enabled')\n    if (!trackingIsEnabled) {\n      return\n    }\n\n    if (params.document.f.id === this.FORMS.Employee) {\n      locals.visible = await this._isTrackedTimeAdmin()\n\n      const accounts = await this._getProfileAccounts()\n\n      if (accounts.find((account) => account.id === Aeppic.Account.id)) {\n        locals.visible = true\n        locals.account = Aeppic.Account.id\n      }\n\n      if (accounts.length) {\n        this.realm = params.document.a[0]\n        this.createdBySearch = accounts.map((account) => `created.by:${account.id}`).join(' OR ')\n        await this.updateMonthDocuments()\n      }\n    } else {\n      locals.visible = true\n      this.realm = params.document.id\n      await this.updateMonthDocuments()\n    }\n  }\n\n  async _isTrackedTimeAdmin() {\n    if (Aeppic.Account && Aeppic.Account.data.isAdmin) {\n      return true\n    }\n\n    const securityFolder = await this._getSecurityFolder()\n\n    const trackedTimeGroup = await Aeppic.get(securityFolder.data.trackedTimeGroup)\n\n    if (trackedTimeGroup) {\n      return Aeppic.findOne(`id:${Aeppic.Account.id} data.groups:${trackedTimeGroup.id}`)\n    }\n\n    return false\n  }\n\n  async _getSecurityFolder() {\n    if (!params.document || !params.document.a) {\n      return null\n    }\n\n    const securityFolder = await Aeppic.findOne(\n      `a:${params.document.a[0]} AND f.id:81939b86-a48e-480e-afd1-cb2907568550`\n    )\n    return securityFolder\n  }\n\n  async changeMonth(by) {\n    this.changeMonthBy = this.changeMonthBy + by\n    await this.updateMonthDocuments()\n  }\n\n  async updateMonthDocuments() {\n    const local = Aeppic.DateTime.local().plus({\n      months: this.changeMonthBy,\n    })\n\n    locals.readableDate = `${local.monthLong} ${local.year}`\n\n    const daysInMonth = local.daysInMonth\n    const month = `${local.month}`.padStart(2, '0')\n\n    let queryString = `a:${this.realm} f.id:f9279010-1935-4139-abbb-82d928aa09dc`\n\n    if (this.createdBySearch) {\n      queryString += ` (${this.createdBySearch})`\n    }\n\n    const findOptions = {\n      sort: {\n        field: 'data.tag',\n      },\n      size: 9999,\n    }\n\n    const intervalOptions = {\n      start: `${local.year}-${month}-01`,\n      end: `${local.year}-${month}-${daysInMonth}`,\n      fieldName: 'data.tag',\n      fullDays: true,\n    }\n\n    const documents = await packages.SearchHelpers.findInterval(Aeppic, intervalOptions, queryString, findOptions)\n\n    locals.documents = documents\n\n    if (documents.length) {\n      locals.statistics = this.calculateStatistics(documents)\n    } else {\n      locals.statistics = null\n    }\n  }\n\n  async updateAllDocuments() {\n    locals.readableDate = `Alle Zeiten`\n    let queryString = `a:${this.realm} f.id:f9279010-1935-4139-abbb-82d928aa09dc`\n    if (this.createdBySearch) {\n      queryString += ` (${this.createdBySearch})`\n    }\n    const findOptions = {\n      sort: {\n        field: 'data.tag',\n      },\n      size: 9999,\n    }\n    locals.documents = await Aeppic.find(queryString, findOptions)\n    if (locals.documents.length) {\n      locals.statistics = this.calculateStatistics(locals.documents)\n    } else {\n      locals.statistics = null\n    }\n  }\n\n  calculateStatistics(trackings) {\n    const statistics = {\n      durationDateTime: {},\n      durationDateTimeByProjectId: {},\n      durationDateTimeByWeek: {},\n    }\n\n    for (const track of trackings) {\n      const durationToAdd = Aeppic.DateTimeDuration.fromObject(track.data.dauer)\n      statistics.durationDateTime = durationToAdd.plus(statistics.durationDateTime)\n\n      // Calculate week number\n      const trackDate = Aeppic.DateTime.fromISO(track.data.tag)\n      const weekNumber = trackDate.weekNumber\n\n      // Add duration by week\n      if (!statistics.durationDateTimeByWeek[weekNumber]) {\n        statistics.durationDateTimeByWeek[weekNumber] = {}\n      }\n      statistics.durationDateTimeByWeek[weekNumber] = durationToAdd.plus(\n        statistics.durationDateTimeByWeek[weekNumber]\n      )\n\n      const indexOfProject = track.a_forms.findIndex((a_form) => this.PROJECT_FORMS.includes(a_form))\n      const projectId = indexOfProject >= 0 ? track.a[indexOfProject] : null\n\n      if (projectId) {\n        if (!statistics.durationDateTimeByProjectId[projectId]) {\n          statistics.durationDateTimeByProjectId[projectId] = {}\n        }\n\n        statistics.durationDateTimeByProjectId[projectId] = durationToAdd.plus(\n          statistics.durationDateTimeByProjectId[projectId]\n        )\n      }\n    }\n\n    const result = {\n      duration: statistics.durationDateTime.toFormat(this.DURATION_FORMAT),\n      durationByProjectId: {},\n      durationByWeek: {},\n    }\n\n    for (const key in statistics.durationDateTimeByProjectId) {\n      result.durationByProjectId[key] = statistics.durationDateTimeByProjectId[key].toFormat(this.DURATION_FORMAT)\n    }\n\n    for (const weekNumber in statistics.durationDateTimeByWeek) {\n      result.durationByWeek[weekNumber] = statistics.durationDateTimeByWeek[weekNumber].toFormat(this.DURATION_FORMAT)\n    }\n\n    return result\n  }\n\n  async _getProfileAccounts() {\n    const accounts = (await Aeppic.find(`f.id:account p:${params.document.id}`)).filter((account) => {\n      return !account.data.profilePage.id || account.data.profilePage.id === params.document.id\n    })\n\n    return accounts\n  }\n}\n","css":"._CSS-controls {\n  display: flex;\n  align-items: center;\n}\n\n._CSS-controls__date {\n  width: 150px;\n  display: flex;\n  justify-content: center;\n}\n\n._CSS-project-durations {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-project-duration+._CSS-project-duration {\n  margin-top: var(--ae-size-2);\n}\n\n._CSS-project-duration {\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  background-color: var(--ae-ui-background);\n  border-radius: var(--ae-border-radius);\n\n  flex: 1;\n  padding: var(--ae-size-1) var(--ae-size-2) var(--ae-size-1) var(--ae-size-2);\n  display: grid;\n  grid-template-columns: auto 90px;\n}\n\n._CSS-project-duration__duration {\n  font-weight: bold;\n}\n\n._CSS-controls__CSV {\n  flex:1;\n  display: inline-flex;\n  justify-content: flex-end;\n}","name":"rd:Tracked Time","packages":[{"id":"9fbc0645-b97a-4b98-8520-02670f21ac0b","text":"Aeppic Search Helpers","v":"ab6255cfc2e565e3"}],"template":"<template v-if=\"locals.visible\">\n  <div class=\"ae-control-container ae-form-cell bg-white p-2\">\n    <div class=\"ae-form-cell__input\">\n      <div class=\"_CSS-controls\">\n        <button\n          class=\"ae-button\"\n          @click=\"controller.changeMonth(-1)\">\n          <ae-icon class=\"fa fa-arrow-left\"></ae-icon>\n        </button>\n        <div class=\"w-32 flex justify-center\">{{ locals.readableDate }}</div>\n        <button\n          class=\"ae-button\"\n          @click=\"controller.changeMonth(1)\">\n          <ae-icon class=\"fa fa-arrow-right\"></ae-icon>\n        </button>\n        <!-- <button\n          class=\"ae-button\"\n          @click=\"controller.updateAllDocuments()\">\n          Alle Zeiten\n        </button> -->\n\n        <ae-layout\n          class=\"_CSS-controls__CSV\"\n          layout-id=\"a7c668bb-022c-4ffd-94bb-b3430fa73dbb\"\n          :params=\"{ documents: locals.documents, includeParentName: true }\"></ae-layout>\n      </div>\n\n      <template v-if=\"locals.statistics && locals.statistics.durationByProjectId\">\n        <div class=\"ae-form-cell__label\">Erfasste Zeiten pro Projekt</div>\n\n        <div class=\"_CSS-project-durations\">\n          <div\n            class=\"_CSS-project-duration\"\n            v-for=\"(duration, projectId) in locals.statistics.durationByProjectId\">\n            <ae-design\n              name=\"title\"\n              :document-id=\"projectId\"></ae-design>\n            <div class=\"_CSS-project-duration__duration\">\n              {{ duration }}\n            </div>\n          </div>\n        </div>\n      </template>\n\n      <template v-if=\"locals.statistics && locals.statistics.durationByWeek\">\n        <div class=\"ae-form-cell__label\">Erfasste Zeiten pro Woche</div>\n        \n        <div class=\"_CSS-week-durations\">\n          <div\n            class=\"_CSS-project-duration\"\n            v-for=\"(duration, week) in locals.statistics.durationByWeek\">\n            <div class=\"_CSS-project-duration__week\">KW {{ week }}</div>\n            <div class=\"_CSS-project-duration__duration\">{{ duration }}</div>\n          </div>\n        </div>\n      </template>\n\n      <div\n        class=\"ae-form-cell__label\"\n        style=\"margin-top: var(--ae-size-4)\">\n        Erfasste Zeiten\n        <template v-if=\"locals.statistics && locals.statistics.duration\">\n          (\n          <ae-icon class=\"fa fa-sigma\"></ae-icon>\n          {{ locals.statistics.duration }}\n          )\n        </template>\n      </div>\n\n      <!-- param-design=\"rd:card\" -->\n      <ae-list\n      list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n      :documents=\"locals.documents\"\n      param-design=\"line-item\"\n        :param-design-params=\"{ showProject: true, readonly: true }\"\n        param-empty-text=\"Keine Zeiten in diesem Zeitraum erfasst\"\n        @selected=\"Aeppic.drillInto($event)\"></ae-list>\n    </div>\n  </div>\n</template>\n"},"f":{"id":"layout-form","text":"Layout","v":"dc3356051e0928cf"},"id":"10590b76-115a-4539-a911-6994500ab02a","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-11-18T16:13:48+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"2f55f820-a5fe-4b77-8808-5dcd57067416","text":"Tracked Time","v":"2eb93feb10da8a41"},"p":"647b2571-aea1-4247-8adb-b43bb4c94afc","previous":{"v":"69d7a4d83b31adf1"},"stamps":[],"t":1763482428890,"v":"4c08cd8c1428b438"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"2ad0619d-792e-40ea-9e76-f7801593f6f8","text":"rd:Comments Btn","v":"95206b38f3ef2dea"},"created":{"at":"2024-11-11T13:11:15+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1731330675469,"data":{"applies":"","controller":"class Controller {\n  async init() {\n\n    this.handler = (clickEvent) => {\n      if (!locals.show) {\n        return\n      }\n\n      const clickIsInContainer = clickEvent.composedPath().find(p => p === $refs.container)\n\n      if (!clickIsInContainer) {\n        this.close()\n      }\n    } \n\n\n    locals.disabled = true \n    locals.show = false\n    locals.comments = []\n    locals.newComment = null\n    locals.receiver = []\n\n    locals.disabled = false\n \n    watchParam('windowWidth', (windowWidth) => {\n      if (windowWidth < 1280) {\n        this.close()\n      }\n    })\n  }\n\n  _setupClick() {\n    packages.window.addEventListener('click', this.handler)\n  }\n\n  _tearDownClick() {\n    packages.window.removeEventListener('click', this.handler)\n\n  }\n\n  async open() {\n    if (locals.show) {\n      return\n    }\n    \n    this._setupClick()\n\n    locals.show = true\n    locals.showList = true\n  }\n\n  async close() {\n    this._tearDownClick()\n    locals.show = false\n\n    locals.showList = false\n  }\n\n  destroy() {\n    this._tearDownClick()\n  }\n}           ","css":"","name":"rd:Undefined Fields Btn","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","text":"Window","v":"d4ce6dec568c3dc1"}],"template":"<div class=\"relative\">\n  <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-file-invoice\"\n            @selected=\"controller.open()\"\n            :param-disabled=\"params.document.a_depth <= 1 || locals.disabled\"\n            :param-count=\"locals.comments.length\"\n            param-border=\"border-slate-200\"\n  ></ae-layout> \n</div>\n\n\n<div class=\"fixed top-0 bottom-0 h-screen right-0 z-50 ease-in-out duration-500  max-w-[90%] border-l shadow-lg overflow-hidden bg-white\"\n    :class=\"[locals.show ?  'w-[500px] opacity-1' : 'w-0 opacity-0' ]\"\n    ref=\"container\"\n    :data-test=\"'layout_' + layout.id + '_popup'\"\n>\n  <div class=\"flex flex-col gap-1\">\n    <div class=\"flex justify-end\">\n      <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\" param-icon=\"far fa-times\" param-text=\"\" @selected=\"controller.close()\"></ae-layout>\n    </div>\n  <ae-design\n    name=\"rd:undefined-fields\"\n    :document=\"params.document\"\n  ></ae-design>\n  </div>\n  <!-- <ae-layout  v-if=\"locals.show\"\n              v-show=\"locals.showList\"\n              layout-id=\"0e6b3b93-8e22-4616-9389-a00a6a1a4f59\"\n              :param-document=\"params.document\"\n              :param-highlight-comment=\"params.highlightComment\"\n              class=\"shadow h-full w-full\"\n            @close=\"controller.close()\"\n  ></ae-layout> -->\n</div>  \n"},"f":{"id":"layout-form","text":"Layout","v":"0996ce30f860e850"},"id":"ef66a07d-1fc2-40de-9be1-8d91839a3611","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-07-15T12:25:20+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"2ad0619d-792e-40ea-9e76-f7801593f6f8","text":"rd:Comments Btn","v":"95206b38f3ef2dea"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"6e04c6411b71e64b"},"stamps":[],"t":1752582320998,"v":"ba7024bab1f9ccc2"},{"id":"a20f408f-c839-46c6-8893-ea70ac277eb0","v":"d38bc258698b984b","cloneOf":{"id":"85b6cba1-c9a4-4fd1-8198-a28e8893152e","v":"8d928228f185945a","text":"Uploads Button"},"originalCloneOf":{"id":"85b6cba1-c9a4-4fd1-8198-a28e8893152e","v":"8d928228f185945a","text":"Uploads Button"},"previous":{"v":"94ffc63d3e89948d"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"rd:Upload Status","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"dc4529325d5a5c20","text":"Window"}],"template":"\n<ae-layout v-if=\"params.button && controller.isUploading\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-cloud-upload\"\n            :param-text=\"controller.uploads.length + ' verbleibende Uploads'\"\n            @selected=\"$refs.popup.show($event)\"\n            :param-classes=\"params.classes\"\n></ae-layout>\n<ae-layout v-if=\"params.icon  && controller.isUploading\"\n            layout-id=\"9fdb8db1-ffb9-4e5a-ac0a-90d73f80b167\"\n            param-icon=\"far fa-cloud-upload\"\n            :param-count=\"controller.uploads.length\" \n            :param-classes=\"params.classes\"\n            class=\"text-orange-500\"\n></ae-layout>\n<!-- \n<button class=\"ae-button _CSS-button\" v-if=\"controller.isUploading\" @click.stop=\"$refs.popup.show($event)\" ref=\"button\" title=\"Uploads\">\n  <span ref=\"buttonCount\" class=\"_CSS-button__count\">{{ controller.uploads.length }}</span> <ae-icon class=\"fa fa-sync fa-spin\"></ae-icon>\n</button> -->\n\n<ae-popup ref=\"popup\">\n  <div class=\"_CSS-popup\" slot-scope=\"scope\">\n    <div class=\"_CSS-progress-list\" >\n      <div class=\"_CSS-header\">\n        <div>Dateien hochladen</div>\n        <button class=\"ae-button\" @click.stop=\"scope.close()\">\n          <ae-icon class=\"fa fa-times\"></ae-icon>\n        </button>\n      </div>\n\n      <div class=\"_CSS-progress\" v-for=\"upload of controller.uploads\"> \n        <ae-design style=\"font-size:var(--ae-font-size-7);\" name=\"icon\" :document=\"upload.document\"></ae-design>\n        <div class=\"_CSS-progress__title\">\n          <ae-design name=\"title\" :document=\"upload.document\"></ae-design>\n          <div v-if=\"controller.isUploading && upload.progressPercent == 0\" class=\"ae-progress--indeterminate\" title=\"uploading\">\n          </div>\n          <div v-else style=\"display:flex;transform:scaleX(-1)\">\n            <div class=\"ae-progress\" :style=\"{ 'padding-left': (100 - (upload.progressPercent * 100)).toString() + '%' }\" ></div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</ae-popup>\n\n<ae-layout layout-id=\"e5accfd9-8d33-46e5-a4d7-69a91b5f8543\"\n          :param-force-warn=\"controller.isUploading\"\n          :param-events=\"['beforeunload']\"\n></ae-layout>","css":"._CSS-popup {\n  display: flex;\n  flex-flow: column;\n  max-width: 300px;\n  min-width: 300px;\n  max-height: 400px;\n  overflow: auto;\n}\n\n._CSS-progress-list {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-progress {\n  display: flex;\n  align-items: center;\n  padding: var(--ae-space-2);\n}\n._CSS-progress__title {\n  flex: 1;\n  min-width: 0;\n\n  padding: var(--ae-space-1);\n  font-size: var(--ae-font-size-3);\n}\n\n._CSS-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 0 0 0 var(--ae-space-2);\n}","controller":"class Controller {\n  async init() {\n    const playAnimation = async () => {\n      await Aeppic.nextRenderPass()\n      Aeppic.Anime({\n        targets: $refs.button,\n        keyframes: [\n          { scale: 1.1 },\n          { scale: 1 },\n        ],\n        autoplay: true,\n        xduration: 1000,\n        easing: 'spring(1, 80, 10, 0)'\n      })\n    }\n\n\n    locals.vue = new Vue({\n      computed: {\n        uploads() {\n          if (!Aeppic.Uploads.isUploading) {\n            return []\n          }\n\n          return Aeppic.Uploads.getAll()\n        }\n      },\n      methods: {\n\n      },\n      watch: {\n        uploads(newValue, oldValue) {\n          if (newValue.length === 0) {\n            $refs.popup && $refs.popup.close()\n            $emit('hide')\n            return\n          }\n\n          $emit('show')\n\n          if (newValue.length > oldValue.length) {\n            playAnimation()\n          }\n\n        }\n      }\n    })\n\n    locals.fakeUploads = []\n    locals.fakeUploads = [\n      { status: 'started', progressPercent: 0.20, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'pending', progressPercent: 0.63, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'started', progressPercent: 0.20, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'pending', progressPercent: 0.63, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'started', progressPercent: 0.20, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'pending', progressPercent: 0.63, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'started', progressPercent: 0.20, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'pending', progressPercent: 0.63, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'started', progressPercent: 0.20, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'pending', progressPercent: 0.63, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'started', progressPercent: 0.20, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'pending', progressPercent: 0.63, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n    ]\n  \n    await Aeppic.nextRenderPass()\n    // $refs.popup.show({ target: $refs.button })\n    // playAnimation()\n  }\n\n  get uploads() {\n    if (params.simulate) {\n      return locals.fakeUploads\n    }\n\n    return Aeppic.Uploads.getAll()\n  }\n\n  get isUploading() {\n    if (params.simulate) {\n      return true\n    }\n\n    return Aeppic.Uploads.isUploading\n  }\n\n  destroy() {\n    if (locals.vue) {\n      locals.vue.$destroy()\n      locals.vue = null\n    }\n  }\n}"},"locks":[],"created":{"at":"2023-01-11T10:57:08+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-08-03T13:36:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1691069792884,"ct":1673434628504,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","009b3a60-72d5-46f6-8dc6-7f9001e03283","b676aa47-5082-403c-bf82-6aeead137ec1"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2024-11-05T13:15:23+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1730812523298,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      AntragContainer: '0bb3d600-faf0-4a5c-b49f-7994d234ae76'\n    }\n\n    locals.showValidity = false\n    locals.validityErrors = null\n    locals.readableByType = {}\n    locals.document = null\n\n    // watchParam('document', async (document) => {\n    //   await this.updateValidity(document)\n    // })\n\n    await this.updateValidity(params.document)\n  }\n\n  async updateValidity(document) {\n    this.watcher?.stop()\n\n    locals.document = document\n\n    locals.hasDocumentDataValid = 'documentDataValid' in document.data\n    locals.hasAllDocumentDataValid = 'allDocumentDataValid' in document.data\n    locals.hasAllEditableDocumentDataValid = 'allEditableDocumentDataValid' in document.data\n\n    locals.hasDocumentValidity = locals.hasDocumentDataValid || locals.hasAllDocumentDataValid || locals.hasAllEditableDocumentDataValid\n\n    if (locals.hasDocumentValidity) {\n      $emit('show')\n    } else {\n      $emit('hide')\n    }\n\n    // if onlyIcon is set, we don't need to watch for changes because the intent for the button is to show the validity (and thus makes the notification good to see)\n    if (params.onlyIcon) {\n      return\n    }\n\n\n    let isFirstWatch = false\n    let userChangedTheDocument = false\n\n    // let count = 0\n\n    \n    this.watcher = Aeppic.watch(document, async (doc) => {\n      // console.log('watch validity', this.__variables.$el, count)\n      // count += 1\n\n      if (!isFirstWatch) {\n        isFirstWatch = true\n        return\n      }\n\n      if (!userChangedTheDocument && doc.modified.by === Aeppic.Account.id) {\n        userChangedTheDocument = true\n      }\n\n      // console.log('watch', doc.f.text, doc.id, count, { userChangedTheDocument }, doc.previous?.patch)\n\n      // the if-case are in order of priority (shall be same as in the template)\n      if ((!locals.hasAllEditableDocumentDataValid || doc.data.allEditableDocumentDataValid === false) &&\n          (!locals.hasAllDocumentDataValid || doc.data.allDocumentDataValid === false) &&\n          (!locals.hasDocumentDataValid || doc.data.documentDataValid === false)\n      ) {\n        return \n      }\n\n      if (!userChangedTheDocument || \n          !doc.previous ||\n          ['allEditableDocumentDataValid', 'allDocumentDataValid', 'documentDataValid'].some(fieldName => fieldName in doc.previous.patch) === false\n        ) {\n          return\n      }\n      \n      const antragContainer = await Aeppic.get(doc.a[doc.a_forms.findIndex(aForm => aForm === this.FORMS.AntragContainer)])\n\n      if (!antragContainer) {\n        return\n      }\n\n      // const invalidDocuments = await Aeppic.find(`a:${antragContainer.id} (data.documentDataValid:false OR data.allDocumentDataValid:false OR data.allEditableDocumentDataValid:false)`)\n      const invalidDocuments = await Aeppic.find(`a:${antragContainer.id} data.allEditableDocumentDataValid:false`)\n\n      // make sure to exclude current document from the list of invalid documents (just to be 100% sure)\n      const stillInvalidDocuments = invalidDocuments.filter(invalidDocument => invalidDocument.id !== doc.id)\n\n      let text = 'Vielen Dank!'\n\n      if (stillInvalidDocuments.length) {\n        text += ' Bitte vervollständigen Sie außerdem: ' + stillInvalidDocuments.map(invalidDocument => invalidDocument.f.text).join(', ') \n      }\n\n      // console.log({ stillInvalidDocuments, text, invalidDocuments})\n\n\n      this._showToast({\n        title: `Alle Felder ausgefüllt: ${doc.f.text} `,\n        text: text,\n        timeout: 10000,\n      })\n    })\n    \n  }\n\n  async showValidity(event) {\n    locals.showValidity = true\n\n    locals.validityErrors = null\n\n    if (locals.hasAllEditableDocumentDataValid) {\n      if (!locals.document.data.allEditableDocumentDataValid) {\n        locals.validityErrors = { 'description': { required: 'Es wurden nicht alle von Ihnen ausfüllbaren Felder ausgefüllt.' } }\n      }\n    } else if (locals.hasAllDocumentDataValid && !locals.document.data.allDocumentDataValid) {\n      locals.validityErrors = { 'description': { required: 'In verknüpften Dokumenten wurden nicht alle Felder ausgefüllt.' } }\n    } else if (locals.hasDocumentDataValid && !locals.document.data.documentDataValid) {\n      const form = await Aeppic.getFormForDocument(document)\n      const errors = form.validateDocumentData(document.data)\n\n      locals.validityErrors = errors\n    } \n\n    const readableByType = {}\n\n    for (const fieldName in locals.validityErrors) {\n      const error = locals.validityErrors[fieldName]\n\n      for (const type in error) {\n        if (!readableByType[type]) {\n          readableByType[type] = []\n        }\n\n        readableByType[type].push(error[type])\n      } \n    }\n  \n    locals.readableByType = readableByType\n\n    $refs.validity.show(event)\n  }\n\n  async _showToast(toastOptions) {\n    const imageDocuments = [\n      '9744abd0-017e-4616-9feb-8e6b75531dec',\n      'e18215a3-e475-4f5c-8995-61dcfeebe99c',\n      '6d458186-35d5-42c3-82c6-a31768731b1c',\n      '1d3be345-8c4a-430e-ad81-e8f5ba202315',\n      'd52eb4c6-e8ce-483f-a80d-326a48ca493c',\n      'ca29ed98-d879-4beb-aae8-db93f8fa0b48',\n      '9547b003-34a4-4637-8430-81dfd5a858b1',\n      '38986362-132e-4189-bc13-210e25ee6955',\n      '39420871-4e27-4060-ae82-50bb1a17e10e',\n      'e0bb30ff-e0ad-4da0-ab4e-dbc75e7d93c6',\n      'd37bece8-ece2-4ab6-8be1-85a04c6882bf',\n      '0926d157-82ae-405c-909a-107b84c7430e',\n      '2911cf8b-7e49-48ff-903d-e3c1730c2098',\n      'b89066e2-343f-47bc-b9b8-8dda3f86bbf7',\n      '8fd8eab8-9b84-430b-b5a5-fe771c7c344a',\n      '99439ffb-3d71-4791-a4f8-8c41da241619',\n      '26eaaf4d-b8e5-40a8-8deb-1490a367778a',\n      '0e150899-5b4b-4b5a-9185-e550e141de64',\n      '265d6895-0e8a-4e0f-bffe-6d9b2ade5c32',\n      '2dfe724e-d3c3-46c8-a951-48af3b3f61e9',\n      '22d9fae8-7c80-4f6c-9db6-42d3fc1b9e69',\n    ] \n\n    const randomImageDocumentId = imageDocuments[Math.floor(Math.random() * imageDocuments.length)]\n\n    const toastImageSrc = Aeppic.Content.getSrc(await Aeppic.get(randomImageDocumentId), 'file')\n\n    Aeppic._emitter.emit('bizpin:show-toast', {...toastOptions, imageSrc: toastImageSrc, imageAlt: 'Dino Überprüfung. ' + toastOptions.title }) \n  }\n}","css":"","name":"rd:Validity Test","packages":[],"template":"<div v-if=\"locals.hasDocumentValidity\">\n  <div v-if=\"locals.hasAllEditableDocumentDataValid\">\n    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              :param-icon=\"locals.document.data.allEditableDocumentDataValid ? 'fa fa-badge-check text-green-500' : 'fa fa-badge-percent text-red-500'\"\n              param-border=\"true\"\n              :param-title=\"locals.document.data.allEditableDocumentDataValid ? 'Alle von Ihnen ausfüllbaren erforderlichen Felder (inkl. Unter-Formulare) sind ausgefüllt' : 'Nicht alle von Ihnen ausfüllbaren erforderlichen Felder (ggf. auch in Unter-Formularen) sind ausgefüllt'\"\n              :param-text=\"!params.onlyIcon && (locals.document.data.allEditableDocumentDataValid ? 'Alle von Ihnen ausfüllbaren Felder ausgefüllt' : 'Nicht alle von Ihnen ausfüllbaren Datenfelder vollständig')\"\n              @selected=\"controller.showValidity($event)\"\n              param-classes=\"text-sm\"\n              :param-text-wrap=\"true\"\n    ></ae-layout>\n  </div>\n  <div v-else-if=\"locals.hasAllDocumentDataValid\">\n    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              :param-icon=\"locals.document.data.allDocumentDataValid ? 'fa fa-badge-check text-green-500' : 'fa fa-badge text-red-500'\"\n              param-border=\"true\"\n              :param-title=\"locals.document.data.allDocumentDataValid ? 'Alle erforderlichen Felder (inkl. Unter-Formulare) sind ausgefüllt' : 'Nicht alle erforderlichen Felder (ggf. auch in Unter-Formularen) sind ausgefüllt'\"\n              :param-text=\"!params.onlyIcon && (locals.document.data.allDocumentDataValid ? 'Alle Felder ausgefüllt' : 'Nicht alle Datenfelder vollständig')\"\n              @selected=\"controller.showValidity($event)\"\n              param-classes=\"text-sm\"\n              :param-text-wrap=\"true\"\n    ></ae-layout>\n  </div>\n  <div v-else-if=\"locals.hasDocumentDataValid\">\n    <ae-layout layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n              :param-icon=\"locals.document.data.documentDataValid ? 'far fa-badge-check text-green-500' : 'far fa-badge-percent text-red-500'\"\n              param-border=\"true\"\n              :param-title=\"locals.document.data.documentDataValid ? 'Alle erforderlichen Felder ausgefüllt' : 'Nicht alle erforderlichen Felder ausgefüllt'\"\n              :param-text=\"!params.onlyIcon && (locals.document.data.documentDataValid ? 'Alle Felder ausgefüllt' : 'Datenfelder nicht vollständig')\"\n              @selected=\"controller.showValidity($event)\"\n              param-classes=\"text-sm\"\n              ref=\"button\"\n              :param-text-wrap=\"true\"\n    ></ae-layout>\n    </div>\n    \n    <ae-popup ref=\"validity\" @close=\"locals.showValidity = false\" placement=\"bottom\">\n      <div>\n        <div v-if=\"locals.showValidity\" class=\"p-1\">\n          <div v-if=\"locals.validityErrors\" class=\"flex flex-col gap-4\">\n            <div v-for=\"(values, type) in locals.readableByType\" class=\"flex flex-col gap-2\">\n              <label class=\"font-bold\">{{Aeppic.translate('translate:error:fields:' + type) }}</label>\n\n              <ul class=\"list-inside list-disc\">\n                <li v-for=\"error of values\">\n                {{ error }}\n                </li>\n              </ul>\n              \n            </div>\n          </div>\n          <div v-else>\n            <ae-icon class=\"far fa-stars text-lg\"></ae-icon>  Alle erforderlichen Felder wurden ausgefüllt. \n          </div>\n        </div>\n      </div>\n    </ae-popup>\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"586c6405-3655-4cc6-bed5-adc4272a9097","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-05-20T15:32:41+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"b676aa47-5082-403c-bf82-6aeead137ec1","previous":{"v":"814c7070aa354d32"},"stamps":[],"t":1747755161915,"v":"8d474dc1fdda300c"},{"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"fc031ba9-67be-44c7-a473-71eb2a9b69b0","text":"Video Converter Status","v":"07f8ce0617aa9865"},"created":{"at":"2023-01-11T12:12:12+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1673439132256,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      ConverterStatus: 'e861741c-3be2-4cd7-bfe3-84d3a2e506c5'\n    }\n\n    locals.status = null\n\n    if (params.simulate) {\n      locals.status = {\n        data: {\n          jobsLeft: 15\n        },\n        modified: {\n          at: Aeppic.DateTime.now().toISO()\n        }\n      }\n\n      return\n    }\n\n    const videoConverterStatusDocument = await Aeppic.findOne(`p:root f.id:${this.FORMS.ConverterStatus}`)\n\n    Aeppic.watch(videoConverterStatusDocument, (doc) => this._onStatusDocumentUpdate(doc))\n  }\n\n  _onStatusDocumentUpdate(doc) {\n    locals.status = doc\n\n    const hasJobsLeft = locals.status?.data.jobsLeft\n\n    if (hasJobsLeft) {\n      $emit('show')\n    } else {\n      $emit('hide')\n    }\n  }\n\n  get title() {\n    return locals.status && `Stand: ${Aeppic.DateTime.fromISO(locals.status.modified.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}`\n  }\n}","css":"","name":"rd:Video Converter Status","packages":[],"template":"<ae-layout v-if=\"params.button && locals.status?.data.jobsLeft\"\n            layout-id=\"80e59dec-29b1-45f1-8391-f5621cf9f0b2\"\n            param-icon=\"far fa-photo-video\"\n            :param-text=\"locals.status.data.jobsLeft + ' offene Video Konvertierungen'\"\n            :param-title=\"controller.title\"\n            :param-classes=\"params.classes\"\n></ae-layout>\n<ae-layout v-if=\"params.icon  && locals.status?.data.jobsLeft\"\n            layout-id=\"9fdb8db1-ffb9-4e5a-ac0a-90d73f80b167\"\n            param-icon=\"far fa-photo-video\"\n            :param-count=\"locals.status.data.jobsLeft\" \n            :param-classes=\"params.classes\"\n            class=\"text-orange-500\"\n></ae-layout> "},"f":{"id":"layout-form","text":"Layout","v":"aeefd024c2682948"},"id":"51db057d-1f10-49d4-a6fc-69bd8725bbdf","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-05-06T13:29:27+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"fc031ba9-67be-44c7-a473-71eb2a9b69b0","text":"Video Converter Status","v":"07f8ce0617aa9865"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","previous":{"v":"4d971938652d4f3c"},"stamps":[],"t":1746538167218,"v":"4d1624872adcacee"},{"id":"daec4d20-49ab-44a6-8989-11e93e16604b","v":"77ffaf385b64efbc","previous":{"v":"59f58181f8b143e3"},"p":"d98e0ddd-7901-4cc6-864a-813fe8fb196a","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"rd:Zuletzt von mir geändert","applies":"","template":"  <div class=\"text-sm text-neutral-500 mb-2 flex gap-2 items-center\">\n    <ae-icon class=\"fa fa-history\"></ae-icon>\n    <div>Zuletzt von mir geändert</div>\n  </div>\n\n  <ae-list list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n            :root-document-id=\"params.company.id\"\n            query-id=\"71d5633a-9dbd-4c96-b6e0-1c6ffc5ef0f1\"\n            :search-options=\"{ size: 10 }\"\n            :sort=\"{ field: 'modified.at', descending: true }\"\n            :filter=\"controller.lastModifiedFilter\"\n            :param-divide=\"true\"\n            param-design=\"rd:search-card\"\n            :param-design-params=\"{ readonly: true, disableButtonRight: true }\"\n            ref=\"list\"\n            @selected=\"$emit('selected', $event)\"\n            @focus-out=\"$emit('focus-out')\"\n            :param-initial-focus-entry=\"true\" \n  ></ae-list> \n            <!-- @button-right=\"controller.limitRealmToDocument($event)\" -->\n\n    ","css":"","controller":"class Controller {\n  init() {\n    $on('focus-entry', async event => {\n      await Aeppic.nextRenderPass()\n      await Aeppic.nextRenderPass()\n\n      $refs.list.$emit('focus-entry', event)\n    })\n  }\n\n  get lastModifiedFilter() {\n    return `modified.by:${Aeppic.Account.id} AND ${params.formIdsToFindAsQuery}`.trim()\n  }\n}","packages":[]},"locks":[],"created":{"at":"2023-04-12T12:00:05+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-04-12T14:53:19+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1681311199439,"ct":1681300805763,"a_depth":3,"a":["apps","9302d29e-bf32-4350-a5fd-18b542d1b5db","d98e0ddd-7901-4cc6-864a-813fe8fb196a"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"392eb7c0-8c74-410b-8ae3-636334077140","v":"da5338444a65719c","previous":{"v":"bb675d30b69d8b47"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Recent Changes","applies":"","packages":[],"template":"<ae-list v-if=\"!locals.searching\" list-id=\"899962b5-dcaf-4bc8-a1f6-803dbab597fb\" :documents=\"locals.recentChanges\" param-design=\"change-title,search-title\"></ae-list>\r\n<span v-else>Searching...</span>\r\n<button @click=\"controller.find(20)\">Refresh</button>\r\n<button @click=\"controller.more()\">More</button>","css":"","controller":"init() {\r\n  locals.size = 20\r\n  locals.searching = false\r\n  locals.recentChanges = null\r\n  \r\n  this.find()\r\n\r\n  Aeppic.watchMatchingDocuments('id:*', () => this._find())\r\n}\r\n\r\nasync find(size) {\r\n  if (size == null) {\r\n    size = locals.size\r\n  } else {\r\n    locals.size = size\r\n  }\r\n\r\n  locals.searching = true\r\n  locals.recentChanges = await Aeppic.find( \r\n    \"id:root OR a:system OR a:apps OR a:a56a9acf-73b8-4f8d-9627-9d1698bb2af2 OR a:preferences OR a:b61adbaf-b51b-46b5-9358-587ef518075b\",\r\n    { size: size, sort: { field: \"modified.at\", descending:true } })\r\n  locals.searching = false\r\n}\r\n\r\nmore() {\r\n  locals.size += 100\r\n  this.find()\r\n}"},"locks":[],"created":{"at":"2020-05-08T09:00:45+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2025-02-05T11:07:54+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1738753674133,"ct":1621428481256,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"438c791d-f725-40c8-95cd-a9166d837339","v":"21df1ed9a2543c15","previous":{"v":"e4b1101314a5c250"},"p":"0c8ef865-fd1b-40bd-b665-97ad067fd10f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Recent Documents","applies":"","packages":[],"template":"<template v-if=\"locals.recentDocuments.length\">\n  <h3 class=\"_CSS_header\">\n    Kürzlich geöffnet\n  </h3>\n  <!-- <transition-group name=\"list\"> -->\n    <div class=\"_CSS-title\"\n                v-for=\"(_, index) of locals.recentDocuments\"\n                :key=\"locals.recentDocuments[locals.recentDocuments.length - index - 1].id + index\"\n                @click=\"Aeppic.navigateTo(locals.recentDocuments[locals.recentDocuments.length - index - 1])\"\n                >\n      <ae-design  name=\"search-title\"\n                  :document=\"locals.recentDocuments[locals.recentDocuments.length - index - 1]\"\n      ></ae-design>\n    </div>\n  <!-- </transition-group> -->\n</template>\n","css":"._CSS {\n  display:flex;\n  flex-direction: column;\n  align-items: stretch;\n}\n \n._CSS_header {\n  display: flex;\n  align-items:center;\n  color: var(--ae-primary);\n  font-weight: 600;\n  padding: 4px;\n}\n\n._CSS-icon {\n  min-width: 24px;\n  opacity: 1;\n  color: var(--ae-primary);\n}\n\n._CSS-title {\n  cursor: pointer;\n  padding: 4px;\n  border: 1px solid var(--ae-ui-element-border-color);\n  background: var(--ae-ui-card-background);\n  margin: 2px;\n  color: var(--ae-theme-text-primary-on-light);\n  border-radius: 2px;\n  min-width:0px;\n}\n\n._CSS-title:hover {\n  background-color: var(--ae-theme-hover-on-background-light);\n}\n","controller":"class Controller {\n  async init() {\n    locals.recentDocuments = []\n\n    Aeppic.subscribe(`p:${this._userId} f.id:0a8dbc2a-384e-457b-ab48-57013109ba44`, (documents) => {\n      this.watcher && this.watcher.stop()\n\n      if (!documents[0]) {\n        locals.recentDocuments = []\n        return\n      }\n\n      this.watcher = Aeppic.watch(documents[0], (recentDocumentsDocument) => {\n        locals.recentDocuments = recentDocumentsDocument.data.documents\n      })\n    })\n  }\n\n  get _userId() {\n    return Aeppic.ProfilePage ? Aeppic.ProfilePage.id : null\n  }\n}\n"},"locks":[],"created":{"at":"2018-09-14T12:11:11+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2019-05-03T13:06:33+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1556888793070,"ct":1536927071356,"a_depth":4,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","6b892ddf-3264-4056-b191-166f4410d9fa","0c8ef865-fd1b-40bd-b665-97ad067fd10f"],"a_forms":["folder","application-form","folder","folder"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"3ca82a79-3182-4532-bdfc-0c53e6c00890","v":"initial","p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Recent Documents Menu-Entries","applies":"","packages":[],"template":"<template v-if=\"locals.documents.length\">\n  <div class=\"_CSS-list\">\n    <div class=\"_CSS-header\" title=\"Zuletzt geöffnet\">\n      <ae-icon class=\"fa fa-clock\"></ae-icon>\n    </div>\n    <div v-for=\"document of locals.documents\" class=\"_CSS-entry\" @click.stop=\"controller.selected(document)\">\n      <ae-design name=\"menu-entry-title,title\" :document=\"document\"></ae-design>\n    </div>\n  </div>\n</template>\n\n\n<ae-design name=\"title\" document-id=\"root\" style=\"display:none;\" ref=\"hiddenDomElement\"></ae-design>\n","css":"._CSS {\n  color: var(--ae-background-100);\n}\n\n._CSS-list {\n  background: var(--ae-background-600);\n}\n\n._CSS-header {\n  padding: var(--ae-space-1);\n}\n\n._CSS-entry {\n  padding: var(--ae-space-1);\n  cursor: pointer;\n}\n\n._CSS-entry:hover {\n  background: var(--ae-primary-800);\n}\n","controller":"class Controller {\n  async init() {\n    locals.documents = []\n    locals.documents = await this.update()\n\n    this.listener = async () => {\n      locals.documents = await this.update()\n    }\n\n    await Aeppic.nextRenderPass()\n    $refs.hiddenDomElement.$root.$el.addEventListener('local-storage:bizpin:recently-visited', this.listener)\n  }\n\n  async update() {\n    const stored = JSON.parse(Aeppic.LocalStorage.getItem('bizpin:recently-visited')) || []\n    if (!stored.length) {\n      return stored\n    }\n\n    const documents = (await Aeppic.getAll(stored)).filter(d => d !== null)\n    return documents.slice(-5).reverse()\n  }\n\n  selected(document) {\n    $emit('close')\n    Aeppic.drillInto(document)\n  }\n  \n  destroy() {\n    if ($refs.hiddenDomElement) {\n      $refs.hiddenDomElement.$root.$el.removeEventListener('storage', this.listener)\n    }\n  }\n}\n"},"locks":[],"created":{"at":"2021-07-27T09:54:31+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-07-27T09:54:31+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1627379671609,"ct":1627379671608,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"64eaddd0-ac8a-46d4-a84f-0eb16e42b40d","v":"f3b68f6299199942","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Ref Add Button","applies":"","packages":[],"template":"<button v-if=\"!params.hideButton\" class=\"ae-button\">\n  <ae-icon class=\"fa fa-plus\"></ae-icon>\n</button>","css":"._CSS {\n  display: inline-block;\n}\n","controller":""},"locks":[],"created":{"at":"2018-06-20T16:39:21+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481256,"ct":1621428481256,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"54984226c3074644","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"8088c9e2-670a-425a-9aba-2d9ff9804ef5","v":"ec26c9a0fcdd9018","previous":{"v":"b9093e1c703b4709"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Ref Default Inline Layout","applies":"","packages":[],"template":"<div v-if=\"!params.readonly && !params.noExpand && locals.canEdit\" class=\"_CSS-actions\">\n  <button v-if=\"!params.readonly\"\n          class=\"ae-button\" @click.stop=\"locals.edit = !locals.edit\">\n    <ae-icon v-if=\"locals.edit\" class=\"fad fa-save\"></ae-icon>\n    <ae-icon v-else class=\"fad fa-edit\"></ae-icon>\n  </button>\n  <i v-if=\"!params.readonly && locals.edit\"> wird automatisch gespeichert </i>\n\n  <div style=\"flex:1;\"></div>\n  <button v-if=\"!params.noExpand\" class=\"ae-button\" @click.stop=\"Aeppic.drillInto(params.documentId, { mode: 'dialog' })\" title=\"Anzeigen\">\n    <ae-icon class=\"fa fa-expand-arrows-alt\"></ae-icon>\n  </button>\n  <button v-if=\"!params.readonly\" class=\"ae-button\" @click.stop=\"$emit('remove', params.documentId)\">\n    <ae-icon class=\"fa fa-times\"></ae-icon> \n  </button>\n</div>\n\n<ae-form :document-id=\"params.documentId\"\n        :readonly=\"!locals.edit\"\n        :auto-save=\"true\"\n        :layout-id=\"params.inlineFormLayout || params.inlineForm || 'c9438122-73f2-41aa-b414-a0ea0491ef21'\"\n        :view=\"locals.view\"\n        :class=\"{ '_CSS-form--readonly': !locals.edit }\"\n></ae-form>\n\n<div v-show=\"false\" class=\"_CSS-render-info\">\n{Ref Default Inline Layout}\n<pre>\n{{params.inlineFormLayout}}\n{{locals.view}}  \n</pre>\n</div>","css":"._CSS-actions {\n  display: flex;\n  justify-content: space-between;\n\n  border-bottom: var(--ae-border-width) solid var(--ae-border-color);\n}\n\n/* FIXME: remove once form views can handle readonly */\n/*\n._CSS-form--readonly {\n  pointer-events: none;\n}\n*/","controller":"class Controller {\n  async init() {\n    locals.edit = false\n    locals.document = null\n    locals.view = null\n    locals.canEdit = false\n\n    if (params.onlyFields) {\n      locals.view = {\n        only: {\n          fields: Array.isArray(params.onlyFields) ? params.onlyFields : params.onlyFields.split(',')\n        }\n      }\n    }\n\n    watchParam('documentId', async (newParam) => await this.update(newParam))\n\n    this.update(params.documentId)\n  } \n\n  async update(id) {\n    locals.document = await Aeppic.get(id)\n    locals.canEdit = !locals.document.readonly && await Aeppic.canEdit(locals.document)  \n\n    locals.edit = locals.document && (locals.document.hidden === true || (locals.document.v === 'initial' && !locals.document.data.name))\n  }\n}"},"locks":[],"created":{"at":"2020-10-16T13:48:17+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-11-11T13:02:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1668171753550,"ct":1621428481256,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"32dbb3b6-f883-4647-8d21-6f1e0fb83b90","v":"fc35eb1df8b1c52c","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Ref dialog","applies":"","packages":[],"template":"<ae-dialog :full-screen=\"true\" ref=\"dialog\" :dialog-classes=\"{ '_CSS-dialog-add-reference': true }\">\n\t<div slot=\"header\" class=\"_CSS-dialog-header\">\n    <span>{{params.label}}</span>\n\t\t<div class=\"bp-button\" @click=\"$refs.dialog.close()\">\n\t\t\t<ae-icon class=\"fa fa-2x fa-window-close\"></ae-icon>\n\t\t</div>\n\t</div>\n\t<div slot=\"body\" class=\"_CSS-dialog-body\">\n    <input v-if=\"!params.nofilter\" class=\"_CSS-dialog-body__input\" ref=\"input\" :readonly=\"params.readonly\" type=\"text\" v-model=\"locals.filter\" @input=\"$emit('filter', locals.filter)\"\n    placeholder=\"Suchen...\">\n    <button class=\"ae-button ae-button--secondary _CSS-input-container__create\" v-if=\"params.showCreate && locals.filter\" @click=\"$emit('create', locals.filter)\">Erstellen</button>\n\t\t<ae-list\n      param-min-column-width=\"100%\"\n      class=\"_CSS-dialog-body__search-list\"\n      :list-id=\"params.listId || '2dab232c-2c8a-4aa4-b3f9-6023a7116161'\"\n      @selected=\"controller.onSelected($event)\"\n      :param-selected-items=\"params.selectedItems\"\n      :documents=\"params.items\"\n      :param-item-labels=\"params.itemLabels\"\n      param-design=\"search-title\"\n      :param-design-params=\"{ hidePath: params.hidePath }\"\n      ></ae-list>\n      <div class=\"_CSS-search-limit\" v-if=\"params.items && (params.searchSize === params.items.length)\">\n        Die Suche ist begrenzt auf {{params.searchSize}} Einträge.\n      </div>\n\t</div>\n</ae-dialog>\n","css":"._CSS-dialog-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n._CSS-dialog-add-reference .ae-dialog__body {\n  overflow: hidden;\n}\n\n._CSS-dialog-body__search-list {\n  flex: 1;\n  flex-basis: 100%;\n  overflow: auto;\n}\n\n._CSS-dialog-body {\n  flex: 1;\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-dialog-body__input{\n  height: 5rem;\n}\n\n\n._CSS-search-limit {\n  padding-top: 1em;\n  font-size: 0.9em;\n  color: rgba(0,0,0,0.6);\n}","controller":"class Controller {\n  init() {\n    locals.filter = ''\n\n    this.show = (eventData) => {\n      locals.filter = ''\n      $refs.dialog.show(eventData)\n\n      Aeppic.nextRenderPass(() => {\n        $refs.input && $refs.input.focus()\n      })\n    }\n\n    this.close = () => $refs.dialog.close()\n\n    $on('show', this.show)\n    $on('close', this.close)\n  }\n\n  onSelected(event) {\n    if (params.keepOpenAfterSelection != true) {\n      this.close()\n    }\n\n    $emit('selected', event)\n  }\n}\n"},"locks":[],"created":{"at":"2018-02-20T11:13:35+01:00","by":"","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481256,"ct":1621428481256,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"880dc455384f4265","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"ed2cc4c2-d2a0-4969-8da7-49fb3d539cc9","v":"0810e95e66efc9aa","previous":{"v":"da8570f580d2878c"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Ref popup","applies":"","packages":[],"template":"<ae-popup ref=\"popup\"\n        @show=\" $refs.input && $refs.input.focus()\"\n        placement=\"bottom-start\"\n>\n  <template #default=\"scope\">\n    <div class=\"_CSS-popup\" @click.stop>\n      <div class=\"_CSS-header\">\n        {{ params.title || 'Auswählen' }}\n        <button class=\"ae-button\" @click.stop=\"scope.close()\">\n          <ae-icon class=\"fa fa-times\"></ae-icon>\n        </button>\n      </div>\n      <div class=\"_CSS-popup__body\">\n      <div class=\"_CSS-input-container\">\n        <div class=\"_CSS-input-container__input\">\n          <input v-if=\"!params.nofilter\" style=\"width:100%;\" ref=\"input\" :readonly=\"params.readonly\" type=\"text\" v-model=\"locals.filter\" @input=\"$emit('filter', locals.filter)\"\n          :placeholder=\"controller.searchPlaceholder\" v-focus @keydown.down=\"$refs.list.$emit('focus')\">\n          <ae-icon class=\"fa fa-spinner fa-spin _CSS-input-container__input__spinner\" v-if=\"params.loading\"></ae-icon>\n        </div>\n        \n        <button class=\"ae-button ae-button--small ae-button--secondary _CSS-input-container__create\" v-if=\"params.showCreate && locals.filter\" @click=\"$emit('create', locals.filter)\">Erstellen</button>\n        \n      </div>\n      <ae-list\n        ref=\"list\"\n        param-min-column-width=\"100%\"\n        class=\"_CSS-popup__list\"\n        :list-id=\"params.listId || '2dab232c-2c8a-4aa4-b3f9-6023a7116161'\"\n        @selected=\"controller.onSelected($event)\"\n        @remove=\"controller.onRemove($event)\"\n        :documents=\"params.items\"\n        :param-selected-items=\"params.selectedItems\"\n        :param-item-labels=\"params.itemLabels\"\n        :param-design=\"params.design || 'search-card'\"\n        :param-design-params=\"{ ...params.designParams, hidePath: params.hidePath, fullPath: params.fullPath, minimizedInfo: true }\"\n        @focus-base=\"$refs.input && $refs.input.focus()\"\n        :param-interactive=\"true\"\n        param-gap=\"tiny\"\n        :watch-documents=\"params.watchItems\"\n        ></ae-list>\n        <div class=\"_CSS-search-limit\" v-if=\"params.items && (params.searchSize === params.items.length)\">\n          Die Suche ist begrenzt auf {{params.searchSize}} Einträge.\n        </div>\n        <button v-if=\"params.items && (params.searchSize === params.items.length)\" style=\"margin: 1rem;\" class=\"ae-button ae-button--secondary\" @click=\"$emit('load-more')\">Mehr Einträge laden</button>\n      </div>\n    </div>\n  </template>\n  \n</ae-popup>","css":"._CSS-popup {\n  display: flex;\n  flex-flow: column;\n  background: var(--ae-background-100);\n  width: 100%;\n  min-height: 400px;\n  max-height: 50vh;\n  min-width: 400px;\n  max-width: 50vw;\n  box-shadow: var(--ae-shadow); \n  border-radius: var(--ae-border-radius);\n  overflow: hidden;\n}\n\n._CSS-popup__body {\n  margin: var(--ae-size-2) var(--ae-size-1) 0 var(--ae-size-1);\n  flex: 1;\n  display: flex;\n  flex-flow: column;\n  overflow: hidden;\n}\n\n._CSS-popup__list {\n  flex: 1;\n  overflow-y: scroll;\n  overflow-x: hidden;\n}\n\n._CSS-popup-element {\n  xbox-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.16), 0 0 1px 0 rgba(0, 0, 0, 0.16);\n}\n\n._CSS-search-limit {\n  padding: 1px 8px;\n  font-size: 0.9em;\n  color: rgba(0,0,0,0.6);\n}\n\n._CSS-input-container {\n  position: relative;\n  display: flex;\n  margin: 0 0 var(--ae-size-2) 0;\n}\n\n._CSS-input-container__input {\n  flex: 3;\n  position: relative;\n}\n\n._CSS-input-container__input__spinner {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n}\n\n._CSS-input-container__create {\n  flex: 1;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n._CSS-input-container__create:hover {\n  cursor: pointer;\n}\n\n._CSS-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding-left: var(--ae-size-1);\n  background: var(--ae-ui-background);\n  border-bottom: var(--ae-border-width) solid var(--ae-border-color);\n}","controller":"class Controller {\n  async init() {\n    locals.filter = ''\n\n    this.show = (eventData) => {\n      console.log('show', { eventData })\n      // if (!$refs.popup.visible) {\n        locals.filter = ''\n      // }\n\n      $refs.popup.show(eventData)\n    }\n\n    this.toggle = (eventData) => {\n      locals.filter = ''\n      $refs.popup.toggle(eventData) \n    }\n\n    this.close = () => {\n      $refs.popup.close()\n    }\n\n    $on('show', this.show)\n    $on('toggle', this.toggle)\n    $on('close', this.close)\n\n    if (params.show) {\n      await Aeppic.nextRenderPass()\n\n      this.show({\n        target: $refs.popup.parentNode\n      })\n    }\n  }\n\n  onSelected(event) {\n    if (params.keepOpenAfterSelection != true) {\n      this.close()\n    }\n    $emit('selected', event)\n  }\n\n  onRemove(event) {\n    if (params.keepOpenAfterSelection != true) {\n      this.close()\n    }\n    $emit('remove', event)\n  }\n\n  get searchPlaceholder() {\n    if (params.showCreate) {\n      return 'Tippen um zu suchen oder neu zu erstellen'\n    }\n\n    return 'Tippen um zu suchen'\n  }\n}\n"},"locks":[],"created":{"at":"2018-02-19T17:24:24+01:00","by":"","from":"","client":"server"},"modified":{"at":"2023-06-14T15:22:23+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1686756143973,"ct":1621428481256,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"8ebd91bd-9110-4ee5-b3d8-4248d2dc696d","v":"0de441cb3cb76944","previous":{"v":"af0e6e6b89b0d99a"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Ref Preview","applies":"","packages":[],"template":"<div ref=\"popup\">\n  <div class=\"_CSS-body bp-card xbp-card--bordered\" v-if=\"locals.showPopup\" @click.stop>\n    <template v-if=\"locals.document\">\n      <ae-design class=\"_CSS-body__image\" name=\"image\" :document=\"locals.document\"></ae-design>\n      <ae-design class=\"_CSS-body__title\" name=\"title\" :document=\"locals.document\" param-white-space=\"normal\"></ae-design>\n      <ae-design class=\"_CSS-body__abstract\" name=\"abstract\" :document=\"locals.document\"></ae-design>\n      <div class=\"_CSS-body__link\">\n        <button class=\"ae-button ae-button--secondary\" @click.stop=\"$emit('selected', locals.document)\">\n          Anzeigen\n        </button>\n      </div>\n    </template>\n  </div>\n</div>\n    ","css":"._CSS-body {\n  width: 220px;\n  min-width: 220px;\n\n  box-shadow: var(--ae-shadow); \n  padding: 0;\n\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-body__image {\n  width: 100%;\n  height: 100px;\n}\n\n._CSS-body__title {\n  padding: var(--ae-size-1);\n  font-weight: 600;\n}\n\n._CSS-body__link {\n  padding: var(--ae-size-1) 0;\n}\n\n._CSS-body__abstract {\n  padding: var(--ae-size-1);\n  width: 100%;\n}","controller":"class Controller {\n  init() {\n    locals.document = null\n    locals.showPopup = false\n\n    $on('show', (event) => this.handleShow(event))\n\n  }\n\n  async handleShow(event) {\n    const { element, document, selectedDocument, selectedOptions } = event\n    \n    const hasAbstractDesign = await Aeppic.findOne(`p:${selectedDocument.f.id} f.id:design-form data.name:abstract`)\n    if (!hasAbstractDesign) {\n      console.log('selected: no abstract design')\n      $emit('selected', selectedDocument, selectedOptions)\n      return\n    }\n \n    const referenceIsSomeWhereElse = document.a[1] !== selectedDocument.a[1]\n    console.log('ref preview', event, referenceIsSomeWhereElse)\n\n    if (referenceIsSomeWhereElse) {\n      console.log('referenceIsSomeWhereElse')\n      this.show(event)\n    } else {\n      console.log('selected')\n      $emit('selected', selectedDocument, selectedOptions)\n    }\n  }\n\n  show(event) {\n    console.log('show popup')\n    const { selectedDocument, element } = event\n\n    locals.document = selectedDocument\n\n    this.tippy = Aeppic.Modules.Tippy.default(element, {\n          content: $refs.popup,\n          interactive: true,\n          delay: [50, 100],\n          trigger: 'manual',\n          showOnCreate: true,\n          popperOptions: {\n            modifiers: [\n              {\n                name: 'preventOverflow',\n                options: {\n                  altAxis: true,\n                  xtether: false,\n                },\n              },\n            ],\n          },\n        })\n\n           \n   \n\n    locals.showPopup = true\n\n    // $refs.popup.show({\n    //   target: element\n    // })\n  }\n\n  destroy() {\n    this.tippy?.destroy()\n    this.tippy = null\n  }\n}"},"locks":[],"created":{"at":"2020-06-03T14:51:37+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2022-09-08T13:24:02+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1662643442487,"ct":1621428481257,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"1eb9a22f-6e91-491d-bdc8-e88c6ec87f79","v":"8f67fdef6dc58ea6","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Ref remove button","applies":"","packages":[],"template":"<div class=\"ae-button _xCSS-button\" :class=\"{ 'xae-form-cell__input': params.withoutBorder !== true}\" @click.stop=\"$emit('remove', params.document)\">\n  <ae-icon class=\"fa fa-times _xCSS-button-icon\"></ae-icon>\n</div>\n","css":"._CSS {\n  display: flex;\n}\n\n._CSS-button {\n  /* flex: 1; */\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 3rem;\n  /* height: 3rem; */\n}\n\n._CSS-button:not(:hover) {\n  border:transparent !important;\n}\n\n._CSS-button-icon {\n  width: 1rem;\n  height: 1rem;\n  color: var(--ae-ui-element-icon-color);\n}\n","controller":""},"locks":[],"created":{"at":"2018-06-28T09:24:19+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481257,"ct":1621428481257,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"8ca18be34c5e81c8","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"6ee77ae8-b2f6-4fce-8fbc-788a55d5f7da","v":"7f0d9cf57875da6d","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Ref Remove Confirmation Dialog","applies":"","packages":[],"template":"<!-- NOTE: if all removed references are (now or in future) delete, this is fine.\n           If not, one may want to show a different explation what is going to happen -->\n\n<ae-dialog ref=\"deleteDialog\" title=\"Verweis löschen\" :backdrop-close=\"false\" v-if=\"locals.show\">\n  <div slot=\"header\" slot-scope=\"scope\" class=\"_CSS-dialog__header\">\n    <span style=\"display:flex;align-items:center;\">\n      <ae-design name=\"form-title\" :document=\"locals.document\" style=\"display:inline-block;margin-right:var(--ae-space-2);\"></ae-design>\n      <span>löschen</span>\n    </span>\n    <button class=\"ae-button\" @click=\"scope.close()\">\n      <ae-icon class=\"fa fa-times\"></ae-icon>\n    </button>\n  </div>\n  <div slot=\"body\" class=\"_CSS-dialog__body\">\n    Möchten Sie <b>{{ (locals.document && locals.document.data.name) || 'diesen Verweis' }}</b> löschen?\n    <!-- <p>\n      Der Verweis wird entfernt und das Ziel des Verweises permanent gelöscht.<br>\n      Die Daten bleiben in der Historie erhalten, sind aber nicht durch einen Nutzer wiederherstellbar.\n    </p> -->\n  </div>\n  <div slot=\"commands\" slot-scope=\"scope\" class=\"_CSS-dialog__commands\">\n    <div class=\"ae-button\" @click=\"scope.close()\">Abbrechen</div>\n    <div class=\"ae-button ae-button--primary\" @click=\"controller.deleteDocument()\">Löschen</div>\n  </div>\n</ae-dialog>","css":"._CSS-commands {\n  display: grid;\n  grid-gap: 2px;\n  grid-auto-columns: auto;\n  grid-auto-flow:column;\n}\n\n._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n}\n\n._CSS-dialog__commands {\n  flex: 1;\n  display: flex;\n  justify-content: flex-end;\n}","controller":"class Controller {\n  init() {\n    locals.show = false\n    locals.document = null\n    locals.documentIdentifierOrReference = null\n\n    this.show = async (eventData) => {\n      locals.documentIdentifierOrReference = eventData && eventData.id || eventData\n      locals.document = await Aeppic.get(locals.documentIdentifierOrReference)\n      locals.show = true\n\n      await Aeppic.nextRenderPass()\n      $refs.deleteDialog.show()\n    }\n\n    this.close = () => { \n      $refs.deleteDialog.close()\n      locals.show = false\n    }\n\n    $on('show', this.show)\n    $on('close', this.close)\n  }\n\n  destroy() {\n    $refs.deleteDialog && $refs.deleteDialog.close()\n  }\n\n  async deleteDocument() {\n    $refs.deleteDialog.close()\n\n    $emit('delete', locals.documentIdentifierOrReference)\n    // Aeppic.delete(params.document.id)\n\n    // if (params.removeReferenceFromParentField) {\n    //   const parent = await Aeppic.edit(params.document.p)\n    //   parent.removeReference(params.removeReferenceFromParentField, params.document)\n    //   Aeppic.save(parent)\n    // }\n  }\n}"},"locks":[],"created":{"at":"2018-11-29T10:03:45+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481258,"ct":1621428481258,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"ba97e0fc4674466d","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"36649f27-5869-49e6-9b49-3b5c3b9c795d","v":"55f2007ae23cd2c7","previous":{"v":"4cc66579f66b6450"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Ref Selection Button","applies":"","packages":[],"template":"<template v-if=\"locals.ready\">\n  <div ref=\"popupAnchor\"></div>\n  <button :title=\"params.title\" v-if=\"!params.hideButton\" ref=\"button\" class=\"ae-button _CSS-button\" @click.stop=\"controller.show()\" :disabled=\"params.readonly\">\n    <ae-icon :class=\"[params.icon || 'fa fa-plus']\"></ae-icon>\n    <template v-if=\"params.showSelected && locals.selectedRefId\">\n      <ae-design class=\"_CSS-button__design\" :name=\"params.design || 'title'\" :document-id=\"locals.selectedRefId\"></ae-design>\n    </template>\n  </button>\n\n  <button title=\"Aus vorheriger Auswahl auswählen\" v-if=\"params.selectionHistory\" class=\"ae-button\" @click.stop=\"controller.showHistoricItems($event)\">\n    <ae-icon class=\"fa fa-history\"></ae-icon>\n  </button>\n\n  <ae-layout  layout-id=\"ed2cc4c2-d2a0-4969-8da7-49fb3d539cc9\"\n              ref=\"popup\"\n              :params=\"{ readonly: params.readonly, items: locals.items, hidePath: params.hidePath, searchSize: controller.searchSize, keepOpenAfterSelection: params.keepOpenAfterSelection, showCreate: controller.showCreate, fullPath: controller.showFullPathm, title: params.title, loading: controller.isLoading }\"\n              @filter=\"controller.filterItems($event)\"\n              @selected=\"controller.selected($event)\"\n              @load-more=\"controller.loadMoreItems()\" \n              @create=\"$emit('create-and-link', $event) && $refs.popup.$emit('close')\"\n  ></ae-layout>\n\n  <ae-layout  layout-id=\"ed2cc4c2-d2a0-4969-8da7-49fb3d539cc9\"\n              ref=\"popupHistoric\"\n              :params=\"{ readonly: params.readonly, items: locals.selectionHistory, hidePath: params.hidePath, title: 'Aus vorheriger Auswahl auswählen', nofilter: true }\"\n              @selected=\"controller.selected($event)\"\n  ></ae-layout>\n   \n\n<!-- {{locals.selectionHistory}}  -->\n</template>\n","css":"._CSS {\n  min-width: 0;\n  display: flex;\n}\n\n._CSS-button {\n  min-width: 0;\n  display: flex;\n  align-items: center;\n}\n\n._CSS-button__design {\n  margin-left: var(--ae-size-2);\n}","controller":"class Controller {\n  async init() {\n    this.updateRunning = false\n    this.scheduledUpdate = false\n    locals.selectionHistory = []\n\n    locals.ready = false\n    locals.search = {\n      loading: false,\n    }\n\n    // *   EXAMPLE SETTINGS   * /\n    // ==========================\n    // const settings = {\n    //   filter: {\n    //     base: '',\n    //     targetDocument: params.document,\n    //     queryLimitCommand: '',\n    //     ancestorSearchLimit: '',\n    //     ancestorForm: '',\n    //     ancestorId: '',\n    //     parentId: '',\n    //     formIds: '',\n    //   },\n    //   search: {\n    //     size: 20,\n    //     sort: {\n    //       field: 'data.name',\n    //       descending: false\n    //     },\n    //     searchAllFields: false\n    //   },\n    // }\n\n    if (!params.settings) {\n      throw new Error('Provide params.settings')\n    }\n\n    console.debug(params.settings)\n \n    this._lastRawFilter = ''\n\n    locals.selectedRefId = null\n    locals.items = []\n\n    $on('show', (clickEvent) => this.show(clickEvent))\n\n    this.SETTINGS = await this._sanitizeSettingsParam()\n    locals.ready = true\n\n    this._updateSelectionHistory()\n  }\n\n  async _sanitizeSettingsParam() {\n    const settings = {\n      ... {filter: {}, search: {}},\n      ...params.settings,\n    }\n\n    if (!settings.filter.targetDocument) {\n      console.warn('Provide settings.filter.targetDocument. FALLBACK to pageDocumentId')\n      settings.filter.targetDocument = await Aeppic.get(Aeppic.Root.params.pageDocumentId)\n    }\n \n    return settings\n  } \n\n\n  async show(clickEvent) {\n    $refs.popupHistoric && $refs.popupHistoric.$emit('close')\n\n    locals.items = []\n\n    await this.filterItems()\n \n    await Aeppic.nextRenderPass()\n    \n    const fakeEvent = {\n      target: $refs.popupAnchor\n    }\n \n    $refs.popup.$emit('show', clickEvent || fakeEvent)\n  }\n\n  showHistoricItems(clickEvent) {\n    $refs.popup && $refs.popup.$emit('close')\n\n    const fakeEvent = {\n      target: $refs.popupAnchor\n    }\n\n    $refs.popupHistoric.$emit('show', $refs.popupAnchor ? fakeEvent : clickEvent)\n  }\n\n  async filterItems(rawFilter = '') {\n\n    if (this.updateRunning || this.scheduledUpdate) {\n      if (this.scheduledUpdate) {\n        clearTimeout(this.scheduledUpdate)\n        this.scheduledUpdate = null\n      }\n\n      if (this.updateRunning) {\n        this.scheduledUpdate = Aeppic.setTimeout(() => {\n          this.scheduledUpdate = null\n\n          this.filterItems(rawFilter)\n        }, 2000)\n      }\n\n      return\n    }\n\n    this.updateRunning = true\n    this._lastRawFilter = rawFilter \n\n    const searchParts = [await this._getQueryStringOfSettings()]\n\n    if (rawFilter !== '') {\n      const filter = rawFilter.trim()\n\n      if (filter.indexOf(':') === -1) {\n        filter.split(/\\s/).map(part => searchParts.push(`*${part}*`) )\n      } else {\n        searchParts.push(filter)\n      }\n    } \n\n    const fullSearch = searchParts.filter(p => !!p?.trim()).join(' AND ')\n    params.debug && console.log(fullSearch, 'with size', this.searchSize)\n\n    const searchSettings = this.SETTINGS.search || {}\n\n    const items = []\n    try {\n      items.push(...await Aeppic.find(fullSearch, {\n        size: this.searchSize,\n        sort: searchSettings.sort || null,\n        searchAllFields: searchSettings.searchAllFields || null,\n      }))\n    } catch (e) {\n      console.error(e)\n    }\n\n    if (!this.scheduledUpdate) {\n      locals.items = items\n    }\n\n\n    this.updateRunning = false\n  }\n\n  get isLoading() {\n    return !!this.updateRunning || !!this.scheduledUpdate\n  } \n\n  async _getQueryStringOfSettings() {\n    const searchParts = []\n\n    const queryLimiting = await this._getQueryLimit()\n\n    params.debug && console.log('queryLimiting', queryLimiting)\n\n    if (queryLimiting) {\n      searchParts.push(queryLimiting)\n    }\n\n    if (this.SETTINGS.filter.base) {\n      searchParts.push(`(${this.SETTINGS.filter.base})`)\n    }\n\n    return searchParts.join(' AND ')\n  }\n\n  async _getQueryLimit() {\n    const parts = []\n\n    const filterSettings =  this.SETTINGS.filter\n\n    if (filterSettings.queryLimitCommand) {\n      const commandResult = await Aeppic.Commands.execute(filterSettings.queryLimitCommand, filterSettings.targetDocument, {\n        Account: Aeppic.Account,\n        ProfilePage: Aeppic.ProfilePage\n      }, {})\n\n      if (commandResult.ok && typeof commandResult.value === 'string') {\n        if (commandResult.value) {\n          parts.push(commandResult.value)\n        }\n      } else {\n        console.error('queryLimitCommand error', commandResult)\n      }\n    }\n\n    const ancestorSearchLimit = filterSettings.ancestorSearchLimit != null && filterSettings.ancestorSearchLimit !== ''  ? Number(filterSettings.ancestorSearchLimit) : null\n\n    if (ancestorSearchLimit !== null && !Number.isNaN(ancestorSearchLimit)) {\n      if (ancestorSearchLimit === 0) {\n        parts.push(`a:${filterSettings.targetDocument.id}`)\n      } else if (filterSettings.targetDocument.a.length < ancestorSearchLimit) {\n        console.error('ancestorSearchLimit is out of bounds: limit is greater than filterSettings.targetDocument ancestors')\n      } else {\n        params.debug && console.log(filterSettings.targetDocument.a, filterSettings.targetDocument.p)\n        parts.push(`a:${filterSettings.targetDocument.a[filterSettings.targetDocument.a.length - ancestorSearchLimit]}`)\n      }\n    }\n\n    const ancestorForm = filterSettings.ancestorForm // || 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df' // fallback to 'Unternehmen'\n\n    if (ancestorForm) {\n      const ancestorIndex = filterSettings.targetDocument['a_forms'].findIndex(formId => formId === ancestorForm)\n\n      if (ancestorIndex === -1) {\n        console.error(`ancestorForm is out of bounds: ${ancestorForm} is not in a_forms`)\n      } else {\n        const ancestorId = filterSettings.targetDocument.a[ancestorIndex]\n\n        parts.push(`a:${ancestorId}`)\n      }\n    }\n\n    if (filterSettings.ancestorId) {\n      parts.push(`a:${filterSettings.ancestorId}`)\n    }\n\n    if (filterSettings.parentId) {\n      parts.push(`p:${filterSettings.parentId}`)\n    }\n\n    if (filterSettings.formIds) {\n      const forms = filterSettings.formIds.split(',').filter(id => !!id).map(id => `f.id:${id}`)\n\n      parts.push(`(${forms.join(' OR ')})`)\n    }\n\n    return parts.join(' AND ')\n  }\n\n  async loadMoreItems() {\n    this.overwrittenSearchSize = this.overwrittenSearchSize ? this.overwrittenSearchSize + 100 : 100\n\n    await this.filterItems(this._lastRawFilter)\n  }\n\n  get showCreate() {\n    // TODO: maybe this layout should handle creation too? Currently it just does an $emit('create-and-link')\n    return params.showCreate\n  }\n\n  get showFullPath() {\n    if (typeof params.showFullPath === 'boolean') {\n      return params.showFullPath\n    }\n\n    return Aeppic.Account && Aeppic.Account.data.isAdmin\n  }\n\n   get searchSize() {\n    if (this.overwrittenSearchSize) {\n      return this.overwrittenSearchSize\n    }\n\n    if (this.SETTINGS.search.size) {\n      const paramAsNumber = Number(this.SETTINGS.search.size)\n      if (!Number.isNaN(paramAsNumber)) {\n        return paramAsNumber\n      }\n    }\n\n    return 10\n  }\n\n  async _updateSelectionHistory(optionalSelectedRefId) {\n    const queryString = await this._getQueryStringOfSettings()\n    const key = `bp-ref-selection_last-picks_${queryString}`\n\n    const current = Aeppic.LocalStorage.getValue(key) || []\n\n    if (optionalSelectedRefId && !current.includes(optionalSelectedRefId)) {\n      current.unshift(optionalSelectedRefId)\n      current.length = params.selectionHistorySize || 5\n\n      Aeppic.LocalStorage.setValue(key, current)\n    }\n  \n    locals.selectionHistory = current\n  }\n  \n  selected(event) {\n    params.debug && console.log('ref-sel-but selected', event)\n\n    if (!event) {\n      return\n    }\n\n    if (typeof event === 'object') {\n      locals.selectedRefId = event.id\n    } else {\n      locals.selectedRefId = event\n    }\n\n    if (params.selectionHistory) {\n      this._updateSelectionHistory(locals.selectedRefId)\n    }\n\n    $emit('selected', event)\n  }\n}"},"locks":[],"created":{"at":"2020-05-08T09:00:45+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2022-09-08T12:25:46+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1662639946063,"ct":1621428481258,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","594e6b26-7310-4d00-aad9-2a577ccab542"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"7bbea473-8b07-47de-950a-e93c996adaa2","text":"Anlagen DrillDownWizard","v":"5cd67f424100b375"},"created":{"at":"2026-04-16T07:56:40+00:00","backedBy":"","by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":""},"ct":1776326200324,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    $on('show', (clickEvent) => this.show(clickEvent))\n  }\n\n  openPopup() {\n    const eventContext = { target: $refs.popupAnchor };\n    \n    $refs.popup.$emit('show', eventContext);\n  }\n\n  async show(clickEvent) {\n    const fakeEvent = {\n      target: $refs.popupAnchor\n    }\n \n    $refs.popup.toggle(fakeEvent)\n  }\n}","css":"","name":"ref-add anlagen wizard","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<div>\n  <div ref=\"popupAnchor\"></div>\n\n  <!-- <button @click=\"controller.openPopup()\">Open Popup</button> -->\n  <ae-popup\n    ref=\"popup\"\n    xplacement=\"bottom\"\n    :max-width=\"800\"\n  >\n    <template #default=\"scope\">\n      <div class=\"p-2 overflow-y-auto overflow-x-auto min-h-96 min-w-64 max-h-[70vh]\">\n        <ae-layout\n          layout-id=\"7bbea473-8b07-47de-950a-e93c996adaa2\"\n          :param-document=\"params.document\"\n          @selected=\"$emit('selected', $event)\"\n        ></ae-layout>\n      </div>\n    </template>\n  </ae-popup>\n</div>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"a4c7f518-b5c3-498e-ac49-6822dbeec0dc","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-05-29T10:33:18+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"7bbea473-8b07-47de-950a-e93c996adaa2","text":"Anlagen DrillDownWizard","v":"5cd67f424100b375"},"p":"594e6b26-7310-4d00-aad9-2a577ccab542","previous":{"v":"17f57993838d5834"},"stamps":[],"t":1780050798967,"v":"7797fe12a8420bf5"},{"id":"529e8b83-b401-420d-b04f-a376f50efad3","v":"d6a685f724b06742","previous":{"v":"5d227ceed8f3e429"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"ref-card (fallback for deleted reference)","applies":"","packages":[],"template":"<div class=\"_CSS-card\" :class=\"{ '_CSS-card--selected': params.isSelected, '_CSS-card--with-border': params.noBorder !== true }\">\n  <div class=\"_CSS-card-intro\">\n    <span v-if=\"params.document.text\">Verweis \"{{params.document.text}}\" gelöscht</span>\n    <span v-else>Verweis gelöscht</span>\n  </div>\n  <button class=\"ae-button\" :disabled=\"params.readonly || params.disableRemove\" @click.stop=\"$emit('remove', params.document.id)\">\n    <ae-icon class=\"fa fa-times\"></ae-icon>\n  </button>\n</div>","css":"._CSS {\n  --padding: 0.25rem 1rem 0.2rem 0.5rem;\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-card {\n  display: flex;\n\n  height: 44px;\n\n  background-color: var(--ae-ui-background);\n  border-radius: var(--ae-border-radius);\n\n  border-style: solid;\n  border-width: 1px 1px 1px 3px;\n  border-color: transparent transparent transparent var(--ae-ui-background);\n\n  flex: 1;\n  margin:0;\n  flex-flow: row;\n}\n\n._CSS-card-intro {\n  flex: 1;\n  display:flex;\n  flex-direction:row;\n  align-items: center;\n\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n\n  font-style: italic;\n  color: var(--ae-background-700);\n}\n\n._CSS-card-intro > * {\n  margin: 0 1ch;\n}\n\n._CSS-card--with-border {\n  border: var(--ae-border-width) solid var(--ae-border-color);\n}\n\n._CSS-card--selected {\n  border-color: var(--ae-primary-900) !important;\n}\n","controller":""},"locks":[],"created":{"at":"2019-09-04T13:15:02+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2022-02-11T14:52:43+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1644591163376,"ct":1621428481258,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"36614477-3d62-4545-bcc6-cba534a6331d","v":"55cdd0deaf6b3697","previous":{"v":"20ed03e6212a82bd"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Reload Notification Button","applies":"","packages":[],"template":"<button \n  title=\"Bizpin konnte ggf. nicht alle Änderungen laden. Bitte laden Sie bei nächster Möglichkeit die Seite neu.\"\n  class=\"ae-button\"\n  @click=\"$refs.popup.show($event)\"\n  v-if=\"locals.reloadNoficationTriggered\"\n  >\n    <ae-icon class=\"fad fa-exclamation-triangle\" style=\"color: var(--ae-theme-warning, red);\"></ae-icon>\n</button>\n\n\n<ae-popup ref=\"popup\" base-attachment=\"top right\" popup-attachment=\"center center\" :close-delay=\"200\">\n  <div slot=\"popup\" class=\"_CSS-menu\" slot-scope=\"scope\">    \n    <p>Bizpin konnte ggf. nicht alle Änderungen laden.</p>\n    <p>Bitte laden Sie bei nächster Möglichkeit Bizpin neu.</p>\n\n    <button class=\"ae-button ae-button--secondary\" @click.stop=\"Aeppic.reload()\">\n      Jetzt Bizpin neuladen\n    </button>\n  </div>\n</ae-popup>","css":"._CSS-action-button {\n  transition: scale 0.2s ease-in-out;\n  /* margin: 0 16px; */\n  \n}\n\n._CSS-action-button {\n  display:flex;\n  align-items: center;\n}\n\n._CSS-action-button._CSS-action-button--active {\n  color: var(--ae-primary);\n}\n\n._CSS-action-button:hover {\n  transform:scale(1.1);\n}\n\n\n._CSS-menu {\n  max-width: 10rem;\n  background: var(--ae-ui-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  font-size: var(--ae-size-3);\n  margin:0;\n  padding:0 0.5em;\n  display:flex;\n  flex-direction: column;\n  align-items: stretch;\n}\n","controller":"class Controller {\n  async init() {\n    this.missedChangesTimeoutId = null\n\n    this._setupReloadNotification()\n  }\n\n  _setupReloadNotification() {\n      Aeppic.on('server:changed', () => {\n        console.log('changes:server-changed')\n        this._showReloadNotification()\n      })\n\n      this.missedChangesTimeoutId = null\n\n      Aeppic.on('changes:missed', () => {\n        console.log('changes:missed')\n        if (this.missedChangesTimeoutId) {\n          clearTimeout(this.missedChangesTimeoutId)\n        }\n\n        this.missedChangesTimeoutId = setTimeout(() => {\n          this._showReloadNotification()\n        }, 5000)\n      })\n\n      Aeppic.on('changes:missed-found', () => {\n        console.log('changes:missed-found')\n        if (this.missedChangesTimeoutId) {\n          clearTimeout(this.missedChangesTimeoutId)\n        }\n      })\n  }\n\n  _showReloadNotification() {\n    console.log('showReloadNotifation')\n      locals.reloadNoficationTriggered = true\n  }\n\n}\n  "},"locks":[],"created":{"at":"2018-09-03T09:08:22+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2022-03-22T08:56:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1647939392167,"ct":1647939220262,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"5be16a98-bdc2-4587-8f72-57cd43ca0292","v":"initial","p":"5d6a08db-bff9-4eb2-8ed5-2125babe0df6","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"Report View","applies":"","packages":[],"template":"<h1>Berichte</h1>\n\n<div v-if=\"locals.report\">\n  <ae-design class=\"_CSS-header\" name=\"title\" :document=\"locals.report\"></ae-design>\n  \n  <!-- <button class=\"ae-button ae-button--secondary\"\n          @click.stop=\"locals.readonly = !locals.readonly\"\n  >\n    <ae-icon class=\"fa fa-edit\"></ae-icon>\n  </button> -->\n\n  <button class=\"ae-button ae-button--primary\"\n          @click.stop=\"controller.updateReport()\"\n  >\n    <ae-icon class=\"fa fa-sync\"></ae-icon> Erneuern (Vorschau)\n  </button>\n  <button v-if=\"locals.readonly\"\n          class=\"ae-button ae-button--secondary\"\n          @click.stop=\"controller.editReport()\"\n  >\n    <ae-icon class=\"fa fa-edit\"></ae-icon> Bearbeiten\n  </button>\n  <button v-else\n          :disabled=\"!locals.report.hasRevisions\"\n          class=\"ae-button ae-button--primary\"\n          @click.stop=\"controller.saveReport()\"\n  >\n    <ae-icon class=\"fa fa-save\"></ae-icon> Speichern\n  </button>\n  <button v-if=\"!locals.readonly\"\n          class=\"ae-button ae-button--secondary\"\n          @click.stop=\"controller.editReport()\"\n  >\n    <ae-icon class=\"fa fa-times\"></ae-icon> Abbrechen\n  </button>\n\n  <ae-form :document=\"locals.report\" @data-changed=\"Aeppic.commit(locals.report)\" :readonly=\"locals.readonly\"></ae-form>\n\n  <!-- <ae-list :documents=\"locals.report.data.items\"\n            :list-id=\"locals.readonly ? 'simple-list' : '062ef57e-6140-4c55-951e-341a226e5457'\"\n            param-design=\"search-card\"\n            :param-design-params=\"{ readonly: locals.readonly, showRemove: true }\"\n  ></ae-list> -->\n</div>\n\n","css":"._CSS-header {\n  font-size: var(--ae-font-size-7);\n}","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Bericht: '49061f6e-0107-4ebc-9ee2-75089b0af3f6'\n    }\n    this._updateRunning = false\n\n    locals.report = null\n    locals.readonly = true\n\n    locals.report = await this.getReport()\n\n    if (!locals.report) {\n      locals.report = await this.createReport()\n      await this.updateReport()\n    }\n  }\n\n  async getReport() {\n    const report = await Aeppic.findOne(`p:${params.document.id} f.id:${this.FORMS.Bericht}`)\n    \n    if (report) {\n      return Aeppic.edit(report)\n    }\n\n    return report\n  }\n\n  async createReport() {\n    const report = await Aeppic.new(this.FORMS.Bericht, params.document.id)\n    Aeppic.save(report)\n\n    return report\n  }\n  \n  async updateReport() {\n    if (this._updateRunning) {\n      return\n    }\n\n    this._updateRunning = true\n    const newItems = await this.fetchItems()\n\n    locals.report.data.name = `Bericht vom ${Aeppic.DateTime.local().toLocaleString(Aeppic.DateTime.DATETIME_SHORT)}`\n\n    locals.report.data.items = newItems\n\n    Aeppic.commit(locals.report)\n\n    locals.readonly = false\n\n    this._updateRunning = false\n  }\n\n  async fetchItems() {\n    if (!params.options) {\n      throw new Error('missing params.options')\n    }\n\n    const { commandId, formId } = params.options\n    \n    if (!commandId || !formId) {\n      throw new Error('insuficient options')\n    }\n\n\n    const commandResult = await Aeppic.Commands.execute(commandId, params.document.id, {\n      formId: params.options.formId,\n      queryString: params.options.queryString\n    })\n    \n    if (commandResult.ok) {\n      return commandResult.value\n    }\n\n    console.error('Error executing command', commandResult)\n    return []\n  }\n\n  async saveReport() {\n    locals.readonly = true\n    Aeppic.save(locals.report)\n  }\n\n  async editReport() {\n    if (locals.readonly) {\n      locals.readonly = false\n      return\n    }\n\n    locals.readonly = true\n    locals.report = await this.getReport()\n  }\n}\n\n"},"locks":[],"created":{"at":"2020-05-08T08:51:43+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:51:43+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927903143,"ct":1588927903142,"a_depth":3,"a":["apps","7f785d94-22cf-44fd-9d57-5221168ade6b","5d6a08db-bff9-4eb2-8ed5-2125babe0df6"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"3b0d1c7e-52dc-409e-a164-56d03640dc4c","v":"6fad8a3d8240a43d","previous":{"v":"db393de91507dc41"},"p":"672123ff-a0df-498a-ba54-4a7c13ea2fb9","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Report: All Documents","applies":"","packages":[],"template":"<ae-list  list-id=\"74b4157e-8e64-47a0-b4b8-8a6084d90f40\"\n          query-id=\"d20d231e-e660-46c7-82df-18d50942bd09\"\n          sort=\"data.name\"\n          :root-document-id=\"params.pageDocument.id\"\n          :param-columns=\"locals.displayTableColumns\"\n          :param-headers=\"locals.displayTableHeaders\"\n          :param-designs=\"locals.displayTableDesigns\"\n          :param-initial-sort-by=\"locals.sortBy\"\n          :param-initial-sort-asc=\"locals.sortAsc\"\n          :param-row-height=\"locals.rowHeight\"\n></ae-list>\n","css":"","controller":"async init() {\n  locals.displayTableColumns = ',data.name,created.at,modified.at',\n  locals.displayTableDesigns = 'icon,,table:date,table:date',\n  locals.displayTableHeaders = 'Dateityp,Dateiname,Erstellt am,Geändert am'\n}  \n\n"},"locks":[],"created":{"at":"2019-01-23T12:28:42+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2022-09-23T13:01:59+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1663938119005,"ct":1548246522943,"a_depth":3,"a":["apps","3d43a3f5-fea4-488d-9fc1-9dee5e694623","672123ff-a0df-498a-ba54-4a7c13ea2fb9"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"f899a44b-3048-47e2-830c-8995f1e5b8bc","v":"3533c29a7eb95071","cloneOf":{"id":"3b0d1c7e-52dc-409e-a164-56d03640dc4c","v":"db393de91507dc41","text":"Report: All Documents"},"originalCloneOf":{"id":"3b0d1c7e-52dc-409e-a164-56d03640dc4c","v":"db393de91507dc41","text":"Report: All Documents"},"previous":{"v":"56be6ad431516010"},"p":"8fb938a6-72d4-4582-9faa-0595ce1dcced","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Report: All Processes","applies":"","packages":[],"template":"<ae-list  list-id=\"74b4157e-8e64-47a0-b4b8-8a6084d90f40\"\n          query-id=\"408b9dd7-06e6-4e52-ab9a-6d0739a65b5d\"\n          sort=\"data.name\"\n          :root-document-id=\"params.pageDocumentId\"\n          :param-columns=\"locals.displayTableColumns\"\n          :param-headers=\"locals.displayTableHeaders\"\n          :param-designs=\"locals.displayTableDesigns\"\n          :param-initial-sort-by=\"locals.sortBy\"\n          :param-initial-sort-asc=\"locals.sortAsc\"\n          :param-row-height=\"locals.rowHeight\"\n></ae-list>","css":"","controller":"async init() {\n  locals.displayTableColumns = 'data.name,created.at,modified.at',\n  locals.displayTableDesigns = ',table:date,table:date',\n  locals.displayTableHeaders = ',Erstellt am,Geändert am'\n}"},"locks":[],"created":{"at":"2019-01-24T09:27:17+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2019-01-24T09:28:53+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1548322133167,"ct":1548322037811,"a_depth":3,"a":["apps","bd4df555-2c56-4a5f-82f0-7e4745372f51","8fb938a6-72d4-4582-9faa-0595ce1dcced"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"5cc2dfa4-9dbd-4b7a-a624-9b137eb22093","v":"4ed782d7856b5a6a","previous":{"v":"d46a4038a6542f73"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Reset Password Layout","applies":"","packages":[],"template":"<div class=\"_CSS-container\">\n  <div class=\"_CSS-backdrop\">\n  </div>\n\n  <div class=\"_CSS-dialog ae-stacking-context\">\n\n    <div class=\"_CSS-dialog__content\">\n      <!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->\n      <svg class=\"_CSS-logo\" version=\"1.1\" id=\"Ebene_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n        viewBox=\"0 0 2795.3 1401.6\" style=\"enable-background:new 0 0 2795.3 1401.6;\" xml:space=\"preserve\">\n        <g>\n        <g>\n          <path class=\"st2\" d=\"M992.1,561.1h194.6c0,0-32.7,41.8-33.3,42.5c-14.8,19.5-11.1,47.3,8.4,62.2c19.5,14.8,47.3,11.1,62.2-8.4\n            c0.5-0.7,89.1-113.8,89.1-113.8c22.9-28.5,1.8-71.3-35.3-71.3H992.1c-24.5,0-44.4,19.9-44.4,44.4\n            C947.7,541.2,967.6,561.1,992.1,561.1\"/>\n          <path class=\"st3\" d=\"M1277.8,841.1h-194.6c0,0,32.7-41.8,33.3-42.5c14.8-19.5,11.1-47.3-8.4-62.2c-19.5-14.8-47.3-11.1-62.2,8.4\n            c-0.5,0.7-89.1,113.8-89.1,113.8c-20.5,29-1.6,71.3,35.3,71.3h285.7c24.5,0,44.4-19.9,44.4-44.4\n            C1322.1,860.9,1302.3,841.1,1277.8,841.1\"/>\n        </g>\n        <g>\n          <path class=\"st3\" d=\"M429.8,554.5c-25.8,0-49.5,6.4-70.4,19c-20.9,12.7-37.5,30.2-49.4,52.1c-11.9,22-18,47.2-18,74.7\n            c0,27.6,6.1,52.9,18,75.2c11.9,22.2,28.5,39.9,49.4,52.5c20.9,12.6,44.6,19,70.4,19s49.5-6.4,70.4-19\n            c20.9-12.7,37.7-30.3,49.8-52.6c12.2-22.3,18.4-47.6,18.4-75.1c0-27.5-6.2-52.6-18.3-74.7c-12.2-22-28.9-39.5-49.9-52.2\n            C479.3,560.9,455.6,554.5,429.8,554.5 M429.8,932.5c-42.7,0-81.8-10.3-116.5-30.5c-34.7-20.2-62.5-48.3-82.7-83.5\n            c-20.2-35.2-30.5-74.9-30.5-118.1V329.7c0-14.1,4.6-25.7,13.6-34.5c9-8.7,20.4-13.1,33.9-13.1c14.1,0,25.6,4.4,34.4,13.2\n            c8.7,8.8,13.2,20.3,13.2,34.4V533c17.3-18.2,37.5-32.9,60.4-43.8c27.8-13.3,58.2-20.1,90.4-20.1c40,0,76.8,10.1,109.3,30.2\n            c32.5,20,58.4,48,77,83.2c18.5,35.2,27.9,74.8,27.9,117.9c0,43.1-10.1,82.9-30.1,118c-20,35.2-47.9,63.3-83.1,83.6\n            C511.9,922.2,472.4,932.5,429.8,932.5\"/>\n          <path class=\"st3\" d=\"M802.2,929.2c-13.6,0-25-4.6-34-13.6c-9-9-13.6-20.4-13.6-34V519.9c0-14.1,4.6-25.7,13.7-34.4\n            c9-8.7,20.4-13.1,33.9-13.1c14.1,0,25.6,4.4,34.4,13.2c8.8,8.7,13.2,20.3,13.2,34.4v361.8c0,13.5-4.4,24.9-13.1,33.9\n            C827.9,924.6,816.3,929.2,802.2,929.2\"/>\n          <path class=\"st3\" d=\"M1623.8,554.5c-25.8,0-49.5,6.4-70.4,19c-20.9,12.7-37.5,30.3-49.4,52.5c-11.9,22.3-18,47.6-18,75.2\n            s6.1,52.7,18,74.7c11.9,22,28.5,39.5,49.4,52.2c20.9,12.6,44.6,19,70.4,19c25.9,0,49.6-6.4,70.4-19c20.9-12.7,37.7-30.2,49.8-52.2\n            c12.2-22,18.3-47.2,18.3-74.7s-6.2-52.8-18.4-75.1c-12.2-22.2-28.9-39.9-49.8-52.6C1673.4,560.9,1649.7,554.5,1623.8,554.5\n            M1441.8,1119.4c-13.5,0-24.9-4.4-33.9-13.1c-9.1-8.8-13.7-20.3-13.7-34.5V701.2c0-43.2,10.2-82.9,30.5-118.1\n            c20.2-35.2,48.1-63.3,82.7-83.5c34.7-20.3,73.8-30.5,116.5-30.5c42.6,0,82.1,10.2,117.3,30.5c35.2,20.3,63.2,48.4,83.1,83.6\n            c20,35.2,30.1,74.9,30.1,118c0,43.1-9.4,82.7-27.9,117.9c-18.6,35.2-44.5,63.2-77,83.2c-32.5,20-69.3,30.2-109.3,30.2\n            c-32.2,0-62.7-6.8-90.4-20.1c-22.8-11-43.1-25.7-60.4-43.8v203.3c0,14.1-4.4,25.6-13.2,34.4\n            C1467.4,1115,1455.8,1119.4,1441.8,1119.4\"/>\n          <path class=\"st3\" d=\"M1997.1,929.2c-13.6,0-25-4.6-34-13.6c-9-9-13.6-20.4-13.6-34V519.9c0-14.1,4.6-25.7,13.7-34.4\n            c9-8.7,20.4-13.1,33.9-13.1c14.1,0,25.6,4.4,34.4,13.2c8.8,8.7,13.2,20.3,13.2,34.4v361.8c0,13.5-4.4,24.9-13.1,33.9\n            C2022.8,924.6,2011.3,929.2,1997.1,929.2\"/>\n          <path class=\"st3\" d=\"M2547.6,930c-13.6,0-25-4.6-34-13.6c-9-9-13.6-20.4-13.6-34v-200c0-42-11.3-74-33.5-95.2\n            c-22.3-21.3-52.5-32-89.7-32c-21.7,0-41.7,4.4-59.5,13.2c-17.7,8.7-31.6,20.6-41.5,35.3c-9.8,14.6-14.8,31.3-14.8,49.4v229.2\n            c0,13.5-4.4,24.9-13.1,33.9c-8.8,9.1-20.3,13.7-34.5,13.7c-13.5,0-25-4.6-34-13.6c-9-9-13.6-20.4-13.6-34V519.9\n            c0-14.1,4.6-25.7,13.7-34.5c9-8.7,20.4-13.1,33.9-13.1c14.1,0,25.6,4.4,34.4,13.2c7.7,7.7,12.1,17.7,13,29.6\n            c15.6-13.4,33.6-24.2,53.6-32.1c24.5-9.7,50.9-14.7,78.7-14.7c38.2,0,73.1,8.5,103.7,25.1v0c30.7,16.7,55.1,41.5,72.4,73.6\n            c17.2,31.9,25.9,70.8,25.9,115.5v200c0,13.5-4.6,25-13.6,34C2572.5,925.5,2561.1,930,2547.6,930\"/>\n        </g>\n        </g>\n      </svg>\n\n\n      <div class=\"_CSS-form\" :class=\"{ '_CSS-form--disabled': controller.successful }\">\n\n        <template v-if=\"!locals.hasPrefilledToken\">\n          <label for=\"_CSS-token\">Anmeldecode</label>\n          <input :disabled=\"controller.successful\" id=\"_CSS-token\" type=\"text\" v-model=\"locals.token\">\n        </template>\n\n        <p>\n          Passwort-Anforderungen\n          <ul>\n            <li>Mindestens 8 Zeichen</li>\n            <li>Mindestens 1 Zahl</li>\n            <li>Mindestens 1 Sonderzeichen</li>\n            <li>Mindestens 1 Großbuchstabe</li>\n          </ul>\n        </p>\n\n        <label style=\"margin-top: 2em;\" for=\"_CSS-password\">Passwort</label>\n        <input :disabled=\"controller.successful\" id=\"_CSS-password\" type=\"password\" v-model=\"locals.password\" minlength=\"6\">\n\n        <label for=\"_CSS-passwordConfirmation\">Passwort Bestätigung</label>\n        <input :disabled=\"controller.successful\" id=\"_CSS-passwordConfirmation\" type=\"password\" v-model=\"locals.passwordConfirmation\">\n\n        <button style=\"margin-top: 2em;\" v-if=\"!controller.successful\" class=\"ae-button ae-button--primary\" @click=\"controller.resetPassword()\">Passwort ändern</button>\n      </div>\n    \n      <ae-layout class=\"_CSS-spinner\" layout-id=\"fefa8352-0e9a-4ba8-8349-c9402ac8aefa\" v-if=\"locals.running && !locals.executed\"></ae-layout>\n      <div v-if=\"locals.executed && !locals.running\">\n        <div v-if=\"controller.successful\" class=\"_CSS-success\">\n          <div>\n            <ae-icon class=\"fa fa-check\"></ae-icon>\n            <span>Passwort erfolgreich geändert.</span>\n          </div>\n          <a href=\"/\">\n          <button class=\"ae-button ae-button--primary\">Zum Login</button>\n          </a>\n\n        </div>\n        <div v-else class=\"_CSS-error\">\n          \n          <div v-for=\"error of locals.errors\">\n            <ae-icon class=\"fa fa-exclamation-triangle\" style=\"margin-right:1ch;\"></ae-icon>{{ Aeppic.translate(error) }}\n          </div>\n        </div>\n      </div>\n      \n      \n    </div>\n  </div>\n\n</div>\n","css":"._CSS-container {\n  height: 100%;\n  width: 100%;\n  position: relative;\n  padding: 0 10%;\n  display: flex;\n  justify-content: flex-start;\n  align-items: center;\n}\n\n._CSS-dialog {\n  width: 0;\n  min-width: 500px;\n}\n\n._CSS-dialog__content {\n  box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.2);\n  position: relative;\n  background: white;\n  padding: 15px;\n}\n\n._CSS-form {\n  position: relative;\n  display: flex;\n  flex-flow: column;\n}\n/* ._CSS-form--disabled:after {\n  position: absolute;\n  content: '';\n  top:0;\n  bottom:0;\n  left:0;\n  right:0;\n} */\n\n._CSS-spinner {\n  width: 30px;\n  height: 30px;\n}\n\n._CSS-success {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-logo .st0{fill:#FFFFFF;}\n._CSS-logo .st1{fill:#E73923;}\n._CSS-logo .st2{fill:#63B8E8;}\n._CSS-logo .st3{fill:#2E3D80;}\n._CSS-logo .st4{fill:#B56EAB;}\n._CSS-logo .st5{fill:#C2D35B;}\n\n._CSS-logo {\n  vertical-align: middle;\n  /* filter: drop-shadow(1px 1px 2px rgba(0,0,0,0.2)); */\n}\n\n._CSS-backdrop::before {\n  content:'';\n  position:absolute;\n  left:0;right:0;top:0;bottom:0;\n  background: url('https://source.unsplash.com/1600x1000/daily?dogs,cats');\n  background-size:cover;\n  background-position:left center;\n}\n\n._CSS-backdrop {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n\n._CSS-backdrop::after {\n  content:'';\n  opacity:0.5;\n  position:absolute;\n  left:0;right:0;top:0;bottom:0;\n  background-color: #2d9cf4;\n  background-image: radial-gradient(ellipse farthest-corner at center center, rgb(66, 165, 245) 0%, rgb(33, 150, 243) 75.6%, rgb(33, 150, 243) 100%);\n  background-image: -ms-radial-gradient(center center, ellipse farthest-corner, rgb(66, 165, 245) 0%, rgb(33, 150, 243) 75.6%, rgb(33, 150, 243) 100%);\n}\n\n._CSS-error {\n  padding: var(--ae-space-4) 0;\n  color: var(--ae-accent-red);\n}","controller":"class Controller {\n  async init() {\n    locals.hasPrefilledToken = (params.queryParams.token)\n    locals.token = params.queryParams.token || ''\n    locals.password = ''\n    locals.passwordConfirmation = ''\n\n    locals.errors = []\n    locals.running = false\n    locals.executed = false\n  }\n\n  get successful() {\n    return locals.errors.length === 0 && locals.executed && !locals.running\n  }\n\n  async resetPassword() {\n    locals.running = true\n    locals.executed = true\n\n    if (locals.password != locals.passwordConfirmation) {\n      locals.errors = ['translate:param-password-confirmation-failed']\n      locals.running = false\n      return\n    }\n\n    // TODO: Commands.execute is not working for anonymous accounts\n    // const result = await Aeppic.Commands.execute('5b8a9204-29f0-4ad1-9bbb-8c61b05249bb', Aeppic.Root.layout.id, {\n    //   token: locals.token,\n    //   password: locals.password\n    // })\n    const httpRequest = await Aeppic.fetch('api/docs/root/_executeCommand?commandId=5b8a9204-29f0-4ad1-9bbb-8c61b05249bb&apiToken=XtEnNKBzAx21oecVJB9qrxdG', {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json;charset=utf-8'\n      },\n      body: JSON.stringify({\n        parameters: {\n          token: locals.token,\n          password: locals.password\n        }\n      })\n    })\n\n\n    if (httpRequest.ok) {\n      const result = await httpRequest.json()\n\n      if (result.value.ok) {\n        locals.errors = []\n      } else {\n        locals.errors = [result.value.message || 'translate:invalid-token|Ungültiger Token']\n      }\n\n    } else {\n      locals.errors = ['translate:error:execution']\n    }\n\n    locals.running = false\n  }\n}"},"locks":[],"created":{"at":"2018-12-10T13:14:02+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-05-28T13:28:04+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1622208484263,"ct":1544447642606,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"242a2262-352e-4df1-a792-253ce8b11f22","v":"98337eeea96ab71f","previous":{"v":"7b0d374b71618def"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Reset Password Root Layout","applies":"","packages":[],"template":"<!-- NOTE: hide language switch but load translations -->\n<ae-layout layout-id=\"7a66c0bd-aaa4-406d-80da-0b0d5a6ee330\" v-show=\"false\"></ae-layout>\n<ae-layout layout-id=\"5913cb1e-9979-4eb7-84e8-488cdd658cbb\"\n           :param-layout-id=\"layout.id\"\n           :param-query-params=\"params.queryParams\"\n           class=\"_CSS-root\"\n></ae-layout>\n","css":"._CSS {\n  width:100%;\n  height:100%;\n  background: var(--ae-background-d1);\n}\n\n._CSS-root {\n  flex-direction:column;\n  width:100%;\n  height:100%;\n}","controller":""},"locks":[],"created":{"at":"2018-12-10T13:14:03+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2019-05-09T14:30:06+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1557412206988,"ct":1544447643951,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"39f79377-705d-4a23-bebd-b8796f52a851","v":"3a27128395484f6d","previous":{"v":"b07fa20c66c846e2"},"p":"9bad9050-10a9-42d2-9ac6-64c532dd4198","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Route Layout: Redirect to receipts capture","applies":"","packages":[],"template":"<ae-icon class=\"fa fa-spinner-third fa-spin\"></ae-icon>\n\n<div>Sie werden gleich weitergeleitet...</div>","css":"","controller":"class Controller {\n  async init() {\n    const belege = await Aeppic.findOne(`a_forms:c69a0c1c-6c53-40c2-87e8-5ace866bf1df f.id:f6f822ec-eff4-4dc9-9ca6-8131004688da`)\n\n    console.log({belege})\n    \n    Aeppic.navigateTo(belege)\n\n    Aeppic.reload()\n  }\n}"},"locks":[],"created":{"at":"2022-11-25T13:08:36+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-11-25T15:14:56+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1669389296524,"ct":1669381716362,"a_depth":3,"a":["apps","86189c5a-b9f4-445a-879f-d94574960df0","9bad9050-10a9-42d2-9ac6-64c532dd4198"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"73fd81e5-c901-4c56-9b38-cd04a7d17f8a","v":"39016a74da0b4c43","previous":{"v":"29da431be1356ef8"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Save and Cancel Buttons","applies":"","packages":[],"template":"<div class=\"_CSS-commands\" v-show=\"params.showAlways || locals.documentChanged\" >\n  <!-- FIXE: hidden but required fields make the document invalid!\n  :disabled=\"!locals.documentChanged|| !locals.isValid\" -->\n  <button class=\"ae-button ae-button--primary\" @click.stop=\"$emit('save')\" :disabled=\"!locals.documentChanged\">\n      <ae-icon class=\"fa fa-save\"></ae-icon>\n      Speichern\n  </button>\n  <button class=\"ae-button\" @click.stop=\"controller.resetDocumentChanged()\" :disabled=\"!locals.documentChanged\">\n    <ae-icon class=\"fa fa-times\"></ae-icon>\n    Abbrechen\n  </button>\n</div>\n","css":"._CSS-commands {\n  display: flex;\n  flex: 1;\n}\n","controller":"class Controller {\n  init() {\n    locals.isValid = true\n    console.log('init', params.documentId)\n\n    this.setupWatchers(params.documentId)\n\n    watchParam('documentId', (documentId) => {\n      this.setupWatchers(documentId)\n    })\n  }\n\n  setupWatchers(documentId) {\n    if (this.watchers) {\n      this.watchers.forEach(watcher => watcher.stop())\n      this.watchers = []\n    }\n\n    const watchers = []\n    \n    watchers.push(Aeppic.watchRevisions(documentId, async (changedDocument, notificationReason) => {\n      params.debug && console.log('rev', changedDocument, notificationReason)\n\n      if (this.ignoreRevisions) {\n        return \n      }\n\n      $emit('document-revision')\n\n      const form = await Aeppic.getFormForDocument(changedDocument)\n\n      locals.isValid = !form.validateDocumentData(changedDocument.data)\n      locals.documentChanged = !!notificationReason\n    }))\n\n    watchers.push(Aeppic.watch(documentId, (changedDocument, notificationReason) => {\n      params.debug && console.log('watch', changedDocument, notificationReason)\n\n      if (this.ignoreRevisions) {\n        return\n      }\n\n      if (notificationReason.updated) {\n        // this.resetDocumentChanged()\n        $emit('document-save')\n        locals.documentChanged = null\n\n        return\n      }\n    }))\n\n    this.watchers = watchers\n  }\n\n  get ignoreRevisions() {\n    return !!params.pause\n  }\n\n  resetDocumentChanged() {\n    params.debug && console.log('reset')\n    locals.documentChanged = null\n\n    $emit('reset')\n  }\n\n  destroy() {\n    // this.resetDocumentChanged()\n  }\n}"},"locks":[],"created":{"at":"2018-06-12T11:35:19+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2024-03-21T12:47:02+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1711025222895,"ct":1621428481259,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"dc8cdcfb-177c-4e53-b41e-f5a3d0038425","v":"3004c9c22d8c7a77","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Save and Cancel Buttons (no-details)","applies":"","packages":[],"template":"<div class=\"_CSS-commands\">\n  <button class=\"ae-button ae-button--primary\" @click.stop=\"$emit('save')\" :disabled=\"!locals.documentChanged|| !locals.isValid\">\n      <ae-icon class=\"fa fa-save\"></ae-icon>\n      Speichern\n  </button>\n  <button class=\"ae-button\" @click.stop=\"controller.resetDocumentChanged()\">\n    <ae-icon class=\"fa fa-times\"></ae-icon>\n    Abbrechen\n  </button>\n</div>\n","css":"._CSS-commands {\n  display: flex;\n  flex: 1;\n}\n","controller":"class Controller {\n  init() {\n    locals.isValid = true\n\n    Aeppic.watchRevisions(params.documentId, async (changedDocument, notificationReason) => {\n      params.debug && console.log('rev', changedDocument, notificationReason)\n\n      if (this.ignoreRevisions) {\n        return \n      }\n\n      $emit('document-revision')\n\n      const form = await Aeppic.getFormForDocument(changedDocument)\n\n      locals.isValid = !form.validateDocumentData(changedDocument.data)\n      locals.documentChanged = !!notificationReason\n    })\n\n    Aeppic.watch(params.documentId, (changedDocument, notificationReason) => {\n      params.debug && console.log('watch', changedDocument, notificationReason)\n\n      if (this.ignoreRevisions) {\n        return\n      }\n\n      if (notificationReason.updated) {\n        // this.resetDocumentChanged()\n        $emit('document-save')\n        locals.documentChanged = null\n\n        return\n      }\n    })\n  }\n\n  get ignoreRevisions() {\n    return !!params.pause\n  }\n\n  resetDocumentChanged() {\n    params.debug && console.log('reset')\n    locals.documentChanged = null\n\n    $emit('reset')\n  }\n\n  destroy() {\n    // this.resetDocumentChanged()\n  }\n}"},"locks":[],"created":{"at":"2020-06-09T12:29:12+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481259,"ct":1621428481259,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"42224d1798a7dc6a","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"a":["system","04632e3e-9132-4927-b91d-3c28d1afe3e9","a9dbf1ad-0428-403e-b88b-bd73c35cf381","6ad6f21b-b086-4e9c-aa38-4893fd343fb9"],"a_depth":4,"a_forms":["system-folder-form","folder","form","folder"],"created":{"at":"2025-10-07T13:56:19+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"ct":1759845379327,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.primaryButtonTheme = {}\n  }\n\n  mounted() {\n    locals.theme = SharedContext.get('ae:theme')\n  }\n}","css":"","name":"Schema","packages":[],"template":"<section\n  class=\"w-full bg-surface text-on-surface rounded-2xl p-4 flex justify-around gap-8 flex-wrap\"\n>\n  <ae-layout\n    layoutId=\"87b0b799-2c06-4d89-ad71-f75835b6be4d\"\n    :data-theme=\"locals.theme?.light\"\n    param-schema-title=\"Light\"\n  ></ae-layout>\n  <ae-layout\n    layoutId=\"87b0b799-2c06-4d89-ad71-f75835b6be4d\"\n    :data-theme=\"locals.theme?.dark\"\n    param-schema-title=\"Dark\"\n  ></ae-layout>\n</section>"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"d55ee142-2da7-4d53-84b4-15a7fc71c1fb","inheritedLocks":[null,null,null,null,null],"locks":[],"modified":{"at":"2025-10-07T13:56:30+00:00","backedBy":null,"by":"729fa027-7e7e-4b06-9602-f535c43824f0","client":"server","from":"","impersonatedBy":null},"p":"6ad6f21b-b086-4e9c-aa38-4893fd343fb9","previous":{"v":"initial"},"stamps":[],"t":1759845390899,"v":"0aef1abb869253a7"},{"id":"f66a2fef-e019-4cc3-a3ce-9d6e1e16a7ab","v":"37a561a1be22af4d","previous":{"v":"87791ead59f00019"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Search Bar and Sort Bar","applies":"","packages":[],"template":"<div v-if=\"locals.filtersActive && Aeppic.Device !== 'Phone'\">\n    <ae-layout ref=\"filterBar\" :params=\"params\" :param-filter-object=\"locals.filters\" :param-filter-form=\"locals.form\" @remove-option=\"controller.removeActiveOption($event)\" layout-id=\"3d2eacbb-f420-4946-b381-6d2dfe417234\"></ae-layout>\n</div>\n<div class=\"_CSS-actions\" v-if=\"!params.disableSearchFilter\">\n    <div class=\"_CSS-search ae-form-cell\" v-if=\"!params.disableSearch\">\n        <ae-icon class=\"fa fa-search _CSS-search__icon\"></ae-icon>\n        <input ref=\"filterInput\" class=\"ae-form-cell__input\" v-model=\"locals.search\" type=\"text\" style=\"width: 8rem;\" @input=\"() => controller.updateFilter()\" autocomplete=\"off\">\n    </div>\n    <section class=\"_CSS-sort-container\">\n        <section class=\"_CSS-sort\" v-if=\"!params.disableSort\">\n            <section v-if=\"locals.form && locals.info\" class=\"_CSS-sort__dropdown\">\n                <select v-model=\"locals.sort.field\" @change=\"controller.updateSort()\" style=\"cursor:pointer\">\n                    <optgroup label=\"Sortierung\">\n                        <option value=\"\" v-if=\"!params.initialSort\">Unsortiert</option>\n                        <option v-for=\"field of locals.info.sort\"\n                            :value=\"field.subType === 'ref' ? 'data.' + field.name + '.text' : 'data.' + field.name\">\n                            {{ Aeppic.translate(locals.form.getPlaceholder(field.name).label) }}</option>\n                        <option value=\"created.at\">Erstelldatum</option>\n                        <option value=\"modified.at\">Änderungsdatum</option>\n                    </optgroup>\n                </select>\n                <button :disabled=\"!locals.sort.field\" class=\"ae-button\" v-show=\"locals.sort.descending\" @click.stop=\"locals.sort.descending = false;controller.updateSort()\" title=\"Absteigend\" style=\"cursor:pointer\">\n                    <ae-icon class=\"fa fa-sort-amount-down\"></ae-icon>\n                </button>\n                <button :disabled=\"!locals.sort.field\" class=\"ae-button \" v-show=\"!locals.sort.descending\" @click.stop=\"locals.sort.descending = true;controller.updateSort()\" title=\"Aufsteigend\" style=\"cursor:pointer\">\n                    <ae-icon class=\"fa fa-sort-amount-up\"></ae-icon>\n                </button>\n            </section>\n        </section>\n    </section>\n    <template v-if=\"locals.setupCompleted && locals.filters.length\">\n        <div style=\"flex: 1;\"></div>\n        <section class=\"_CSS-filter-button\"\n            v-if=\"!params.disableFilter && locals.form && locals.info\">\n            <button ref=\"filterButton\" title=\"Filter ändern\" class=\"_CSS-filter-button__button ae-button\"\n                 @click.stop=\"controller.openFilter()\">\n                <ae-icon v-if=\"locals.filtersActive\" class=\"ae-button--active fas fa-filter\"></ae-icon>\n                <ae-icon v-else class=\"far fa-filter\"></ae-icon>\n            </button>\n        </section> \n    </template>\n</div>\n<ae-popup v-if=\"Aeppic.Device !== 'Phone'\" ref=\"newFilterPopup\" placement=\"bottom\">\n    <div slot=\"popup\" class=\"_CSS-popup\" slot-scope=\"scope\">\n        <div class=\"_CSS-popup__header\">\n            <div>Filter ändern</div>\n            <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n        </div>\n        <ae-layout \n            :params=\"params\" \n            :param-filter-object=\"locals.filtersTemp\" \n            :param-filter-form=\"locals.form\" \n            :param-filter-document=\"locals.document\" \n            @remove=\"controller.removeFromContent($event)\" \n            @remove-option=\"controller.removeOptionFromContent($event)\"\n            @toggle=\"controller.toggleSelect($event)\" \n            @add=\"controller.addToContent($event)\" \n            @reset=\"controller.resetFilters()\" \n            @apply=\"controller.applyFilters()\" \n            layout-id=\"f237a0a3-5122-4162-815d-960008d169cc\" \n            @sort=\"$emit('sort', $event)\" \n            @refFilter=\"locals.refFilter = $event\"></ae-layout>\n    </div>\n</ae-popup>\n<ae-dialog v-else ref=\"dialog\">\n    <template #header=\"scope\">\n    <div class=\"_CSS-dialog__header\">\n      Filter ändern\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n    <template #body=\"scope\">\n    <ae-layout\n      :key=\"locals.filtersTemp\"\n      :params=\"params\"\n      :param-filter-object=\"locals.filtersTemp\"\n      :param-filter-form=\"locals.form\" \n      :param-filter-document=\"locals.document\"\n      @remove=\"controller.removeFromContent($event)\"\n      @remove-option=\"controller.removeOptionFromContent($event)\"\n      @toggle=\"controller.toggleSelect($event)\"\n      @add=\"controller.addToContent($event)\"\n      @reset=\"controller.resetFilters()\"\n      @apply=\"controller.applyFilters()\"\n      layout-id=\"f237a0a3-5122-4162-815d-960008d169cc\"\n      @sort=\"$emit('sort', $event)\"\n      @refFilter=\"locals.refFilter = $event\"  \n    >\n    </ae-layout>\n  </template>\n</ae-dialog>","css":"._CSS {\n  padding: var(--ae-space-1);\n}  \n\n._CSS-actions {\n    display: flex;\n    flex-shrink: 0;\n    min-width: 100%;\n    background: var(--ae-ui-background);\n    overflow: auto;\n    border-color: var(--ae-border-color);\n    border-style: solid;\n    border-width: var(--ae-border-width);\n    border-radius: var(--ae-border-radius);\n}\n\n._CSS-search {\n    display: flex;\n    align-items: center;\n    padding: var(--ae-size-3);\n}\n\n._CSS-search__icon {\n    margin: 0 var(--ae-size-2) 0 0;\n    cursor: pointer;\n}\n\n._CSS-sort-container {\n    display: flex;\n}\n\n._CSS-sort {\n    display: flex;\n    flex-flow: column;\n    padding: var(--ae-size-2);\n}\n\n._CSS-filter-button {\n    align-self: center;\n}\n\n._CSS-sort__dropdown {\n    display: flex;\n    align-items: center;\n}\n\n._CSS-dialog__header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n}\n\n._CSS-popup {\n    width: 400px;\n    max-width: 100vw;\n    background-color: white;\n    border: var(--ae-border-width) solid var(--ae-border-color);\n    border-radius: var(--ae-border-radius);\n    box-shadow: var(--ae-shadow);\n    transition: opacity .15s, visibility 1s;\n}\n\n._CSS-popup__header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: var(--ae-size-3);\n}","controller":"class Controller {\n    async init() {\n        if (params.disableSearchFilter) {\n            return\n        }\n\n        locals.search = ''\n\n        locals.setupCompleted = false\n\n        locals.sort = {\n            field: ''\n        }\n\n        locals.document = null\n        locals.form = null\n        locals.filters = []\n        locals.filtersTemp = []\n        locals.rawFilter = ''\n        locals.filtersActive = false\n        locals.refFilter = null\n\n        await this._setup()\n\n        $on('closePopup', this.closePopup)\n        $on('show', this.show)\n\n        watchParam('listForm', async () => await this._setup())\n        watchParam('listFormId', async () => await this._setup())\n    }\n\n    openFilter() {\n        locals.filters = this._getFilters()\n        locals.filtersTemp = JSON.parse(JSON.stringify(locals.filters))\n\n        if (Aeppic.Device === 'Phone') {\n            $refs.dialog.show()\n        } else {\n            $refs.newFilterPopup.show({ target: $refs.filterButton })\n        }\n\n    }\n\n    _buildEmptyFilters() {\n        const { filter: availableFilterFields } = this._getAvailableSortAndFilter()\n\n        const map = availableFilterFields.map(field => {\n            return {\n                field,\n                values: this._buildFilterValues(field)\n            }\n        })\n\n        return map\n    }\n\n    _buildFilterValues(field, optionalValue) {\n        const values = []\n\n        if (field.subType === 'select') {\n            const v = field.settings.options.map(o => ({\n                value: o.value,\n                display: o.display,\n                enabled: optionalValue === o.value\n            }))\n\n            values.push(...v)\n        }\n\n        if (optionalValue == null) {\n            return values\n        }\n\n        if (field.subType === 'switch') {\n            const value = typeof optionalValue === 'boolean' ? optionalValue : optionalValue === 'true'\n\n            values.push({\n                enabled: true,\n                value\n            })\n        }\n\n        // } else if (field.subType === 'ref') {\n        //   // TODO: no need for default because ref picker will fill first value\n        //   // values.push({\n        //   //   id: ''\n        //   // })\n        // } else if (field.type === 'number') {\n        //   // TODO:\n        //   // values.push({\n        //   //   operator: 'EQUAL',\n        //   //   value: 0\n        //   // })\n        // }\n\n        return values\n    }\n\n    addValue(filter, ref) {\n        const { field, values } = filter\n\n        if (field.subType === 'switch') {\n            values.push({\n                value: false,\n                enabled: true\n            })\n        } else if (field.subType === 'ref') {\n            if (locals.refFilter.values.find(value => value.id === ref.id)) {\n                return\n            }\n\n            locals.refFilter.values.push({\n                id: ref.id,\n                enabled: true\n            })\n        } else if (field.subType === 'date') {\n            values.push({\n                start: null,\n                end: null,\n            })\n        } else {\n            console.error('[addValue]: filter subType not supported', field.subType)\n        }\n    }\n\n    removeValue(filter, value) {\n        const { values } = filter\n\n        const index = values.findIndex(v => v === value)\n\n        values.splice(values, 1)\n    }\n\n    async applyFilters() {\n        this._emitFilterResult()\n\n        if (this.checkForEnabledFilters()) {\n            locals.filtersActive = true\n        } else {\n            locals.filtersActive = false\n        }\n        if (Aeppic.Device === 'Phone') {\n            this.closeDialog()\n        } else {\n            this.closePopup()\n        }\n    }\n\n    async resetFilters() {\n        locals.filters = this._buildEmptyFilters()\n        locals.filtersTemp = []\n        this._emitFilterResult()\n        locals.filtersActive = false\n\n        if (Aeppic.Device === 'Phone') {\n            this.closeDialog()\n        } else {\n            this.closePopup()\n        }\n    }\n\n    async _setup() {\n      const listFormId = params.listForm ? params.listForm : params.listFormId\n        if (!listFormId) {\n          console.warn(`[${layout.data.name}]: got not listForm nor listFormId. Not doing anything`)\n          return\n        }\n\n        const alreadyConfiguredForThisForm = locals.form && locals.form.id === listFormId\n        if (alreadyConfiguredForThisForm) {\n          return\n        }\n\n        locals.document = await Aeppic.get(params.document || params.documentId)\n\n        const temporaryDocumentOfFormToHandle = await Aeppic.new(listFormId, 'root')\n        locals.form = await Aeppic.getFormForDocument(temporaryDocumentOfFormToHandle)\n\n        if (!locals.document || !locals.form) {\n            console.error('Provide (params.listForm OR params.listFormId) AND (params.document OR params.documentId)')\n            return\n        }\n\n        locals.info = await this._getAvailableSortAndFilter()\n        locals.filters = this._getFilters()\n        locals.sort = this._calculateInitialSort()\n\n        this.announceSort()\n\n        this.announceFilter(true)\n\n        if (this.checkForEnabledFilters()) {\n          locals.filtersActive = true\n        }\n\n        locals.setupCompleted = true\n    }\n\n    _calculateInitialSort(opts) {\n        const options = {... { loadPersisted: true }, ...opts }\n\n        if (options.loadPersisted) {\n            const persistedSort = this._readPersistedSort()\n\n            if (persistedSort) {\n                return persistedSort\n            }\n        }\n\n        if (params.initialSort) {\n            if (typeof params.initialSort === 'string') {\n                return {\n                    field: params.initialSort\n                }\n            }\n\n            return params.initialSort\n        }\n\n        return {\n            field: ''\n        }\n    }\n\n    _getAvailableSortAndFilter() {\n        if (!locals.form) {\n            return\n        }\n\n        const obj = {\n            sort: locals.form.fields.filter(f => this._fieldIsSortable(f)),\n            filter: locals.form.fields.filter(f => this._fieldIsFilterable(f)),\n            refs: locals.form.fields.filter(f => this._isRefField(f)),\n            refsQueryStringStubs: []\n        }\n\n        obj.refsQueryStringStubs = obj.refs.map(field => `data.${field.name}.text`)\n\n        params.debug && console.log(obj)\n        return obj\n    }\n\n    _isRefField(field) {\n        return field.subType === 'ref'\n    }\n\n    _getFilters(opts) {\n        const options = {... { loadPersisted: true }, ...opts }\n\n        if (options.loadPersisted) {\n            const persisted = this._readPersistedFilters()\n\n            if (persisted && persisted.length) {\n                const filters = this._buildEmptyFilters()\n\n                for (const filter of filters) {\n                    const persistedFilterOfFilter = persisted.find(persistedFilter => persistedFilter.field && persistedFilter.field.name === filter.field.name)\n\n                    if (persistedFilterOfFilter) {\n                        filter.values = persistedFilterOfFilter.values\n                    }\n                }\n\n                return filters\n            }\n        }\n\n        const filters = this._buildEmptyFilters()\n\n        if (!params.initialFilters) {\n            return filters\n        }\n\n        // initial filters are set only once, because afterwards their get loaded from from the persisted filters\n\n        const initialFilters = params.initialFilters.split(',')\n\n        for (const initialFilter of initialFilters) {\n            const parts = initialFilter.split(':')\n\n            if (parts.length !== 2) {\n                console.warn(`initial filter without propper value: ${initialFilter}`)\n                continue\n            }\n\n            const fieldName = parts[0].replace('data.', '')\n            const value = parts[1]\n\n            const emptyFilter = filters.find(f => f.field.name === fieldName)\n\n            if (!emptyFilter) {\n                console.warn('not supported initial filter:', fieldName)\n                continue\n            }\n\n            emptyFilter.values = this._buildFilterValues(emptyFilter.field, value)\n        }\n\n        return filters\n    }\n\n    _fieldIsSortable(field) {\n        const sortFields = this._parseParamSortFields()\n\n        if (sortFields.length && sortFields.includes(`data.${field.name}`) === false) {\n            return false\n        }\n\n        const fieldTypeIsObjectButNotRef = field.type === 'object' && field.subType !== 'ref'\n\n        if (fieldTypeIsObjectButNotRef) {\n            return false\n        }\n\n        const unsupportedControls = ['attachment']\n\n        const placeholder = locals.form.getPlaceholder(field.name)\n\n        return placeholder && (!placeholder.control || unsupportedControls.includes(placeholder.control.name) === false)\n    }\n\n    _fieldIsFilterable(field) {\n        const filterFields = this._parseParamFilterFields()\n\n        if (filterFields.length && filterFields.includes(`data.${field.name}`) === false) {\n            return false\n        }\n\n        const unsupportedSubTypes = ['image', 'address', 'geolocation', 'file', 'text', 'number']\n\n        if (unsupportedSubTypes.includes(field.subType)) {\n            return false\n        }\n\n        const unsupportedControls = ['attachment']\n        const placeholder = locals.form.getPlaceholder(field.name)\n\n        const isValid = placeholder && (!placeholder.control || unsupportedControls.includes(placeholder.control.name) === false)\n\n        return isValid\n    }\n\n    _parseParamFilterFields() {\n        if (!params.filterFields) {\n            return []\n        }\n\n        return params.filterFields.split(',')\n    }\n\n    _parseParamSortFields() {\n            if (!params.sortFields) {\n                return []\n            }\n\n            return params.sortFields.split(',')\n\n        }\n          \n    get _debounceInMs() {\n      return params.debounce || 800\n    }\n\n    updateSort() {\n        this.announceSort()\n    }\n\n    announceSort() {\n            const field = locals.sort.field\n            const descending = locals.sort.descending\n\n            const nullifiedDescending = (descending === '' || descending == null) ? null : descending\n\n            let sort = null\n\n            if (field) {\n                sort = {\n                    field,\n                    descending: nullifiedDescending\n                }\n            }\n\n            params.debug && console.log('emitSort [sort]', sort)\n\n            $emit('sort', sort)\n\n            this._persistSort(sort)\n        }\n        \n    updateFilter() {\n            this.announceFilter()\n        }\n        \n    announceFilter(nodebounce = false) {\n        if (this._debouncedFilter) {\n            clearTimeout(this._debouncedFilter)\n        }\n\n        if (nodebounce) {\n            this._emitFilterResult()\n            return\n        }\n\n        this._debouncedFilter = setTimeout(() => {\n            this._emitFilterResult()\n            this._debouncedFilter = null\n        }, this._debounceInMs)\n    }\n\n    _emitFilterResult() {\n            const parts = []\n\n            if (locals.search) {\n                const searchParts = locals.search.trim().replace(/\\s{2,}/g, ' ').split(/\\s/)\n\n                let searchQueryStringParts = []\n                let refQueryStringParts = []\n\n                for (const searchPart of searchParts) {\n                    searchQueryStringParts.push(`*${searchPart}*`)\n\n                    const refsQueryString = locals.info.refsQueryStringStubs.map(stub => `${stub}:*${searchPart}*`).join(' OR ')\n                    refQueryStringParts.push(refsQueryString)\n                }\n\n                const search = searchQueryStringParts.join(' ')\n                const refSearch = refQueryStringParts.join(' ')\n\n                const searchWithRefs = `(${search} ${refSearch? `OR  (${refSearch})` : ''})`\n\n      parts.push(searchWithRefs)\n    }\n\n    let hasFilters = false\n\n    if(locals.filtersTemp.length) {\n      locals.filters = JSON.parse(JSON.stringify(locals.filtersTemp))\n    }\n\n    if (locals.filters.length) {\n      for (const filter of locals.filters) {\n        const filterParts = []\n\n        for (const value of filter.values) {\n          const filterQuery = this._buildNewFilterValue(filter.field, value)\n\n          if (!filterQuery) {\n            continue\n          }\n\n          filterParts.push(filterQuery)\n        }\n\n        if (filterParts.length) {\n          hasFilters = true\n\n          parts.push(`(${filterParts.join(' OR ')})`)\n        }\n      }\n    }\n\n    this._persistFilters(locals.filters)\n\n    const filter = parts.join(' AND ')\n\n    params.debug && console.log('emitFilter [parts/filter/hasFilters]', parts, filter, hasFilters)\n  \n    locals.filtersTemp = []\n \n    $emit('filter', filter) \n  }\n  \n\n  _buildNewFilterValue(field, filter) {\n    // remember to check for subTypes first, then fallback to types.\n    // this is because a subType switch can be of type number or string\n  \n    const resultPrefix = `data.${field.name}`\n\n    if (field.subType === 'select') {\n      if (filter.enabled) {\n        return `${resultPrefix}:${filter.value}`\n      }\n      return ''\n    }\n\n    if (field.subType === 'date') {\n      const start = filter.start || '*'\n      const end = filter.end || '*'\n\n      if(filter.start && filter.end) {\n        return `${resultPrefix}:[${start} TO ${end}]` \n      } else if (filter.start) {\n        return `${resultPrefix}:[${start} TO ${end}]`\n      } else if (filter.end) {\n        return `${resultPrefix}:[${start} TO ${end}]`\n      } \n    }\n\n    // if (field.type === 'number') {\n    //   // TODO: support less than and greater than\n    //   return filter.value\n    // }\n \n    if (field.type === 'boolean') {\n      if(filter.value === null) {\n        return\n      }\n      return `${resultPrefix}:${filter.value}`\n    }\n\n    if (field.type === 'object') {\n      if (field.subType === 'ref') {\n        if (filter.id) {\n          return `${resultPrefix}.id:${filter.id}`\n        }\n\n        return ''\n      }\n    }\n  }\n\n  removeReference(field, ref) {\n    const i = field.values.findIndex(value => value.id === ref.id)\n\n    if (i === -1) {\n      return\n    }\n\n    field.values.splice(i, 1)\n  }\n  \n  // readableFilter(field, value) {\n  //   if (field.subType === 'date') {\n  //     const date = this._parseDateString(value)\n\n  //     const start = date.start === '*' ? '*' : Aeppic.DateTime.fromISO(date.start).toLocaleString()\n  //     const end = date.end === '*' ? '*' : Aeppic.DateTime.fromISO(date.end).toLocaleString()\n\n  //     return `${start} bis ${end}`\n  //   }\n  // }\n\n  // _parseDateString(datestring) {\n  //   const matches = datestring.match(/\\[(.*?)\\sTO\\s(.*?)]/)\n\n  //   if (matches.length !== 3) {\n  //     return null\n  //   }\n\n  //   return {\n  //     start: matches[1],\n  //     end: matches[2],\n  //   }\n  // }\n\n  _persistSort(value) {\n    if (!Aeppic.LocalStorage.isAvailable) {\n      return\n    }\n\n    const prefix = this._generateLocalStoragePrefix()\n\n    if (!prefix) {\n      return\n    }\n\n    const keyName = `${prefix}_sort`\n\n    Aeppic.LocalStorage.setValue(keyName, value)\n  }\n\n  _readPersistedSort() {\n    if (!Aeppic.LocalStorage.isAvailable) {\n      return\n    }\n\n    const prefix = this._generateLocalStoragePrefix()\n\n    if (!prefix) {\n      return\n    }\n\n    const keyName = `${prefix}_sort`\n\n    return Aeppic.LocalStorage.getValue(keyName)\n  }\n\n  _persistFilters(filters) {\n    if (!Aeppic.LocalStorage.isAvailable) {\n      return\n    }\n\n    const prefix = this._generateLocalStoragePrefix()\n\n    if (!prefix) {\n      return\n    }\n\n    const keyName = `${prefix}_filters`\n    Aeppic.LocalStorage.setValue(keyName, filters)\n  }\n\n  _readPersistedFilters() {\n    if (!Aeppic.LocalStorage.isAvailable) {\n      return\n    }\n\n    const prefix = this._generateLocalStoragePrefix()\n\n    if (!prefix) {\n      return\n    }\n\n    const keyName = `${prefix}_filters`\n\n    const filtersWithMinimalFieldInformations = Aeppic.LocalStorage.getValue(keyName)\n\n    if (!filtersWithMinimalFieldInformations) {\n      return []\n    }\n\n    return filtersWithMinimalFieldInformations.map((filter) => {\n      filter.field = locals.form.getField(filter.field.name)\n      return filter\n    })\n  \n  }\n  \n  _generateLocalStoragePrefix() {\n    const containingComponentId = params.containingComponentId ? params.containingComponentId.trim() : null\n\n    if (!containingComponentId) {\n      console.warn(`NOTE: \"${layout.data.name}\" should receive the most top using component (logically) to be able to scope its preferences correctly, e.g. a layout using the list, which includes \"${layout.data.name}\"`)\n      return `bp-pref@root=${locals.document.a[0]}@form=${locals.form.id}`\n    }\n\n    return `bp-pref@root=${locals.document.a[0]}@form=${locals.form.id}@component=${containingComponentId}`\n    // try {\n    // } catch (e) {\n    //   console.error(`Could not generate LocalStorage prefix. document or form missing`, locals.document, locals.form)\n    //   return null\n    // }\n  }\n  \n  closePopup() {\n    $refs.newFilterPopup && $refs.newFilterPopup.close()\n  }\n  \n  closeDialog() {\n    $refs.dialog && $refs.dialog.close()\n  }\n\n  destroy() {\n    this.closePopup()\n    this.closeDialog()\n  }\n\n  removeActiveOption(filter,option) {\n    if(filter.field.subType === 'date') {\n      this.removeValue(filter, option)\n    }\n\n    if(filter.field.subType === 'select') {\n      filter.values.forEach(value => value.enabled = false)\n    }\n\n    if(filter.field.subType === 'ref') {\n      if(option) {\n        filter.values.forEach(value => {\n          value.enabled = false\n          this.removeReference(filter, option)\n        })\n      } else {\n        filter.values = []\n      }\n    }\n\n    if(!option) {\n      if(!this.checkForEnabledFilters()) {\n        this.resetFilters()\n      }\n      this.applyFilters()\n    }\n  }\n  \n  checkForEnabledFilters() {\n    let filterEnabled = false\n\n    params.debug && console.log('FILTER', locals.filters)\n      locals.filters.forEach( filter => {\n        filter.values.forEach(option => {      \n            \n            if(filter.field.subType === 'switch') {\n              if(option.value !== null) {\n                return filterEnabled = true\n              } \n            }\n            \n            if(filter.field.subType === 'select') {        \n                if(option.enabled) {\n                    return filterEnabled = true\n                }\n            }\n\n            if(filter.field.subType === 'date') {\n                if (option.start) {\n                    return filterEnabled = true\n                }\n\n                if(option.end) {\n                    return filterEnabled = true\n                } \n            }\n        })\n\n        if(filter.field.subType === 'ref') {\n            if(filter.values.length) {\n                return filterEnabled = true\n            }\n        }\n      })\n\n    return filterEnabled\n  }\n  \n  addToContent(event) {\n    let option\n    let ref\n    \n    if(event.ref) {\n      option = event.filter\n       ref = event.ref\n    } else {\n      option = event\n    }\n\n    locals.filtersTemp.forEach(filter => {\n      if(filter === option) {\n        if(ref) {\n          this.addValue(filter,ref)\n        } else {\n          this.addValue(filter)\n        }\n      }\n    })\n  }\n\n  removeFromContent(event) {\n    const eventfilter = event.filter  \n    const option = event.option\n\n    locals.filtersTemp.forEach(filter => {\n      if(filter === eventfilter) {\n        this.removeValue(filter, option)  \n      }\n    })\n  }\n\n  removeOptionFromContent(event) {\n    const filter = event.filter\n    const option = event.value \n\n    this.removeActiveOption(filter, option)  \n  }\n\n  toggleSelect(event) { \n    const filter = event.filter\n    const option = event.option\n\n    if(!option.value) {\n      if(option.enabled === true) {\n        filter.values.forEach(value => value.enabled = false)\n      } else {\n        filter.values.forEach(value => value.enabled = true)\n      }\n    } else {\n      option.enabled = !option.enabled\n    }\n\n    const allOption = filter.values.find(option => !option.value || option.value === 0)\n    params.debug && console.log('areAllOptionsSelected', allOption)\n\n    const otherOptions = filter.values.filter(option => option !== allOption)\n    params.debug && console.log('selectedOptions', otherOptions)\n\n    if(otherOptions.find(option => option.enabled === false)) {\n      allOption.enabled = false\n    } else {\n      allOption.enabled = true\n    }  \n\n    /*const areAllOptionsSelected = filter.values.find(option => option.value === 0)\n    const selectedOptions = filter.values.filter(option => option.value > 0)\n\n    if(option.value === 0) {\n      if(option.enabled === true) {\n        filter.values.forEach(value => value.enabled = false)\n      } else {\n        filter.values.forEach(value => value.enabled = true)\n      }  \n    } else {\n      option.enabled = !option.enabled\n    }\n\n    if(selectedOptions.find(option => option.enabled === false)) {\n      areAllOptionsSelected.enabled = false\n    } else {\n      areAllOptionsSelected.enabled = true\n    }*/\n  }\n}\n"},"locks":[],"created":{"at":"2019-01-30T13:54:13+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-06-09T09:30:59+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1623231059085,"ct":1621428481259,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"5ecf36b8-bb47-4039-ac29-0dc2e854195e","v":"0075928dd2664edf","previous":{"v":"48c08b1d312de5b1"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Search Button (dialog)","applies":"","packages":[],"template":"<!-- <template v-if=\"locals.searchResult && locals.searchResult.id !== params.pageDocumentId\">\n  <div class=\"_CSS-search--expanded\" v-if=\"locals.expanded\">\n    <input ref=\"input\" class=\"_CSS-search__input\" type=\"text\" v-focus v-model=\"locals.search\" @keydown.enter.stop.prevent=\"controller.navigateToSearchResults()\" @keydown.esc.stop.prevent=\"controller.close()\">\n    <button class=\"_CSS-action-button ae-button\" @click.stop=\"controller.close()\" :class=\"{ '_CSS-search--overlay': params.overlay }\">\n      <ae-icon class=\"fad fa-search\"></ae-icon>\n    </button>\n  </div>\n  <div v-else class=\"_CSS-search--not-expanded\">\n    <button class=\"_CSS-action-button ae-button\" @click.stop=\"locals.expanded = true\" :class=\"{ '_CSS-search--overlay': params.overlay }\">\n        <ae-icon class=\"fad fa-search\"></ae-icon>\n    </button>\n  </div>\n</template> -->\n\n<template v-if=\"locals.searchResult\">\n  <button class=\"_CSS-action-button ae-button\" @click.stop=\"Aeppic.drillInto(locals.searchResult, { mode: 'dialog' })\" :class=\"{ '_CSS-search--overlay': params.overlay }\">\n  <!-- <button class=\"_CSS-action-button ae-button\" @click.stop=\"locals.open = true;$refs.dialog.show()\" :class=\"{ '_CSS-search--overlay': params.overlay }\"> -->\n    <ae-icon class=\"fad fa-search\"></ae-icon>\n  </button>\n\n  <ae-dialog ref=\"dialog\" @close=\"locals.open = false\" :dialog-size=\"{height:'90vh'}\"> \n    <template #header=\"scope\">\n      <div class=\"_CSS-dialog__header\">\n        Suche\n        <button class=\"ae-button\" @click.stop=\"scope.close()\">\n          <ae-icon class=\"fa fa-times\"></ae-icon>\n        </button>\n      </div>\n    </template>\n    <template #body=\"scope\">\n      <ae-design v-if=\"locals.open\" style=\"min-height: 50vh;\" name=\"page\" :document=\"locals.searchResult\" :param-no-persist=\"true\" @selected=\"scope.close(); Aeppic.drillInto($event)\"></ae-design>\n    </template>\n  </ae-dialog>\n</template> \n","css":"._CSS {\n  display: flex;\n  justify-content: flex-end;\n}\n\n._CSS-search--expanded {\n  display: flex;\n  justify-content: flex-end;\n  flex: 1;\n}\n\n._CSS ._CSS-search--overlay {\n  color: var(--ae-ui-background);\n  filter: drop-shadow( 0px 0px 1px rgba(0,0,0,1) ) drop-shadow( 0px 0px 10px rgba(0,0,0,0.8));\n}\n\n._CSS-search__input {\n  /* flex: 1; */\n  margin-right: 6px;\n  border-radius: 5px;\n}\n\n._CSS ._CSS-action-button--overlay {\n  color: var(--ae-ui-background);\n  filter: drop-shadow( 0px 0px 1px rgba(0,0,0,1) ) drop-shadow( 0px 0px 10px rgba(0,0,0,0.8));\n}\n\n._CSS-action-button {\n  margin-left: 1em;\n}\n\n\n._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      SearchNew: '5d0ac040-1428-48bc-9b4f-28c69e098b3c',\n      SearchOld: 'bf8eb298-3431-4138-a1e1-e748e05f3f37',\n    }\n\n    locals.open = false\n    locals.expanded = false\n\n    const companyId = params.companyId || Aeppic.HomePage.id\n\n    if (!companyId) {\n      return\n    }\n\n    const company = await Aeppic.get(companyId)\n\n    const newSearch = await Aeppic.findOne(`p:${company.id} f.id:${this.FORMS.SearchNew}`)\n\n    if (newSearch) {\n      const settingsDocument = await Aeppic.Preferences.getSettingsDocumentsForDocument('bizpin:search', company)\n\n      // Check for boolean. A \"null\" would be okay, because the old default was \"always show search\"\n      if (settingsDocument && settingsDocument.globalSettings.data && settingsDocument.globalSettings.data.allowGlobalSearch !== false) {\n        locals.searchResult = newSearch\n      }\n    }\n\n    if (!newSearch) {\n      locals.searchResult = await Aeppic.findOne(`p:${companyId} f.id:${this.FORMS.SearchOld}`)\n    }\n\n    this.open = () => {\n      if (locals.expanded) {\n        $refs.input.focus()\n      } else {\n      locals.expanded = true\n      }\n    }\n    $on('openSearch', this.open)\n  }\n\n  navigateToSearchResults() {\n    const search = locals.search\n\n    locals.expanded = false\n    locals.search = ''\n\n    Aeppic.navigateTo(locals.searchResult, { q: search })\n  }\n\n  close() {\n    locals.expanded = false\n    locals.search = ''\n  }\n}"},"locks":[],"created":{"at":"2018-10-11T13:57:29+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-01-19T08:43:17+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1611045797377,"ct":1539266249500,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"536120ed-ce9d-4245-9e1c-9d55d6de40f7","v":"60ae478aa4e7b849","previous":{"v":"1e4b736b759fe050"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Search Button.old","applies":"","packages":[],"template":"<button class=\"_CSS-action-button bp-button-icon\" @click.stop=\"controller.openSearch()\">\n    <ae-icon class=\"fa fa-search\"></ae-icon>\n</button>\n\n<ae-dialog ref=\"searchDialog\" :full-screen=\"Aeppic.Device === 'Phone'\" :dialog-classes=\"{ '_CSS-search': true, '_CSS-search--desktop-or-phone': Aeppic.Device !== 'Phone', '_CSS-search--phone': Aeppic.Device === 'Phone' }\" :dialog-style=\"{}\">\n  <div slot=\"header\">\n  </div>\n  <div slot=\"body\" class=\"_CSS-search__body\" slot-scope=\"scope\">\n    <div class=\"_CSS-search-scopes\">\n      <div class=\"_CSS-search-scopes__applications\">\n        <h3>Bereiche</h3>\n        <div class=\"_CSS-search-scopes__application\" :class=\"{ '_CSS-search-scopes__application--active': locals.searchScope.a === locals.companyId }\"\n        @click=\"locals.searchScope.a = locals.companyId;controller.updateSearchResults();\">\n        Überall</div>\n        <ae-design name=\"title\" :document=\"application\" v-for=\"application of locals.applications\"\n                  class=\"_CSS-search-scopes__application\"\n                  :class=\"{ '_CSS-search-scopes__application--active': locals.searchScope.a === application.id }\"\n                  @click.native=\"locals.searchScope.a = application.id; controller.updateSearchResults();\"\n                  ></ae-design>\n      </div>\n      <div class=\"_CSS-search-scopes__forms\">\n          <h3>Typen</h3>        \n          <div\n            class=\"_CSS-search-scopes__form\"\n            @click=\"locals.searchScope.formId = ''; controller.updateSearchResults(true);\" :class=\"{ '_CSS-search-scopes__form--active': locals.searchScope.formId === '' }\">Alle Typen</div>\n          <div @click=\"locals.searchScope.formId = formId; controller.updateSearchResults(true);\" v-for=\"formId of locals.applicationsFormIds[locals.searchScope.a]\"\n          class=\"_CSS-search-scopes__form\"\n          :class=\"{ '_CSS-search-scopes__form--active': locals.searchScope.formId === formId }\">\n            <ae-design name=\"title\" :document-id=\"formId\" \n            ></ae-design>\n          </div>\n      </div>\n    </div>\n\n    <div>\n      \n      <div class=\"_CSS-search__text\">\n        <span style=\"flex: 1;\"></span>\n        <div class=\"bp-button bp-button--transparent _CSS-search__button-close\" @click=\"scope.close()\">\n            <ae-icon class=\"fa fa-window-close\"></ae-icon>\n        </div>\n      </div>\n     \n      <div class=\"_CSS-search-input-container\">\n        <ae-icon class=\"fa fa-search _CSS-search__icon\"></ae-icon>\n        <input style=\"flex: 1;\" autofocus placeholder=\"Wonach suchen Sie ?\" class=\"_CSS-search__input\" ref=\"input\" type=\"text\" v-model=\"locals.searchScope.text\" @input=\"controller.updateSearchResults()\" @keydown.esc=\"controller.closeSearch()\">\n        <!-- <div class=\"_CSS-search-modifier\">\n          <label class=\"_CSS-label\">Suchort:</label>\n          <div>\n            <button class=\"_CSS-button\" :class=\"{ '_CSS-button--active': locals.searchScope === 'global' }\" @click=\"locals.searchScope = 'global';controller.updateSearchResults()\">\n              <span>Überall</span>\n            </button>\n            <button class=\"_CSS-button\" :class=\"{ '_CSS-button--active': locals.searchScope === 'local' }\" @click=\"locals.searchScope = 'local';controller.updateSearchResults()\">\n              <span><ae-design name=\"title\" :document-id=\"params.pageDocumentId\"></ae-design></span>\n            </button>\n            <button v-if=\"locals.topMostInstanceId\" class=\"_CSS-button\" :class=\"{ '_CSS-button--active': locals.searchScope === 'app' }\" @click=\"locals.searchScope = 'app';controller.updateSearchResults()\">\n              <span><ae-design name=\"title\" :document-id=\"locals.topMostInstanceId\"></ae-design></span>\n            </button>\n          </div> \n        </div> -->\n      </div>\n\n\n      <ae-layout class=\"_CSS-search-spinner\" v-show=\"locals.searchStatistics.loading\" layout-id=\"fefa8352-0e9a-4ba8-8349-c9402ac8aefa\"></ae-layout>\n\n      <div    \n        v-if=\"locals.searchScope.text\"\n        v-show=\"!locals.searchStatistics.loading\"\n        class=\"_CSS-search__results\">\n\n        <ae-list\n          param-min-column-width=\"100%\"\n          list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n          :documents=\"locals.searchResults\"\n          @selected=\"$refs.searchDialog.close(); Aeppic.navigateTo($event.id)\"\n          param-design=\"search-title,title\">\n        </ae-list>\n  \n        <div class=\"_CSS-search-size\" v-if=\"!locals.searchStatistics.loading && locals.searchStatistics.executed  \">\n          <template v-if=\"locals.searchResults.length >= locals.searchStatistics.size\">\n            <span class=\"_CSS-search__text\">\n              Die Ergebnisse sind auf {{ locals.searchStatistics.size }} Einträge begrenzt.\n            </span>\n\n            <button v-if=\"locals.searchResults.length <= locals.searchStatistics.size\" class=\"bp-button bp-button--transparent\" @click=\"controller.loadMore()\">mehr laden</button>\n          </template>\n          <template v-else-if=\"locals.searchResults.length > 0\">\n            <span class=\"_CSS-search__text\">\n              #{{locals.searchResults.length}} gefunden.\n            </span>\n          </template>\n        </div>\n        \n      </div>\n      <!-- <template v-for=\"(resultsByFormId, formId) in locals.searchResultsByFormId\">\n        <div class=\"_CSS-result-header\">\n          <ae-design name=\"title\" :document-id=\"formId\"></ae-design>\n        </div>\n\n        <ae-list\n          param-min-column-width=\"100%\"\n          list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n          :documents=\"resultsByFormId\"\n          @selected=\"$refs.searchDialog.close(); Aeppic.navigateTo($event.id)\"\n          param-design=\"search-title,title\"\n          ></ae-list>\n      </template> -->\n        <!-- :param-design-params=\"{ hideIcon: true }\" -->\n\n      <!-- <ae-list\n        v-if=\"locals.searchText\"\n        v-show=\"!locals.searchStatistics.loading\"\n        param-min-column-width=\"100%\"\n        class=\"_CSS-search__results\"\n        list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n        :documents=\"locals.searchResult\"\n        @selected=\"$refs.searchDialog.close(); Aeppic.navigateTo($event.id)\"\n        param-design=\"search-title,title\"\n        ></ae-list> -->\n\n      <span class=\"_CSS-search__text\" v-if=\"!locals.searchStatistics.loading && locals.searchStatistics.executed && !locals.searchResults.length\">\n        Leider keine Ergebnisse gefunden ...\n      </span>\n\n      <!-- <span  style=\"padding-top: 5rem;\" class=\"_CSS-search__text _CSS-search-size\" v-if=\"!locals.searchStatistics.loading && locals.searchStatistics.executed && !locals.searchResults && locals.searchResults.length >= locals.searchStatistics.size\">\n        Die Ergebnisse sind auf {{ locals.searchStatistics.size }} Einträge begrenzt.\n      </span> -->\n\n   </div>\n  </div>\n</ae-dialog>\n\n\n","css":"._CSS-search--desktop-or-phone {\n  width: 100%;\n  height: 92%;\n}\n\n._CSS-search .ae-dialog__header {\n  padding: 0\n}\n\n._CSS-search .ae-dialog__body {\n  /* background: rgba(0,0,0,0.2); */\n  background: white;\n  overflow-x: hidden;\n}\n\n\n\n._CSS-search__body {\n  padding-bottom: 10em;\n  display: grid;\n  grid-auto-flow: column;\n  grid-template-columns: auto 1fr;\n}\n\n._CSS-search__text {\n  display: flex;\n  padding: 0 0 0 3rem;\n\n  font-size: 0.9em;\n  color: rgba(0,0,0,0.6);\n  margin-bottom: 2rem;\n}\n\n._CSS-search-size {\n  padding: 5rem 2rem;\n  display: flex;\n  flex-flow: column;\n  align-items: center;\n}\n\n._CSS-search-size > * {\n  max-width: 30rem;\n  padding: 0;\n}\n\n._CSS-search-input-container {\n  padding: 0 3rem 0 3rem;\n  display: grid;\n  align-items: center;\n  grid-auto-flow: row;\n  grid-template-columns: min-content auto;\n  grid-column-gap: 1rem;\n  grid-row-gap: 1.3rem;\n  font-size: 1.2em;\n\n  margin-bottom: 2rem;\n}\n\n._CSS-search__input {\n  outline: none;\n}\n\n._CSS-search__icon {\n  color: rgba(0,0,0,0.5);\n}\n\n._CSS-search__button-close {\n  font-size: 1.1em;\n  color: rgba(0,0,0,0.6) !important;\n\n  padding: 1rem !important;\n  margin: -1rem !important;\n}\n\n._CSS-search__results {\n  padding: 0 3rem 0 3rem;\n}\n\n._CSS-search-spinner {\n  height: 2rem;\n  width: 2rem;\n  margin: auto;\n}\n\n._CSS-search-modifier {\n  display: flex;\n  align-items: center;\n}\n\n._CSS-search-modifier ._CSS-label {\n  font-size: 0.7em;\n  color: grey;\n  padding-right: 1rem;\n}\n\n._CSS-search-modifier ._CSS-button {\n  font-size: initial;\n  color: black;\n  border-radius: 2em;\n\n  border-color: rgb(216, 216, 216);\n  border-style: solid;\n  border-width: 1px;\n  padding: 2px 1.5rem;\n  margin: 1px;\n}\n\n._CSS-button._CSS-button--active {\n  border-color: rgb(216, 216, 216) rgb(216, 216, 216) var(--ae-primary-l1);\n  border-width: 1px 1px 2px 1px;\n}\n\n._CSS-action-button:hover {\n  transform:scale(1.1);\n}\n\n\n\n\n/* search with form categories */\n\n._CSS-result-header {\n  font-size: 1.2em;\n  font-weight: bold;\n  padding-top: 2em;\n  padding-bottom: 0.5em;\n\n  display: flex;\n}\n\n\n\n\n/* TODO */\n\n\n._CSS-search-scopes {\n  display: flex;\n  flex-flow: column;\n  padding: 3rem 0 0 0;\n}\n\n._CSS-search-scopes__applications,\n._CSS-search-scopes__forms {\n  border-width: 0px 0;\n  border-color: rgb(216, 216, 216);\n  border-style: solid;\n  padding: 0 0.6rem ;\n}\n\n._CSS-search-scopes__forms {\n  margin-top: 3rem;\n}\n\n._CSS-search-scopes__form,\n._CSS-search-scopes__application {\n  padding: 0.3rem;\n  border-width: 0 0 0 4px;\n  border-color: var(--ae-primary);\n  border-style: solid;\n}\n\n._CSS-search-scopes__form:hover,\n._CSS-search-scopes__application:hover {\n  background-color: rgba(0,0,0,0.1);\n  cursor: pointer;\n}\n\n\n._CSS-search-scopes__form--active,\n._CSS-search-scopes__application--active {\n  /* border-style: solid; */\n  /* border-width: 0 0 0 6px; */\n  position:relative;\n}\n\n._CSS-search-scopes__form--active::before,\n._CSS-search-scopes__application--active::before {\n  content:'';\n  position:absolute;\n  left:0;right:0;top:0;bottom:0;\n  background: var(--ae-primary);\n  opacity:0.2;\n}\n\n/* ae-phone */\n\n._CSS-search--phone ._CSS-search__body {\n  grid-auto-flow: row;\n  grid-template-columns: auto;\n}\n\n._CSS-search--phone ._CSS-search__results {\n  padding: 0;\n}\n\n\n._CSS-search--phone ._CSS-search-scopes+* > * {\n  padding: 0;\n}\n","controller":"class Controller {\n  async init() {\n    locals.defaultSearchLimit = 20\n    locals.companyId = params.companyId || Aeppic.HomePage.id\n    locals.searchScope = {\n      text: '',\n      a: '',\n      formId: ''\n    }\n    locals.topMostInstanceId = null\n    locals.searchStatistics = {\n      size: locals.defaultSearchLimit,\n      executed: false\n    }\n    locals.searchResults = []\n    locals.applicationsFormIds = {}\n\n    locals.applications = await this.getCompanyApplications()\n\n    if (locals.applications.length) {\n      locals.searchScope = {\n        text: '',\n        a: locals.applications[0].id,\n        formId: ''\n      }\n    }\n\n    for (const application of locals.applications) {\n      locals.applicationsFormIds[application.id] = []\n    }\n\n    // watchParam('pageDocumentId', (pageDocumentIdParam) => {\n    //   Aeppic.get(pageDocumentIdParam).then(((document) => {\n    //     if (!document.a) {\n    //       locals.topMostInstanceId = null\n    //       locals.canNavigateUp = false\n    //       return\n    //     }\n    //     locals.topMostInstanceId = document.a.length > 1 ? document.a[1] : null\n    //   }))\n    // }, {\n    //   immediate: true\n    // })\n\n    this.searchFn = (keepFormIds = false) => {\n      if (!locals.searchScope.text) {\n        this.resetSearch()\n        return\n      }\n\n      const wildcardifiedSearchText = locals.searchScope.text.split(' ').map((part, i) => {\n        if (part === '') {\n          return ''\n        }\n\n        let wildcard = ''\n        if (part.indexOf(':') === -1) {\n          wildcard = '*'\n        }\n\n        if (i > 0) {\n          return ` AND ${part}${wildcard}`\n        }\n        return `${part}${wildcard}`\n      }).join('')\n\n      console.log('search: ', `${this.documentSearchScope} ${wildcardifiedSearchText}`)\n\n      Aeppic.find(`${this.documentSearchScope} ${wildcardifiedSearchText}`, {\n        size: locals.searchStatistics.size\n      }).then(async (results) => {\n        console.log(results.length)\n        \n        locals.searchStatistics = Object.assign({}, locals.searchStatistics, {\n          loading: false,\n          executed: true\n        })\n\n        const { resultDocuments, formIds } = await this.resultToFormCategories(results)\n        locals.searchResults = resultDocuments\n        if (!keepFormIds) {\n          locals.applicationsFormIds[locals.searchScope.a] = formIds\n        }\n      })\n    }\n  }\n\n  // addFormIdsToapplicationsFormIds(applicationId, formIds) {\n  //   for(const formId of formIds) {\n  //     if (locals.applicationsFormIds[applicationId].indexOf(formId) === -1) {\n  //       locals.applicationsFormIds[applicationId].push(formId)\n  //     }\n  //   }  \n  // } \n\n  async getCompanyApplications() {\n    const company = await Aeppic.get(locals.companyId)\n\n    if (!company || !company.data.menuItems) {\n      return []\n    }\n\n    const menuItems = (await Aeppic.getAll(company.data.menuItems)).filter(t=>t)\n    const targets = await Aeppic.getAll(menuItems.map(item => item.data.target)) \n\n    return targets.filter(t => t != null) \n  }  \n\n  async resultToFormCategories(results) {\n    const formIds = []\n    const resultDocuments = []\n\n    for (const result of results) {\n      let resultDocument = result\n      let formId = result.f.id\n\n      if (formId === '962b8959-5d31-4343-9ffc-73acd37cc437') {\n        const sourceDocumentOfIndexedDocumentResult = await Aeppic.get(result.data.source.id)\n\n        if (!sourceDocumentOfIndexedDocumentResult) {\n          continue\n        }\n\n        formId = sourceDocumentOfIndexedDocumentResult.f.id\n        resultDocument = sourceDocumentOfIndexedDocumentResult\n      }\n\n      // if (!tempSearchResultsByFormId[formId]) {\n      //   tempSearchResultsByFormId[formId] = []\n      // }\n\n      if (resultDocuments.indexOf(resultDocument) !== -1) {\n        console.warn('ignoring one search duplicate', resultDocument)\n        continue\n      }\n\n      if (formIds.indexOf(formId) === -1) {\n        formIds.push(formId)\n      }\n\n      resultDocuments.push(resultDocument)\n    }\n\n    return {\n      formIds,\n      resultDocuments\n    }\n  }\n\n  get documentSearchScope() {\n    // if (locals.searchScope === 'global') {\n    //   return Aeppic.Account.data.defaultPage.id ||  'b61adbaf-b51b-46b5-9358-587ef518075b'\n    // }\n    // if (locals.searchScope === 'local') {\n    //   return params.pageDocumentId\n    // }\n    \n    // if (locals.searchScope === 'app') {\n    //   return locals.topMostInstanceId\n    // }\n\n    // console.warn('[WARN]: invalid documentSearchScope ', locals.searchScope)\n    // return null\n    if (locals.searchScope.formId) {\n      return `a: ${locals.searchScope.a} f.id:${locals.searchScope.formId}`\n    }\n\n    return `a: ${locals.searchScope.a}`\n  }\n\n  openSearch() {\n    this.resetSearch()\n\n    $refs.searchDialog.show()\n\n    Aeppic.nextRenderPass(() => {\n      $refs.input && $refs.input.focus()\n    })\n  }\n\n  updateSearchResults(keepFormIds) {\n    if (!locals.searchScope.text) {\n      this.resetSearchResults()\n      return\n    }\n\n    locals.searchStatistics.loading = true\n\n    if (this.debouncedSearch) {\n      clearTimeout(this.debouncedSearch)\n    }\n\n    if (!keepFormIds) {\n      locals.searchScope.formId = ''\n    }\n\n    this.debouncedSearch = setTimeout(() => this.searchFn(keepFormIds), 800)\n  }\n\n  closeSearch() {\n    this.resetSearch()\n\n    if ($refs.searchDialog) {\n      $refs.searchDialog.close()\n    }\n  }\n\n  resetSearch() {\n    this.resetSearchResults()\n\n    locals.searchScope = {\n      text: '',\n      a: locals.applications[0].id,\n      formId: ''\n    }\n\n    locals.searchResults = []\n    // locals.resultToFormCategories = {}\n    locals.searchScope.text = ''    \n    // locals.searchScope = 'global'\n  }\n\n  loadMore() {\n    locals.searchStatistics.size += 200\n    this.updateSearchResults()\n  }\n\n  resetSearchResults() {\n    locals.searchStatistics.size = locals.defaultSearchLimit\n\n    locals.searchStatistics.loading = false\n    locals.searchStatistics.executed = false\n  }\n}"},"locks":[],"created":{"at":"2018-04-20T12:22:32+02:00","by":"","from":"","client":"server"},"modified":{"at":"2020-06-15T15:00:46+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1592233246571,"ct":1524219752415,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"d5255c05-8040-47e5-a2e3-0e499be8579d","v":"6f51bf641677462e","previous":{"v":"58299691d470405a"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Security: Accessible Documents","applies":"","packages":[],"template":"<div class=\"_CSS-container-grid\" v-if=\"locals.documents && locals.documents.length\">\n  <div class=\"_CSS-header\">\n    <div class=\"_CSS-header__cell\">\n      Rechte\n    </div>\n    <div class=\"_CSS-header__cell\">\n      Dokument\n    </div>\n    <!-- <div class=\"_CSS-header__cell\">\n      Zugriff möglich\n    </div> -->\n    <div class=\"_CSS-header__cell\">\n      Erhalten durch ...\n    </div>\n  </div>\n  <div class=\"_CSS-grid\" v-for=\"doc of locals.documents\" :key=\"doc.id\">\n    <div class=\"_CSS-rights\">\n      <template v-for=\"lockRef of doc.locks\" v-if=\"locals.lockMap[lockRef.id]\">\n        <template v-for=\"key of locals.lockMap[lockRef.id].keys\">\n          <ae-design name=\"rights\" :document-id=\"key\"></ae-design>\n        </template>\n      </template>\n    </div>\n    <div class=\"_CSS-document _CSS-document--clickable\" @click=\"Aeppic.navigateTo(doc)\">\n      <ae-design name=\"path\" :document=\"doc\"></ae-design>\n      <span v-if=\"doc.a && doc.a.length > 1\">&nbsp;/&nbsp;</span>\n      <ae-design  name=\"title\" :document=\"doc\"></ae-design> \n    </div>\n    <template v-for=\"lockRef of doc.locks\" v-if=\"locals.lockMap[lockRef.id]\">\n      <!-- <div>\n        <ae-design name=\"has-access\" :document=\"doc\" :param-account-id=\"locals.lockMap[lockRef.id].account\" :param-group-ids=\"locals.lockMap[lockRef.id].groups\"></ae-design>\n      </div> -->\n\n      <div class=\"_CSS-owner\">\n        <template v-if=\"locals.lockMap[lockRef.id].lock.data.shared\">\n          <ae-design class=\"_CSS-owner__lock\" name=\"title\" :document=\"lockRef\"></ae-design> \n        </template>\n        <template v-if=\"locals.lockMap[lockRef.id].account\">\n          <div v-if=\"locals.lockMap[lockRef.id].account === params.document.id\" :title=\"'Benutzer (' + params.document.data.name + ')'\">\n          <ae-icon class=\"fa fa-user-circle fa-2x\"></ae-icon>\n          </div>\n          <ae-design v-else name=\"profile-avatar\" :document-id=\"locals.lockMap[lockRef.id].account\"></ae-design>\n        </template>\n        <template v-if=\"locals.lockMap[lockRef.id].groups\">\n          <template v-for=\"groupId of locals.lockMap[lockRef.id].groups\">\n            <div v-if=\"groupId === params.document.id\" :title=\"'Gruppe (' + params.document.data.name + ')'\">\n              <ae-icon class=\"fa fa-users fa-2x\"></ae-icon>\n            </div>\n            <ae-design v-else :document-id=\"groupId\" name=\"avatar--small\"></ae-design>\n          </template>\n            <!-- <ae-design v-for=\"group of locals.lockMap[lockRef.id].groups\" :document=\"group\" name=\"avatar--small\"></ae-design> -->\n        </template>\n      </div>\n    </template>\n    <!-- <div class=\"_CSS-document\" v-if=\"locals.lockMap[lockRef.id].lock.data.shared\">\n      <ae-design  name=\"path\" :document=\"doc\"></ae-design>\n      /\n      <ae-design  name=\"title\" :document=\"doc\"></ae-design> \n    </div> -->\n  </div>\n</div>\n\n<div v-if=\"locals.documents.length === 100\">\n  <ae-icon class=\"fa fa-exclamation-triangle\"></ae-icon>\n  Only 100 documents are displayed.\n</div>\n \n<div v-if=\"locals.documents.length === 0\">\n  Keine Zugriffsrechte gefunden.\n</div>","css":"._CSS-container-grid {\n  background: var(--ae-background);\n  overflow: auto;\n  padding: 12px;\n  margin: 12px 0;\n  display: grid;\n}\n\n._CSS-grid {\n  display: grid;\n  /* grid-template-columns: 75px 1fr 75px 1fr; */\n  grid-template-columns: 75px 1fr 1fr;\n  padding: 4px;\n}\n\n._CSS-grid:nth-child(odd) {\n  background: var(--ae-background-d1);\n}\n\n._CSS-rights {\n  display: flex;\n  align-items: center;\n}\n\n._CSS-owner {\n  display: flex;\n  align-items: center;\n}\n\n._CSS-owner__lock {\n  margin-right: 8px;\n}\n\n._CSS-document {\n  display: flex;\n  align-items: center;\n  overflow: hidden;\n}\n\n._CSS-header {\n  display: grid;\n  /* grid-template-columns: 75px 1fr 75px 1fr; */\n  grid-template-columns: 75px 1fr 1fr;\n  padding: 12px 0;\n  border-bottom: 1px solid var(--ae-background-d2);\n  font-weight: 700;\n  color: var(--ae-foreground-l2);\n}\n\n._CSS-document--clickable {\n  cursor: pointer;\n}","controller":"class Controller {\n  async init () {\n    locals.documents = []\n    locals.lockMap = {}\n\n    await this._buildKeysMap(params.accountId, params.groupsIds)\n  }\n\n  async _buildKeysMap(accountId, groupsIds) {\n    const accountKeys = await Aeppic.find(`f.id:key-form AND data.accounts:${accountId}`, { sort: 'a_depth'})\n\n    const groupQuery = groupsIds.map(id => `data.groups:${id}`).join(' OR ')\n\n    const groupKeys = groupQuery ? await Aeppic.find(`f.id:key-form AND (${groupQuery})`, { sort: 'a_depth'}) : []\n\n    const lockMap = {}\n    const lockPromises = []\n \n    for (const key of accountKeys) {\n      const lockId = key.data.lock.id\n      const lockPromise = this._replaceOnResolve(lockMap, lockId, 'lock', Aeppic.get(lockId))\n      lockPromises.push(lockPromise)\n\n      if (lockMap[lockId]) {\n        lockMap[lockId] = {\n          account: accountId,\n          keys: [...lockMap[lockId].keys, key.id],\n          lock: lockPromise\n        }\n      } else {\n        lockMap[lockId] = {\n          account: accountId,\n          keys: [key.id],\n          lock: lockPromise\n        }\n      }\n    }\n\n    for (const key of groupKeys) {\n      const lockId = key.data.lock.id\n      const ownGroups = key.data.groups.filter(groupRef => groupsIds.includes(groupRef.id)).map(groupRef => groupRef.id)\n      const lockPromise = this._replaceOnResolve(lockMap, lockId, 'lock', Aeppic.get(lockId))\n      lockPromises.push(lockPromise)\n\n      if (!lockMap[lockId]) {\n        lockMap[lockId] = {\n          keys: [key.id],\n          groups: ownGroups,\n          lock: lockPromise\n        }\n      } else {\n        lockMap[lockId] = { ...lockMap[lockId], ...{ groups: ownGroups}}\n        lockMap[lockId].keys = [...lockMap[lockId].keys, key.id]\n      }\n    }\n\n    // unique keys\n    for (const lockId in lockMap) {\n      const entry = lockMap[lockId]\n      entry.keys = Array.from(new Set(entry.keys))\n    }\n\n    const lockQuery = Object.keys(lockMap).map(lockId => `locks:${lockId}`).join(' OR ')\n    if (!lockQuery) {\n      return\n    }\n\n    const documents = await Aeppic.find(lockQuery, { size: 100, sort: { field: 'a_depth' } })\n\n    await Promise.all(lockPromises)\n\n    locals.lockMap = lockMap\n    locals.documents = documents\n  }\n\n  async _replaceOnResolve(map, mapKey, entryKey, promise) {\n    const replacer = promise.then((result) => {\n      map[mapKey][entryKey] = result\n    })\n    return replacer\n  }\n} "},"locks":[],"created":{"at":"2019-01-17T10:33:33+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2019-04-05T09:01:35+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1554454895534,"ct":1547721213782,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"8c5c60ec-b7d1-4e46-a9ca-180c3c153179","v":"5c67cfab70fca453","previous":{"v":"79c9212c433c5239"},"p":"a266683d-c5cc-48db-aa99-a306d20ae787","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Selection Handler Layout","applies":"","packages":[{"id":"d648078c-4579-4023-a4ec-b7b9cf639b70","v":"57181d8dce7ad69c","text":"Selection Manager v2"}],"template":"<template v-if=\"params.showUi !== false\">\n  <div class=\"_CSS-selection\" v-if=\"locals.documents.length || locals.showIfEmpty\">\n    <div class=\"_CSS-actions\">\n      <div>{{locals.documents.length}} Dokumente ausgewählt</div>\n      <div class=\"_CSS-actions__buttons\">\n        <button class=\"ae-button _CSS-button\" xv-if=\"controller.actionAvailable('move')\" @click=\"controller.showMoveDialog()\" title=\"Verschieben\">\n          <ae-icon class=\"fa fa-arrows\" ></ae-icon>\n        </button>\n        <!-- <button class=\"ae-button _CSS-button\" v-if=\"controller.actionAvailable('copy')\" @click=\"controller.executeAction('copy')\" title=\"Hierher kopieren\">\n          <ae-icon class=\"far fa-copy\"></ae-icon>\n        </button> -->\n        <ae-layout  layout-id=\"0ded34c5-1221-4511-af93-d897a79f1369\"\n                    xv-if=\"controller.actionAvailable('delete')\"\n                    :param-documents=\"locals.documents\"\n                    @delete=\"controller.clear()\"\n                    :param-force-show=\"true\"\n        ></ae-layout>\n        <button class=\"ae-button _CSS-button\" @click=\"controller.clear()\" title=\"Auswahl verwerfen\">\n          <ae-icon class=\"fa fa-ban\" ></ae-icon>\n        </button>\n      </div>\n    </div>\n    <ae-list  class=\"_CSS-list\"\n              list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n              :documents=\"locals.documents.slice(0,100)\"\n              param-design=\"selection-card\"\n              @remove=\"controller.remove($event)\"\n    ></ae-list>\n  </div>\n\n  <ae-layout ref=\"move\" layout-id=\"6de540a9-0130-4fa6-839b-647b8bd33dc5\" @moved=\"controller.clear()\"></ae-layout>\n\n</template>\n","css":"\n._CSS-selection {\n  padding: 0;\n  box-shadow: var(--ae-shadow-2);\n  transition: opacity .15s, visibility 1s;\n  border-radius: var(--ae-border-radius);\n  min-width: 360px;\n  width: 20vw;\n  min-height: 200px;\n  height: 20vh;\n  overflow: hidden;\n  display: flex;\n  flex-flow: column;\n}\n \n._CSS-list {\n  flex: 1;\n  width: 100%;\n  padding: var(--ae-size-2);\n  overflow-x: hidden;\n  overflow-y: scroll;\n  background: var(--ae-background-100);\n}\n\n._CSS ._CSS-actions {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  font-size: 18px;\n  padding: 6px;\n  background: var(--ae-ui-background);\n  border-bottom: var(--ae-border-width) solid var(--ae-border-color);\n}\n\n._CSS-actions__buttons {\n  display: flex;\n}\n","controller":"class Controller {\n  async init() {\n    this._handler = () => {\n      this.updateDocuments()\n    }\n\n    locals.documents = []\n    locals.showIfEmpty = false\n\n    $on('show', () => this.showSelectionDialog())\n\n    watchParam('selection', (selection) => {\n      this.setup()\n    })\n\n    this.setup()\n  }\n\n  get _selection() {\n    return params.selection || packages.SelectionManager\n  }\n\n  async setup() {\n    this.destroy()\n\n    if (!this._selection.selectionsCount) {\n      this._selection.create()\n    }\n\n    await this.updateDocuments()\n    this._selection.addOnChangeHandler(this._handler)\n  }\n\n  destroy() {\n    if (this._selection) {\n      this._selection.removeOnChangeHandler(this._handler)\n    }\n  }\n\n  showSelectionDialog() {\n    if (params.showUi === false) {\n      return\n    }\n\n    locals.showIfEmpty = true\n  }\n\n  get result() {\n    return this._selection.result()\n  }\n\n  clear() {\n    this._selection.create()\n    locals.documents = []\n    locals.showIfEmpty = false\n  }\n\n  async updateDocuments() {\n    const documents = await Aeppic.find(this._selection.result(), {\n      sort: {\n        field: 'data.name'\n      }\n    })\n\n    if (documents.length) {\n      $emit('selected-documents', documents.length)\n    } else {\n      $emit('unselected-documents')\n    }\n\n    locals.documents = documents\n  }\n\n  remove(document) {\n    this._selection.remove(document.id)\n  }\n\n  showMoveDialog() {\n    $refs.move.$emit('show', locals.documents)\n  }\n\n  deleteSelection() {\n    this._selection.create()\n  }\n} \n"},"locks":[],"created":{"at":"2018-12-12T10:38:38+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2021-10-07T09:53:23+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1633600403917,"ct":1544611118603,"a_depth":3,"a":["apps","5a8a5d3c-f995-43ef-8d37-1f8a5e4550da","a266683d-c5cc-48db-aa99-a306d20ae787"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"072c0d3c-68f4-4b7c-9803-d6513f60e507","v":"1c271e14e9fce8c4","previous":{"v":"1b8a06a9e1c8a62a"},"p":"a266683d-c5cc-48db-aa99-a306d20ae787","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Selection v2 Commands for params.document","applies":"","packages":[{"id":"d648078c-4579-4023-a4ec-b7b9cf639b70","v":"2717577f8f96b28a","text":"Selection Manager v2"}],"template":"<div v-if=\"locals.commands.length && controller.selection?.result() \">\n  \n  <ae-layout  layout-id=\"ed784d22-af86-420e-b70c-15a6e4dc7512\"\n              v-for=\"command of locals.commands\"\n              :param-command-id=\"command.id\"\n              :param-target=\"params.document\"\n  ></ae-layout>\n</div>\n","css":"","controller":"class Controller {\n  init() {\n    this.FORMS = {\n      Command: 'command-form'\n    }\n\n    locals.commands = []\n\n    this.onChange = () => this.onSelectionsChange()\n    packages.Selections.addOnChangeHandler(this.onChange)\n\n    this.onSelectionsChange()\n  }\n\n  async onSelectionsChange() {\n    console.log('onSelectionsChange')\n    const selection = this.selection\n\n    if (selection) {\n      locals.commands = await Aeppic.find(`p:${params.document.f.id} f.id:${this.FORMS.Command} data.name:selection*`)\n      return\n    }\n\n    locals.commands = []\n  }\n\n  get selection() {\n    if (!params.selectionId) {\n      return\n    }\n\n    return packages.Selections.get(params.selectionId)\n  }\n\n  destroy() {\n    if (packages.Selections) {\n      packages.Selections.removeOnChangeHandler(this.onChange)\n    }\n  }\n}"},"locks":[],"created":{"at":"2021-07-27T09:52:37+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-03-15T12:45:31+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1647348331636,"ct":1627379557552,"a_depth":3,"a":["apps","5a8a5d3c-f995-43ef-8d37-1f8a5e4550da","a266683d-c5cc-48db-aa99-a306d20ae787"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"f4d43a5a-2177-49cc-9a2b-bec78a0ab12a","v":"066a3aab7b01d63e","previous":{"v":"06928b781a1d7d20"},"p":"2d46771e-84af-45f3-bc70-2c1793b412a9","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"Send Ping Dialog","applies":"","packages":[],"template":"<ae-dialog ref=\"dialog\" @close=\"() => controller?.generateNewData()\" :dialog-size=\"{ height: 'var(--ae-dialog__height--medium)' }\">\n  <template #header=\"scope\">\n    <div class=\"_CSS-dialog__header\">\n      <span>Ping senden</span>\n\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n  \n  <template #body=\"scope\">\n    <div class=\"_CSS-dialog__body\">\n      <ae-layout  v-if=\"locals.newPing\"\n                  layout-id=\"acd83791-970f-4b6e-bebd-d7f3bca52014\"\n                  :param-document=\"locals.newPing\"\n                  param-fields-to-display=\"receiver,content\"\n      ></ae-layout>\n      <!-- <ae-form v-if=\"locals.newPing\" :document=\"locals.newPing\"></ae-form> -->\n\n      <!-- <section class=\"_CSS-line ae-form-cell ae-control-container\">\n        <label class=\"ae-form-cell__label\">Senden an</label>\n        <div class=\"ae-form-cell__input class _CSS-receiver\">\n          <ae-design v-if=\"locals.data.employee\" name=\"avatar--tiny\" :document=\"locals.data.employee\"></ae-design>\n          <ae-design v-if=\"locals.data.employee\" name=\"title\" :document=\"locals.data.employee\" style=\"margin: 0 var(--ae-size-2);\"></ae-design>\n\n          <ae-layout layout-id=\"36649f27-5869-49e6-9b49-3b5c3b9c795d\" :param-settings=\"locals.selectorSettings\" :param-hide-path=\"true\" @selected=\"locals.data.employee = $event\"></ae-layout>\n        </div>\n\n      </section>\n\n      <section class=\"_CSS-line ae-form-cell ae-control-container\">\n        <label class=\"ae-form-cell__label\">Kommentar (optional)</label>\n        <textarea v-model=\"locals.data.comment\"></textarea>\n      </section> -->\n\n    </div>\n  </template>\n  <template #commands=\"scope\">\n    <section class=\"_CSS-dialog__actions\">\n      <button class=\"ae-button ae-button\" @click.stop=\"scope.close()\">Abbrechen</button>\n      <button class=\"ae-button ae-button--primary\" @click.stop=\"controller.sendNotification()\" :disabled=\"!locals.newPing || !locals.newPing.data.receiver.length || !locals.newPing.data.content\">\n        Senden\n      </button>\n    </section>\n  </template>\n</ae-dialog>","css":"._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n._CSS-receiver {\n  display: flex;\n  align-items: center;\n}","controller":"class Controller {\n  init() {\n    locals.newPing = null\n\n    this.FORMS = {\n      Ping: '42cf6e7a-e304-49a6-86e1-c94d84f1d0d9',\n    }\n\n    $on('show', () => {\n      this.showSelector()\n    })\n  }\n\n  async newPing() {\n    locals.newPing = await Aeppic.new(this.FORMS.Ping, Aeppic.Account.id)\n    locals.newPing.addReference('document', params.document)\n    locals.newPing.addReference('who', Aeppic.Account)\n  }\n\n  async showSelector() {\n    console.log('show')\n\n    await this.newPing()\n\n    $refs.dialog && $refs.dialog.show({ target: $refs.button })\n  }\n\n  async sendNotification() {\n    if (!locals.newPing || !locals.newPing.data.receiver.length || !locals.newPing.data.content?.length) {\n      return \n    }\n\n    Aeppic.save(locals.newPing)\n\n    $refs.dialog && $refs.dialog.close()\n\n    this.newPing()\n  }\n}"},"locks":[],"created":{"at":"2020-05-08T08:50:47+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2023-01-16T14:51:03+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1673880663655,"ct":1588927847115,"a_depth":3,"a":["apps","c9b12874-99d0-40e8-86cc-c3fe0477a15a","2d46771e-84af-45f3-bc70-2c1793b412a9"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"de0e49dc-2e18-474a-b1cb-6aa548602d16","v":"86963ac090347b5e","previous":{"v":"00115ccbcd81c97c"},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"service-worker","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"8da44e785879d6c0","text":"Window"}],"template":"<div ref=\"rootHandle\"></div>","css":"","controller":"class Controller {\n  async init() {\n    return\n    \n    this.MATCHERS = {\n      // SERVICE_WORKER_NAME_INFO: /.*sw-([^-]+)-([\\d\\.]+)\\.min\\.js$|.*sw-([^-]+)-([\\d\\.]+)\\.js$/\n      SERVICE_WORKER_NAME_INFO: /.*sw-([^-]+)-([\\d\\.]+)(\\.min){0,1}\\.js$/\n    }\n\n    const navigator = packages.window && packages.window.navigator\n\n    if (!navigator) {\n      return\n    }\n\n    if (!'serviceWorker' in navigator) {\n      console.log('Service Worker not supported in this browser')\n      return\n    }\n\n    const useServiceWorker = await Aeppic.Preferences.getSetting('system:webapp:useServiceWorker')\n\n    if (useServiceWorker) {\n      this.loadServiceWorker(navigator)\n    } else {\n      if (navigator.serviceWorker) {\n        navigator.serviceWorker.register('/noop-service-worker.js', { scope: '/' }).then(() => {\n          console.log('service-worker: registered')\n        }, (error) => {\n          console.error('service-worker: could not register', error)\n        }).catch((error) => {\n          console.error('service-worker: unhandled error', error)\n        })\n      }\n    }\n  }\n\n  async loadServiceWorker(navigator) {\n    const { userSettings } = await Aeppic.Preferences.getSettingsDocuments('system:webapp:serviceWorker')  \n\n    const serviceWorkerFile = userSettings.data.serviceWorker\n    \n    console.log('Service Worker: Ensuring', serviceWorkerFile)\n\n    const hasValidWorkerDefinition = serviceWorkerFile.name && serviceWorkerFile.size > 0 && serviceWorkerFile.type === 'text/javascript' \n\n    if (!hasValidWorkerDefinition) {\n      console.error('The file field in the worker definition is not properly definied. File size and type need to be correct for a javascript file')\n      return\n    }\n\n    const workerName = serviceWorkerFile.name // 'sw-my_branch-2.334.232.min.js'\n    const desiredServiceWorkerInfo = this.getServiceWorkerInfoFromPathName(workerName)\n    console.info('Service Worker: Desired Worker Info', desiredServiceWorkerInfo)\n\n    if (!desiredServiceWorkerInfo.branch || !desiredServiceWorkerInfo.version) {\n      console.error('Service Worker files MUST be named `sw-${branchName}-${semver}.${suffix}. Where suffix is either .js or .min.js')\n      return\n    }\n\n    const currentRegisteredWorkerInfo = await this.getServiceWorkerInfo(navigator)\n    console.info('Service Worker: Worker currently registered', currentRegisteredWorkerInfo)\n\n    const originalServiceUrl = Aeppic.Content.getSrc(userSettings, 'serviceWorker')\n\n    if (originalServiceUrl.indexOf('?') < 0) {\n      console.error('Content Url MUST contain parameters so we can append the workerName')\n      return \n    }\n\n    if (desiredServiceWorkerInfo.branch != currentRegisteredWorkerInfo.branch || desiredServiceWorkerInfo.version != currentRegisteredWorkerInfo.version) {\n      const fullServiceUrl = originalServiceUrl.replace('_content', `_content/${workerName}`)  + '&headers=service-worker'\n\n      console.log('Service Worker Change required')\n\n      await this.registerServiceWorker(workerName, fullServiceUrl)\n    } else {\n      console.log('Service Worker registered is already correct version and branch')\n      console.info('If you desire to force a reload use the dev-tools to force it or unregister the existing one')\n    }\n  }\n\n  getServiceWorkerInfoFromPathName(pathname) {\n    const matches = pathname.match(this.MATCHERS.SERVICE_WORKER_NAME_INFO);\n\n    if (matches && matches.length > 1) {\n      const [ fullName, branch, version ] = matches\n      return { branch, version, fullName };\n    } else {\n      return { branch: '', version: '', fullName: pathname };\n    }\n  }\n\n  async getServiceWorkerInfo(navigator) {\n    const registration = await navigator.serviceWorker.getRegistration();\n\n    if (registration && registration.active) {\n      const { pathname } = new URL(registration.active.scriptURL);\n      return this.getServiceWorkerInfoFromPathName(pathname)\n    }\n    \n    return { branch: '', version: '', fullName: '' };\n  }\n\n  async registerServiceWorker(workerName, workerUrl) {\n    console.log(`Service Worker: registering ${workerName} at ${workerUrl}`);\n\n    try {\n      const registration = await navigator.serviceWorker.register(workerUrl, { scope: '/' });\n\n      const waitingWorker = registration.waiting\n      \n      if (waitingWorker) {\n        console.log('Service Worker: New worker is registered but still waiting')\n      }\n\n      if (registration && registration.active) {\n        await this.activateNewWorker(registration, workerUrl)\n        return true\n      }\n\n      return false;\n    } catch (error) {\n      const style = 'background-color:red; color:white'\n      console.group('%c Service Worker: registration failed. See here for details', style)\n      console.error('Service Worker: registration failed', error)\n      console.error('%c Service Worker: If the reason for the failure is a scope issue, the server is likely not sending the Service-Worker-Allowed header', style)\n      console.error('%c Service Worker: In that case, the service worker file content is not in the correct location to allow that. The aeppic-server has', style)\n      console.error('%c Service Worker: a configured list of ancestors which allow this kind of script content for use with service workers.', style)\n      console.error('%c Service Worker: By default it is set to all descendants of `/Preferences/system:webapp`, `Apps`, and `System`', style)\n      console.error('%c Service Worker: Ensure that the document containing that service worker is listed there or the server config must be appropriately changed`', style)\n      console.groupEnd()\n      return false;\n    }\n  }\n\n  async activateNewWorker(registration, newWorkerUrl) {\n    const currentWorker = registration.active;\n\n    if (newWorkerUrl.startsWith('/')) {\n      newWorkerUrl = packages.window.location.origin + newWorkerUrl\n    }\n\n    if (currentWorker.scriptURL === newWorkerUrl) {\n      console.log('Service Worker: New worker already active from', newWorkerUrl)\n      registration.update()\n      return\n    }\n\n    console.log('Service Worker: old worker still active', currentWorker.scriptURL)\n    const oldWorker = currentWorker\n\n    const oldWorkerRequiresTimeForShutdown = await this.waitForMessageFromWorker(oldWorker, 'getting-ready-for-deregistration', 1_000, false);\n    let forceUnregister = false\n\n    if (oldWorkerRequiresTimeForShutdown)  {\n      console.log('Service Worker: Old Service Worker is getting ready for deregistration', isGettingReady)\n      const readyForDeregistation = await this.waitForMessageFromWorker(oldWorker, 'ready-for-deregistration', 10_000, false);\n\n      if (!readyForDeregistation) {\n        console.warn('Service Worker: Old Service Worker did not get ready for deregistration in time. Moving to force a deregistration')\n        forceUnregister = true\n      }\n    } else {\n      console.warn('Service Worker: Old Service Worker is not getting ready for deregistration. Moving to force a deregistration')\n      forceUnregister = true\n    }\n\n    if (forceUnregister) {\n      console.warn('Old worker still needs to unregister')\n      // await currentWorker.unregister()\n    }\n\n    registration.update();\n\n    // if (reloadNecessary) {\n      // await Aeppic.nextRenderPass()\n      //$refs.rootHandle?.ownerDocument.defaultView.location.reload()\n      // packages.window.location.reload()\n    // }\n  }\n\n  waitForMessageFromWorker(worker, eventName, timeout, timeoutValue) {\n    const deferredWaitingForEvent = this.buildDeferred()\n    const waitingForTimeout = this.waitForTimeout(timeout, timeoutValue)\n    \n    const cleanup = () => {\n      console.log('Service worker: Cleaning up message listener')\n      worker.removeEventListener('message', onMessage)\n    }\n\n    const onMessage = (event) => {\n      if (event.name === eventName) {\n        console.log('Service worker: Received event', event)\n        deferredWaitingForEvent.resolve(event)\n        cleanup()\n      }\n    }\n\n    worker.addEventListener('message', onMessage)\n\n    return Promise.race([deferredWaitingForEvent.promise, waitingForTimeout]).finally(cleanup)\n  }\n\n  waitForTimeout(timeout, returnValue) {\n    // Resolve with boolean 'false' after period\n    return new Promise(resolve => {\n      const timeoutId = setTimeout(() => {\n        console.log('Service Worker Timeouted', timeoutId, returnValue)\n        clearTimeout(timeoutId);\n        resolve(returnValue);\n      }, timeout);\n    });\n  }\n\n  async switchServiceWorker(workerName, workerUrl) {\n    const switched = await this.registerServiceWorker(workerUrl);\n    if (switched) {\n      console.log(`Switch to ${workerName} successful`);\n      // Reload the page if the switch was successful\n      window.location.reload();\n    } else {\n      console.log(`Switch to ${workerName} unsuccessful`);\n    }\n  }\n\n  buildDeferred() {\n    let reject\n    let resolve\n    const promise = new Promise((re, rj) => {resolve = re, reject = rj})\n    return { promise, resolve, reject }\n  }\n}"},"locks":[],"created":{"at":"2019-09-23T12:08:52+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2024-03-19T10:23:41+01:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1710840221941,"ct":1621428481259,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"2b26f9b3-b5be-41e0-86de-cc5d0ca28ab2","v":"0839887a8d51e67a","previous":{"v":"31fdcd936e13c1d6"},"p":"a5d260b3-4a12-4625-97b0-48a83aaf6442","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Shared Casting Invitation Layout","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"f769dafadd21766c","text":"Window"}],"template":"<div class=\"ae-dialog-region ae-stacking-context ae-app ae-theme ae-light _CSS-app-container\" v-responsive>\n  <ae-layout layout-id=\"e8f8cc49-0118-43ba-ac25-0c016d6dea1d\"></ae-layout>\n\n  <div class=\"_CSS-app dbps-body\">\n    <transition name=\"_CSS-transition\">\n\n    <ae-design  :document-id=\"locals.currentPageDocumentId\"\n                name=\"page--model\"\n                :key=\"locals.renderCounter\"\n                @language-change=\"locals.renderCounter += 1\"\n                :param-share-filters=\"locals.shareFilters\"\n                :param-share-url=\"locals.shareUrl\"\n                :param-base-url=\"locals.baseUrl\"\n                @ae-will-navigate.native.stop.prevent=\"controller.goto($event)\"\n    ></ae-design>\n    </transition>\n  </div>\n\n  <ae-layout  layout-id=\"bc3c5cb8-1976-4a20-94c0-b8aae0771104\"\n              :param-page-document-id=\"params.currentPageDocumentId\"\n  ></ae-layout>\n</div>\n","css":"._CSS-app-container {\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n}\n\n._CSS-app {\n  width: 100%;\n  height: 100%;\n  overflow-y: scroll;\n  overflow-x: hidden; \n  -webkit-overflow-scrolling: touch;\n}\n\n._CSS-top-bar {\n  display: flex;\n  justify-content: flex-end;\n}\n\n\n._CSS-transition-enter-active, ._CSS-transition-leave-active  {\n  transition: opacity 0.5s ease;\n}\n\n._CSS-transition-enter, ._CSS-transition-leave-to {\n  opacity: 0;\n}","controller":"async init() {\n  this.SHARES_FOLDER_ID = '4f2ebae5-4382-4717-9a10-83dcebfe34dd'\n\n  locals.currentPageDocumentId = params.pageDocumentId\n  locals.renderCounter = 0\n  locals.share = null\n\n  locals.baseUrl = packages.window.location.origin \n\n  const shareIdentifier = packages.window.location.pathname.split('/').slice(-1)\n\n  if (!shareIdentifier) {\n    return\n  }\n  \n  locals.share = (await Aeppic.find(`p:${this.SHARES_FOLDER_ID} data.identifier:${shareIdentifier}`))[0]\n\n  if (!locals.share) {\n    return\n  }\n  \n  locals.shareUrl = packages.window.location.href\n  locals.shareFilters = await Aeppic.find(`p:${locals.share.id} f.id:a1d626fd-bb29-4e7a-9d54-a13957c0a37b`)\n}\n\ngoto(navigatoToEvent) {\n  if (!navigatoToEvent.detail.documentId) {\n    return\n  }\n\n  locals.currentPageDocumentId = navigatoToEvent.detail.documentId\n}"},"locks":[],"created":{"at":"2018-06-21T14:43:47+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894058,"ct":1529592227804,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","a5d260b3-4a12-4625-97b0-48a83aaf6442"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"3465b9e5-8872-4b07-a856-3fe77a9c4cad","v":"8c5f2ff36aefcb36","previous":{"v":"1242474eebc0f68e"},"p":"a5d260b3-4a12-4625-97b0-48a83aaf6442","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Shared eCasting Layout","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"14ae1b149bb0a209","text":"Window"}],"template":"<div class=\"ae-dialog-region ae-stacking-context ae-app ae-theme ae-light _CSS-app-container\" v-responsive>\n  <ae-layout layout-id=\"e8f8cc49-0118-43ba-ac25-0c016d6dea1d\"></ae-layout>\n\n  <div class=\"_CSS-app dbps-body\">\n    <ae-design  name=\"page--shared\"\n                class=\"_CSS-page\"\n                :document-id=\"params.pageDocumentId\"\n                :key=\"locals.renderCounter\"\n                :param-query-params=\"params.queryParams\"\n                @language-change=\"locals.renderCounter += 1\"\n    ></ae-design>\n  </div>\n    <ae-layout  layout-id=\"bc3c5cb8-1976-4a20-94c0-b8aae0771104\"\n              :param-page-document-id=\"params.pageDocumentId\"\n  ></ae-layout>\n</div>\n                <!-- :param-share-configuration=\"locals.shareConfiguration\" -->\n","css":"._CSS-app-container {\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n}\n\n._CSS-app {\n  width: 100%;\n  height: 100%;\n  overflow-y: scroll;\n  overflow-x: hidden; \n  -webkit-overflow-scrolling: touch;\n}\n\n\n/*\n.ae-desktop ._CSS-page {\n  max-width: 80%;\n  margin: auto;\n}\n*/","controller":"class Controller {\n  async init() {\n    this.SHARES_FOLDER_ID = '4f2ebae5-4382-4717-9a10-83dcebfe34dd'\n\n    locals.renderCounter = 0\n    locals.shareConfiguration = null\n  }\n}"},"locks":[],"created":{"at":"2018-10-30T12:49:46+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894065,"ct":1540903786819,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","a5d260b3-4a12-4625-97b0-48a83aaf6442"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"0d90f3de-8eb2-4541-b3d7-8e08354f8cef","v":"8e6ce9b42d3444d4","previous":{"v":"19d25c4319162df2"},"p":"79f0bb0e-40ac-49b6-869a-6de582dab712","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"Shared Layout Executor","applies":"","packages":[],"template":"<section class=\"_CSS-page ae-expand-region\">\n  <div class=\"_CSS-page__inner\">\n    <div v-if=\"locals.logo\">\n      <img height=\"48\" width=\"200\" :src=\"Aeppic.Content.getSrc(locals.logo,'file')\" ></img>\n    </div>\n    <div v-if=\"!locals.autoLogin && !locals.status.done && (!locals.result.layoutId && !locals.result.documents.length)\">\n      <label :for=\"id('password')\">Passwort</label>\n      <input :id=\"id('password')\" :disabled=\"locals.status.running\" type=\"password\" v-model=\"locals.password\" autofocus autocomplete=\"new-password\">\n      <button :disabled=\"locals.status.running\" class=\"ae-button ae-button--primary\" @click.stop=\"controller.execute()\">\n        Abfragen\n      </button>\n    </div>\n      <div v-if=\"locals.status.running\">\n        <ae-icon class=\"fad fa-spinner-third fa-spin fa-3x\"></ae-icon>\n        Lade Daten ...\n      </div>\n      <div v-if=\"locals.status.once && !locals.result.layoutId && !locals.result.documents.length\">\n        Falsches Passwort oder keine Freigabe aktiv.\n      </div>\n      <ae-layout v-if=\"locals.result.layoutId\"\n                :layout-id=\"locals.result.layoutId\"\n                :param-result=\"locals.result\"\n                :param-page-document-id=\"locals.result.targetDocument.id\"\n                v-show=\"locals.status.done\"\n      ></ae-layout>\n      <div class=\"_CSS-page__inner__content\" v-else-if=\"locals.result.documents.length\">\n      <ae-list \n                list-id=\"simple-list\"\n                :documents=\"locals.result.documents\"\n                param-design=\"search-card\"\n                :param-design-params=\"{ readonly: true }\"\n                v-show=\"locals.status.done\"\n      ></ae-list>\n      </div>\n  </div>\n</section>\n","css":"._CSS-page {\n\n  height: 100%;\n  width: 100%;\n\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-page__inner {\n  height: 100%;\n  flex: 1;\n  overflow-y: scroll;\n  overflow-x: auto;\n  padding: var(--bp-page-content-padding);\n}\n\n._CSS-page__inner__content {\n  margin: auto;\n  max-width: var(--ae-page-max-width);\n  xheight: 100%;\n}","controller":"class Controller {\n  async init() {\n    locals.password = ''\n    locals.result = {}\n    locals.logo = null\n    locals.autoLogin = params.queryParams && 'auto' in params.queryParams\n\n    locals.status = {\n      done: false,\n      running: locals.autoLogin,\n      once: false,\n    }\n\n    this._resetResult()\n\n    locals.logo = await Aeppic.get('5a5cfd6a-1748-4c6a-a2a1-64490c6e28ae')\n\n    if (locals.autoLogin) {\n      await this.execute()\n    }\n  }\n\n  async execute() {\n    locals.status.running = true\n\n    const commandOptions = {\n      password: locals.password,\n    }\n\n    const commandResult = await this._executeCommandRequest('72c8d9dd-09f6-4f58-9bd2-38cb266cf286', params.pageDocumentId, commandOptions)\n\n    if (!commandResult.ok) {\n      this._setStatusNoResult()\n      this._resetResult()\n      console.error('error', commandResult)\n      return\n    }\n\n    const { commandId = '', layoutId = '', structuralDocuments: baseStructuralDocuments, targetDocument, shareDocument } = commandResult.value\n\n    commandOptions.shareDocument = shareDocument\n\n    const documentResults = await this._executeCommandRequest(commandId, targetDocument.id, commandOptions)\n\n    if (!documentResults.ok) {\n      this._setStatusNoResult()\n      this._resetResult()\n      console.error('error', documentResults)\n      return\n    }\n\n    const { documents, structuralDocuments } = documentResults.value\n\n    const importingPromises = []\n\n    if (baseStructuralDocuments && baseStructuralDocuments.length) {\n      importingPromises.push(Aeppic.import(baseStructuralDocuments))\n    }\n\n    if (structuralDocuments && structuralDocuments.length) {\n      importingPromises.push(Aeppic.import(structuralDocuments))\n    }\n\n    const cloned = JSON.parse(JSON.stringify(documents))\n    importingPromises.push(Aeppic.import(cloned))\n\n    locals.result = { ...documentResults.value, ...{ targetDocument, layoutId, documents, commandId, structuralDocuments: null } }\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    const importResults = await Promise.all(importingPromises)\n    console.log(importingPromises)\n\n    this._setStatusDone()\n  }\n\n  async _executeCommandRequest(commandId, targetId, paramParams) {\n    const params = paramParams || {}\n\n    // TODO: Commands.execute is not working for anonymous accounts\n    const httpRequest = await Aeppic.fetch(`api/docs/${targetId}/_executeCommand?commandId=${commandId}&apiToken=a12d191b4622a6cbd475e9e838ee`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json;charset=utf-8'\n      },\n      body: JSON.stringify({\n        parameters: params\n      })\n    })\n\n\n    if (httpRequest.ok) {\n      const result = await httpRequest.json()\n      return result\n    } else {\n      return { ok: false }\n    }\n  }\n\n  _resetResult() {\n    locals.result = JSON.parse(JSON.stringify(\n      {\n        layoutId: '',\n        documents: []\n      }\n    ))\n  }\n\n  _setStatusNoResult() {\n    locals.status.once = true\n    locals.status.running = false\n    locals.status.done = false\n  }\n  \n  _setStatusDone() {\n    locals.status.once = true\n    locals.status.running = false\n    locals.status.done = true\n  }\n}"},"locks":[],"created":{"at":"2020-05-08T08:50:45+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2022-05-03T12:49:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1651582173028,"ct":1588927845366,"a_depth":3,"a":["apps","634a96fa-b352-4447-85c8-fced840e2693","79f0bb0e-40ac-49b6-869a-6de582dab712"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"88ea9b3c-7fea-4176-9e3d-2be353eb6799","v":"2868799bf623cd5e","previous":{"v":"9aae84d9161e3b18"},"p":"79f0bb0e-40ac-49b6-869a-6de582dab712","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Shared Layout Executor: root layout","applies":"","template":"<div  class=\"_CSS-root\"\n      tabindex=\"0\" \n      @drop.prevent\n      @dragover.prevent\n      @ae-will-navigate.capture.stop.prevent\n      @ae-drill-into.stop.prevent\n      :class=\"[ \n                'ae-expand-region', 'ae-theme', locals.theme, \n                { 'ae-phone': Aeppic.Device === 'Phone' },\n                { 'bizpin_2x': locals.isRedesign },\n      ]\"\n>\n\n  <div class=\"_CSS-app ae-dialog-region ae-stacking-context ae-app\" \n    v-responsive\n  >\n    <ae-layout  v-if=\"locals.isRedesign\"\n                layout-id=\"39883b9e-c058-45e2-bf28-d4668b6035a0\"\n                :param-page-document-id=\"params.pageDocumentId\"\n                :param-query-params=\"params.queryParams\"\n                class=\"h-full w-full\"\n    ></ae-layout>\n    <ae-layout  v-else\n                layout-id=\"0d90f3de-8eb2-4541-b3d7-8e08354f8cef\"\n                :param-page-document-id=\"params.pageDocumentId\"\n                :param-query-params=\"params.queryParams\"\n                class=\"_CSS-main\"\n    ></ae-layout>\n  </div>\n</div>","css":"._CSS {\n  width:100%;\n  height:100%;\n}\n\n._CSS-root {\n  background: var(--ae-background-100);\n  flex-direction:column;\n  width:100%;\n  height:100%;\n}\n \n._CSS-app {\n  width:100%;\n  height:100%;\n}\n\n._CSS-main {\n  display: flex;\n  flex-direction: row;\n  position: relative;\n  flex:1;\n  align-items: stretch;\n  height:100%;\n  line-height: 1.4;\n  xbackground: var(--ae-background-100);\n  color: var(--ae-background-900);\n\n  background-color: hsla(0, 0%, 99%);\n  /* \"Topography\" by \"Steve Schoger\" (https://www.heropatterns.com) is licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) */\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='600' viewBox='0 0 600 600'%3E%3Cpath fill='%239C92AC' fill-opacity='0.04' d='M600 325.1v-1.17c-6.5 3.83-13.06 7.64-14.68 8.64-10.6 6.56-18.57 12.56-24.68 19.09-5.58 5.95-12.44 10.06-22.42 14.15-1.45.6-2.96 1.2-4.83 1.9l-4.75 1.82c-9.78 3.75-14.8 6.27-18.98 10.1-4.23 3.88-9.65 6.6-16.77 8.84-1.95.6-3.99 1.17-6.47 1.8l-6.14 1.53c-5.29 1.35-8.3 2.37-10.54 3.78-3.08 1.92-6.63 3.26-12.74 5.03a384.1 384.1 0 0 1-4.82 1.36c-2.04.58-3.6 1.04-5.17 1.52a110.03 110.03 0 0 0-11.2 4.05c-2.7 1.15-5.5 3.93-8.78 8.4a157.68 157.68 0 0 0-6.15 9.2c-5.75 9.07-7.58 11.74-10.24 14.51a50.97 50.97 0 0 1-4.6 4.22c-2.33 1.9-10.39 7.54-11.81 8.74a14.68 14.68 0 0 0-3.67 4.15c-1.24 2.3-1.9 4.57-2.78 8.87-2.17 10.61-3.52 14.81-8.2 22.1-4.07 6.33-6.8 9.88-9.83 12.99-.47.48-.95.96-1.5 1.48l-3.75 3.56c-1.67 1.6-3.18 3.12-4.86 4.9a42.44 42.44 0 0 0-9.89 16.94c-2.5 8.13-2.72 15.47-1.76 27.22.47 5.82.51 6.36.51 8.18 0 10.51.12 17.53.63 25.78.24 4.05.56 7.8.97 11.22h.9c-1.13-9.58-1.5-21.83-1.5-37 0-1.86-.04-2.4-.52-8.26-.94-11.63-.72-18.87 1.73-26.85a41.44 41.44 0 0 1 9.65-16.55c1.67-1.76 3.18-3.27 4.83-4.85.63-.6 3.13-2.96 3.75-3.57a71.6 71.6 0 0 0 1.52-1.5c3.09-3.16 5.86-6.76 9.96-13.15 4.77-7.42 6.15-11.71 8.34-22.44.86-4.21 1.5-6.4 2.68-8.6.68-1.25 1.79-2.48 3.43-3.86 1.38-1.15 9.43-6.8 11.8-8.72 1.71-1.4 3.26-2.81 4.7-4.3 2.72-2.85 4.56-5.54 10.36-14.67a156.9 156.9 0 0 1 6.1-9.15c3.2-4.33 5.9-7.01 8.37-8.07 3.5-1.5 7.06-2.77 11.1-4.02a233.84 233.84 0 0 1 7.6-2.2l2.38-.67c6.19-1.79 9.81-3.16 12.98-5.15 2.14-1.33 5.08-2.33 10.27-3.65l6.14-1.53c2.5-.63 4.55-1.2 6.52-1.82 7.24-2.27 12.79-5.06 17.15-9.05 4.05-3.72 9-6.2 18.66-9.9l4.75-1.82c1.87-.72 3.39-1.31 4.85-1.91 10.1-4.15 17.07-8.32 22.76-14.4 6.05-6.45 13.95-12.4 24.49-18.92 1.56-.96 7.82-4.6 14.15-8.33v-64.58c-4 8.15-8.52 14.85-12.7 17.9-2.51 1.82-5.38 4.02-9.04 6.92a1063.87 1063.87 0 0 0-6.23 4.98l-1.27 1.02a2309.25 2309.25 0 0 1-4.87 3.9c-7.55 6-12.9 10.05-17.61 13.19-3.1 2.06-3.86 2.78-8.06 7.13-5.84 6.07-11.72 8.62-29.15 10.95-11.3 1.5-20.04 4.91-30.75 11.07-1.65.94-7.27 4.27-6.97 4.1-2.7 1.58-4.69 2.69-6.64 3.66-5.63 2.8-10.47 4.17-15.71 4.17-17.13 0-41.44 11.51-51.63 22.83-12.05 13.4-31.42 27.7-45.25 31.16-7.4 1.85-11.85 7.05-14.04 14.69-1.26 4.4-1.58 8.28-1.58 13.82 0 .82.01.98.24 3.63.45 5.18.35 8.72-.77 13.26-1.53 6.2-4.89 12.6-10.59 19.43-13.87 16.65-22.88 46.58-22.88 71.68 0 2.39.02 4.26.06 8.75.12 10.8.1 15.8-.22 21.95-.56 11.18-2.09 20.73-5 29.3h-1.05c2.94-8.56 4.49-18.12 5.05-29.35.31-6.13.34-11.1.22-21.9-.04-4.48-.06-6.36-.06-8.75 0-25.32 9.07-55.47 23.12-72.32 5.6-6.72 8.88-12.99 10.38-19.03 1.09-4.4 1.18-7.85.74-12.93-.23-2.7-.24-2.86-.24-3.72 0-5.62.32-9.57 1.62-14.1 2.28-7.95 6.97-13.44 14.76-15.39 13.6-3.4 32.82-17.59 44.75-30.84C409 360.14 433.58 348.5 451 348.5c5.07 0 9.77-1.33 15.26-4.07 1.93-.96 3.9-2.05 6.58-3.62-.3.18 5.33-3.16 6.98-4.11 10.82-6.21 19.66-9.67 31.11-11.2 17.23-2.3 22.9-4.75 28.57-10.64 4.25-4.41 5.04-5.16 8.22-7.28 4.68-3.11 10.01-7.14 17.55-13.14a1113.33 1113.33 0 0 0 4.86-3.89l1.28-1.02a4668.54 4668.54 0 0 1 6.23-4.98c3.67-2.9 6.55-5.12 9.07-6.95 4.37-3.19 9.16-10.56 13.29-19.4v66.9zm0-116.23c-.62.01-1.27.06-1.95.13-6.13.63-13.83 3.45-21.83 7.45-3.64 1.82-8.46 2.67-14.17 2.71-4.7.04-9.72-.47-14.73-1.33-1.7-.3-3.26-.61-4.67-.93a31.55 31.55 0 0 0-3.55-.57 273.4 273.4 0 0 0-16.66-.88c-10.42-.16-17.2.74-17.97 2.73-.38.97.6 2.55 3.03 4.87 1.01.97 2.22 2.03 4.04 3.55a1746.07 1746.07 0 0 0 4.79 4.02c1.39 1.2 3.1 1.92 5.5 2.5.7.16.86.2 2.64.54 3.53.7 5.03 1.25 6.15 2.63 1.41 1.76 1.4 4.54-.15 8.88-2.44 6.83-5.72 10.05-10.19 10.33-3.63.23-7.6-1.29-14.52-5.06-4.53-2.47-6.82-7.3-8.32-15.26-.17-.87-.32-1.78-.5-2.86l-.43-2.76c-1.05-6.58-1.9-9.2-3.73-10.11-.81-.4-1.59-.74-2.36-1-2.27-.77-4.6-1.02-8.1-.92-2.29.07-14.7 1-13.77.93-20.55 1.37-28.8 5.05-37.09 14.99a133.07 133.07 0 0 0-4.25 5.44l-2.3 3.09-2.51 3.32c-4.1 5.36-7.06 8.48-10.39 11.12-.65.52-1.33 1.04-2.13 1.62l-4.11 2.94a106.8 106.8 0 0 0-5.16 3.99c-4.55 3.74-9.74 8.6-16.25 15.38-8.25 8.58-11.78 13.54-11.7 15.95.07 1.65 1.64 2.11 6.79 2.38 1.61.09 2.15.12 2.98.2 2.95.24 5.09.73 6.81 1.68 7.48 4.15 11.63 7.26 13.95 11.58 3.3 6.15.8 12.88-8.89 20.26-8.28 6.3-11.1 10.37-11.31 14.96-.06 1.17 0 1.93.26 4.43.69 6.47.25 10.65-2.8 17.42a44.23 44.23 0 0 1-4.16 7.53c-2.82 3.97-5.47 5.74-10.6 7.69-.43.16-3.34 1.23-4.27 1.59-1.8.68-3.38 1.36-5.01 2.14-4.18 2-8.4 4.6-13.1 8.24-8.44 6.51-13.23 14.56-15.98 25.06-1.1 4.2-1.55 6.81-2.8 15.21-1.26 8.6-2.17 12.64-4.08 16.55-2.1 4.28-11.93 26.59-12.97 28.88a382.7 382.7 0 0 1-6.37 13.41c-4.07 8.11-7.61 14.07-10.73 17.81-5.38 6.46-8.98 14.37-13.77 28.42a810.14 810.14 0 0 0-1.89 5.6c-1.8 5.35-2.96 8.6-4.26 11.85-6.13 15.32-25.43 26.31-46.46 26.31-11.2 0-20.58-2.74-31.02-8.55-5.6-3.13-4.55-2.42-22.26-14.54-14.33-9.8-17.7-10.73-20.47-6.9-.37.5-1.81 2.74-1.83 2.77a52.24 52.24 0 0 1-4.94 5.9c-.73.79-5.52 5.87-6.97 7.45-2.38 2.6-4.3 4.81-5.98 6.93a45.6 45.6 0 0 0-5.08 7.66c-1.29 2.57-1.9 5.25-2.66 10.6a997.6 997.6 0 0 1-.46 3.18h-1l.47-3.32c.77-5.45 1.4-8.2 2.75-10.9a46.54 46.54 0 0 1 5.2-7.84c1.7-2.14 3.63-4.38 6.03-6.98 1.45-1.59 6.24-6.68 6.96-7.46a51.58 51.58 0 0 0 4.84-5.78s1.47-2.26 1.86-2.8c3.25-4.5 7.08-3.44 21.84 6.67 17.67 12.08 16.62 11.38 22.19 14.48 10.3 5.73 19.5 8.43 30.53 8.43 20.65 0 39.57-10.77 45.54-25.69a219.7 219.7 0 0 0 4.24-11.8 6752.32 6752.32 0 0 0 1.88-5.6c4.83-14.16 8.47-22.14 13.96-28.73 3.05-3.66 6.56-9.57 10.6-17.61 1.97-3.93 4.04-8.31 6.35-13.38 1.03-2.28 10.88-24.61 12.98-28.91 1.85-3.79 2.75-7.76 4-16.25 1.24-8.44 1.7-11.07 2.81-15.32 2.8-10.7 7.71-18.94 16.33-25.6a73.18 73.18 0 0 1 13.29-8.35c1.66-.8 3.27-1.48 5.08-2.18.94-.36 3.86-1.43 4.28-1.59 4.95-1.88 7.44-3.55 10.14-7.33 1.35-1.9 2.68-4.3 4.06-7.37 2.97-6.58 3.39-10.59 2.72-16.9a27.13 27.13 0 0 1-.27-4.58c.22-4.94 3.21-9.24 11.7-15.7 9.33-7.11 11.66-13.34 8.62-19-2.2-4.09-6.25-7.12-13.55-11.17-1.57-.88-3.6-1.33-6.42-1.57-.8-.07-1.34-.1-2.95-.19-5.77-.3-7.63-.85-7.72-3.34-.1-2.81 3.5-7.87 11.97-16.69 6.53-6.8 11.75-11.69 16.33-15.45 1.79-1.47 3.42-2.72 5.2-4.03l4.12-2.94c.79-.58 1.46-1.08 2.1-1.59 3.26-2.6 6.16-5.65 10.21-10.94a383.2 383.2 0 0 0 2.5-3.32l2.31-3.09c1.8-2.39 3.04-4 4.29-5.48 8.47-10.17 16.98-13.96 37.27-15.3-.44.02 12-.9 14.32-.98 3.62-.1 6.05.16 8.46.98.8.27 1.62.62 2.47 1.04 2.27 1.14 3.17 3.87 4.27 10.85l.44 2.76c.17 1.07.33 1.97.5 2.83 1.44 7.69 3.62 12.29 7.8 14.57 6.76 3.68 10.6 5.15 13.99 4.94 4-.25 6.99-3.17 9.3-9.67 1.45-4.04 1.46-6.49.32-7.92-.9-1.12-2.28-1.62-5.57-2.27a55.8 55.8 0 0 1-2.67-.55c-2.54-.6-4.39-1.4-5.93-2.71a252.63 252.63 0 0 0-4.78-4.01 84.35 84.35 0 0 1-4.08-3.6c-2.73-2.6-3.86-4.43-3.28-5.95 1.02-2.64 7.82-3.54 18.93-3.37a230.56 230.56 0 0 1 16.73.88c2.76.39 3.2.49 3.68.6 1.4.3 2.95.62 4.62.91a82.9 82.9 0 0 0 14.56 1.32c5.56-.04 10.24-.86 13.73-2.6 8.1-4.05 15.89-6.9 22.17-7.56.7-.07 1.4-.11 2.05-.13v1zm0-100.94v1.5c-8.62 16.05-17.27 29.55-23.65 35.92-3.19 3.2-7.62 4.9-13.54 5.56-4.45.48-8.28.4-19.18-.2-9.91-.55-15.32-.44-20.52.78a84.05 84.05 0 0 1-15 2.11l-2.25.14c-12.49.75-19.37 1.78-32.72 5.74-4.5 1.33-9.27 2.49-14.3 3.48a246.27 246.27 0 0 1-32.6 3.97c-7.56.45-13.21.57-20.24.57-5.4 0-11.9 1.61-18 5.18-8.3 4.87-15.06 12.87-19.53 24.5a68.57 68.57 0 0 1-4.56 9.8c-3.6 6.2-6.92 8.99-13.38 12.18l-4.03 1.96a64.48 64.48 0 0 0-15.16 10.25c-8.2 7.33-13.72 16.63-22.54 35.6l-2.08 4.49c-7.3 15.7-11.5 23.3-17.35 29.87-7.7 8.66-20.25 14.42-40.31 20.08-4.37 1.23-19.04 5.08-19.24 5.13-6.92 1.87-11.68 3.34-15.63 4.92-10.55 4.22-18.71 10.52-36.38 26.52l-1.7 1.54c-8.58 7.76-13.41 11.9-18.81 15.88-3.95 2.9-8 5.67-12.97 8.91-2.06 1.34-10.3 6.6-12.33 7.94-11.52 7.5-18.53 13.04-24.62 20.08a62.01 62.01 0 0 0-6.44 8.85c-4.13 6.91-6.27 13.15-9.2 25.11l-1.54 6.26c-.6 2.45-1.15 4.54-1.72 6.58-2.97 10.7-6.9 17.36-14.78 26.91L69.6 491a148.51 148.51 0 0 0-4.19 5.3 23.9 23.9 0 0 0-3.44 6.28c-1.16 3.23-1.52 5.9-1.87 11.94-.58 10.05-1.42 15.04-4.63 22.67-1.57 3.72-5.66 14.02-6.41 15.8a73.46 73.46 0 0 1-3.57 7.4c-2.88 5.14-6.71 10.12-13.12 16.95-5.96 6.36-8.87 10.9-10.61 16a56.88 56.88 0 0 0-1.38 4.82l-.46 1.84h-1.03l.52-2.08c.52-2.09.92-3.49 1.4-4.9 1.8-5.25 4.78-9.9 10.84-16.36 6.35-6.78 10.13-11.7 12.97-16.77a72.5 72.5 0 0 0 3.52-7.29c.75-1.76 4.84-12.06 6.4-15.8 3.17-7.5 3.99-12.4 4.56-22.33.35-6.14.72-8.88 1.93-12.23a24.9 24.9 0 0 1 3.58-6.54c1.27-1.7 2.6-3.37 4.22-5.34l4.11-4.95c7.8-9.46 11.66-16 14.59-26.54.56-2.04 1.1-4.12 1.71-6.56l1.53-6.26c2.96-12.04 5.13-18.36 9.32-25.39 1.84-3.08 4-6.05 6.54-8.99 6.17-7.12 13.24-12.7 24.83-20.26 2.05-1.33 10.28-6.6 12.33-7.94 4.96-3.22 9-5.98 12.92-8.87 5.37-3.95 10.19-8.08 18.74-15.82l1.7-1.54c17.76-16.09 25.98-22.43 36.67-26.7 4-1.6 8.8-3.09 15.75-4.96.21-.06 14.87-3.9 19.22-5.13 19.9-5.61 32.32-11.31 39.85-19.78 5.76-6.48 9.93-14.02 17.18-29.64l2.09-4.5c8.87-19.07 14.44-28.46 22.77-35.9a65.48 65.48 0 0 1 15.38-10.4l4.04-1.97c6.3-3.1 9.47-5.77 12.96-11.77a67.6 67.6 0 0 0 4.48-9.67c4.56-11.84 11.47-20.02 19.97-25 6.25-3.66 12.93-5.32 18.5-5.32 7.01 0 12.65-.12 20.17-.57a245.3 245.3 0 0 0 32.47-3.96c5-.98 9.75-2.13 14.22-3.45 13.43-3.98 20.38-5.02 32.94-5.78l2.24-.14c5.76-.37 9.8-.9 14.85-2.09 5.31-1.25 10.79-1.35 22.6-.7 9.04.5 12.84.58 17.21.1 5.71-.62 9.94-2.26 12.95-5.26 6.44-6.45 15.3-20.37 24.35-36.72zm0 450.21c-1.28-4.6-2.2-10.55-3.33-20.25l-.24-2.04-.23-2.03c-1.82-15.7-3.07-21.98-5.55-24.47-2.46-2.46-3.04-5.03-2.52-8.64.1-.6.18-1.1.39-2.15.69-3.54.77-5.04.08-6.84-.91-2.38-3.31-4.41-7.79-6.26-5.08-2.09-6.52-4.84-4.89-8.44.66-1.45 1.79-3.02 3.52-5.01 1.04-1.2 5.48-5.96 5.08-5.53 6.15-6.7 8.98-11.34 8.98-16.48a15.2 15.2 0 0 1 6.5-12.89v1.26a14.17 14.17 0 0 0-5.5 11.63c0 5.47-2.93 10.29-9.24 17.16.38-.42-4.04 4.33-5.07 5.5-1.67 1.93-2.75 3.43-3.36 4.77-1.37 3.04-.23 5.22 4.36 7.1 4.71 1.95 7.32 4.16 8.34 6.83.78 2.04.7 3.67-.03 7.4-.2 1.03-.3 1.51-.38 2.09-.48 3.33.03 5.59 2.23 7.8 2.74 2.74 3.98 8.96 5.84 25.06l.24 2.03.23 2.04c.82 7.01 1.53 12.06 2.34 16.03v4.33zm0-62.16c-1.4-3.13-4.43-9.9-4.95-11.17-1.02-2.53-1.25-3.8-.91-5.18.2-.84 2.05-4.68 2.32-5.33a70.79 70.79 0 0 0 3.54-11.2v3.99a62.82 62.82 0 0 1-2.62 7.6c-.31.75-2.09 4.46-2.27 5.18-.28 1.12-.08 2.22.87 4.57.41 1.02 2.5 5.7 4.02 9.09v2.45zm0-85.09c-1.65 1.66-3.66 2.9-6.4 4.13-.25.1-13.97 5.47-20.4 8.43-9.35 4.32-16.7 5.9-23.03 5.25-5.08-.53-9.02-2.25-14.77-5.92l-3.2-2.07a77.4 77.4 0 0 0-5.44-3.27c-4.05-2.18-3.25-5.8 1.47-10.47 3.71-3.68 9.6-7.93 18.73-13.8l4.46-2.82c17.95-11.33 18.22-11.5 22.27-14.74 11.25-9 19.69-14.02 26.31-15.1v1.02c-6.37 1.1-14.62 6-25.69 14.86-4.1 3.28-4.34 3.44-22.36 14.8a652.4 652.4 0 0 0-4.45 2.83c-9.07 5.83-14.92 10.05-18.57 13.66-4.31 4.28-4.95 7.13-1.7 8.88 1.7.91 3.29 1.88 5.5 3.3l3.2 2.08c5.64 3.59 9.45 5.25 14.34 5.76 6.13.64 13.32-.9 22.52-5.15 6.46-2.98 20.18-8.35 20.4-8.44 3.04-1.37 5.1-2.71 6.81-4.69v1.47zm0-41.37v1c-6.56.26-12.11 3.13-19.71 9.08l-4.63 3.68a51.87 51.87 0 0 1-4.4 3.14c-.82.52-5.51 3.33-6.22 3.76-3.31 2-6.15 3.8-8.87 5.6a112.61 112.61 0 0 0-8.16 5.92c-4.61 3.72-7.4 6.9-7.97 9.35-.63 2.67 1.48 4.53 7.05 5.46 10.7 1.78 20.92-.05 30.45-4.65a61.96 61.96 0 0 0 17.1-12.2 41.8 41.8 0 0 0 5.36-7.42v1.92a38.94 38.94 0 0 1-4.64 6.19 62.95 62.95 0 0 1-17.39 12.41c-9.7 4.68-20.13 6.55-31.05 4.73-6.06-1-8.65-3.29-7.85-6.67.64-2.74 3.53-6.05 8.31-9.9 2.35-1.9 5.1-3.88 8.24-5.97 2.73-1.82 5.58-3.61 8.9-5.62.72-.44 5.4-3.24 6.22-3.75 1.26-.8 2.6-1.76 4.3-3.09.8-.62 3.9-3.1 4.63-3.67 7.77-6.1 13.49-9.04 20.33-9.3zm0-154.6v1c-1.75-.24-4.3.23-7.82 1.55-10.01 3.75-13.8 5.07-19.15 6.76-1.78.56-2.63.83-3.87 1.24-1.48.5-3.16.76-6.74 1.16a1550.34 1550.34 0 0 0-2.64.3c-7.8.94-11.28 2.47-11.28 6.07 0 4.45 2.89 13.18 7.96 25.81a57.34 57.34 0 0 1 2.33 7.6 258.32 258.32 0 0 1 .84 3.46c1.86 7.62 3.17 10.71 5.56 11.67 2.21.88 4.7.6 7.47-.72 3.48-1.69 7.22-4.94 11.2-9.47 1.52-1.7 2.97-3.49 4.59-5.57l3.16-4.1c2.59-3.23 6.07-12.21 8.39-20.23v3.45c-2.29 7.2-5.27 14.5-7.61 17.41-.44.55-2.67 3.46-3.15 4.09-1.63 2.1-3.1 3.9-4.62 5.62-4.08 4.61-7.9 7.94-11.53 9.7-2.99 1.44-5.77 1.75-8.28.74-2.84-1.13-4.2-4.34-6.15-12.35a2097.48 2097.48 0 0 1-.84-3.46c-.8-3.2-1.47-5.45-2.28-7.46-5.14-12.8-8.04-21.55-8.04-26.19 0-4.37 3.84-6.06 12.16-7.07a160.9 160.9 0 0 1 2.65-.3c3.5-.39 5.15-.64 6.53-1.1 1.26-.42 2.1-.7 3.88-1.26 5.34-1.68 9.11-3 19.1-6.74 3.53-1.32 6.22-1.84 8.18-1.61zM0 292c10.13-11.31 18.13-23.2 23.07-35.39 3.3-8.14 6.09-16.12 10.81-30.55l1.59-4.84c6.53-19.94 10.11-29.82 14.77-39.56 6.07-12.72 12.55-21.18 20.27-25.54 6.66-3.76 10.2-7.86 12.22-13.15a46.6 46.6 0 0 0 1.86-6.58c1.23-5.2 2.05-7.59 3.93-10.36 2.45-3.62 6.27-6.53 12.1-8.96 15.78-6.58 16.73-7.04 18.05-9.01.65-.98.83-2.15.74-4.51-.03-.73-.23-3.82-.24-4A93.8 93.8 0 0 1 119 94c0-10.04.18-11.37 2.37-13.15.52-.42 1.13-.8 2.07-1.3.27-.14 2.18-1.12 2.84-1.48a68.4 68.4 0 0 0 9.12-5.87c2.06-1.54 2.64-2.14 8.01-7.93 3.78-4.09 6.21-6.36 8.96-8.12 3.64-2.33 7.2-3.12 10.9-2.11 4.4 1.2 10.81 2 18.78 2.46 6.9.4 12.9.5 21.95.5 4.87 0 8.97.47 15.4 1.57 7.77 1.33 9.3 1.54 12.38 1.54 4.05 0 7.43-.88 10.68-2.95 5.06-3.22 8.11-4.67 11.2-5.2 3.62-.64 4.77-.46 16.55 2.06 17.26 3.7 30.85 1.36 41.06-9.7 5.1-5.53 5.48-8.9 3.48-14.8-.83-2.42-1.03-3.1-1.17-4.3-.29-2.52.5-4.71 2.71-6.93 2.65-2.65 4.72-9.17 6.22-18.29h2.03c-1.56 9.71-3.77 16.65-6.83 19.7-1.79 1.8-2.36 3.39-2.14 5.28.11 1 .3 1.63 1.07 3.9 2.22 6.53 1.76 10.66-3.9 16.8-10.77 11.66-25.07 14.13-42.95 10.3-11.42-2.45-12.55-2.62-15.78-2.06-2.77.48-5.62 1.84-10.47 4.92a20.93 20.93 0 0 1-11.76 3.27c-3.25 0-4.81-.22-12.73-1.57C212.74 59.46 208.73 59 204 59c-9.1 0-15.11-.1-22.07-.5-8.09-.47-14.62-1.29-19.2-2.54-5.62-1.53-10.17 1.38-17.85 9.66-5.5 5.94-6.08 6.53-8.28 8.18a70.38 70.38 0 0 1-9.38 6.03c-.68.37-2.58 1.35-2.84 1.49-.84.44-1.35.76-1.75 1.08C121.16 83.6 121 84.8 121 94c0 1.85.06 3.54.17 5.44 0 .17.2 3.28.24 4.03.1 2.75-.13 4.29-1.08 5.71-1.67 2.5-2.27 2.8-18.95 9.74-5.48 2.29-8.99 4.96-11.2 8.24-1.71 2.51-2.47 4.73-3.64 9.7-.83 3.5-1.21 4.92-1.94 6.83-2.18 5.73-6.05 10.19-13.1 14.18-7.3 4.12-13.55 12.28-19.46 24.66-4.6 9.64-8.17 19.46-14.67 39.32l-1.58 4.84c-4.75 14.47-7.54 22.48-10.86 30.69-5.28 13.01-13.95 25.65-24.93 37.6v-2.97zm0 78v-.5l1-.01c6.32 0 7.47 5.2 4.6 13.36a60.36 60.36 0 0 1-5.6 11.3v-1.92a57.76 57.76 0 0 0 4.65-9.72c2.69-7.6 1.71-12.02-3.65-12.02-.34 0-.67 0-1 .02v-46.59a340.96 340.96 0 0 0 13.71-8.34c13.66-9.46 29.79-37.6 29.79-53.59 0-18.1 21.57-72.64 32.23-79.42 12.71-8.09 32.24-27.96 35.8-37.75 1.93-5.3 5.5-7.27 14.42-9.37 6.15-1.44 8.64-2.42 10.67-4.79 1.5-1.74 2.72-4.79 4.33-10.3.23-.78 1.9-6.68 2.43-8.46 3.62-12.08 7.3-18.49 13.47-20.39 2.5-.76 3.03-.98 9.74-3.7 7.49-3.03 11.97-4.43 17.12-4.92 6.75-.65 13.13.75 19.55 4.67 5.43 3.32 12.19 4.72 20.17 4.56 6.03-.12 12.2-1.07 19.83-2.8 1.82-.4 7.38-1.74 8.26-1.94 2.69-.6 4.34-.89 5.48-.89 4.97 0 8.93-.05 14.2-.27 7.9-.32 15.56-.92 22.75-1.88 8.5-1.14 15.9-2.73 21.88-4.82 18.9-6.62 32.64-18.3 33.67-27.59.29-2.56.4-2.96 2.79-11.11 2.33-7.95 3.21-12.93 2.72-18.23-.2-2.24-.69-4.38-1.48-6.42-1.5-3.92-2.63-9.4-3.43-16.18h.9c.77 6.47 1.89 11.72 3.47 15.82a24.93 24.93 0 0 1 1.54 6.69c.5 5.46-.4 10.54-2.77 18.6-2.36 8.06-2.47 8.47-2.74 10.95-1.09 9.75-15.1 21.68-34.33 28.41-6.06 2.12-13.52 3.72-22.09 4.87-7.22.96-14.92 1.57-22.83 1.89-5.3.21-9.27.27-14.25.27-1.04 0-2.64.27-5.26.87-.87.2-6.43 1.53-8.26 1.94-7.68 1.73-13.92 2.7-20.03 2.82-8.15.17-15.1-1.27-20.71-4.7-6.23-3.81-12.4-5.16-18.93-4.54-5.04.48-9.44 1.86-16.84 4.86-6.75 2.74-7.29 2.95-9.82 3.73-5.73 1.76-9.28 7.96-12.81 19.72-.53 1.77-2.2 7.66-2.43 8.46-1.66 5.65-2.91 8.78-4.53 10.67-2.22 2.58-4.84 3.62-12.01 5.3-7.8 1.83-11.13 3.66-12.9 8.54-3.65 10.04-23.32 30.06-36.2 38.25C65.94 190 44.5 244.2 44.5 262c0 16.34-16.3 44.78-30.22 54.41-2.14 1.48-8.24 5.12-14.28 8.68v-1.16 46.09zm0-173.7v-1.11c7.42-3.82 14.55-10.23 21.84-18.98 3.8-4.56 14.21-18.78 15.79-20.55 1.8-2.04 4.06-3.96 7.42-6.45 1.08-.8 4.92-3.57 5.49-3.99 9.36-6.85 14-11.96 15.98-19.36.8-2.98 1.54-6.78 2.46-12.3.23-1.44 2-12.46 2.56-15.79 2.87-16.77 5.73-26.79 10.07-32.1C92.46 52.43 101.5 38.13 101.5 33c0-2.54.34-3.35 6.05-15.71.68-1.49 1.25-2.74 1.77-3.93 2.5-5.75 3.9-10.04 4.14-13.36h1c-.23 3.48-1.66 7.87-4.23 13.76-.52 1.2-1.09 2.45-1.78 3.95-5.54 12.01-5.95 12.99-5.95 15.29 0 5.47-9.09 19.84-20.11 33.31-4.2 5.12-7.03 15.06-9.86 31.64-.57 3.33-2.33 14.33-2.57 15.78-.92 5.56-1.67 9.38-2.48 12.4-2.05 7.68-6.82 12.93-16.35 19.91l-5.49 3.98c-3.3 2.45-5.51 4.34-7.27 6.31-1.53 1.73-11.94 15.93-15.76 20.53-7.52 9.02-14.88 15.6-22.61 19.46zm0 361.83v-4.33c.48 2.36 1 4.35 1.6 6.15 2 6.03 4.6 8.26 8.19 6.59C28.76 557.69 43.5 542.4 43.5 527c0-16.2 6.37-31.99 17.1-46.3 1.88-2.5 3.66-4.4 5.53-6 .73-.62 1.45-1.18 2.3-1.8l2-1.43c3.68-2.68 5.32-5.28 7.08-12.59.75-3.07 1.38-5.02 4.2-13.26l.63-1.88c3.24-9.58 4.56-14.97 4.17-18.65-.48-4.43-3.8-5.23-11.3-1.64a81.12 81.12 0 0 1-9.15 3.7c-13.89 4.67-26.96 5.8-42.66 5.42l-1.95-.05-1.45-.02a39.8 39.8 0 0 0-15.05 2.96A21.81 21.81 0 0 0 0 438.37v-1.26a23.55 23.55 0 0 1 4.55-2.57 40.77 40.77 0 0 1 16.92-3.02l1.95.05c15.6.38 28.57-.75 42.32-5.37a80.12 80.12 0 0 0 9.04-3.65c8.04-3.84 12.16-2.85 12.72 2.43.42 3.89-.92 9.34-4.21 19.08l-.64 1.88c-2.8 8.2-3.43 10.15-4.16 13.18-1.82 7.52-3.59 10.34-7.47 13.16l-2 1.43c-.84.6-1.54 1.15-2.25 1.75a35.45 35.45 0 0 0-5.37 5.84c-10.61 14.15-16.9 29.74-16.9 45.7 0 15.88-15 31.45-34.29 40.45-4.3 2.01-7.39-.66-9.56-7.18-.23-.68-.44-1.39-.65-2.13zm0-62.16v-2.45l1.46 3.27c2.1 4.8 3.46 10.33 4.26 16.77.66 5.3.84 9.3 1.04 18.5.2 9.32.5 12.75 1.63 15.05 1.28 2.6 3.67 2.35 8.29-1.5 17.14-14.3 21.82-22.9 21.82-38.62 0-7.17 1.1-12.39 3.7-17.68 2.27-4.67 3.65-6.62 13.4-19.62a69.8 69.8 0 0 1 7.6-8.79 44.76 44.76 0 0 1 3.54-3.06c.38-.3.64-.52.89-.74a10.47 10.47 0 0 0 2.63-3.32 35.78 35.78 0 0 0 2.26-5.94l.37-1.2.36-1.15c.29-.91.48-1.55.66-2.16.45-1.53.74-2.68.91-3.66.38-2.2.12-3.49-.85-4.15-2.35-1.61-9.28-.24-23.8 4.94-9.54 3.4-16.12 4.17-27.85 4.26-7.71.06-10.43.4-13.25 2.12-3.48 2.12-5.84 6.4-7.58 14.26-.5 2.2-.99 4.19-1.49 5.98v-3.98l.51-2.22c1.8-8.1 4.28-12.6 8.04-14.9 3.04-1.85 5.86-2.2 13.77-2.26 11.61-.09 18.1-.84 27.51-4.2 14.93-5.32 21.95-6.71 24.7-4.83 1.38.94 1.71 2.6 1.28 5.15a33.69 33.69 0 0 1-.94 3.78l-.66 2.17-.36 1.15-.37 1.2a36.64 36.64 0 0 1-2.33 6.1c-.8 1.53-1.61 2.52-2.86 3.61l-.92.77-1.02.83c-.9.74-1.65 1.4-2.47 2.18a68.84 68.84 0 0 0-7.48 8.66c-9.7 12.93-11.07 14.87-13.31 19.46-2.52 5.15-3.59 10.22-3.59 17.24 0 16.04-4.82 24.91-22.18 39.38-5.04 4.2-8.18 4.55-9.83 1.18-1.22-2.5-1.52-5.94-1.73-15.47-.2-9.16-.38-13.15-1.03-18.4-.79-6.34-2.12-11.8-4.19-16.49L0 495.98zM379.27 0h1.04l1.5 5.26c3.28 11.56 4.89 19.33 5.26 27.8.49 11.01-1.52 21.26-6.63 31.17-7.8 15.13-20.47 26.5-36.22 34.1-12.38 5.96-26.12 9.17-36.22 9.17-6.84 0-17.24 1.38-37.27 4.62l-2.27.37c-24.5 3.99-31.65 5-37.46 5-3.49 0-4.08-.08-19.54-2.8-3.56-.64-6.32-1.1-9-1.5-20.23-2.96-31-1.2-31.96 7.86-.1.85-.18 1.72-.29 2.81l-.27 2.73c-1.1 10.9-2.02 15.73-4.31 19.96-2.9 5.34-7.77 7.95-15.63 7.95-10.2 0-12.92.6-15.5 3.17.52-.51-5.03 5.85-8.16 8.7-2.75 2.5-14.32 12.55-15.77 13.83a341.27 341.27 0 0 0-6.54 5.92c-6.97 6.49-11.81 11.76-14.6 16.15-5.92 9.3-10.48 18.04-11.69 24.08-1.66 8.3 3.67 9.54 19.02 1.21a626.23 626.23 0 0 1 44.54-21.9c3.5-1.56 14.04-6.2 15.68-6.95 5.05-2.25 8.3-3.8 10.78-5.15l1.95-1.07 2.18-1.18c1.76-.94 3.38-1.76 5-2.55 18.1-8.72 34.48-10.46 50.33-1.2 22.89 13.34 38.28 37.02 38.28 56.44 0 19.12-.73 25.13-5.18 33.2a45.32 45.32 0 0 1-4.94 7.12c-6.47 7.77-11.81 16.2-12.76 21.27-1.2 6.34 4.69 7.03 20.17-.05 13.31-6.08 22.4-14.95 28.5-26.32a80.51 80.51 0 0 0 6.1-15.13c.9-2.98 3.17-11.65 3.41-12.48a29.02 29.02 0 0 1 1.75-4.83c7.47-14.93 21.09-30.5 36.25-37.24 7.61-3.38 13-9.65 19.4-20.79.84-1.48 4.26-7.64 5.14-9.17 3.52-6.1 6.22-9.7 9.37-11.98 10.15-7.4 28.7-11.1 50.29-11.1 7.52 0 16.54-1.24 27.51-3.58a420.1 420.1 0 0 0 14.96-3.52c-1.3.33 15.54-3.98 19.42-4.89 14.15-3.33 41.07-5.01 64.11-5.01 17.36 0 27.82-9.23 38.53-38.67 6.62-18.21 6.62-26.37 2.69-34.35l-1.18-2.37A13.36 13.36 0 0 1 587.5 58c0-4.03 0-4.01 2.5-24.56.46-3.73.8-6.74 1.12-9.64.9-8.45 1.38-15.2 1.38-20.8 0-.94-.02-1.94-.04-3h1c.03 1.06.04 2.06.04 3 0 5.65-.48 12.43-1.39 20.9-.3 2.91-.66 5.93-1.11 9.66-2.5 20.45-2.5 20.47-2.5 24.44 0 1.97.45 3.57 1.45 5.68.24.51 1.16 2.35 1.17 2.36 4.06 8.24 4.06 16.68-2.65 35.13-10.84 29.8-21.63 39.33-39.47 39.33-22.96 0-49.83 1.68-63.89 4.99-3.86.9-20.69 5.2-19.4 4.88a421.05 421.05 0 0 1-14.99 3.53c-11.04 2.35-20.11 3.6-27.72 3.6-21.4 0-39.76 3.67-49.7 10.9-3 2.19-5.64 5.7-9.1 11.68-.87 1.52-4.29 7.68-5.14 9.17-6.49 11.3-12 17.71-19.86 21.2-14.9 6.63-28.38 22.03-35.75 36.77a28.17 28.17 0 0 0-1.69 4.67c-.23.8-2.5 9.49-3.4 12.5a81.48 81.48 0 0 1-6.19 15.3c-6.2 11.56-15.44 20.58-28.96 26.76-16.1 7.36-23 6.55-21.58-1.04 1-5.29 6.4-13.83 12.99-21.73a44.33 44.33 0 0 0 4.82-6.96c4.35-7.88 5.06-13.77 5.06-32.72 0-19.04-15.19-42.4-37.72-55.55-15.57-9.08-31.62-7.38-49.45 1.21a132.9 132.9 0 0 0-7.14 3.71l-1.95 1.07a158.83 158.83 0 0 1-10.85 5.19c-1.65.74-12.18 5.38-15.69 6.95a625.25 625.25 0 0 0-44.46 21.86c-15.95 8.66-22.37 7.16-20.48-2.29 1.24-6.2 5.83-15.02 11.82-24.42 2.85-4.48 7.74-9.8 14.77-16.34 1.98-1.85 4.12-3.79 6.56-5.94 1.46-1.29 13.02-11.33 15.75-13.82 3.09-2.8 8.6-9.14 8.14-8.67 2.82-2.82 5.75-3.46 16.2-3.46 7.5 0 12.04-2.43 14.75-7.42 2.2-4.07 3.11-8.84 4.2-19.59l.26-2.73.3-2.81c.56-5.42 4.47-8.5 11.23-9.6 5.44-.88 12.51-.51 21.86.86 2.7.4 5.47.86 9.04 1.49 15.33 2.7 15.96 2.8 19.36 2.8 5.73 0 12.9-1.03 37.3-5l2.27-.36c20.1-3.26 30.52-4.64 37.43-4.64 9.95 0 23.54-3.18 35.78-9.08 15.57-7.5 28.09-18.73 35.78-33.65 5.02-9.75 7-19.82 6.51-30.67-.37-8.37-1.96-16.08-5.23-27.57L379.27 0zm13.68 0h1.02c.78 3.9 1.92 8.7 3.51 14.88 3.63 14.05 3.06 27.03-.75 38.77a61 61 0 0 1-11.35 20.68 138.36 138.36 0 0 1-19.32 18.77c-11.32 9.02-23.36 15.49-35.95 18.39a258.63 258.63 0 0 1-22.57 4.07c-3.17.44-6.36.85-10.3 1.32l-9.39 1.12c-11.53 1.41-17.45 2.55-21.64 4.46-9.28 4.21-28.35 6.04-49.21 6.04-1.37 0-2.8-.12-4.3-.35-2.62-.41-5-1.03-9.14-2.29-7.34-2.21-9.63-2.75-12.63-2.56-3.9.23-6.63 2.29-8.47 6.89-1.86 4.66-2.42 7.53-3.34 14.98-1.1 8.98-2.87 12.12-9.97 14.3a40.12 40.12 0 0 0-6.8 2.66c-.63.33-1.16.64-1.76 1.02l-1.34.86c-1.9 1.14-3.86 1.49-9.25 1.49-3.2 0-8.83-.55-9.51-.39-1.22.28-.75-.14-7.14 6.24-1.5 1.5-3.49 3.18-6.32 5.37-1.52 1.18-7.16 5.43-7.94 6.03-4.96 3.78-8.33 6.6-11.06 9.38-4.88 4.98-6.85 9.15-5.56 12.7 1.34 3.67 4.07 4.42 8.9 2.82a55.72 55.72 0 0 0 7.77-3.48c1.5-.77 7.78-4.13 9.37-4.96a116.8 116.8 0 0 1 12.31-5.68 162.2 162.2 0 0 0 11.04-4.84c2.04-.97 10.74-5.16 13-6.22 4.41-2.1 8.1-3.78 11.65-5.29 17.14-7.3 29.32-9.9 37.67-6.65l5.43 2.1c2.3.88 4.17 1.62 6.02 2.38a150.9 150.9 0 0 1 13.07 6c18.34 9.63 30.35 22.13 34.79 39.87 6.96 27.85 3.6 45.53-8.08 62.4-3.97 5.75-3.52 9.2.06 8.97 4.14-.28 10.21-4.95 15.11-12.52 3.1-4.8 5.1-10.45 8.05-21.53l1.69-6.35c.66-2.47 1.24-4.52 1.83-6.5 4.93-16.56 11-27.28 21.56-34.76 7.15-5.06 23.73-15.5 25.48-16.75 6.74-4.81 10.53-9.44 14.34-18 7.74-17.44 21.09-24.34 44.47-24.34 9.36 0 17.91-1.13 29.53-3.49a624.86 624.86 0 0 0 6.2-1.28c2.4-.5 4.07-.84 5.66-1.13 4.03-.74 7.04-1.1 9.61-1.1 4.44 0 9.39-1 31.39-5.99l2.95-.66c16.34-3.67 25.64-5.35 31.66-5.35 1.54 0 2.4.01 6.4.1 7.8.15 12.27.13 17.33-.2 16.41-1.06 26.73-5.36 29.8-14.56a87.1 87.1 0 0 1 3.55-8.83c-.15.31 2.29-4.96 2.9-6.38 5.38-12.3 5.57-21.92-1.44-39.44a86.4 86.4 0 0 1-5.26-20.72c-1.61-11.98-1.38-23.14.1-40.35l.2-2.12h1l-.2 2.2c-1.48 17.15-1.7 28.24-.11 40.14a85.4 85.4 0 0 0 5.2 20.47c7.1 17.78 6.91 27.67 1.43 40.22-.62 1.43-3.06 6.72-2.91 6.4a86.17 86.17 0 0 0-3.52 8.73c-3.23 9.72-13.9 14.15-30.68 15.24-5.1.33-9.58.35-17.42.2-3.98-.09-4.84-.1-6.37-.1-5.91 0-15.18 1.67-31.44 5.32l-2.95.67c-22.16 5.02-27.05 6.01-31.61 6.01-2.5 0-5.45.36-9.43 1.09-1.58.29-3.25.62-5.64 1.11a4894.21 4894.21 0 0 0-6.2 1.29c-11.68 2.37-20.3 3.51-29.73 3.51-23.02 0-36 6.71-43.53 23.66-3.9 8.8-7.82 13.58-14.7 18.5-1.78 1.27-18.36 11.7-25.48 16.75-10.34 7.32-16.3 17.87-21.19 34.23-.58 1.96-1.15 4-1.82 6.47l-1.69 6.35c-2.98 11.18-5 16.9-8.17 21.81-5.05 7.81-11.37 12.68-15.89 12.98-4.7.31-5.3-4.23-.94-10.53 11.52-16.64 14.82-34.03 7.92-61.6-4.35-17.42-16.16-29.72-34.27-39.22-4-2.1-8.2-4-12.99-5.97-1.84-.75-3.7-1.49-6-2.38l-5.43-2.08c-8.03-3.12-20.02-.58-36.92 6.63-3.52 1.5-7.21 3.19-11.61 5.27l-13 6.22c-4.71 2.22-8.16 3.75-11.11 4.88a115.87 115.87 0 0 0-12.21 5.63c-1.58.83-7.86 4.18-9.37 4.96a56.55 56.55 0 0 1-7.9 3.54c-5.3 1.75-8.62.85-10.17-3.43-1.46-4.02.66-8.5 5.8-13.74 2.75-2.82 6.16-5.66 11.15-9.48.79-.6 6.43-4.85 7.94-6.02a66.96 66.96 0 0 0 6.23-5.28c6.74-6.74 6.1-6.16 7.61-6.51.87-.2 6.69.36 9.74.36 5.22 0 7.03-.32 8.74-1.35l1.31-.84c.62-.4 1.18-.72 1.84-1.07a41.07 41.07 0 0 1 6.96-2.72c6.64-2.04 8.22-4.84 9.28-13.47.93-7.53 1.5-10.47 3.4-15.24 1.99-4.95 5.04-7.26 9.34-7.51 3.17-.2 5.5.35 12.97 2.6a63.54 63.54 0 0 0 9.02 2.26c1.45.22 2.83.34 4.14.34 20.71 0 39.7-1.82 48.8-5.96 4.32-1.96 10.29-3.1 21.93-4.53l9.4-1.12c3.92-.48 7.11-.88 10.27-1.32 8.16-1.14 15.4-2.43 22.49-4.06 12.42-2.86 24.33-9.26 35.55-18.2a137.4 137.4 0 0 0 19.18-18.64 60.02 60.02 0 0 0 11.15-20.32c3.76-11.57 4.32-24.36.75-38.23A284.86 284.86 0 0 1 392.95 0zM506.7 0h1.26c-.5.66-.9 1.18-1.17 1.51-3.95 4.96-6.9 7.92-9.82 9.57A10.02 10.02 0 0 1 492 12.5c-2.38 0-4.24.67-6.71 2.21l-2.65 1.71c-4.38 2.8-8.01 4.08-13.64 4.08-5.6 0-9.99-1.26-16.08-4.05a202.63 202.63 0 0 1-2.3-1.06l-2.18-.98c-1.6-.7-2.92-1.17-4.17-1.48a13.42 13.42 0 0 0-3.27-.43c-2.3 0-4.3-.68-11-3.37l-1.56-.62c-5-1.97-8.1-2.82-10.52-2.66-2.93.2-4.42 2.03-4.42 6.15 0 20.76-5.21 50.42-12.15 57.35-7.58 7.59-26.55 23.7-34.06 29.06-13.16 9.4-31.17 20.2-44.11 25.06a106.87 106.87 0 0 1-13.32 4.03c-3.28.78-6.6 1.43-11.25 2.24-.53.1-8.8 1.5-11.5 1.99-4.86.87-9.3 1.74-14 2.76-20.62 4.48-25.07 5.01-38.11 5.01-2.49 0-2.9-.07-14.05-2-2.42-.42-4.31-.73-6.15-1-8.11-1.19-13.83-1.36-17.64-.2-4.54 1.4-5.93 4.65-3.7 10.52 2.02 5.28 4.84 8.61 8.84 10.74 3.26 1.74 6.75 2.6 13.82 3.71 9.42 1.48 10.94 1.75 15.5 2.92a78.2 78.2 0 0 1 18.62 7.37c8.3 4.58 14.58 11.5 19.98 20.89 2.73 4.73 9.46 19.33 10.54 21.19 3.4 5.85 6.26 6.63 10.89 2 4.95-4.94 10.35-8.37 21.13-14.06.47-.25 2.06-1.1 2.12-1.12 7.98-4.21 11.92-6.51 15.87-9.54 5.11-3.9 8.66-8.1 10.77-13.11 8.52-20.24 20.75-33.31 32.46-33.31l5.5.03c10.53.08 17.35.02 24.9-.31 13.66-.62 23.78-2.09 29.39-4.67 5.85-2.7 13.42-5.49 24.18-9.02 3.46-1.14 6.29-2.05 12.7-4.1 7.7-2.45 11.08-3.54 15.17-4.9a1059.43 1059.43 0 0 1 11.33-3.72c3.67-1.2 5.96-2 8.03-2.78a59.88 59.88 0 0 0 6.66-2.94c1.87-.98 3.76-2.1 5.86-3.5 3.48-2.33 6.15-3.13 12.04-4.13l1.15-.2c5.71-1.01 9-2.3 12.76-5.63 7.82-6.96 8.58-23.18 3.84-44.52-1.7-7.67-2.1-19.28-1.57-35.47A837.22 837.22 0 0 1 546.76 0h1l-.15 3.06c-.32 6.42-.53 11.02-.68 15.62-.51 16.1-.12 27.65 1.56 35.21 4.82 21.68 4.04 38.2-4.16 45.48-3.91 3.48-7.37 4.84-13.24 5.87l-1.16.2c-5.76.99-8.32 1.75-11.65 3.98a63.73 63.73 0 0 1-5.96 3.56 60.86 60.86 0 0 1-6.77 2.99c-2.09.79-4.39 1.58-8.07 2.79a5398.31 5398.31 0 0 1-11.32 3.71c-4.1 1.37-7.48 2.46-15.18 4.92-6.42 2.04-9.24 2.95-12.7 4.08-10.73 3.53-18.27 6.3-24.07 8.98-5.76 2.66-15.97 4.14-29.77 4.77-7.56.33-14.4.39-24.95.31l-5.49-.03c-11.19 0-23.16 12.79-31.54 32.7-2.19 5.19-5.84 9.52-11.08 13.52-4.02 3.07-7.99 5.39-16.01 9.62l-2.12 1.12c-10.7 5.65-16.04 9.04-20.9 13.9-5.14 5.14-8.75 4.15-12.45-2.22-1.12-1.92-7.85-16.5-10.54-21.2-5.33-9.24-11.48-16.02-19.6-20.5a77.2 77.2 0 0 0-18.4-7.28c-4.5-1.17-6.02-1.43-15.4-2.9-7.17-1.12-10.74-2-14.13-3.81-4.22-2.25-7.2-5.77-9.3-11.27-2.43-6.39-.78-10.26 4.34-11.83 4-1.22 9.82-1.05 18.08.17 1.84.27 3.74.58 6.17 1 11.02 1.9 11.48 1.98 13.88 1.98 12.96 0 17.35-.52 37.9-4.99 4.71-1.02 9.16-1.9 14.03-2.77 2.71-.48 10.98-1.9 11.5-1.98 4.64-.81 7.95-1.46 11.2-2.23 4.55-1.07 8.76-2.34 13.2-4 12.83-4.81 30.79-15.59 43.88-24.94 7.47-5.33 26.4-21.4 33.94-28.94C407.3 61.98 412.5 32.49 412.5 12c0-4.61 1.86-6.9 5.35-7.15 2.63-.18 5.8.7 10.96 2.73l1.56.62c6.53 2.62 8.53 3.3 10.63 3.3 1.14 0 2.3.16 3.5.46 1.32.33 2.68.82 4.34 1.53a90.97 90.97 0 0 1 3.34 1.52l1.15.54c5.98 2.73 10.23 3.95 15.67 3.95 5.41 0 8.87-1.21 13.1-3.92.2-.13 2.1-1.38 2.66-1.72 2.62-1.63 4.64-2.36 7.24-2.36 1.47 0 2.94-.43 4.47-1.3 2.78-1.56 5.67-4.45 9.54-9.31l.7-.89zM324.54 600h-2.03c.49-2.96.91-6.2 1.28-9.66.44-4.1.76-8.25.98-12.21.08-1.39.14-2.65-.35-7.29-.47-1.94-.93-4.14-1.36-6.54-2.01-11.26-2.66-22.9-1.14-33.78a60.76 60.76 0 0 1 5.18-17.95 70.78 70.78 0 0 1 12.6-18.22c3.38-3.6 5.53-5.5 11.83-10.79 4.5-3.78 6.35-5.56 7.52-7.5.64-1.07.95-2.06.95-3.06 0-1.75 0-1.74-.75-9.23-.36-3.7-.57-6.3-.68-8.96-.5-12.1 1.62-19.6 8.11-21.76 15.9-5.3 25.89-12.1 33.45-25.54C409.6 390.65 425.85 376 436 376c12.36 0 20-1.96 29.41-8.8 6.76-4.92 9.5-6.6 12.47-7.46 2.22-.64 3.8-.74 9.12-.74 1.86 0 3.53-.83 5.57-2.62 1.08-.96 5.11-5.12 5.6-5.6 6.04-5.85 11.98-8.78 20.83-8.78 2.45 0 4.54.04 7.32.12 7.51.23 8.87.17 11.27-.7 3.03-1.1 5.53-3.03 14.75-11.17 8-7.06 10.72-8.92 22.87-16.47 1.44-.9 2.59-1.63 3.69-2.37a69.45 69.45 0 0 0 9.46-7.5c4.12-3.88 8.02-7.85 11.64-11.9v2.98a201.58 201.58 0 0 1-10.27 10.38c-3.18 3-6.2 5.35-9.72 7.7-1.12.76-2.28 1.5-3.75 2.4-12.05 7.5-14.71 9.32-22.6 16.28-9.46 8.35-12.01 10.32-15.39 11.55-2.74 1-4.19 1.06-12.01.82-2.76-.08-4.83-.12-7.26-.12-8.27 0-13.75 2.7-19.43 8.22-.44.43-4.52 4.64-5.68 5.66-2.37 2.09-4.46 3.12-6.89 3.12-5.1 0-6.6.1-8.56.66-2.67.78-5.29 2.37-11.85 7.15-9.8 7.13-17.85 9.19-30.59 9.19-9.22 0-24.96 14.2-34.13 30.49-7.84 13.94-18.24 21.02-34.55 26.46-5.31 1.77-7.21 8.51-6.75 19.78.1 2.6.31 5.19.68 8.84.75 7.62.75 7.58.75 9.43 0 1.38-.42 2.73-1.24 4.09-1.33 2.2-3.26 4.07-7.94 8-6.25 5.24-8.36 7.12-11.67 10.63a68.8 68.8 0 0 0-12.25 17.71 58.8 58.8 0 0 0-5 17.36c-1.49 10.66-.85 22.09 1.13 33.15.43 2.37.88 4.53 1.33 6.44.16.66.3 1.25.6 4.06a249.3 249.3 0 0 1-1.17 16.12c-.37 3.37-.78 6.53-1.25 9.44zm-13.4 0h-1.05l.12-.28c3.07-7.16 4.29-11.83 4.29-18.72 0-3.57-.07-4.93-.76-15.65-.77-12.04-1-19.64-.55-28.3.58-11.5 2.4-22.1 5.81-32.16 1.3-3.8 2.8-7.5 4.55-11.1 3.46-7.14 6.83-12.39 10.42-16.6a59.02 59.02 0 0 1 4.35-4.56c.43-.4 3-2.8 3.67-3.45 5.72-5.6 7.51-11.52 7.51-29.18 0-18.84 2.9-23.77 15.82-28.24 1.09-.37 1.92-.67 2.77-.98a51.3 51.3 0 0 0 6.1-2.7c4.95-2.6 9.64-6.22 14.44-11.42 25.5-27.63 37.15-35.16 56.37-35.16 8.28 0 14.54-1.95 22-6.3 1.78-1.03 13.82-8.82 18.16-11.27 2.83-1.59 5.66-3.03 8.63-4.39 7.92-3.6 13.97-4.45 26.6-4.8 7.53-.2 10.7-.49 14.26-1.58 4.55-1.4 8.06-4 10.93-8.43 2.2-3.41 6.85-7.08 14.66-12.06 1.61-1.03 3.27-2.05 5.65-3.5 9.53-5.85 11.56-7.13 14.81-9.57 5.34-4 9.3-8.37 13.68-14.77a204.2 204.2 0 0 0 5.62-8.75v1.9c-1.97 3.17-3.4 5.38-4.8 7.42-4.42 6.48-8.46 10.92-13.9 15-3.29 2.46-5.32 3.75-14.89 9.61a375.06 375.06 0 0 0-5.63 3.5c-7.7 4.9-12.26 8.52-14.36 11.76-3 4.63-6.7 7.39-11.48 8.85-3.68 1.12-6.9 1.42-14.53 1.63-12.5.34-18.44 1.18-26.2 4.7a111.08 111.08 0 0 0-8.56 4.35c-4.3 2.43-16.34 10.22-18.15 11.27-7.6 4.43-14.03 6.43-22.5 6.43-18.87 0-30.3 7.4-55.63 34.84-4.88 5.28-9.67 8.97-14.7 11.62-2 1.05-4 1.92-6.23 2.75-.86.32-1.7.62-5.37 1.87-5.08 1.76-7.44 3.25-9.28 6.37-2.23 3.78-3.29 9.94-3.29 20.05 0 17.9-1.87 24.07-7.8 29.89-.69.67-3.27 3.06-3.69 3.46a58.04 58.04 0 0 0-4.28 4.49c-3.53 4.14-6.86 9.32-10.28 16.38a95.19 95.19 0 0 0-4.5 10.99c-3.38 9.97-5.18 20.48-5.76 31.9-.44 8.6-.22 16.17.55 28.17.69 10.76.76 12.12.76 15.72 0 6.35-1.02 10.87-4.35 19zm25.08 0h-1c-.04-4.73.06-9.39.28-15.02.26-6.41-.4-11.79-2.53-24.37l-.31-1.86c-2.12-12.55-2.76-19.35-1.97-26.47 1.03-9.25 4.75-16.68 12-22.67 22.04-18.2 29.81-30.18 29.81-44.61 0-2.6-.3-4.81-.98-8.17-.97-4.79-1.1-5.68-.97-7.57.2-2.56 1.27-4.7 3.56-6.72 2.67-2.35 7.05-4.6 13.72-7.01 9.72-3.5 15.52-9.18 24.3-21.57l1.78-2.5c4.48-6.33 7.1-9.63 10.43-12.78 4.31-4.07 8.98-6.77 14.54-8.17 13.3-3.32 20.37-5.47 25.34-7.64a49.5 49.5 0 0 0 5.28-2.7c1.1-.65 1.75-1.04 4.24-2.6 2.7-1.68 5.22-2.08 11.38-2.28 5.44-.18 7.9-.43 10.97-1.41a21.47 21.47 0 0 0 9.54-6.22c4.87-5.3 10.03-7.61 17.79-8.9 1.07-.18 1.88-.3 3.86-.58 6.9-.97 9.94-1.69 13.48-3.62 4.5-2.45 6.79-4.44 23.46-19.68l3.14-2.85c9.65-8.71 16.12-13.83 21.42-16.48 4.25-2.12 7.6-4.69 11.22-8.6v1.45c-3.42 3.57-6.69 6-10.78 8.05-5.18 2.59-11.61 7.67-21.2 16.32l-3.12 2.85c-16.8 15.35-19.05 17.3-23.66 19.82-3.68 2-6.8 2.75-13.82 3.73-1.97.28-2.78.4-3.84.57-7.56 1.26-12.52 3.48-17.21 8.6a22.47 22.47 0 0 1-9.97 6.5c-3.2 1-5.72 1.27-11.25 1.45-5.98.2-8.39.57-10.89 2.13a144 144 0 0 1-4.25 2.61 50.48 50.48 0 0 1-5.39 2.75c-5.04 2.2-12.15 4.37-25.5 7.7-9.74 2.44-15.26 7.65-24.4 20.56l-1.77 2.5c-8.9 12.54-14.82 18.34-24.78 21.93-6.57 2.36-10.85 4.57-13.4 6.82-2.1 1.86-3.05 3.74-3.22 6.04-.13 1.76 0 2.63.95 7.3.7 3.42 1 5.7 1 8.37 0 14.79-7.93 27-30.18 45.39-7.03 5.8-10.64 13-11.64 22-.78 7-.14 13.73 1.96 26.2l.32 1.85c2.15 12.65 2.8 18.07 2.54 24.58-.22 5.57-.32 10.2-.28 14.98zM95.9 600h-2.04c.68-3.82 1.14-8.8 1.61-15.98.2-3.11.27-4.06.39-5.6 1.3-17.54 4.04-27.14 11.5-33.2 4.65-3.77 7.22-8.92 8.67-16 .51-2.52.7-3.87 1.33-9.17.66-5.5 1.16-8.06 2.24-10.36 1.45-3.09 3.82-4.69 7.39-4.69 14.28 0 38.48 9.12 53.6 20.2 8.66 6.35 21.26 13.32 31.74 17.11 13.03 4.71 21.89 4.41 24.75-1.73 1.7-3.64 1.92-4.11 2.65-5.77 2.93-6.67 4.69-12.2 5.25-17.5.23-2.17.24-4.23.02-6.2-.32-2.75-1.42-4.55-4.08-7.35l-1.32-1.37a30.59 30.59 0 0 1-2.41-2.79 30.37 30.37 0 0 1-2.5-4.07l-1.13-2.14c-1.62-3.1-2.68-4.6-4.12-5.56-5.26-3.5-14.8-5.5-28.55-6.83a272.42 272.42 0 0 0-9.04-.71l-2.18-.17c-9.57-.73-15.12-1.56-19.06-3.2C156.57 471.07 136 450.5 136 440c0-5.34 1.74-9.53 5.47-14.13 1.98-2.44 11.12-11.71 12.79-13.54 4.52-4.97 10.16-9.54 17.68-14.66 2.8-1.9 14.78-9.6 17.49-11.49a50.54 50.54 0 0 0 6.34-5.43c1.53-1.5 6.96-7.13 7.12-7.3 7.18-7.3 12.7-11.56 19.74-14.38 3.36-1.34 8.13-2.79 17.45-5.38a9577.18 9577.18 0 0 1 11.78-3.28 602.6 602.6 0 0 0 12.67-3.7c20.4-6.24 34-12.08 40.79-18.44 8.74-8.2 11.78-13.84 15.73-26.02 2.02-6.22 3.09-9.04 5.07-12.72 9.54-17.71 28.71-39.37 43.5-45.45C383.77 238.25 389 232.34 389 226c0-2.89 2.73-8.4 6.83-13.73 4.76-6.2 10.65-11.36 16.75-14.18 12.5-5.77 33.5-10.09 47.42-10.09 5.32 0 9.83-1.5 16.42-4.89 9.2-4.71 10.1-5.11 13.58-5.11 10.42 0 32.06-2.55 45.76-5.97l3.88-.98 3.47-.89c2.6-.66 4.33-1.08 5.93-1.43 3.9-.86 6.76-1.23 9.58-1.17 2.74.06 5.47.52 8.67 1.48 4.56 1.37 13.71-.9 22.87-5.68a68.07 68.07 0 0 0 9.84-6.2v2.4c-11.09 8.14-25.76 13.66-33.29 11.4a29.72 29.72 0 0 0-8.13-1.4c-2.63-.05-5.36.3-9.11 1.12a238 238 0 0 0-9.33 2.3l-3.9.99C522.38 177.43 500.58 180 490 180c-2.99 0-3.91.4-12.67 4.89-6.85 3.51-11.61 5.11-17.33 5.11-13.65 0-34.35 4.26-46.58 9.9-5.78 2.67-11.42 7.62-16 13.58-3.85 5.02-6.42 10.2-6.42 12.52 0 7.27-5.8 13.82-20.62 19.92-14.27 5.88-33.16 27.21-42.5 44.55-1.9 3.55-2.95 6.28-4.93 12.4-4.05 12.47-7.23 18.39-16.27 26.86-7.08 6.64-20.87 12.57-41.57 18.89a604.52 604.52 0 0 1-12.7 3.71 1495.1 1495.1 0 0 1-11.8 3.28c-9.24 2.58-13.97 4.01-17.24 5.32-6.73 2.69-12.05 6.8-19.05 13.92-.15.15-5.6 5.8-7.15 7.32a52.4 52.4 0 0 1-6.6 5.65c-2.74 1.92-14.75 9.63-17.5 11.5-7.4 5.04-12.94 9.52-17.33 14.35-1.72 1.9-10.8 11.11-12.71 13.46-3.47 4.26-5.03 8.03-5.03 12.87 0 9.5 20 29.5 33.38 35.08 3.67 1.53 9.1 2.34 18.45 3.05a586.23 586.23 0 0 0 4.34.32c3.24.23 5.07.37 6.93.55 14.08 1.37 23.82 3.4 29.45 7.17 1.82 1.2 3.02 2.91 4.8 6.29l1.11 2.13a28.55 28.55 0 0 0 2.34 3.81c.62.83 1.3 1.6 2.26 2.61.23.24 1.1 1.16 1.32 1.37 2.93 3.09 4.24 5.23 4.61 8.5.24 2.12.23 4.33-.01 6.64-.59 5.55-2.4 11.25-5.41 18.1-.74 1.67-.96 2.15-2.66 5.8-3.49 7.47-13.33 7.8-27.25 2.77-10.67-3.86-23.43-10.92-32.25-17.38C164.62 515.96 140.82 507 127 507c-5 0-6.4 3.02-7.64 13.29a99.03 99.03 0 0 1-1.36 9.33c-1.53 7.5-4.3 13.04-9.37 17.16-6.87 5.58-9.5 14.78-10.77 31.8-.11 1.52-.18 2.47-.38 5.57-.46 7.01-.91 11.99-1.57 15.85zm8.05 0h-1.02c.29-1.41.58-2.94.9-4.59l1.05-5.62c2.5-13.3 4.2-19.92 6.68-24.05 1.7-2.84 3.68-5.5 8.05-11.03 8.21-10.36 10.88-14.55 10.88-18.71l-.02-1.69c-.02-1.78-.02-2.7.02-3.77.21-5.05 1.47-8.2 4.64-9.4 3.92-1.5 10.39.44 20.12 6.43 9.56 5.88 17.53 10.7 25.91 15.66 1.31.78 14.27 8.41 17.67 10.45a714.21 714.21 0 0 1 6.42 3.9c13.82 8.5 38.94 5.05 46.3-7.83 3.6-6.28 4.54-8.52 7.78-17.32a82.3 82.3 0 0 1 1.18-3.07 42.27 42.27 0 0 1 4.06-7.64c9.33-13.98 14.92-26.1 14.92-36.72 0-3.66.75-6.62 3.36-14.85.52-1.64.83-2.66 1.15-3.73 3.64-12.23 3.04-19.12-4.29-24a23.1 23.1 0 0 0-9.98-3.78c-7.2-.93-14.49 1.17-23.91 5.88-1.55.78-6.64 3.44-7.6 3.93a62.6 62.6 0 0 0-4.14 2.3l-4.4 2.66c-11.62 6.92-20.4 9.18-32.81 6.08-3.32-.84-6.24-1.4-13.1-2.64-13.25-2.39-18.7-3.75-23.33-6.46-6.23-3.67-7.46-9.02-2.88-16.65A93.1 93.1 0 0 1 172 415.42a157 157 0 0 1 8.32-7.66c-.07.05 6.16-5.3 7.82-6.77a85.12 85.12 0 0 0 6.5-6.33c7.7-8.46 12.78-13.36 20.08-18.57 9.94-7.1 21.4-12.36 35.18-15.58 37.03-8.64 51-12.7 58.83-17.93 8.6-5.73 21.3-24.77 36.84-54.81 5.22-10.1 12.27-18.4 21.13-25.71 5.13-4.24 9.56-7.25 17.55-12.23 7.42-4.62 9.62-6.14 11.38-8.16a21.15 21.15 0 0 0 2.95-4.87c.61-1.3 2.87-6.47 3-6.77 1.36-3 2.56-5.4 3.95-7.73 6.53-10.97 16.03-18 31.4-20.8 12.73-2.3 19.85-2.7 29.68-2.3 3.25.13 4.13.16 5.6.14 5.15-.07 9.71-1.04 16.61-3.8 20.74-8.3 38.75-12.04 59.19-12.04 3.05 0 6.03.15 10.48.48l2.09.16c12.45.96 18.08.96 25.34-.63a49.65 49.65 0 0 0 14.09-5.45v1.15a50.52 50.52 0 0 1-13.88 5.28c-7.38 1.61-13.08 1.61-25.63.65l-2.08-.16c-4.43-.33-7.39-.48-10.41-.48-20.3 0-38.2 3.72-58.81 11.96-7.01 2.8-11.7 3.8-16.97 3.88-1.5.02-2.39-.01-5.66-.14-9.76-.4-16.8-.01-29.47 2.3-15.06 2.73-24.32 9.58-30.71 20.31a72.8 72.8 0 0 0-3.9 7.63c-.12.28-2.39 5.47-3.01 6.79a22 22 0 0 1-3.1 5.1c-1.86 2.13-4.07 3.66-11.6 8.35-7.95 4.96-12.35 7.95-17.44 12.15-8.76 7.23-15.73 15.43-20.89 25.4-15.61 30.2-28.36 49.32-37.16 55.19-7.98 5.32-21.97 9.39-59.17 18.07-13.65 3.18-24.98 8.39-34.82 15.42-7.22 5.16-12.27 10.01-19.92 18.43a86.07 86.07 0 0 1-6.57 6.4c-1.67 1.48-7.91 6.83-7.84 6.77-3.27 2.84-5.8 5.16-8.26 7.62a92.1 92.1 0 0 0-14.27 18.13c-4.3 7.16-3.22 11.89 2.53 15.26 4.47 2.63 9.88 3.99 23.24 6.39a185.7 185.7 0 0 1 12.92 2.6c12.11 3.03 20.64.84 32.06-5.96l4.4-2.65c1.66-1 2.96-1.73 4.2-2.35.95-.48 6.04-3.14 7.6-3.92 9.59-4.8 17.04-6.94 24.49-5.98a24.1 24.1 0 0 1 10.4 3.93c7.82 5.21 8.45 12.52 4.7 25.13-.32 1.07-.64 2.1-1.16 3.74-2.57 8.12-3.31 11.04-3.31 14.55 0 10.88-5.66 23.14-15.08 37.28a41.28 41.28 0 0 0-3.97 7.46c-.37.9-.73 1.82-1.18 3.04-3.25 8.85-4.21 11.13-7.84 17.47-7.67 13.42-33.43 16.95-47.7 8.18a578.4 578.4 0 0 0-6.4-3.89c-3.4-2.04-16.36-9.67-17.67-10.45-8.38-4.97-16.36-9.78-25.92-15.66-9.5-5.85-15.7-7.7-19.24-6.36-2.68 1.02-3.8 3.82-4 8.51a61.12 61.12 0 0 0-.02 3.72l.02 1.7c0 4.5-2.69 8.73-11.52 19.87-3.92 4.95-5.87 7.59-7.55 10.39-2.39 3.97-4.08 10.56-6.56 23.72l-1.05 5.62-.86 4.4zm10.5 0h-1c.03-.34.04-.68.04-1 0-12.39 8.48-33.57 19.16-43.37a26.18 26.18 0 0 0 3.67-4.17 35.8 35.8 0 0 0 2.88-4.9c.36-.72 1.75-3.66 2.1-4.36 3.22-6.29 6.84-6.54 16.97.39 1.34.9 6.07 4.16 6.4 4.38 2.62 1.8 4.67 3.2 6.7 4.56 5.03 3.39 9.37 6.2 13.51 8.7 14.33 8.67 25.49 13.27 34.11 13.27 16.86 0 32.71-5.95 39.6-14.8 1.59-2.04 3.2-5.17 5.06-9.63.8-1.92 1.64-4.06 2.67-6.8l2.74-7.33c4.66-12.44 7.76-19.06 11.56-23.27 7.9-8.79 14.87-36 14.87-52.67 0-1.9.17-3.11 1.02-8.27.37-2.2.58-3.6.74-5.07.63-5.51.21-9.46-1.68-12.39-4.6-7.1-19.7-9.23-38.46-4.78a100.57 100.57 0 0 0-18.94 6.3c-5.17 2.37-17.11 9.74-16.5 9.4-6.72 3.64-12.97 4.15-24.8 1.3-29.55-7.14-30.43-8.62-15.26-26.81 17.44-20.93 47.12-46.18 56.38-46.18 9.92 0 53.84-11.98 65.78-17.95 9.46-4.73 24.32-21.18 36.82-37.85.71-.95 13.5-21.6 19.2-29.6 9.35-13.13 18.22-22.55 26.95-27.53 7.29-4.17 13.16-10.28 18.8-18.73 1.93-2.9 10.52-17.65 12.73-20.41 1.54-1.93 3-3.21 4.52-3.89 14.07-6.25 24.22-9.04 39.2-9.04h29c4.05 0 7.36-.4 22.93-2.5l4.3-.57c9.92-1.3 16.57-1.93 21.77-1.93 1.66 0 2.95.01 6.03.04 18.61.19 28.55-.48 44.86-4.03 3.1-.67 6.13-1.78 9.11-3.31v1.12a37.96 37.96 0 0 1-8.9 3.17c-16.4 3.56-26.4 4.24-45.08 4.05-3.08-.03-4.36-.04-6.02-.04-5.15 0-11.76.63-21.64 1.92l-4.3.58c-15.64 2.11-18.94 2.5-23.06 2.5h-29c-14.81 0-24.84 2.75-38.8 8.96-1.34.6-2.69 1.78-4.14 3.6-2.16 2.68-10.72 17.39-12.68 20.33-5.72 8.57-11.7 14.8-19.13 19.04-8.57 4.9-17.36 14.23-26.63 27.24-5.68 7.97-18.47 28.64-19.22 29.63-12.6 16.8-27.52 33.32-37.18 38.15-12.06 6.03-56.14 18.05-66.22 18.05-8.82 0-38.39 25.15-55.62 45.82-14.6 17.52-14.19 18.21 14.74 25.2 11.6 2.8 17.6 2.3 24.09-1.2-.67.35 11.31-7.03 16.56-9.44 5.41-2.48 11.6-4.59 19.11-6.37 19.13-4.53 34.65-2.35 39.54 5.22 2.05 3.17 2.48 7.32 1.84 13.04a96.34 96.34 0 0 1-.75 5.13c-.84 5.08-1.01 6.29-1.01 8.1 0 16.9-7.03 44.33-15.13 53.33-3.68 4.09-6.76 10.65-11.37 22.96-.35.93-2.2 5.94-2.73 7.33-1.04 2.76-1.88 4.9-2.68 6.84-1.9 4.53-3.55 7.73-5.2 9.85-7.1 9.13-23.25 15.19-40.39 15.19-8.86 0-20.15-4.65-34.63-13.42-4.15-2.51-8.5-5.32-13.55-8.72a861.54 861.54 0 0 1-6.71-4.56l-6.4-4.39c-9.68-6.63-12.61-6.42-15.5-.75-.35.68-1.74 3.62-2.1 4.35a36.77 36.77 0 0 1-2.96 5.03c-1.12 1.57-2.37 3-3.81 4.33-10.47 9.6-18.84 30.51-18.84 42.63l-.03 1zm-29.65 0h-1.1c1.17-2.52 1.79-5.2 1.79-8 0-20 4.83-42.04 12.15-49.35 5.17-5.18 7.77-8.38 9.9-12.74 2.64-5.41 3.95-12 3.95-20.91 0-6.82 1.14-11.59 3.37-15.07 1.74-2.7 3.6-4.21 8.91-7.52a31.64 31.64 0 0 0 3.9-2.79c4.61-3.96 6.58-6.2 7.72-9.41 1.43-4.02.93-9.04-1.86-16.02a68.98 68.98 0 0 0-3.99-8.07l-.93-1.7a75.47 75.47 0 0 1-2.64-5c-5.16-10.71-3.77-18.9 7.68-29.78a204 204 0 0 1 26.81-21.55c3.96-2.69 16.8-10.8 19.24-12.5 1.99-1.4 4.33-3.3 7.77-6.3-.02 0 7.23-6.39 9.47-8.3 4.97-4.26 9.09-7.5 13.05-10.15 4.72-3.15 8.97-5.28 12.87-6.32 12.78-3.41 15.6-4.18 21.77-5.97 12.55-3.64 21.96-6.9 28.14-10a45.47 45.47 0 0 1 7.47-2.79c8.66-2.66 12.02-4.1 16.97-8.1 6.78-5.46 13.07-14.25 19.33-27.87 15.97-34.77 19.08-39.39 32.15-49.19 3.14-2.36 6.37-4.1 11.43-6.4l2.33-1.04c11.93-5.35 16.87-8.93 21.1-17.38 1.88-3.77 2.48-6.29 3.37-12.27.78-5.19 1.48-7.56 3.53-10.25 2.57-3.4 7.03-6.27 14.36-9.01 3.37-1.26 7.36-2.5 12.05-3.73 16.33-4.3 25.28-5.36 39.6-5.81 6.9-.22 9.5-.56 12.66-2 1.19-.54 2.36-1.23 3.58-2.11 3.7-2.7 8.14-4.54 13.24-5.67 5.71-1.27 10.69-1.54 18.7-1.45l2.35.02c2.82 0 6.8-1 19.7-4.69 10.83-3.08 15.95-4.31 19.3-4.31.82 0 1.9.13 3.55.41l5.01.9c9.82 1.68 17.44 1.89 25.15-.21 7.98-2.18 14.8-6.77 20.29-14.24V147c-5.47 7.04-12.21 11.42-20.03 13.55-7.88 2.15-15.63 1.94-25.58.23l-5-.9c-1.6-.26-2.64-.39-3.39-.39-3.2 0-8.32 1.22-19.74 4.48-12.35 3.53-16.3 4.52-19.26 4.52l-2.36-.02c-7.94-.1-12.85.17-18.47 1.42-4.97 1.11-9.3 2.9-12.88 5.5a21.4 21.4 0 0 1-3.75 2.22c-3.32 1.5-6 1.87-13.04 2.09-14.25.44-23.13 1.5-39.37 5.77a125.56 125.56 0 0 0-11.95 3.7c-7.17 2.7-11.49 5.46-13.93 8.68-1.9 2.52-2.58 4.76-3.33 9.8-.9 6.08-1.53 8.68-3.47 12.56a30.6 30.6 0 0 1-9.66 11.45c-3.12 2.26-5.95 3.73-11.93 6.4l-2.31 1.04c-5.01 2.27-8.18 3.99-11.25 6.29-12.9 9.68-15.93 14.17-31.85 48.8-6.31 13.76-12.7 22.68-19.6 28.25-5.08 4.1-8.53 5.57-17.3 8.27a44.64 44.64 0 0 0-7.33 2.73c-6.24 3.12-15.7 6.4-28.3 10.06a867.4 867.4 0 0 1-21.8 5.97c-3.77 1.01-7.93 3.1-12.56 6.19a137.35 137.35 0 0 0-12.95 10.07c-2.24 1.92-9.48 8.3-9.48 8.3a98.2 98.2 0 0 1-7.84 6.37c-2.46 1.72-15.32 9.83-19.26 12.5a203 203 0 0 0-26.69 21.45c-11.13 10.58-12.43 18.3-7.47 28.63a74.52 74.52 0 0 0 2.62 4.95l.94 1.7a69.84 69.84 0 0 1 4.03 8.17c2.88 7.2 3.4 12.46 1.89 16.73-1.22 3.43-3.28 5.77-8.02 9.84-1.14.97-2.32 1.8-5.3 3.67-3.92 2.45-5.69 3.89-7.31 6.42-2.13 3.3-3.22 7.89-3.22 14.53 0 9.05-1.34 15.79-4.05 21.34-2.19 4.49-4.85 7.77-10.1 13.01-7.07 7.07-11.85 28.9-11.85 48.65 0 2.8-.58 5.48-1.7 8zm282.54 0h-1.01l-1.1-5.8c-3.08-16.26-4.05-26.2-2.74-37.26.7-5.8.77-9.68.55-15.3-.18-4.45-.17-5.68.19-7.63.78-4.3 3.44-8.53 10.39-16.34 9.07-10.2 12.26-15.41 19.8-30.15 1.35-2.64 2.33-4.47 3.38-6.3.9-1.58 1.82-3.06 2.77-4.5 3.14-4.7 7.03-8.42 16.84-16.81 11.22-9.6 15.5-13.86 18.13-19.13.7-1.4 1.3-2.8 1.93-4.4a206 206 0 0 0 1.49-4.05c3.63-9.94 8.01-13.93 22.9-17.81 4.99-1.3 20.55-5.13 21.38-5.34 16.19-4.1 25.33-7.36 33.48-12.6 5.86-3.77 5.84-3.76 27.66-16.53l2.6-1.52c10.23-6 17.1-10.2 22.73-13.95a149.3 149.3 0 0 0 8.8-6.3 723.7 723.7 0 0 0 6.37-5.08A87.74 87.74 0 0 1 600 342.95v1.12a85.76 85.76 0 0 0-15.49 9.9c.18-.14-4.76 3.84-6.38 5.1a150.3 150.3 0 0 1-8.85 6.35c-5.65 3.76-12.53 7.96-22.78 13.97l-2.6 1.53c-21.8 12.75-21.78 12.74-27.63 16.5-8.27 5.32-17.49 8.61-33.78 12.73-.83.21-16.39 4.04-21.36 5.33-8.03 2.1-13.15 4.5-16.45 7.5-2.66 2.42-4 4.86-5.77 9.7l-1.5 4.07a51.12 51.12 0 0 1-1.96 4.47c-2.72 5.45-7.04 9.75-18.38 19.45-9.73 8.32-13.6 12.02-16.65 16.6a77.18 77.18 0 0 0-2.74 4.45c-1.05 1.81-2.01 3.63-3.35 6.25-7.58 14.81-10.82 20.08-19.96 30.36-6.83 7.7-9.4 11.78-10.15 15.86-.34 1.85-.34 3.04-.17 7.4.22 5.68.14 9.6-.55 15.47-1.3 10.92-.34 20.79 2.73 36.95l1.12 5.99zm-76.59 0h-2.1l1.39-4.3c1.04-3.3 1.93-6.78 2.68-10.4 2.65-12.73 3.27-23.63 3.27-41.3 0-5.71-1.86-9.75-4.13-9.75-2.94 0-6.96 5.61-10.93 17.08C271.14 579.68 258.3 593 238 593c-22.42 0-29.26-1.35-48.42-10.09a87.69 87.69 0 0 1-9.42-5.04c-2.95-1.8-12.78-8.57-14.84-9.72-4.2-2.36-7-2.71-9.72-.99-.63.4-1.26.91-1.9 1.55a57.69 57.69 0 0 1-4.31 3.86 147.88 147.88 0 0 1-3.06 2.44l-1 .8C137.01 582.43 134 587.18 134 597c0 1.02-.02 2.01-.07 3h-2c.05-.99.07-1.98.07-3 0-10.52 3.33-15.78 12.09-22.76a265.61 265.61 0 0 1 2-1.6c.83-.64 1.43-1.13 2.03-1.61a55.76 55.76 0 0 0 4.17-3.74c.74-.73 1.48-1.34 2.24-1.82 3.47-2.2 7-1.75 11.77.93 2.15 1.21 12.03 8 14.9 9.76a85.7 85.7 0 0 0 9.22 4.93C209.29 589.7 215.85 591 238 591c19.25 0 31.49-12.7 41.06-40.33 4.24-12.25 8.66-18.42 12.81-18.42 3.8 0 6.13 5.06 6.13 11.75 0 17.8-.63 28.8-3.3 41.7-.77 3.7-1.68 7.23-2.75 10.6-.4 1.3-.8 2.53-1.19 3.7zm-149.25 0l.5-.94a160.1 160.1 0 0 0 6.53-13.26c2.73-6.29 5.78-9.64 9.24-10.52 3.74-.95 7.15.74 12.56 5.13 5.43 4.4 6.07 4.86 7.73 5.1 1.6.22 4.28 1.14 8.86 2.95 1.3.5 10.78 4.35 13.85 5.55 3.07 1.2 5.85 2.25 8.49 3.18 3.1 1.1 5.98 2.04 8.65 2.81h-3.45c-1.76-.56-3.6-1.18-5.54-1.87a281.2 281.2 0 0 1-8.51-3.19c-3.08-1.2-12.57-5.04-13.86-5.55-4.5-1.78-7.15-2.68-8.63-2.9-1.94-.27-2.53-.7-8.22-5.3-5.17-4.2-8.36-5.78-11.69-4.94-3.1.78-5.94 3.92-8.56 9.95a161 161 0 0 1-6.82 13.8h-1.13zm112.89 0a30.34 30.34 0 0 0 11.27-6.27c1.55-1.36 3.32-3.46 5.34-6.29 1.05-1.46 2.15-3.1 3.41-5.04a349.73 349.73 0 0 0 2.5-3.9l.47-.75.93-1.47a89.17 89.17 0 0 1 3.25-4.86c1.05-1.43 1.82-2.23 2.44-2.46 1.02-.37 1.49.48 1.49 2.04l.01 2.11c.05 6.91-.08 11.32-.7 16.33a48.4 48.4 0 0 1-2.38 10.56h-1.07a46.47 46.47 0 0 0 2.45-10.68c.62-4.96.75-9.33.7-16.2l-.01-2.12c0-.97-.08-1.12-.15-1.1-.36.14-1.05.85-1.97 2.1a88.44 88.44 0 0 0-3.22 4.82l-.92 1.46-.48.75a1268.1 1268.1 0 0 1-2.5 3.92c-1.26 1.95-2.38 3.6-3.44 5.08-2.06 2.88-3.87 5.04-5.5 6.45a30.87 30.87 0 0 1-8.94 5.52h-2.98zm-183.72 0H69.3c3.37-3.43 5.19-8.33 5.19-15 0-18.6-.04-17.35 1.02-20.77.6-1.93 1.5-3.74 3.27-6.63.42-.7 4.92-7.8 6.78-10.86 3.04-4.97 11.04-16.5 12.21-18.56 3.48-6.08 4.72-12.06 4.72-24.18 0-7.85 2.5-14.2 8.1-23.44l2.84-4.63a72.67 72.67 0 0 0 2.49-4.4c1.62-3.15 2.48-5.78 2.62-8.28.2-3.78-1.3-7.29-4.9-10.9-5.13-5.12-8.6-5.43-11.2-1.85-2.12 2.92-3.48 7.74-5.06 16.47-.2 1.03-.82 4.6-.82 4.57-.83 4.67-1.4 7.33-2.1 9.6-1.35 4.42-3.7 7.61-8.36 12.26l-3.26 3.2c-6.38 6.39-9.68 11.51-11.36 19.5l-1.16 5.52c-.87 4.1-1.56 7.04-2.33 9.94-3.67 13.74-9.65 25.97-22.59 44.72-7.68 11.14-11.05 18.87-10.92 23.72h-1c-.12-5.16 3.35-13.05 11.1-24.28 12.87-18.67 18.8-30.8 22.44-44.42.77-2.88 1.45-5.8 2.32-9.89l1.16-5.51c1.73-8.22 5.13-13.5 11.64-20 .63-.64 2.84-2.8 3.25-3.21 4.57-4.54 6.82-7.62 8.12-11.84a81.58 81.58 0 0 0 2.07-9.48l.81-4.57c1.62-8.9 3-13.8 5.24-16.89 3-4.15 7.2-3.78 12.71 1.74 3.8 3.8 5.42 7.58 5.2 11.66-.15 2.66-1.05 5.41-2.73 8.68a73.6 73.6 0 0 1-2.52 4.46l-2.84 4.63c-5.52 9.1-7.96 15.3-7.96 22.92 0 12.28-1.28 18.43-4.85 24.68-1.2 2.1-9.21 13.65-12.22 18.58-1.87 3.06-6.37 10.18-6.78 10.86-1.73 2.82-2.6 4.57-3.17 6.4-1.02 3.28-.98 2.1-.98 20.48 0 6.52-1.7 11.44-4.82 15zM310.09 0h1.06c-.37.9-.77 1.83-1.2 2.82-3.9 9.06-5.45 15.15-5.45 25.18 0 7.64-2.1 11.6-6.64 13.05-3.46 1.1-5.72.98-17.57-.43-11.55-1.36-19.17-1.58-28.16-.14-6.24 2.49-25.91 7.02-32.13 7.02-11.15 0-36.76-2.88-54.12-7.01a22.08 22.08 0 0 0-16.95 2.48c-4.05 2.33-7.09 5.03-13.9 11.97-6.28 6.39-9.53 9.23-13.8 11.5-7.09 3.79-11.22 7.65-13.4 12.27-1.82 3.85-2.33 7.84-2.33 15.29 0 4.4-2.65 6.69-9.45 9.74.1-.05-2.97 1.31-3.84 1.71-8.78 4.06-12.71 8.29-12.71 16.55 0 12.52-4.86 19.22-17.34 27.96l-4.56 3.14c-1.9 1.3-3.3 2.3-4.67 3.3-.92.68-1.79 1.34-2.62 2-7.16 5.62-11 14.54-15.56 33.28-.63 2.57-3.3 14-4.07 17.14a350.44 350.44 0 0 1-5.2 19.33c-1.37 4.5-4.5 15.07-4.96 16.53-1.05 3.4-1.64 4.94-2.46 6.32-.82 1.4-6.85 9.08-12.64 18.27L0 277.98v-1.9l4.58-7.35a270.8 270.8 0 0 1 12.61-18.23c-.3.5 1.35-2.8 2.38-6.12.45-1.44 3.58-12.01 4.95-16.53 1.83-6.03 3.44-12.09 5.19-19.27.76-3.13 3.44-14.56 4.06-17.14 4.62-18.95 8.52-28.02 15.92-33.83.84-.67 1.72-1.33 2.65-2.01 1.38-1.02 2.8-2.01 4.7-3.32l4.54-3.14C73.83 140.57 78.5 134.13 78.5 122c0-8.74 4.2-13.26 13.29-17.45.88-.41 3.96-1.77 3.85-1.73 6.46-2.9 8.86-4.97 8.86-8.82 0-7.6.53-11.7 2.42-15.71 2.29-4.84 6.57-8.85 13.84-12.73 4.15-2.21 7.35-5 14.15-11.93 6.28-6.4 9.36-9.13 13.52-11.53a23.07 23.07 0 0 1 17.69-2.59c17.27 4.12 42.8 6.99 53.88 6.99 6.1 0 25.73-4.53 31.92-7 9.12-1.46 16.83-1.25 28.49.13 11.63 1.38 13.9 1.5 17.15.47 4.06-1.3 5.94-4.85 5.94-12.1 0-10.1 1.56-16.3 6.6-28zm25.12 0h1c.05 5.62.26 11.48.65 19.4.47 9.7.64 14.57.64 21.6 0 9.81-4.68 17.46-13.1 23.16-6.53 4.43-14.94 7.46-24.33 9.33-3.74.54-9.42.56-22.68.23-6.74-.17-9.35-.22-12.39-.22-2.77 0-4.97.43-7.63 1.36-.88.3-4.55 1.74-5.58 2.11-6.55 2.35-13.59 3.53-24.79 3.53-8.1 0-13.58-1.38-22.46-4.9l-3.18-1.25c-12.55-4.87-21.27-5.15-37.18 1.12-11.15 4.39-18.13 9.2-22.28 14.81-3.15 4.26-4.33 7.8-5.94 15.8-1.22 6.09-1.93 8.74-3.5 12.13-1.65 3.53-3.97 5.81-7.07 7.22-2.33 1.07-4.35 1.5-9.32 2.19-9.04 1.27-12.77 3.09-15.61 9.58-3.71 8.48-7.72 13.87-14.22 19.76-2.4 2.18-13.14 11.02-15.91 13.42-8.2 7.1-13.85 17.37-18.7 31.97a258.81 258.81 0 0 0-3.27 10.7c-.01.05-2.26 7.97-2.88 10.1-8.49 28.85-17.88 52.95-26.13 61.2-2.8 2.8-5.06 5.64-10.4 12.96-3.4 4.68-6.23 8.25-8.95 11.1v-1.55c2.74-2.98 5.73-6.82 9.48-11.97 4.03-5.52 6.32-8.4 9.17-11.24 8.07-8.08 17.44-32.14 25.87-60.8.62-2.1 2.86-10.03 2.88-10.08 1.21-4.24 2.21-7.53 3.28-10.74 4.9-14.75 10.63-25.16 19-32.4 2.78-2.42 13.5-11.25 15.89-13.4 6.4-5.8 10.32-11.09 13.97-19.43 1.68-3.83 4.05-6.31 7.2-7.86 2.4-1.17 4.64-1.67 9.53-2.36 4.54-.63 6.5-1.05 8.7-2.06 2.89-1.31 5.03-3.42 6.58-6.73 1.53-3.3 2.23-5.9 3.43-11.9 1.64-8.14 2.85-11.79 6.11-16.2 4.28-5.79 11.41-10.7 22.73-15.16 16.15-6.36 25.13-6.07 37.9-1.11l3.19 1.26c8.77 3.47 14.13 4.82 22.09 4.82 11.09 0 18.02-1.16 24.46-3.47 1-.36 4.68-1.8 5.58-2.11A22.5 22.5 0 0 1 265 72.5c3.05 0 5.67.05 14.07.26 11.53.29 17.2.27 20.83-.25 9.25-1.85 17.54-4.83 23.94-9.17C332 57.8 336.5 50.46 336.5 41c0-7-.17-11.86-.7-22.7-.35-7.26-.55-12.83-.59-18.3zM93.87 0h2.04c-.7 4-1.61 6.82-3.03 9.47-2.33 4.38-2.85 5.75-5.26 13.03a40.46 40.46 0 0 1-1.94 5.03c-2.24 4.66-5.92 8.8-13.07 14.26-8.01 6.13-14.27 16.55-20.03 31.55-2.4 6.23-8.75 25.63-9.64 28.01-2.69 7.16-6.56 12.7-15.63 23.68l-2.68 3.24c-6.02 7.34-9.35 12.07-11.72 17.15-2.3 4.94-7.12 9.9-12.91 14.15v-2.4c5.14-3.94 9.1-8.3 11.1-12.6 2.46-5.27 5.87-10.1 11.98-17.56l2.68-3.26c8.94-10.8 12.72-16.22 15.3-23.1.88-2.33 7.24-21.74 9.65-28.03 5.89-15.31 12.3-26 20.68-32.41 6.92-5.3 10.4-9.2 12.48-13.55.65-1.35 1.16-2.7 1.85-4.79 2.45-7.4 3-8.83 5.4-13.34A27.68 27.68 0 0 0 93.87 0zm9.07 0h1.02c-1.66 8.3-2.91 12.67-4.54 15.26a59.14 59.14 0 0 0-4.1 8.21c-1.27 3-2.44 6.2-3.5 9.4-.38 1.12-.7 2.16-2.41 5.39a251.48 251.48 0 0 0-12.81 13.3c-3.48 3.96-5.95 7.27-7.15 9.66-.95 1.9-2.06 5.99-3.61 12.97-.64 2.9-3.65 17.15-4.51 21.07-3.63 16.45-6.63 26.69-9.9 32-7.66 12.45-10.64 15.71-37.08 41.1A69.78 69.78 0 0 1 0 179.21v-1.15a69.39 69.39 0 0 0 13.65-10.42c26.4-25.33 29.32-28.55 36.92-40.9 3.2-5.18 6.18-15.37 9.78-31.7.86-3.91 3.87-18.16 4.51-21.06 1.57-7.09 2.7-11.2 3.7-13.2 1.24-2.5 3.76-5.86 7.29-9.89.9-1.03 1.86-2.1 2.86-3.18 2.4-2.6 4.96-5.22 7.53-7.76.9-.88 1.73-1.7 3.37-3.4a129.02 129.02 0 0 1 4.78-13.46 60.07 60.07 0 0 1 4.19-8.35c1.52-2.44 2.74-6.71 4.36-14.74zM83.71 0h1.1c-2.09 4.74-6.03 8.92-11.42 12.3-7.2 4.52-16.5 7.2-24.39 7.2-8.9 0-11.8 7-11.74 21.52 0 1.7.04 3.17.12 5.99.1 3.3.12 4.45.12 5.99 0 5.73-.76 11.3-2.01 16.5a66.67 66.67 0 0 1-2.15 6.97 2597.76 2597.76 0 0 1-7 15.86A4270.8 4270.8 0 0 1 6.44 136.2 54.64 54.64 0 0 1 0 147v-1.65a54.87 54.87 0 0 0 5.55-9.57A4269.82 4269.82 0 0 0 30.7 79.97c.53-1.2.99-2.23 2.44-5.9A69.23 69.23 0 0 0 36.5 53c0-1.52-.03-2.66-.12-5.95-.08-2.83-.12-4.31-.12-6.01-.03-6.79.53-11.62 2.07-15.34 1.94-4.68 5.39-7.19 10.67-7.19 7.7 0 16.81-2.63 23.86-7.05C77.93 8.27 81.66 4.38 83.7 0zm282.63 0h1.01c1.86 10.02 2.18 12.67 2.32 18.3a123.43 123.43 0 0 1 .37 27.83c-.96 8.78-3.1 16.01-6.63 21.15-11.34 16.5-39.8 29.22-66.41 29.22-5.09 0-10.47.28-16.31.83a413.8 413.8 0 0 0-24.37 3.16c-21.56 3.26-27.66 4.01-36.32 4.01-6.92 0-12.2-1.05-21.69-3.9l-2.78-.83c-1.39-.41-2.54-.74-3.65-1.02-8-2.05-14.22-2.04-21.7.72a16.32 16.32 0 0 0-9.17 8.18c-1.6 3.05-2.5 6.06-4.02 12.83-1.5 6.64-2.34 9.52-3.99 12.64a16.16 16.16 0 0 1-9.85 8.36 104.8 104.8 0 0 0-9.5 3.42c-6.55 2.8-10.1 5.57-13.8 10.47-1.33 1.75-1.03 1.3-5.43 7.9-1.98 2.97-4.66 5.8-8.48 9.14-2.01 1.76-10.71 8.83-12.88 10.7-7.37 6.35-12.58 12.14-16.63 19.14-4.22 7.3-7.8 18.3-11.28 33.26-.87 3.73-1.72 7.64-2.64 12.14l-1.18 5.8-1.09 5.45c-1.8 8.96-2.77 13.28-3.77 16.26-6.8 20.44-17.26 42.16-27.13 51.2-5.11 4.7-8.1 7.07-11.1 8.86-.9.54-1.84 1.04-2.92 1.57-.44.22-9.6 4.4-14.1 6.66l-1.22.62v-1.13l.78-.39c4.52-2.26 13.67-6.44 14.1-6.65a41.19 41.19 0 0 0 2.84-1.54c2.94-1.75 5.88-4.09 10.94-8.73 9.71-8.9 20.1-30.51 26.87-50.79.97-2.92 1.94-7.22 3.73-16.13l1.1-5.46a490.5 490.5 0 0 1 3.82-17.96c3.5-15.06 7.1-26.14 11.39-33.54 4.11-7.11 9.4-12.98 16.83-19.4 2.19-1.88 10.88-8.95 12.88-10.7 3.77-3.28 6.39-6.05 8.3-8.93 4.43-6.64 4.12-6.18 5.47-7.96 3.8-5.03 7.5-7.91 14.21-10.78 2.61-1.12 5.74-2.24 9.59-3.46a15.17 15.17 0 0 0 9.27-7.86c1.59-3.02 2.42-5.85 4.03-12.99 1.41-6.27 2.32-9.33 3.98-12.48a17.31 17.31 0 0 1 9.7-8.66c7.7-2.83 14.1-2.84 22.3-.75 1.12.29 2.28.61 3.68 1.03l3.73 1.11c8.47 2.54 13.66 3.58 20.46 3.58 8.59 0 14.67-.75 36.18-4a414.64 414.64 0 0 1 24.41-3.17c5.88-.54 11.29-.83 16.41-.83 26.3 0 54.45-12.58 65.59-28.78 3.42-4.98 5.5-12.06 6.46-20.7.84-7.74.73-16.02.02-23.9a136.2 136.2 0 0 0-.57-5.12c0-4.47-.3-6.94-2.16-17zM18.88 0h1.03C18 7.57 17.15 10.18 14.46 16.2c-1.95 4.37-2.67 9.19-2.42 14.89.2 4.33.71 7.7 2.28 16.13 1.09 5.88 1.57 8.77 1.94 12.2.96 8.9.24 16.08-2.8 22.79A463.4 463.4 0 0 1 0 109.43v-2.12a465 465 0 0 0 12.54-25.52c2.97-6.52 3.67-13.53 2.72-22.27-.36-3.4-.84-6.26-1.93-12.12-1.57-8.47-2.1-11.88-2.29-16.27-.26-5.84.48-10.81 2.5-15.33 2.64-5.9 3.48-8.47 5.34-15.8zm280.47 0a70.78 70.78 0 0 1-4.91 11.24c-2.56 4.7-4.01 8.45-4.86 11.98l-.4 1.8-.28 1.45a5.28 5.28 0 0 1-.74 2.07c-.74 1.03-1.93 1.28-5.13 1.25.92 0-9.85-.29-15.03-.29-10.2 0-18.45.82-29.46 2.56-16.87 2.66-17.73 2.77-23.66 2.52a42.57 42.57 0 0 1-8-1.09c-17.7-4.16-46.18-5.86-54.72-3.01-2.72.9-5.88 2.8-9.52 5.59a112.37 112.37 0 0 0-6.54 5.48c-1.4 1.25-9.17 8.5-10.78 9.84-1.45 1.2-8.18 7.42-8.85 8.02a114.65 114.65 0 0 1-4.55 3.9c-4.99 4.03-8.9 6.2-11.92 6.2-3.52.05-4.32 0-5.14-.4-1.13-.56-1.5-1.72-1.13-3.57.74-3.63 4.47-10.84 12.84-24.8 5.69-9.48 9.42-18 11.78-26.2 1.45-5.04 1.94-7.4 2.97-14.54h1.01c-1.05 7.3-1.54 9.7-3.01 14.82-2.39 8.28-6.16 16.89-11.9 26.44-8.3 13.84-12 21.01-12.7 24.48-.3 1.45-.08 2.14.59 2.47.6.3 1.35.35 3.48.3 3.92 0 7.69-2.1 12.5-5.98 1.4-1.13 2.87-2.39 4.51-3.86.66-.59 7.41-6.83 8.88-8.05 1.59-1.33 9.34-8.55 10.75-9.82 2.4-2.15 4.55-3.96 6.6-5.53 3.72-2.85 6.97-4.8 9.81-5.74 8.76-2.92 37.41-1.22 55.27 2.99 2.57.6 5.14.95 7.81 1.06 5.84.25 6.7.14 23.47-2.51 11.05-1.75 19.36-2.57 29.6-2.57 5.2 0 15.99.3 15.05.29 2.87.03 3.84-.17 4.3-.83.23-.32.4-.8.58-1.7l.28-1.43.4-1.85c.88-3.6 2.36-7.44 4.96-12.22 1.87-3.43 3.44-7 4.73-10.76h1.06zm-8.59 0c-5.91 17.94-9.55 22-19.76 22-4.5 0-10.22.32-28.69 1.5l-1.53.1c-15.6.99-23.47 1.4-28.78 1.4-5.35 0-13.24-.96-28.86-3.28l-1.54-.23C163.18 18.75 157.47 18 153 18c-4.45 0-7.3 1.01-10.96 3.34-.1.06-1.8 1.17-2.3 1.47-2.43 1.5-4.32 2.19-6.74 2.19-2.8 0-4.11-1.46-4.11-4.22 0-1.04.16-2.29.5-4.1.16-.82.9-4.4 1.07-5.32.8-4.11 1.3-7.68 1.47-11.36h2c-.17 3.82-.68 7.5-1.5 11.75-.19.94-.92 4.5-1.07 5.31a21.04 21.04 0 0 0-.47 3.72c0 1.7.46 2.22 2.11 2.22 1.99 0 3.55-.57 5.7-1.9.47-.28 2.15-1.37 2.26-1.44C144.92 17.14 148.12 16 153 16c4.62 0 10.3.74 28.9 3.51l1.53.23C198.93 22.04 206.8 23 212 23c5.25 0 13.11-.41 28.65-1.4l1.54-.1C260.73 20.32 266.43 20 271 20c8.95 0 12.15-3.4 17.66-20h2.1zM141.51 0h1.13c-2.06 3.86-2.63 5.1-2.77 6.19-.15 1.12.42 1.64 2.32 1.96 1.8.3 3.85.35 10.81.35 6.02 0 13 .56 21.35 1.62 3.95.5 8.03 1.1 13.13 1.89 24 3.7 22.5 3.49 26.83 3.49 24.02 0 51.83-2.24 60.45-6.94 2.88-1.57 5.05-4.49 6.6-8.56h1.07c-1.64 4.47-3.98 7.69-7.2 9.44-8.83 4.82-36.67 7.06-60.92 7.06-4.41 0-2.84.22-26.98-3.5-5.1-.8-9.17-1.38-13.1-1.88-8.31-1.06-15.26-1.62-21.23-1.62-7.04 0-9.1-.05-10.97-.37-2.38-.4-3.38-1.32-3.15-3.07.16-1.22.69-2.41 2.63-6.06zm76.4 0c5.69 1.64 10.37 2.5 14.09 2.5 9.59 0 16.7-.71 22.4-2.5h2.98C251.12 2.53 243.2 3.5 232 3.5c-4.5 0-10.32-1.21-17.53-3.5h3.45zM70.69 0c-2.87 3.27-6.95 5.39-12.02 6.53-3.98.89-7.5 1.08-12.92 1A97.24 97.24 0 0 0 44 7.5c-5.37 0-8.86-1.24-10.1-4.97A8.6 8.6 0 0 1 33.5 0h.99c.02.82.14 1.56.36 2.22C35.91 5.39 39.02 6.5 44 6.5l1.76.02c5.35.09 8.8-.1 12.69-.97C62.95 4.54 66.63 2.74 69.3 0h1.37zM0 207.87c7.31-.16 11.5 3.33 11.5 11.13 0 11.41-5.05 28.35-11.5 41.5v-2.3c5.93-12.72 10.5-28.47 10.5-39.2 0-7.18-3.7-10.3-10.5-10.13v-1zm0 7.05c1.23.14 2.18.58 2.87 1.31 1.4 1.48 1.6 3.72 1.16 7.58l-.16 1.3A28.93 28.93 0 0 0 3.5 229c0 3.2-1.48 9.52-3.5 15.9v-3.45c1.49-5.13 2.5-9.87 2.5-12.45 0-.98.08-1.75.37-4.02l.16-1.29c.42-3.56.24-5.59-.88-6.77-.5-.53-1.21-.87-2.15-1v-1zM0 410.9v-1.47a21.67 21.67 0 0 0 2.97-4.7c1.32-2.7 2.68-6.28 4.56-11.89 7.85-23.55 7.83-26.6.25-30.4-2.25-1.12-4.8-1.43-7.78-.91v-1.02a13.1 13.1 0 0 1 8.22 1.04c8.24 4.12 8.26 7.6.25 31.6-1.88 5.66-3.25 9.27-4.6 12.02A20.82 20.82 0 0 1 0 410.9zM33.64 452c1.68 0 3.04-.23 8.34-1.31l2.38-.47c8.26-1.57 12.72-1.3 14.53 2.33 1.38 2.75-.47 5.86-4.75 9.68a75.6 75.6 0 0 1-5.08 4.07c-.94.7-4.89 3.59-5.79 4.27-1.86 1.4-2.97 2.37-3.47 3.03a19.08 19.08 0 0 0-2.89 5.5c.07-.2-4.02 13.65-6.96 22.22-2.7 7.85-5.56 10.72-8.82 8.59-2.11-1.4-3.66-4.24-6.6-11.03-1.98-4.62-2.5-5.76-3.4-7.4-4.55-8.18-3.9-23.9-.05-32.87a9.6 9.6 0 0 1 6.98-5.96c2.59-.66 4.86-.75 11.78-.67l3.8.02zm0 2c-1.13 0-2.09 0-3.82-.02-12.07-.13-14.83.57-16.9 5.41-3.63 8.47-4.26 23.55-.05 31.12.96 1.73 1.48 2.88 3.5 7.58 2.72 6.3 4.24 9.08 5.86 10.14 1.64 1.08 3.5-.8 5.82-7.55a682.9 682.9 0 0 0 6.97-22.24 21.03 21.03 0 0 1 3.18-6.04c.65-.87 1.85-1.9 3.86-3.43.92-.7 4.87-3.57 5.8-4.27 2.02-1.5 3.6-2.77 4.95-3.97 3.63-3.23 5.09-5.7 4.3-7.28-1.21-2.42-5.07-2.65-12.38-1.27l-2.35.47c-5.49 1.11-6.86 1.35-8.74 1.35zm345.63 146c-3.45-12.26-3.77-14.13-3.77-19 0-3.33-.13-6.27-.43-11.34-.63-10.33-.65-13.5.26-17.07 1.21-4.74 4.21-7.1 9.67-7.1h26c4.08 0 5.19 1.85 5.93 7.11.1.79.13.97.19 1.32.84 5.35 2.8 7.58 8.88 7.58 3.64 0 5.54.4 6.43 1.37.76.83.76 1.44.36 3.93-.85 5.26.5 8.85 7.5 13.8 6.32 4.45 11.63 5.36 16.55 3.37 3.8-1.54 6.73-4.16 11.92-10l1.1-1.23 1.09-1.23a75.6 75.6 0 0 1 2.7-2.86 35.81 35.81 0 0 1 9.57-6.73c1.52-.76 1.72-.86 5.66-2.63 6.1-2.73 9.01-4.5 11.74-7.62 2.63-3 4.67-4.85 6.7-6.04 3.18-1.85 5.46-2.13 13.68-2.13 5.98 0 10.56-4.32 18-14.99l2.82-4.03c1.06-1.5 1.94-2.7 2.79-3.79 7.87-10.12 19.38-10.4 30.74.96 5.54 5.53 10.17 19.43 13.64 38.51 2.5 13.75 4.18 29.46 4.47 39.84h-1c-.3-10.32-1.96-25.97-4.45-39.66-3.43-18.87-8.02-32.65-13.36-37.99-10.95-10.95-21.76-10.68-29.26-1.04-.83 1.07-1.7 2.26-2.75 3.75l-2.81 4.02c-7.65 10.95-12.38 15.42-18.83 15.42-8.04 0-10.21.26-13.17 2-1.92 1.12-3.9 2.9-6.45 5.83-2.86 3.26-5.87 5.09-12.09 7.88a103.35 103.35 0 0 0-5.62 2.6 34.84 34.84 0 0 0-9.32 6.54 74.67 74.67 0 0 0-3.75 4.05l-1.1 1.24c-5.28 5.95-8.29 8.64-12.28 10.25-5.26 2.13-10.92 1.17-17.5-3.48-7.33-5.17-8.82-9.15-7.92-14.77.34-2.12.34-2.6-.1-3.1-.64-.69-2.34-1.04-5.7-1.04-6.63 0-8.96-2.63-9.87-8.42l-.2-1.34c-.67-4.82-1.53-6.24-4.93-6.24h-26c-5 0-7.6 2.04-8.7 6.34-.88 3.43-.85 6.57-.23 16.76a177 177 0 0 1 .43 11.4c0 4.78.32 6.63 3.81 19h-1.04zm13.68 0c-1.31-6.58-1.61-10.71-1.36-14.84.04-.7.1-1.44.18-2.38l.23-2.56c.34-3.81.5-6.97.5-11.22 0-4.94 1.46-7.76 4.21-8.42 2.38-.58 5.56.54 9.2 3 6.64 4.52 13.99 13.07 16.55 19.23 4.77 11.44 14.12 15.69 33.54 15.69 8.6 0 14.32-2.35 20.67-7.88 1.45-1.26 15.06-15 21-20 7.21-6.07 11.77-7.59 20.62-8.32 5.52-.45 7.98-.9 11.44-2.36 4.58-1.95 9.36-5.48 14.9-11.29 7.43-7.76 13.25-8.92 17.47-4.3 3.32 3.63 5.46 10.58 6.82 20.24.73 5.17.94 7.74 1.58 17.38.25 3.75.17 5.32-.92 18.03h-1c1.09-12.7 1.17-14.28.92-17.97-.64-9.6-.85-12.16-1.57-17.3-1.33-9.47-3.43-16.27-6.56-19.7-3.76-4.11-8.93-3.08-16 4.32-5.65 5.9-10.54 9.5-15.25 11.5-3.58 1.53-6.13 1.99-11.6 2.44-8.8.72-13.17 2.18-20.2 8.1-5.9 4.96-19.5 18.7-21 19.99-6.52 5.68-12.47 8.12-21.32 8.12-19.78 0-29.5-4.42-34.46-16.3-2.49-5.97-9.71-14.38-16.2-18.79-3.42-2.32-6.36-3.35-8.4-2.86-2.2.53-3.44 2.92-3.44 7.45 0 4.28-.16 7.47-.5 11.31l-.23 2.56c-.09.93-.14 1.65-.19 2.35-.24 4.08.06 8.18 1.39 14.78h-1.02zm113.75 0c2.52-3.26 8.93-11.79 10.9-14.3 5.48-6.98 13.05-12.38 19.4-13.94 7.01-1.71 11.5 1.45 11.5 9.24 0 4.02-.04 5.16-.74 19h-1c.7-13.85.74-15 .74-19 0-7.12-3.86-9.83-10.26-8.26-6.11 1.5-13.5 6.77-18.85 13.57-1.86 2.36-7.65 10.07-10.43 13.69h-1.26zm-9.86-338.96c3.44 2.71 7 5.1 11.44 7.75 1.06.64 8.42 4.9 10.35 6.1 11.27 7 15 13.35 12.35 25.33-1.45 6.52-4.53 11.1-9.39 14.44-3.83 2.63-8.07 4.26-16.08 6.56-11.97 3.45-13.68 3.99-18.82 6.28a60.18 60.18 0 0 0-7.81 4.18c-11.11 7.07-19.1 7.7-27.96 3.28-3.56-1.77-17.2-11-17.2-11.01a101.77 101.77 0 0 0-5.2-3.07c-16.04-8.83-34.27-24.16-34.52-31.85-.11-3.46 1.99-6.57 6.28-10.26 1.03-.9 2.18-1.81 3.68-2.95.72-.55 3.38-2.56 3.94-3 4.47-3.4 7.18-5.79 9.32-8.45 11.12-13.82 26.55-28.68 34.36-32.28 12.06-5.54 19.84-5.77 27.37.12 3.25 2.54 5.65 6.54 8.58 13.35.29.65 2.3 5.45 2.88 6.74 1.62 3.65 2.9 5.8 4.24 6.94.72.6 1.45 1.2 2.2 1.8zm-3.49-.28c-1.63-1.39-3.03-3.74-4.77-7.65-.58-1.3-2.6-6.12-2.88-6.76-2.81-6.5-5.08-10.3-7.98-12.56-6.83-5.35-13.85-5.15-25.3.12-7.45 3.42-22.7 18.12-33.64 31.72-2.27 2.82-5.08 5.3-9.67 8.79l-3.94 2.98a79.98 79.98 0 0 0-3.59 2.88c-3.87 3.33-5.67 6-5.58 8.69.21 6.64 18.14 21.72 33.48 30.15 1.76.97 3.5 2 5.3 3.13.12.08 13.61 9.22 17.03 10.92 8.22 4.1 15.46 3.52 26-3.18a62.17 62.17 0 0 1 8.07-4.31c5.25-2.35 7-2.9 19.08-6.38 7.8-2.24 11.9-3.82 15.5-6.3 4.44-3.04 7.23-7.18 8.56-13.22 2.44-11.02-.83-16.6-11.45-23.2-1.9-1.18-9.23-5.42-10.32-6.08-4.5-2.69-8.13-5.12-11.64-7.9-.77-.6-1.52-1.21-2.26-1.84zM87.72 241.6c4.3-2.98 7.88-5 12.14-6.95.84-.4 1.73-.78 2.78-1.24l4.37-1.88a164.3 164.3 0 0 0 17.74-8.96 320.67 320.67 0 0 1 27.87-14.5c4.22-1.95 21.89-9.84 21.17-9.52 19.17-8.62 28.1-6.93 49.5 8.05 7.91 5.54 13.24 13.25 16.45 22.66 3.02 8.83 3.76 16.51 3.76 27.75 0 8.32-.66 12.95-3.68 18.97-4.18 8.36-12.3 16.14-25.58 23.47-24.45 13.49-38.83 27.55-52.83 47.84-8.83 12.8-47.76 44.21-65.16 54.15C75.04 413.55 48.89 423.5 31 423.5c-10.05 0-14.67-4.78-14.76-13.37-.07-6.32 2.06-13.73 6.3-24.32 2.95-7.37 2.02-12.9-2.16-22.29-3.19-7.17-3.88-9.14-3.88-12.52 0-3.35 1.87-6.9 5.52-11.07 2.61-3 3.5-3.83 11.9-11.5 5.09-4.66 8.08-7.6 10.7-10.75 9.46-11.36 12.62-19.47 17.9-44.78 3.12-15.05 6.63-20.28 15.12-25.25.8-.47 3.95-2.25 4.7-2.68a76.66 76.66 0 0 0 5.38-3.38zm.56.82a77.63 77.63 0 0 1-5.44 3.43l-4.7 2.67c-8.23 4.82-11.57 9.81-14.65 24.6-5.3 25.45-8.51 33.7-18.1 45.21-2.66 3.19-5.68 6.16-10.8 10.84-8.36 7.64-9.24 8.48-11.82 11.42-3.5 4.01-5.27 7.36-5.27 10.42 0 3.18.68 5.1 3.8 12.12 4.27 9.6 5.24 15.37 2.16 23.07-4.18 10.47-6.29 17.78-6.22 23.93.08 8.06 4.26 12.38 13.76 12.38 17.67 0 43.68-9.9 64.75-21.93 17.28-9.88 56.1-41.2 64.84-53.85 14.08-20.42 28.57-34.59 53.17-48.16 13.12-7.23 21.09-14.87 25.17-23.03 2.92-5.86 3.57-10.35 3.57-18.53 0-11.13-.74-18.73-3.7-27.43-3.15-9.22-8.36-16.75-16.09-22.16-21.13-14.8-29.7-16.42-48.5-7.95.7-.32-16.96 7.56-21.17 9.5-1.7.8-3.3 1.55-4.86 2.3a319.68 319.68 0 0 0-22.93 12.17 165.3 165.3 0 0 1-17.85 9.01l-4.37 1.88c-1.04.45-1.92.84-2.76 1.23a74.56 74.56 0 0 0-11.99 6.86zm-7.6 12.2c7.7-6.25 12.3-8.17 23.68-11.27 6.12-1.67 9.12-2.95 12.31-5.72 3.8-3.3 7.47-4.52 15.86-6.1 2.75-.52 3.67-.7 5.06-1.02 5.48-1.24 9.48-2.93 13.1-5.89 10.42-8.53 25.4-14.11 36.31-14.11 5.33 0 16.77 7.58 25.74 17.16 10.73 11.46 15.96 23.27 12.73 32.5-3.18 9.1-11.39 18.57-23.03 27.86-8.44 6.73-18.36 13-25.22 16.43-3.72 1.86-6.59 4.88-9.77 9.99-.69 1.1-11.1 20.25-16.03 27.83-5.62 8.65-15.4 17.36-30.23 27.96a552.58 552.58 0 0 1-9.2 6.42c-.13.09-6.81 4.65-8.6 5.89-6.47 4.46-10.35 7.35-13.05 9.83-11.64 10.67-37.14 15.54-43.7 8.98-1.96-1.96-2.2-4.06-1.95-10.52.37-9.42-.5-14.5-4.95-20.51a34.09 34.09 0 0 0-7.04-6.92c-3.93-2.95-6.07-6.11-6.56-9.49-.97-6.61 3.87-13.06 14.17-21.69 1.58-1.32 6.67-5.44 7.09-5.78a48.03 48.03 0 0 0 5.23-4.77c4.1-4.63 5.85-9.55 7.8-20.07a501.52 501.52 0 0 0 .8-4.37c.33-1.87.6-3.3.88-4.73.74-3.78 1.5-7.18 2.4-10.63 1-3.78 1.38-5.5 2.36-10.37.6-3.02.93-4.21 1.56-5.47 1.22-2.45 1.27-2.5 12.25-11.42zm.64.78c-10.77 8.74-10.88 8.84-12 11.08-.58 1.16-.88 2.3-1.47 5.22-.98 4.89-1.36 6.63-2.37 10.44-.9 3.43-1.65 6.8-2.39 10.56a339.79 339.79 0 0 0-1.29 6.95l-.39 2.15c-1.98 10.68-3.77 15.74-8.04 20.54a48.77 48.77 0 0 1-5.34 4.88c-.42.34-5.5 4.47-7.07 5.78-10.04 8.4-14.72 14.65-13.83 20.78.45 3.1 2.44 6.03 6.17 8.83 3 2.25 5.39 4.62 7.24 7.12 4.63 6.24 5.52 11.52 5.15 21.15-.25 6.14-.01 8.1 1.66 9.78 6.1 6.1 31.02 1.33 42.31-9.02 2.75-2.52 6.66-5.43 13.16-9.92l8.6-5.89c3.63-2.48 6.45-4.44 9.19-6.4 14.73-10.54 24.44-19.18 29.97-27.7 4.9-7.54 15.31-26.68 16.02-27.8 3.27-5.26 6.26-8.41 10.18-10.37 6.79-3.4 16.65-9.63 25.03-16.32 11.52-9.18 19.61-18.53 22.72-27.4 3.07-8.78-2.02-20.27-12.52-31.49-8.8-9.4-20.04-16.84-25.01-16.84-10.67 0-25.43 5.5-35.68 13.89-3.76 3.07-7.9 4.81-13.5 6.09-1.41.32-2.35.5-5.11 1.02-8.21 1.55-11.76 2.73-15.38 5.88-3.34 2.9-6.45 4.22-12.7 5.92-11.26 3.07-15.75 4.94-23.31 11.09zM212 251.85c0 7.56-.6 10.92-2.6 14.3-1.1 1.84-7.66 10.05-8.6 11.3-5.96 7.94-9.33 10.28-17.26 13.76-1.34.58-2.2 1-3.03 1.5-.55.33-1.2.66-2 1.02-.71.33-4.46 1.9-5.52 2.39-6.05 2.78-8.99 5.8-8.99 10.73 0 10.97-18.95 36.12-34.51 44.87-8.18 4.6-21.3 9.36-32.78 11.86-13.33 2.9-22.49 2.48-24.62-2.32-1.32-2.97-4.4-4.26-11.98-5.81l-.6-.12c-4.84-.99-6.94-1.55-9.03-2.64-2.92-1.5-4.48-3.7-4.48-6.84 0-2.74 1.08-5.77 3.25-9.67.85-1.53 1.82-3.13 3.23-5.35-.16.25 2.83-4.4 3.67-5.76 6.69-10.7 9.85-18.5 9.85-27.22 0-18.41 11.22-33.37 27.5-42.86 5.22-3.05 9.23-3.31 15.2-2.12 5.04 1 6.05.9 7.43-1.52 4.5-7.85 7.04-9.5 15.87-9.5 3.93 0 6.97-.98 10.47-3.16 1.56-.97 8.67-6.17 10.99-7.68 9.2-5.98 11.34-7 25.2-11.95 6.95-2.48 15.18 1.28 22.33 9.12 6.55 7.19 11.01 16.61 11.01 23.67zm-2 0c0-6.5-4.25-15.48-10.49-22.32-6.67-7.32-14.16-10.74-20.17-8.59-13.73 4.9-15.73 5.85-24.8 11.75-2.24 1.46-9.37 6.68-11.01 7.7-3.8 2.36-7.2 3.46-11.53 3.46-8.08 0-9.98 1.23-14.13 8.5-1.1 1.91-2.51 2.88-4.35 3.09-1.3.14-1.9.05-5.22-.61-5.53-1.1-9.07-.88-13.8 1.88-15.72 9.17-26.5 23.55-26.5 41.14 0 9.2-3.28 17.29-10.15 28.28l-3.68 5.77c-1.39 2.19-2.35 3.77-3.17 5.25-2.02 3.63-3 6.38-3 8.7 0 4.19 2.87 5.67 11.9 7.52l.61.12c8.27 1.7 11.7 3.13 13.4 6.95 3.17 7.14 36 0 54.6-10.46 14.98-8.43 33.49-32.99 33.49-43.13 0-5.9 3.47-9.48 10.16-12.55 1.1-.5 4.85-2.08 5.52-2.38.74-.34 1.32-.64 1.8-.93.92-.55 1.85-1 3.25-1.62 7.65-3.35 10.75-5.5 16.47-13.12 1.02-1.36 7.47-9.42 8.47-11.11 1.79-3.01 2.33-6.06 2.33-13.3zm-37.18-22.4c.15-.1 2.4-1.51 2.95-1.84.96-.57 1.7-.94 2.43-1.17 2.57-.83 5.06-.1 11.04 3.12 14.86 8 19.43 22.87 9.18 38.71-4.04 6.24-9.37 9-18.72 11.11-.85.2-1.2.27-3.13.68-6.04 1.29-8.78 2.08-11.6 3.65-3.63 2.02-6.09 4.98-7.5 9.44-7.87 24.93-19.72 43.34-36.28 50.31-16.45 6.93-21.13 8.53-27.98 8.89-4.94.25-9.8-.65-15.4-2.89a44.45 44.45 0 0 1-5.64-2.6c-4.02-2.33-5.14-4.74-4.5-9.31.3-2.13 3.77-15.53 4.84-20.65.63-3.05 1.19-6.14 1.75-9.69a464.04 464.04 0 0 0 1.35-8.9c1.42-9.41 2.5-14.27 4.49-18.65 2.46-5.43 6.13-9.03 11.72-11.13 6.59-2.47 10.54-3.1 18.03-3.53 4.75-.27 6.68-.64 9-2.05.61-.37 1.22-.81 1.82-1.33a30.61 30.61 0 0 0 3.37-3.4c.59-.69 2.38-2.9 2.63-3.19 3.36-4 6.3-5.53 12.33-5.53 3.94 0 5.9-.92 8.18-3.36-.17.18 2.75-3.14 3.85-4.22a30.95 30.95 0 0 1 6.79-5c1.5-.83 3.15-1.62 4.99-2.38a64.92 64.92 0 0 0 10.01-5.1zm-14.52 8.34a29.95 29.95 0 0 0-6.57 4.84 116.68 116.68 0 0 0-3.82 4.2c-2.46 2.63-4.68 3.67-8.91 3.67-5.72 0-8.39 1.39-11.57 5.17-.23.28-2.03 2.5-2.63 3.2a31.6 31.6 0 0 1-3.47 3.51c-.65.55-1.3 1.03-1.96 1.43-2.5 1.51-4.55 1.9-9.47 2.19-7.39.42-11.25 1.04-17.72 3.47-5.34 2-8.82 5.4-11.17 10.6-1.93 4.27-3 9.07-4.41 18.39l-.65 4.34-.7 4.57c-.57 3.56-1.12 6.67-1.76 9.73-1.08 5.18-4.54 18.53-4.83 20.59-.59 4.17.35 6.18 4.01 8.3 1.35.77 3.1 1.58 5.52 2.55 5.46 2.18 10.18 3.05 14.97 2.8 6.69-.34 11.32-1.93 27.65-8.8 16.21-6.83 27.92-25.01 35.71-49.7 1.49-4.7 4.12-7.86 7.97-10 2.93-1.63 5.74-2.45 11.87-3.76 1.92-.4 2.28-.49 3.12-.68 9.12-2.06 14.24-4.7 18.1-10.67 9.92-15.34 5.55-29.55-8.82-37.29-5.75-3.1-8.03-3.76-10.25-3.05-.65.2-1.33.54-2.23 1.08-.55.32-2.77 1.72-2.93 1.82a65.91 65.91 0 0 1-10.16 5.17c-1.8.75-3.42 1.52-4.89 2.33zm-42.39 32.72c16.15-2.87 26.36-.97 32.47 6.16 5.08 5.93 1.13 21.42-5.93 35.55-4.79 9.58-10.6 16.21-23.16 25.19-14.15 10.1-35.5 12.2-40.71 3.85-1.86-2.97-2.1-8.14-1.06-15.73.78-5.68 1.86-10.71 4.73-22.98l.12-.51c1.59-6.8 2.37-10.31 3.14-14.14 1.45-7.25 3.74-11.47 7.26-13.74 2.81-1.8 5.53-2.28 12.33-2.62 5.33-.27 7.56-.46 10.81-1.03zm.18.98c-3.3.59-5.56.78-10.94 1.05-6.62.33-9.23.78-11.84 2.46-3.25 2.1-5.42 6.09-6.82 13.1-.77 3.84-1.56 7.35-3.15 14.17l-.12.5c-2.86 12.24-3.93 17.26-4.7 22.9-1.03 7.36-.79 12.36.9 15.07 4.82 7.7 25.54 5.67 39.29-4.15 12.43-8.88 18.13-15.39 22.84-24.81 6.86-13.72 10.75-29 6.07-34.45-5.84-6.81-15.7-8.65-31.53-5.84zM132 276.5c7.12 0 10.66 3.08 11.25 8.7.42 4.02-.43 8.14-2.77 15.94-2.56 8.52-18.36 25.38-27.2 31.28-7.01 4.67-20.02 5.67-26.57.99-3.99-2.85-3.53-12.08.02-26.46.68-2.75 1.47-5.65 2.37-8.76a412.6 412.6 0 0 1 3.05-10.14l.37-1.2c1.48-4.8 5.1-7.75 10.73-9.27 4.4-1.2 9.54-1.5 17.48-1.33l3.89.1c3.87.11 5.42.15 7.38.15zm0 1c-1.97 0-3.53-.04-7.41-.15l-3.88-.1c-7.85-.17-12.92.13-17.2 1.3-5.32 1.43-8.67 4.16-10.03 8.6a1277.83 1277.83 0 0 1-1.6 5.21c-.68 2.2-1.27 4.17-1.82 6.1-.9 3.1-1.68 5.99-2.36 8.73-3.43 13.88-3.87 22.93-.4 25.4 6.17 4.42 18.73 3.45 25.42-1 8.66-5.78 24.33-22.49 26.8-30.73 2.3-7.67 3.14-11.71 2.73-15.56-.53-5.1-3.64-7.8-10.25-7.8zm-17.79 7a31.3 31.3 0 0 1 8.57 1.4c5.42 1.78 8.72 5.03 8.72 10.1 0 9.59-9.51 17.2-22.34 21.47-9.82 3.28-13.62-1.79-11.66-16.54.84-6.28 3.82-10.67 8.24-13.46a20.38 20.38 0 0 1 8.47-2.97zm-.6 1.08a19.39 19.39 0 0 0-7.34 2.73c-4.18 2.64-6.98 6.78-7.77 12.76-1.89 14.11 1.36 18.45 10.34 15.46C121.3 312.37 130.5 305 130.5 296c0-4.56-2.98-7.5-8.03-9.15a28.05 28.05 0 0 0-8.2-1.35c-.13 0-.35.03-.66.08zm80.87-23.45c-2.72 9.8-14.93 9.86-26.72 3.3-10.17-5.64-13.8-17.98-5-22.87a66.53 66.53 0 0 0 4.48-2.7l2.03-1.3a50.15 50.15 0 0 1 3.92-2.3c4.73-2.43 8.82-2.8 14-.72 9.16 3.66 10.98 13.33 7.3 26.6zm-20.83-24.98a49.26 49.26 0 0 0-3.84 2.25l-2.03 1.3c-.84.53-1.5.95-2.16 1.35-.82.5-1.6.96-2.38 1.39-7.94 4.4-4.59 15.8 5 21.12 11.31 6.29 22.8 6.23 25.28-2.7 3.57-12.83 1.85-21.97-6.7-25.4-4.9-1.95-8.69-1.62-13.17.7zm17.85 12.15c0 5.7-2.44 9-6.64 9.96-3.3.76-7.56-.05-11.08-1.81l-1.89-.94c-.67-.34-1.18-.62-1.63-.88-4.07-2.38-4.13-4.97.34-10.93 6.8-9.06 20.9-7.16 20.9 4.6zm-1 0c0-5.3-2.87-8.55-7.32-9.16-4.23-.57-8.99 1.44-11.78 5.16-4.15 5.54-4.1 7.44-.64 9.47.44.25.93.51 1.59.85l1.87.93c3.34 1.67 7.36 2.44 10.42 1.74 3.73-.86 5.86-3.74 5.86-9zM387 530.3c0-12.8 2.44-16.74 18.48-29.77a56.8 56.8 0 0 1 7.61-5.2c2.6-1.5 5.33-2.82 8.5-4.18 1.24-.53 2.48-1.05 4.1-1.7l3.92-1.57c9.4-3.83 13.74-6.7 16.62-12.05 1.2-2.22 2.21-4.4 3.23-6.83a148.57 148.57 0 0 0 1.54-3.84l.3-.74.56-1.44c3.2-8.02 6.05-12.08 12.7-16.5a35.26 35.26 0 0 0 4.96-4 46.36 46.36 0 0 0 3.88-4.29c.27-.34 2.55-3.2 3.2-3.98 3.48-4.15 6.51-5.9 11.51-5.9 3.08 0 5.62-.63 9.57-2.1 5.42-2.02 6.53-2.34 8.96-2.2 2.53.13 4.85 1.26 7.18 3.59 1.3 1.3 5.55 5.83 6.52 6.78 5.06 5 9.44 6.92 17.77 6.92a197.5 197.5 0 0 1 12.08.45c15.93.87 21.94.57 25.28-2.21 6.91-5.77 11.64-2.73 11.64 7.76 0 10.73-8.6 20-19 20-4.8 0-8.32 1.43-9.34 3.67-1.12 2.48.68 6.15 5.98 10.57 13.6 11.33 11.24 20.76-7.64 20.76a21.91 21.91 0 0 0-14.6 5.24c-3.28 2.71-5.8 5.86-9.85 11.82l-1.52 2.25c-3.1 4.57-5.01 7.1-7.32 9.4-6.21 6.21-9.3 7.64-13.05 6.89l-1-.23a10.82 10.82 0 0 0-2.66-.37c-1.6 0-2.41.67-8.18 6.22-4.85 4.67-8.07 6.78-11.82 6.78-1.33 0-3.46 1.15-6.45 3.45-1.27.98-2.68 2.14-4.5 3.7l-4.92 4.29a181.11 181.11 0 0 1-4.54 3.82c-9.33 7.56-15.63 10.2-20.21 6.52-2.7-2.15-4.14-4.51-4.63-7.26-.37-2.04-.26-3.63.29-7.3.87-5.85.65-8.42-1.83-11.6-2.32-2.98-2.96-3.22-3.77-2.39-.25.26-1.35 1.63-1.61 1.94-2.21 2.5-4.85 3.57-9 2.82-4.6-.84-5.57-4.11-4.72-10.09l.24-1.56c.6-3.66.68-4.93.25-5.8-.44-.86-1.9-.94-5.23.4l-.74.29c-13.78 5.54-15.26 6.09-19.43 6.67-6.03.84-9.31-1.6-9.31-7.9zm2 0c0 5 2.14 6.6 7.04 5.92 3.91-.55 5.43-1.1 18.95-6.55l.75-.3c4.17-1.66 6.7-1.54 7.76.58.71 1.43.62 2.76-.06 7l-.24 1.53c-.72 5.04-.06 7.27 3.09 7.84 3.43.62 5.38-.17 7.15-2.18.2-.23 1.34-1.66 1.68-2 1.9-1.96 3.82-1.25 6.78 2.55 2.9 3.74 3.17 6.77 2.22 13.12-1 6.75-.52 9.4 3.62 12.71 3.49 2.8 9.1.45 17.7-6.51 1.35-1.1 2.75-2.28 4.49-3.78l4.93-4.3c1.84-1.58 3.27-2.76 4.58-3.77 3.34-2.56 5.74-3.86 7.67-3.86 3.04 0 5.95-1.9 10.43-6.22l2.46-2.39c.94-.89 1.67-1.56 2.37-2.13 1.81-1.49 3.3-2.26 4.74-2.26 1.03 0 1.81.13 3.1.42.7.16.71.17.96.21 2.96.6 5.45-.55 11.23-6.33 2.2-2.2 4.06-4.65 7.09-9.11l1.52-2.25c4.15-6.11 6.76-9.37 10.22-12.24a23.9 23.9 0 0 1 15.88-5.7c16.87 0 18.62-7.01 6.36-17.23-5.9-4.92-8.12-9.41-6.52-12.93 1.42-3.12 5.67-4.84 11.16-4.84 9.25 0 17-8.34 17-18 0-8.94-2.88-10.79-8.36-6.23-3.94 3.28-9.98 3.59-26.67 2.68l-1.02-.06c-5.09-.27-7.99-.39-10.95-.39-8.88 0-13.76-2.14-19.18-7.5-1-.98-5.26-5.53-6.53-6.79-1.99-1.99-3.86-2.9-5.87-3-2.03-.12-3.06.18-8.15 2.07-4.15 1.55-6.9 2.22-10.27 2.22-4.33 0-6.84 1.46-9.98 5.2-.63.74-2.89 3.6-3.18 3.95a48.29 48.29 0 0 1-4.04 4.46 37.26 37.26 0 0 1-5.24 4.23c-6.26 4.17-8.9 7.91-11.95 15.58l-.57 1.43-.28.74a531.5 531.5 0 0 1-1.56 3.88 77.49 77.49 0 0 1-3.32 7c-3.16 5.88-7.82 8.97-17.63 12.96l-3.92 1.58c-1.6.64-2.84 1.15-4.05 1.67a79.2 79.2 0 0 0-8.3 4.08 54.8 54.8 0 0 0-7.35 5.02C391.12 514.78 389 518.21 389 530.31zm133.22-79.76c3.06 1.53 6.54 2.02 10.68 1.7 2.53-.2 4.91-.62 8.8-1.49 5.36-1.19 6.33-1.38 8.33-1.54 2.78-.23 4.82.17 6.29 1.4 1.58 1.31 1.96 2.72 1.26 4.22-.66 1.38-1.05 1.74-5.05 5.07-3.53 2.93-5.03 4.83-5.03 7.09 0 7.3 1.29 10.02 7.83 15.62 3.86 3.3 5.93 6.84 5.28 9.62-.75 3.25-4.96 5.02-12.61 5.02-7.18 0-12.7 4.61-20.03 14.68-.5.7-3.96 5.57-4.94 6.87a38.89 38.89 0 0 1-4.72 5.5c-1.06.98-2.09 1.7-3.1 2.15-2.85 1.26-5.05 1.57-9.83 1.74-7.66.27-10.87 1.45-14.98 7.1-1.58 2.17-3.11 4-4.68 5.6a42.87 42.87 0 0 1-8.65 6.69c-.15.08-10.69 6.19-14.8 8.83-3.76 2.42-6.45 2.04-8.22-.77-1.28-2.03-1.9-4.54-2.87-10.35-.84-5.08-1.27-7.08-2.06-8.93-.97-2.3-2.21-3.24-4.02-2.88-6.2 1.24-8.95 1.39-10.98.2-2.37-1.4-3.13-4.62-2.62-10.73.16-1.96-1.04-2.87-3.76-3.04-2.24-.13-4.9.2-9.94 1.12l-.69.12c-7.97 1.45-10.72 1.72-12.72.73-2.91-1.43-1.6-5.27 4.23-12.21 5.48-6.53 10.6-10.81 15.76-13.53 3.74-1.97 5.94-2.65 12.16-4.1 7.29-1.72 10.4-3.51 14.04-9.31 2.96-4.75 10.74-18.62 12.14-20.84 3.59-5.67 6.8-9.1 11.05-11.34 2.6-1.38 4.72-2.82 9.17-6.07l1.38-1.01c7.85-5.72 12.3-7.98 17.68-7.98 4.22 0 6.49 1.36 9.13 4.77.34.43 1.67 2.22 2 2.67.85 1.09 1.6 1.98 2.45 2.83a24.29 24.29 0 0 0 6.64 4.78zm-.44.9c-2.8-1.4-5-3.03-6.92-4.97-.87-.9-1.65-1.81-2.51-2.93-.35-.46-1.68-2.25-2.01-2.67-2.47-3.18-4.46-4.38-8.34-4.38-5.09 0-9.4 2.2-17.09 7.78l-1.38 1.01c-4.49 3.29-6.63 4.74-9.3 6.15-4.06 2.15-7.16 5.45-10.66 11-1.39 2.19-9.16 16.05-12.15 20.82-3.79 6.07-7.13 7.98-14.66 9.75-6.13 1.45-8.27 2.1-11.92 4.02-5.04 2.66-10.05 6.86-15.46 13.3-5.43 6.46-6.53 9.69-4.55 10.66 1.7.84 4.48.57 12.1-.81l.7-.13c5.12-.93 7.82-1.27 10.17-1.12 3.21.2 4.92 1.48 4.7 4.11-.48 5.76.2 8.64 2.13 9.78 1.73 1.02 4.34.88 10.27-.31 2.35-.47 4 .78 5.14 3.47.83 1.95 1.27 4 2.07 8.8l.06.36c.94 5.65 1.55 8.11 2.72 9.98 1.46 2.3 3.52 2.6 6.84.46 4.14-2.66 14.69-8.77 14.81-8.85a41.9 41.9 0 0 0 8.46-6.54 47.89 47.89 0 0 0 4.6-5.48c4.32-5.95 7.81-7.23 15.74-7.5 4.66-.17 6.76-.47 9.46-1.67.9-.4 1.85-1.06 2.84-1.96a38.03 38.03 0 0 0 4.6-5.36c.96-1.3 4.4-6.16 4.93-6.87 7.5-10.31 13.22-15.09 20.83-15.09 7.24 0 11.02-1.6 11.64-4.24.54-2.32-1.36-5.55-4.97-8.64-6.75-5.79-8.17-8.79-8.17-16.38 0-2.67 1.64-4.74 5.39-7.86 3.8-3.17 4.23-3.56 4.78-4.73.5-1.06.25-1.99-.99-3.03-2.23-1.85-4.72-1.65-13.76.36-3.93.87-6.35 1.3-8.94 1.5-4.3.34-7.97-.18-11.2-1.8zm-28-3.9c5.65-2.82 8.96-2.2 12.9 1.37.56.5 2.6 2.47 3.02 2.87 4.2 3.89 8.07 5.71 14.3 5.71 11.37 0 14 1.41 16.1 8.09.26.83 1.35 4.6 1.66 5.62.8 2.63 1.64 5.03 2.7 7.6 2.13 5.17 2.64 8.32 1.72 10.24-.77 1.61-2.1 2.18-5.37 2.79-2.32.43-2.8.53-3.85.85-1.85.58-3.35 1.4-4.6 2.66-1 1-2.02 2.13-3.31 3.66-.6.71-2.91 3.5-3.46 4.14-7.2 8.54-12.43 12.35-19.59 12.35-3.76 0-6.95 1.28-10.59 4-1.84 1.37-11.62 10.31-15.22 13.06a73.09 73.09 0 0 1-8.95 5.88c-4.58 2.54-7.35 3.22-8.98 2.23-1.32-.8-1.65-2.07-1.94-5.5a52.53 52.53 0 0 0-.16-1.81c-.54-4.73-2.24-6.86-7.16-6.86-7.11 0-8.85-1.23-9.73-5.41-.96-4.61-2.1-6.7-6.55-9.67-3.97-2.65-4.31-5.42-1.52-8.22 2-2 4.63-3.5 11.35-6.87 6.61-3.3 9.2-4.8 11.1-6.68a39.09 39.09 0 0 0 5.3-6.48c.98-1.5 1.83-3.04 2.88-5.13l2.12-4.3c.91-1.83 1.72-3.37 2.61-4.98 5.74-10.32 10.37-14.78 23.22-21.2zm-22.34 21.7c-.89 1.59-1.69 3.12-2.6 4.94l-2.11 4.3a52.9 52.9 0 0 1-2.94 5.23 40.08 40.08 0 0 1-5.44 6.63c-2 2-4.62 3.51-11.35 6.87-6.6 3.3-9.2 4.8-11.1 6.69-2.33 2.34-2.08 4.37 1.38 6.67 4.7 3.14 5.96 5.46 6.97 10.3.78 3.7 2.09 4.62 8.75 4.62 5.5 0 7.57 2.57 8.15 7.75.06.5.09.82.17 1.84.25 3.06.55 4.17 1.46 4.72 1.2.74 3.69.13 7.98-2.25a72.09 72.09 0 0 0 8.82-5.8c3.55-2.7 13.34-11.65 15.24-13.07 3.79-2.83 7.18-4.19 11.18-4.19 6.77 0 11.8-3.67 18.83-12l3.45-4.13a60.07 60.07 0 0 1 3.37-3.72 11.72 11.72 0 0 1 5.01-2.91c1.1-.34 1.6-.45 3.97-.89 2.95-.55 4.07-1.02 4.65-2.23.76-1.59.28-4.5-1.74-9.43a84.46 84.46 0 0 1-2.74-7.69c-.31-1.03-1.4-4.8-1.66-5.61-1.95-6.2-4.16-7.39-15.14-7.39-6.5 0-10.61-1.93-14.98-5.98-.44-.4-2.46-2.37-3.01-2.86-3.65-3.3-6.52-3.85-11.79-1.21-12.67 6.33-17.15 10.65-22.78 20.8zm55.86 11.93c-2.98 6.45-16.78 15.26-26.74 15.26-5.33 0-7.56-2.98-7.11-7.86.32-3.48 2.1-7.91 3.93-10.61l1.52-2.32a44.95 44.95 0 0 1 1.88-2.7c3.66-4.8 7.85-7.45 13.62-7.45 9.06 0 15.75 9.52 12.9 15.68zm-.9-.42c2.52-5.47-3.65-14.26-12-14.26-5.4 0-9.33 2.48-12.82 7.06-.6.8-1.17 1.6-1.85 2.64 0 0-1.2 1.87-1.52 2.33-1.74 2.57-3.46 6.85-3.77 10.14-.4 4.33 1.43 6.77 6.12 6.77 9.57 0 23.02-8.58 25.83-14.68zm-69.67 20.74c2.08.18 4.44.81 5.88 1.8 2.12 1.47 2.2 3.6-.26 6.05-5.14 5.15-12.85 4.34-12.85-1.35 0-4.66 3.14-6.84 7.23-6.5zm-.09 1c-3.56-.3-6.14 1.5-6.14 5.5 0 4.58 6.53 5.26 11.15.65 2.03-2.04 1.98-3.43.4-4.52-1.27-.88-3.48-1.47-5.4-1.63zm29.59-225.95c4.64 2.35 17.27 8.24 19.39 9.43a24.14 24.14 0 0 1 7.05 5.64 45.03 45.03 0 0 1 3.75 5.2c2.4 3.78.04 7.66-6.2 11.63-4.97 3.16-12.18 6.3-21.95 9.82-4.84 1.74-19.63 6.68-21.1 7.2-6.59 2.33-14.85.1-25.14-5.86-3.93-2.27-8-5-12.94-8.54-2.23-1.61-9.5-6.99-10.7-7.85a81.21 81.21 0 0 0-8.63-5.7c-4.82-2.6-4.45-6.64.17-12.13 3.27-3.88 4.17-4.67 18.1-16.33a230.2 230.2 0 0 0 8.89-7.74 95.2 95.2 0 0 0 4.72-4.66c5.08-5.43 9.8-6.49 14.97-3.92 2.24 1.1 4.53 2.85 7.43 5.52 1.48 1.37 6.94 6.72 7.98 7.7 5.2 4.91 9.46 8.2 14.2 10.6zm-.46.9c-4.85-2.45-9.18-5.79-14.44-10.76-1.05-1-6.5-6.34-7.97-7.69-2.83-2.61-5.06-4.3-7.2-5.37-4.75-2.36-9-1.4-13.8 3.71a96.18 96.18 0 0 1-4.76 4.71c-2.48 2.3-5.16 4.62-8.92 7.77-13.86 11.6-14.77 12.4-17.98 16.21-4.28 5.08-4.58 8.4-.46 10.61 2.23 1.2 4.9 2.99 8.74 5.77 1.2.87 8.47 6.24 10.7 7.85a154.8 154.8 0 0 0 12.85 8.49c10.06 5.82 18.07 7.98 24.3 5.78 1.48-.52 16.27-5.47 21.1-7.2 9.7-3.5 16.86-6.61 21.75-9.72 5.84-3.71 7.9-7.1 5.9-10.26a44.09 44.09 0 0 0-3.67-5.08 23.16 23.16 0 0 0-6.78-5.42c-2.08-1.16-14.68-7.05-19.36-9.4zm-38.83 8.05c3.11-.37 5.7-.13 8.4.7 2.15.66 2.74.93 8.64 3.77 4.75 2.29 8.39 3.86 13.19 5.56 8.38 2.97 11.32 6.23 8.83 9.76-2.08 2.94-8.04 5.92-17.84 9.18-8.45 2.82-15.48 2.35-21.43-.9-4.65-2.55-8.33-6.5-12.15-12.3-2.9-4.41-2.73-8.2.16-11.06 2.48-2.45 6.87-4.07 12.2-4.7zm.12 1c-5.13.6-9.33 2.16-11.62 4.42-2.53 2.5-2.68 5.77-.02 9.8 3.73 5.68 7.3 9.51 11.8 11.97 5.7 3.11 12.43 3.57 20.62.84 9.59-3.2 15.44-6.12 17.34-8.82 1.94-2.75-.5-5.45-8.35-8.24-4.84-1.72-8.5-3.3-13.28-5.6-5.84-2.81-6.42-3.07-8.5-3.71a18.42 18.42 0 0 0-8-.66zM202.5 500.38c0 4.78-1.45 7.56-4.43 8.93-2.29 1.05-4.55 1.23-10.79 1.2l-1.78-.01c-9.19 0-17-7.65-17-15.5 0-7.59 10.6-10.51 19.74-5.44 2.78 1.55 4.21 1.94 8.57 2.75 4.44.83 5.69 2.27 5.69 8.07zm-1 0c0-5.3-.9-6.34-4.88-7.08-4.45-.83-5.96-1.25-8.86-2.86-8.57-4.76-18.26-2.1-18.26 4.56 0 7.3 7.36 14.5 16 14.5h1.79c6.06.04 8.26-.14 10.36-1.1 2.6-1.2 3.85-3.6 3.85-8.02zm33.33-117.85c3.71-1.31 8.7-2.7 16.1-4.55 2.58-.65 16.53-4.04 20.56-5.05 19.59-4.93 31.55-8.9 38.23-13.35 14.93-9.95 36.87-33.88 43.83-47.8 2.25-4.5 4.65-6.38 7.68-6.25 1.26.06 2.61.45 4.32 1.2a50.81 50.81 0 0 1 3.54 1.7l1.26.63c4.78 2.34 8.38 3.44 12.65 3.44 7.2 0 10.01 3.07 8.35 7.91-1.4 4.06-5.92 8.91-11.1 12.02-8.3 4.98-11.75 17.3-11.75 33.57 0 3.59-1.37 6.28-3.98 8.36-1.98 1.58-4.2 2.6-8.47 4.16l-1.02.37c-4.85 1.75-6.98 2.77-8.68 4.46-5.09 5.1-12.54 7.15-20.35 7.15-1.38 0-2.47.92-3.99 3.1-.29.41-1.32 1.95-1.47 2.18-2.68 3.92-4.93 5.72-8.54 5.72-7.84 0-10.74.93-21.76 6.94-5.18 2.82-8.8 3.58-14.66 3.68-.26 0-.47 0-.92.02-4.82.06-7.12.3-10.51 1.34a73.43 73.43 0 0 0-8.89 3.56c-2.17 1-10.53 5.01-10.23 4.87-7.79 3.7-13.32 5.98-18.9 7.57-12.41 3.55-18.58 2.24-27.42-4.07-2.58-1.85-2.72-4.43-.83-7.62 1.45-2.45 3.9-5.09 8.08-8.97l1.78-1.64c3.92-3.6 4.48-4.11 5.9-5.53 2.32-2.32 3.12-3.5 5.48-7.63 1.93-3.36 3.37-5.11 6.27-7.06 2.3-1.54 5.34-2.98 9.44-4.43zm.34.94c-4.03 1.42-7 2.83-9.22 4.32-2.75 1.85-4.1 3.49-5.96 6.73-2.4 4.2-3.24 5.44-5.64 7.83-1.43 1.44-2 1.96-5.94 5.57l-1.77 1.63c-4.1 3.82-6.52 6.41-7.9 8.75-1.65 2.79-1.54 4.8.55 6.3 8.6 6.14 14.46 7.38 26.57 3.92 5.5-1.57 11-3.84 18.74-7.51-.3.14 8.06-3.88 10.24-4.88a74.3 74.3 0 0 1 9.01-3.6c3.51-1.09 5.89-1.33 10.8-1.4h.91c5.72-.1 9.18-.83 14.2-3.57 11.16-6.08 14.2-7.06 22.24-7.06 3.19 0 5.2-1.6 7.71-5.28l1.48-2.2c1.7-2.43 3-3.52 4.81-3.52 7.57 0 14.78-2 19.65-6.85 1.83-1.84 4.04-2.9 9.04-4.7l1.02-.37c8.6-3.13 11.79-5.67 11.79-11.58 0-16.6 3.53-29.2 12.24-34.43 5-3 9.35-7.67 10.66-11.48 1.42-4.13-.83-6.59-7.4-6.59-4.45 0-8.19-1.14-13.09-3.54-7.52-3.67-6.78-3.34-8.72-3.43-2.58-.1-4.65 1.52-6.74 5.7-7.04 14.07-29.1 38.14-44.17 48.19-6.81 4.54-18.84 8.52-38.55 13.48-4.03 1.02-17.98 4.4-20.56 5.05-7.37 1.84-12.33 3.23-16 4.52zM252 387.5c2.08 0 4-.2 7.25-.69 5.22-.77 6.64-.9 8.46-.5 2.52.56 3.79 2.35 3.79 5.69 0 4.05-2.27 7.29-6.62 10.11-3.24 2.1-6.53 3.53-14.15 6.4l-.27.1-2.28.86c-3.04 1.16-5.27 2.52-9.33 5.43l-.8.57c-8.19 5.88-13.35 8.03-23.05 8.03-4.98 0-6.88-2.03-5.75-5.62.87-2.81 3.58-6.56 7.8-11.13 1.26-1.37 2.64-2.8 4.15-4.3 3.17-3.14 11.25-10.61 11.45-10.8.46-.47.93-.89 1.4-1.26 3.38-2.71 5.77-3.08 14.18-2.93 1.65.03 2.63.04 3.77.04zm0 1c-1.15 0-2.13-.01-3.79-.04-8.18-.14-10.4.2-13.54 2.71-.44.35-.88.74-1.32 1.18-.2.21-8.3 7.69-11.45 10.82a134.6 134.6 0 0 0-4.12 4.26c-4.12 4.47-6.76 8.12-7.58 10.75-.9 2.88.45 4.32 4.8 4.32 9.46 0 14.44-2.07 22.46-7.84l.8-.57c4.13-2.96 6.42-4.36 9.56-5.56l2.3-.86.25-.1c7.55-2.84 10.8-4.25 13.97-6.3 4.08-2.65 6.16-5.6 6.16-9.27 0-2.89-.97-4.26-3-4.7-1.65-.37-3.05-.25-8.1.5-3.3.5-5.26.7-7.4.7zm112.47-45.34c-1.88 5.44-1.98 6.76-.98 12.76 1.18 7.06-1.38 16.58-5.49 16.58a16.89 16.89 0 0 0-1.51.07l-.64.04c-2.86.18-4.83.17-6.94-.17-6.55-1.06-10.41-5.14-10.41-13.44 0-13.9 2.14-19.69 8.13-26.33a21.9 21.9 0 0 0 2.52-3.75c.59-1.03 2.78-5.13 2.72-5.01 4.44-8.14 7.71-11.53 12.25-10.4 1.17.3 2.2.77 3.58 1.59l1.39.84a20 20 0 0 0 3.1 1.6c.7.27 1.8.32 4.75.26l.72-.01c3.16-.05 4.78.08 5.83.66 1.61.89 1.2 2.56-1.14 4.9a215.9 215.9 0 0 1-3.86 3.76c-10.6 10.1-12.75 12.4-14.02 16.05zm-.94-.32c1.34-3.9 3.46-6.17 14.27-16.46 1.55-1.47 2.73-2.62 3.85-3.73 1.94-1.95 2.17-2.88 1.35-3.33-.82-.45-2.37-.58-5.32-.53l-.72.01c-3.14.06-4.26.02-5.14-.34-1.06-.41-1.97-.9-3.25-1.67l-1.38-.83a12.1 12.1 0 0 0-3.31-1.47c-3.88-.97-6.92 2.17-11.13 9.9.07-.13-2.14 3.98-2.73 5.02a22.71 22.71 0 0 1-2.65 3.92c-5.81 6.47-7.87 12-7.87 25.67 0 7.79 3.48 11.47 9.57 12.45 2.01.33 3.92.34 6.71.16a371.33 371.33 0 0 0 1.23-.07c.42-.03.73-.04.99-.04 3.2 0 5.6-8.9 4.5-15.42-1.02-6.16-.91-7.64 1.03-13.24zm-9.26 12.42c.58.52 2.5 1.9 2.55 1.93 1.96 1.57 2.04 3.31.01 6.36-3.74 5.64-8.83 3.09-8.83-4.55 0-3.81.51-5.67 2.07-6.02 1.18-.26 2 .3 4.2 2.28zm-1.34 1.48c-1.5-1.35-2.23-1.85-2.43-1.8-.17.03-.5 1.23-.5 4.06 0 5.87 2.67 7.21 5.17 3.45 1.5-2.26 1.47-2.84.4-3.7.03.03-1.95-1.4-2.64-2zm222.9-130.19c2.2-1.1 3.67-1.66 5.88-2.36l.28-.09a48.92 48.92 0 0 0 8.79-3.55c4.17-2.08 6.35-1.88 6.96.84.44 2 .2 4.01-1.25 12.7-2.27 13.62-9.16 26.14-21.17 36.3-4.3 3.63-7.41 4.39-9.75 2.44-1.88-1.57-3.1-4.57-4.61-10.48-.3-1.15-1.43-5.83-1.72-6.96a114.18 114.18 0 0 0-2.71-9.22c-2.4-6.82-3.03-10.78-2.1-12.94.77-1.83 2.08-2.24 5.6-2.45 1.49-.09 2.09-.14 2.97-.28l1.95-.33c.72-.12 1.22-.2 1.68-.29 1.1-.2 1.92-.38 2.71-.6 1.7-.49 3.42-1.2 6.49-2.73zm.44.9c-3.11 1.54-4.88 2.29-6.65 2.79-.84.23-1.69.42-2.81.63a108.77 108.77 0 0 1-3.81.63c-.77.13-1.39.19-2.92.28-3.13.18-4.17.51-4.74 1.85-.78 1.84-.2 5.62 2.13 12.2a115.12 115.12 0 0 1 2.74 9.31l1.72 6.96c1.46 5.7 2.62 8.58 4.28 9.96 1.87 1.56 4.49.93 8.47-2.44 11.82-10 18.6-22.3 20.83-35.7 1.4-8.45 1.65-10.51 1.25-12.31-.41-1.87-1.86-2-5.54-.16a49.87 49.87 0 0 1-8.93 3.6l-.28.1a35.4 35.4 0 0 0-5.74 2.3zm-4.5 6.58c1.37-.32 2.5-.75 3.9-1.42.35-.18 2.57-1.31 3.32-1.67 1.5-.71 2.97-1.31 4.7-1.89 2.7-.9 4.64-.77 5.88.4.98.94 1.34 2.26 1.41 4.18.02.4.02.7.02 1.37 0 5.63-4.63 16.88-11.34 22.75-4.34 3.8-7.31 4.67-9.92 2.52-2.06-1.7-3.5-4.65-6.67-12.91-1.86-4.83-2.05-8.1-.68-10.2 1.12-1.7 2.9-2.36 5.83-2.7l1.26-.12c1.19-.12 1.75-.19 2.3-.31zm-2.1 2.3l-1.22.12c-2.4.27-3.7.76-4.39 1.81-.93 1.43-.78 4.1.87 8.38 3.02 7.84 4.41 10.71 6.08 12.09 1.63 1.34 3.64.75 7.33-2.48C584.6 250.77 589 240.08 589 235c0-.64 0-.93-.02-1.29-.05-1.44-.3-2.33-.79-2.8-.6-.57-1.8-.65-3.87.04a37.95 37.95 0 0 0-4.47 1.8c-.72.34-2.93 1.47-3.32 1.66a19.54 19.54 0 0 1-4.3 1.56c-.66.16-1.28.24-2.56.36zm-227.73-88.98c-1.59 4.3-3.54 7.25-7.14 11.4l-2.6 2.97a67.02 67.02 0 0 0-2.63 3.23 46.4 46.4 0 0 0-4.68 7.5c-2.85 5.7-7.14 10.18-12.85 13.89-4.25 2.76-8.25 4.62-15.67 7.59-11.01 4.4-16.43 1.26-27.22-16.4-2.86-4.69-8.8-8.63-17.98-12.66-3-1.33-12.88-5.24-14.43-5.92-4.96-2.18-7.04-3.72-6.42-5.85.67-2.32 5.3-4.05 15.48-6.08 16.63-3.32 26.93-3.82 39.93-3.02 7.9.49 9.67.5 12.74-.26 1.99-.48 3.92-1.3 6-2.6l2.79-1.71c9.86-6.14 12.94-7.96 17.3-9.9 6.03-2.71 10.57-3.32 13.94-1.4 7.2 4.12 7.68 7.7 3.44 19.22zm-1.88-.7c3.95-10.7 3.6-13.26-2.56-16.78-2.66-1.52-6.62-.99-12.12 1.48-4.24 1.9-7.3 3.7-17.07 9.77l-2.79 1.73a22.6 22.6 0 0 1-6.57 2.84c-3.36.81-5.22.8-13.34.3-12.84-.78-22.97-.29-39.41 3-4.9.97-8.45 1.88-10.79 2.75-2.03.76-3.04 1.45-3.17 1.91-.16.57 1.48 1.79 5.3 3.46 1.5.67 11.39 4.58 14.44 5.93 9.52 4.19 15.74 8.3 18.87 13.44 10.35 16.93 14.87 19.56 24.78 15.6 7.3-2.93 11.21-4.75 15.33-7.42 5.42-3.53 9.47-7.75 12.15-13.1 1.44-2.9 3.02-5.4 4.86-7.82a68.95 68.95 0 0 1 2.72-3.33l2.6-2.97c3.46-3.99 5.28-6.75 6.77-10.79zm-6.64-.39c-7.94 12.8-18.53 21.75-33.3 25.23-7.82 1.83-12.47-.79-13.12-5.93-.55-4.45 2.29-9.06 6-9.06 3.02 0 5.6-1.68 15.38-9.16 1.47-1.12 2.57-1.96 3.66-2.74 4.4-3.2 7.77-5.17 10.82-6.08 5.57-1.67 9.33-2.15 11.35-1.22 2.5 1.14 2.22 4.13-.79 8.96zm-.84-.52c2.72-4.4 2.94-6.74 1.21-7.53-1.71-.79-5.32-.33-10.65 1.27-2.9.87-6.2 2.79-10.51 5.92-1.08.79-2.18 1.62-3.65 2.74-10.08 7.72-12.62 9.36-15.98 9.36-3.02 0-5.5 4.02-5 7.94.56 4.5 4.62 6.78 11.89 5.07 14.48-3.4 24.86-12.18 32.69-24.77zM461.17 33.53c13.88 4.96 20.75 4.96 31.62.01 3.02-1.37 5.47-2.94 11-6.82 5.57-3.92 8.05-5.51 11.14-6.92 4.14-1.88 7.78-2.38 11.22-1.28 3.92 1.26 6.2 12.3 6.78 28.45.5 14.2-.52 28.93-2.46 34.2-1.82 4.93-5.86 8.17-11.51 10.02A41.7 41.7 0 0 1 506 93.01c-5.79 0-9 2.4-12.2 7.64-.37.59-1.55 2.6-1.71 2.87-1.75 2.9-3.05 4.33-4.93 4.95-.94.32-2.07.83-3.87 1.74l-2.43 1.23c-1.03.53-1.87.94-2.7 1.34-6.43 3.1-11.73 4.72-17.16 4.72-5.71 0-10.04 2.09-14.02 5.92-1.16 1.11-4.2 4.53-4.63 4.94-2.54 2.44-5.93 4.24-10.85 6.1-1.4.52-5.98 2.13-6.25 2.22l-2.06.78c-.89.36-1.78.63-2.7.81-5.55 1.14-11.14-.54-17.98-4.42-1.27-.73-5.13-3.06-5.76-3.42-2.05-1.16-4.12-1.53-9.09-1.9l-1.73-.15c-4.78-.4-7.68-1.14-10.22-2.97-5-3.61-6.77-7.76-5.65-12.33 1.33-5.42 6.5-11.02 14.85-17.28a169.2 169.2 0 0 1 6.5-4.61c-.33.23 4.33-2.92 5.3-3.6 2.73-1.91 4.8-3.9 12.75-12.04l1.09-1.1c3.49-3.56 5.89-5.89 8.12-7.83 2.9-2.5 4.72-5.95 7.5-13.05l.63-1.61c2.7-6.92 4.28-10 6.87-12.33 1.42-1.28 6.68-6.54 7.93-7.5 3.98-3 8.01-2.73 19.57 1.4zm-.34.94c-11.26-4.02-15-4.28-18.62-1.53-1.19.9-6.4 6.11-7.88 7.43-2.42 2.18-3.96 5.19-6.6 11.95l-.63 1.61c-2.83 7.26-4.72 10.8-7.77 13.45a141.85 141.85 0 0 0-9.16 8.87c-8.02 8.2-10.08 10.2-12.88 12.16-.99.69-5.65 3.84-5.31 3.6-2.5 1.71-4.52 3.13-6.47 4.59-8.17 6.13-13.23 11.6-14.48 16.72-1.02 4.15.58 7.9 5.26 11.27 2.36 1.7 5.11 2.4 9.72 2.8l1.73.13c5.12.4 7.28.78 9.5 2.05.65.36 4.5 2.7 5.76 3.4 6.66 3.78 12.04 5.4 17.29 4.32.86-.17 1.7-.42 2.52-.75a67 67 0 0 1 2.1-.8c.28-.1 4.86-1.7 6.24-2.22 4.8-1.8 8.08-3.56 10.5-5.88.4-.38 3.44-3.8 4.63-4.94 4.16-4 8.72-6.2 14.72-6.2 5.25 0 10.42-1.59 16.73-4.62.82-.4 1.65-.8 2.68-1.33.12-.06 1.93-.99 2.43-1.23 1.84-.93 3-1.46 4-1.8 1.6-.52 2.76-1.82 4.39-4.52l1.7-2.88c3.39-5.5 6.87-8.11 13.07-8.11 4.45 0 8.73-.49 12.64-1.77 5.4-1.76 9.2-4.8 10.9-9.41 1.87-5.11 2.9-19.75 2.39-33.83-.56-15.53-2.81-26.48-6.08-27.52-3.18-1.02-6.57-.55-10.5 1.23-3.02 1.37-5.47 2.94-11 6.83-5.57 3.92-8.05 5.5-11.14 6.92-11.13 5.05-18.26 5.05-32.38.01zM475 55c5.38 0 7.55-.21 9.72-.96 1.26-.43 9.95-4.8 14.88-6.96 1.9-.82 3.56-2.44 6.6-6.04 2.56-3.04 3.19-3.75 4.4-4.84 3.7-3.35 7.07-3.28 10.22 1.23 6.23 8.9 5.61 15.94.07 27.02a71.26 71.26 0 0 0-2.5 5.48c-.32.8-1 2.7-1.09 2.9-.17.45-.34.81-.54 1.17-.63 1.14-1.56 2.21-4.05 4.7-2.4 2.4-5.16 3.27-11.68 4.33-1.81.3-2.2.36-3 .51-6.02 1.1-9.6 2.69-12.24 6.07-3.57 4.59-7.9 7.48-14.98 10.74-.55.24-1.1.5-1.8.8l-1.78.8a60.08 60.08 0 0 0-7.7 3.9c-2.57 1.6-4.79 2.35-9.42 3.46-8.58 2.06-12.28 3.76-17.37 9.36-5.12 5.64-10.17 7.64-16.63 6.7-5.36-.79-10.63-3.01-23.56-9.48-6.3-3.15-6.43-7.78-1.5-13.56 3.38-3.94 3.52-4.06 19.4-16.44 8.12-6.33 12.97-10.57 16.63-14.88 2.53-2.98 4.2-5.73 4.96-8.3 5.5-18.3 12.5-21.98 22.78-15.56 1.95 1.22 6.61 4.55 7.18 4.9 3.36 2.15 6.52 2.95 13 2.95zm0 2c-6.84 0-10.37-.89-14.08-3.26-.63-.4-5.27-3.71-7.16-4.9-9.05-5.65-14.66-2.7-19.8 14.45-.86 2.87-2.67 5.85-5.35 9.01-3.78 4.45-8.7 8.75-16.94 15.17-15.66 12.21-15.86 12.38-19.1 16.16-4.17 4.9-4.09 8 .88 10.48 12.71 6.35 17.89 8.54 22.94 9.28 5.78.84 10.18-.9 14.87-6.06 5.42-5.96 9.45-7.82 18.38-9.96 4.43-1.07 6.5-1.76 8.83-3.22a61.7 61.7 0 0 1 7.94-4.02l1.78-.8 1.78-.8c6.82-3.13 10.91-5.87 14.24-10.14 3-3.87 7-5.64 13.46-6.82.83-.15 1.21-.21 3.04-.51 6.1-1 8.6-1.78 10.58-3.77 2.36-2.36 3.21-3.34 3.72-4.26.15-.27.29-.56.44-.94.06-.15.75-2.06 1.09-2.9.64-1.6 1.45-3.4 2.57-5.64 5.24-10.49 5.8-16.8.07-24.98-2.4-3.44-4.37-3.48-7.24-.89-1.11 1-1.73 1.7-4.22 4.65-3.24 3.85-5.04 5.59-7.32 6.59-4.82 2.1-13.62 6.53-15.03 7.01-2.44.84-4.79 1.07-10.37 1.07zm-12.7 8.6c5.47 3.9 10.34 3.72 18.23.88 5.39-1.94 5.92-2.1 7.7-2.1 2.5-.01 4.21 1.36 5.24 4.46 1.66 4.98-2.32 8.52-12.3 12.68-2.7 1.13-16.25 6.18-20 7.73-7.86 3.24-13.93 6.42-18.87 10.15-13.02 9.84-18.36 11.93-23.71 9.68a24.67 24.67 0 0 1-3.62-1.98l-1.99-1.28a90.4 90.4 0 0 0-2.24-1.4c-3.33-2-2.82-4.28.85-7.34 1.35-1.13 10.66-7.61 13.53-9.91 7.1-5.69 11.91-11.47 14.41-18.34 3.07-8.45 4.89-12.1 6.8-13.39 1.73-1.16 3.36-.53 6.18 1.9.63.56 3.4 3.08 4.11 3.7 1.93 1.7 3.71 3.15 5.67 4.55zm-.6.8c-1.98-1.42-3.79-2.88-5.74-4.6-.73-.64-3.48-3.16-4.1-3.7-2.5-2.16-3.75-2.65-4.97-1.83-1.66 1.11-3.44 4.7-6.42 12.9-2.57 7.07-7.5 12.99-14.72 18.78-2.91 2.33-12.21 8.8-13.52 9.9-3.22 2.68-3.56 4.17-.97 5.72l2.26 1.4 1.99 1.28c1.47.93 2.48 1.5 3.47 1.91 4.9 2.07 9.96.07 22.72-9.56 5.02-3.79 11.15-7 19.1-10.28 3.76-1.55 17.3-6.6 20-7.72 9.5-3.97 13.14-7.2 11.73-11.44-.9-2.71-2.25-3.8-4.3-3.79-1.6 0-2.15.17-7.36 2.05-8.17 2.94-13.34 3.14-19.16-1.01z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n._CSS-drill-into-container {\n  position: absolute;\n  width: 100%;\n  height:100%;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n\n  /* page-toolbar has z-index of 1 */\n  z-index: 1;\n\n  /* ae-dialog has z-index of 9998 */\n  /* z-index: 9999; */\n}\n\n@media print {\n  ._CSS-main {\n    background: white !important;\n  }\n}","controller":"class Controller {\n  init() {\n    locals.theme = 'ae-light'\n    locals.isRedesign = typeof tailwind !== 'undefined'\n  }\n}","packages":[]},"locks":[],"created":{"at":"2020-05-08T08:50:45+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2024-05-13T12:20:38+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":"5d3d91ef-8d41-441d-9b44-5fe9feb0e206","impersonatedBy":null,"from":"","client":"server"},"t":1715602838904,"ct":1715589003009,"a_depth":3,"a":["apps","634a96fa-b352-4447-85c8-fced840e2693","79f0bb0e-40ac-49b6-869a-6de582dab712"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"36974c47-c48a-4ef0-a07b-26bc590a16bd","v":"0a8f95e134332412","previous":{"v":"9c733142cd929925"},"p":"a5d260b3-4a12-4625-97b0-48a83aaf6442","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Shared Model Application Questionnaire Layout","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"c5912df264a38113","text":"Window"}],"template":"<div class=\"ae-dialog-region ae-stacking-context ae-app ae-theme ae-light _CSS-app-container\" v-responsive>\n  <ae-layout v-show=\"false\" layout-id=\"b2b99ee1-c14c-4186-a2f3-e1316f765f94\"></ae-layout>\n\n  <ae-layout layout-id=\"e8f8cc49-0118-43ba-ac25-0c016d6dea1d\"></ae-layout>\n\n  <div class=\"_CSS-app dbps-body\">\n    <ae-design  name=\"page--application-questionnaire\"\n                :document-id=\"params.pageDocumentId\"\n                :key=\"locals.renderCounter\"\n                @language-change=\"locals.renderCounter += 1\"\n                :param-share=\"locals.share\"\n    ></ae-design>\n  </div>\n  \n      <ae-layout  layout-id=\"bc3c5cb8-1976-4a20-94c0-b8aae0771104\"\n              :param-page-document-id=\"params.pageDocumentId\"\n  ></ae-layout>\n</div>\n","css":"._CSS-app-container {\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n}\n\n._CSS-app {\n  width: 100%;\n  height: 100%;\n  overflow-y: scroll;\n  overflow-x: hidden; \n  -webkit-overflow-scrolling: touch;\n}","controller":"async init() {\n  this.SHARES_FOLDER_ID = '4f2ebae5-4382-4717-9a10-83dcebfe34dd'\n\n  const shareIdentifier = packages.window.location.pathname.split('/').slice(-1)\n\n  if (!shareIdentifier) {\n    return\n  }\n  \n  locals.share = (await Aeppic.find(`p:${this.SHARES_FOLDER_ID} data.identifier:${shareIdentifier}`))[0]\n}"},"locks":[],"created":{"at":"2018-10-30T12:49:46+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894072,"ct":1540903786822,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","a5d260b3-4a12-4625-97b0-48a83aaf6442"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"3098c08d-33fd-4f21-8add-d4a812c8fbd7","v":"99021eadb93a3acc","previous":{"v":"956eaf3ae4a21d46"},"p":"a5d260b3-4a12-4625-97b0-48a83aaf6442","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Shared Model on Shortlist Questionnaire Layout","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"c5912df264a38113","text":"Window"}],"template":"<div class=\"ae-dialog-region ae-stacking-context ae-app ae-theme ae-light _CSS-app-container\" v-responsive>\n  <ae-layout v-show=\"false\" layout-id=\"b2b99ee1-c14c-4186-a2f3-e1316f765f94\"></ae-layout>\n\n  <ae-layout layout-id=\"e8f8cc49-0118-43ba-ac25-0c016d6dea1d\"></ae-layout>\n\n  <div class=\"_CSS-app dbps-body\">\n    <ae-design  name=\"page--shortlist-questionnaire\"\n                :document-id=\"params.pageDocumentId\"\n                :key=\"locals.renderCounter\"\n                @language-change=\"locals.renderCounter += 1\"\n                :param-share=\"locals.share\"\n    ></ae-design>\n  </div>\n\n      <ae-layout  layout-id=\"bc3c5cb8-1976-4a20-94c0-b8aae0771104\"\n              :param-page-document-id=\"params.pageDocumentId\"\n  ></ae-layout>\n</div>\n\n","css":"._CSS-app-container {\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n}\n\n._CSS-app {\n  width: 100%;\n  height: 100%;\n  overflow-y: scroll;\n  overflow-x: hidden; \n  -webkit-overflow-scrolling: touch;\n}","controller":"async init() {\n  this.SHARES_FOLDER_ID = '4f2ebae5-4382-4717-9a10-83dcebfe34dd'\n\n  const shareIdentifier = packages.window.location.pathname.split('/').slice(-1)\n\n  if (!shareIdentifier) {\n    return\n  }\n  \n  locals.share = (await Aeppic.find(`p:${this.SHARES_FOLDER_ID} data.identifier:${shareIdentifier}`))[0]\n}"},"locks":[],"created":{"at":"2018-10-30T12:49:46+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894078,"ct":1540903786891,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","a5d260b3-4a12-4625-97b0-48a83aaf6442"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"6d5d2f88-64db-43f7-979d-4fd3b21892e1","v":"initial","p":"5d6a08db-bff9-4eb2-8ed5-2125babe0df6","f":{"id":"layout-form","v":"6dcb5105fa37f121","text":"Layout"},"data":{"name":"Shared Report","applies":"","packages":[],"template":"<h1>Bericht</h1>\n\n<template v-if=\"locals.report\">\n  <ae-design name=\"title\" :document=\"locals.report\"></ae-design>\n\n  <template v-if=\"locals.documentsByLabel\">\n    <div v-for=\"(documents, stampType) in locals.documentsByLabel\" v-if=\"stampType !== 'nolabel'\">\n      <ae-design class=\"_CSS-label\" name=\"title\" :document-id=\"stampType\"></ae-design>\n      <ae-list  \n              :documents=\"documents\"\n              list-id=\"simple-list\"\n              param-design=\"search-card\"\n              :param-design-params=\"{ readonly: true }\"\n              @selected=\"controller.showDocument($event)\"\n      ></ae-list>\n    </div>\n    <template v-if=\"locals.documentsByLabel.nolabel.length\">\n      <div class=\"_CSS-label\">\n        Unkategorisiert\n      </div>\n      <ae-list  \n              :documents=\"locals.documentsByLabel.nolabel\"\n              list-id=\"simple-list\"\n              param-design=\"search-card\"\n              :param-design-params=\"{ readonly: true }\"\n              @selected=\"controller.showDocument($event)\"\n      ></ae-list>\n    </template>\n  </template> \n  <ae-list  v-else\n            :documents=\"locals.report.data.items\"\n            list-id=\"simple-list\"\n            param-design=\"search-card\"\n            :param-design-params=\"{ readonly: true }\"\n            @selected=\"controller.showDocument($event)\"\n  ></ae-list>\n</template>\n\n<ae-layout  ref=\"dialog\"\n            layout-id=\"765b4707-916f-42ef-afdd-853582fe4314\"\n            :param-document=\"locals.detailsDocument\"\n></ae-layout>","css":"._CSS-label {\n  font-size: var(--ae-font-size-7);\n  margin: var(--ae-size-2) 0;\n}","controller":"async init() {\n  this.FORMS = {\n    LabelsFolder: '26b8297d-a71f-4e9d-96dc-69fdb3562d00',\n    UnlabelLabel: '289b157e-645f-4cbe-a5ec-4eac51c9d196'\n  }\n  this.IDS = {\n    LabelWorkflow: '7bfb45dd-a7a6-4de5-9001-ca3e6e6eb12d',\n  }\n\n  locals.report = null\n  locals.detailsDocument = null\n  locals.documentsByLabel = null\n\n  const clone = JSON.parse(JSON.stringify(params.result.report))\n  await Aeppic.import(clone)\n\n  locals.report = params.result.report\n\n  const documents = await Aeppic.getAll(locals.report.data.items)\n  locals.documentsByLabel = this.mapDocuments(documents)\n}\n\nmapDocuments(documents) {\n  const result = {\n    nolabel: []\n  }\n\n  for (const document of documents) {\n    const labelStamp = document.stamps && document.stamps.find(s => s.workflow.id === this.IDS.LabelWorkflow && s.type.id !== this.FORMS.UnlabelLabel)\n    \n    if (!labelStamp) {\n      result.nolabel.push(document)\n      continue\n    }\n\n    if (!result[labelStamp.type.id]) {\n      result[labelStamp.type.id] = []\n    }\n\n    result[labelStamp.type.id].push(document)\n  }\n\n  if (Object.keys(result).length > 1) {\n    return result\n  }\n\n  return null\n}\n\nshowDocument(doc) {\n  locals.detailsDocument = doc\n\n  $refs.dialog.$emit('show')\n}"},"locks":[],"created":{"at":"2020-05-08T08:51:43+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:51:43+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927903215,"ct":1588927903215,"a_depth":3,"a":["apps","7f785d94-22cf-44fd-9d57-5221168ade6b","5d6a08db-bff9-4eb2-8ed5-2125babe0df6"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"c3424a35-f9cc-4244-9d47-82a5b8a95b52","v":"9fb6977d58a2a204","previous":{"v":"initial"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Shared Shortlist Form Layout","applies":"","packages":[],"template":"<h2>{{ params.form.getPlaceholder('highlightStartingDate').label }} </h2>\n<ae-control :name=\"params.form.getPlaceholder('highlightStartingDate').control.name\"  :readonly=\"params.readonly\" :document=\"params.document\" field-name=\"highlightStartingDate\"></ae-control>\n\n<h2>Share (mit Projektbezogenen Modeldaten)</h2>\n<ae-layout  layout-id=\"73bda69b-6e1c-415f-bb46-3613e6aa6e3f\"\n            :param-document=\"params.document\"\n            :param-readonly=\"params.readonly\"\n            :param-target-info=\"params.document.id\"\n            :param-target-id=\"params.document.a[params.document.a.length - 2]\"\n            param-backing-account-id=\"bb0abc92-1952-4761-a0d2-be44d1c4440b\"\n            :class=\"{ '_CSS-share--editable': !params.readonly }\"\n            param-share-prefix=\"shared-casting\"\n            :param-single-share=\"true\"\n></ae-layout>\n\n<h2>Share (ohne Projektbezogenen Modeldaten)</h2>\n<ae-layout  layout-id=\"73bda69b-6e1c-415f-bb46-3613e6aa6e3f\"\n            :param-document=\"params.document\"\n            :param-readonly=\"params.readonly\"\n            :param-target-info=\"params.document.id\"\n            :param-target-id=\"params.document.a[params.document.a.length - 2]\"\n            param-backing-account-id=\"6b06ea9d-99e7-4014-9fac-71e6ff57f3c1\"\n            :class=\"{ '_CSS-share--editable': !params.readonly }\"\n            param-share-prefix=\"shared-casting\"\n            :param-single-share=\"true\"\n></ae-layout>","css":"","controller":""},"locks":[],"created":{"at":"2019-04-12T14:13:55+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894032,"ct":1555078435282,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"23a839e2-6cfd-4edd-893d-5a9b92ebbb87","v":"8b3f46ae463ede01","previous":{"v":"372dbf63cc58875d"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Shortlist (Optionlist) Export","applies":"","packages":[],"template":"<ae-list  list-id=\"e68b907e-eac2-4b21-8676-0553df848d8d\"\n          :documents=\"locals.models\"\n          :watch-documents=\"true\"\n          :param-columns=\"locals.columns\"\n          :param-headers=\"locals.headers\"\n          :param-designs=\"locals.designs\"\n></ae-list>   \n","css":"","controller":"class Controller {\n  async init() {\n    locals.models = []\n    locals.columns = ''\n    locals.designs = ''\n\n    const document = await Aeppic.get(params.pageDocumentId)\n    \n    const allModels = await Aeppic.getAll(document.data.models)\n    locals.models = allModels.filter(model => !model.data.removed)\n\n    const fieldsToShow = await Aeppic.get(document.data.fieldsToShowOnOptionlist)\n    const existingFields = fieldsToShow.data.fields.filter(field => !!(field && field.trim()))\n\n    const questionnaire = await Aeppic.get(document.data.questionnaire)\n\n\n    const questions = await Aeppic.getAll(questionnaire.data.questions)\n\n    const questionColumnHeaders = []\n    const questionColumnNames = []\n    const questionDesignNames = []\n\n    const UTF8_SINGLE_LOW_9_QUOTATION_MARK = '‚'\n\n    for (let i = 0; i < questions.length; i++) {\n      questionColumnNames.push(`data.question.id:${questions[i].id}`)\n      questionDesignNames.push(`table-cell-question-by-index`)\n      questionColumnHeaders.push(questions[i].data.name.replace(',', UTF8_SINGLE_LOW_9_QUOTATION_MARK))\n      // questionColumnHeaders.push(`table:question-title`)\n    }\n\n    locals.columns = existingFields.map(f => `data.${f}`).concat(questionColumnNames).join(',')\n    locals.headers = existingFields.map(_ => '').concat(questionColumnHeaders).join(',')\n    locals.designs = this.designs(existingFields).concat(questionDesignNames).join(',')\n  }\n\n  designs(fieldsToShow) {\n    return fieldsToShow.map((fieldName) => {\n      if (fieldName === 'files') {\n        return 'table:index-picture-thumbnail'\n      }\n\n      return ''\n    })\n  }\n}  \n\n"},"locks":[],"created":{"at":"2018-07-06T12:15:16+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894044,"ct":1530879316284,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"28a11ccb-22fa-4799-b017-eb2d7d4aec31","v":"e734feea974b3cb7","previous":{"v":"a7d025be447d4547"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Shortlist Form Layout","applies":"","packages":[],"template":"<section class=\"dbps-body-with-actions\">\n  <div class=\"dbps-body-with-actions__actions-placeholder\"></div>\n  <div class=\"dbps-body-with-actions__actions\">\n    <ae-layout layout-id=\"6273d6a2-0cf0-47da-9e45-18460c50d101\" @edit=\"locals.edit = true\" @reset=\"locals.edit = false\"></ae-layout>\n\n    <!-- <ae-layout style=\"font-size: 1.5rem;\" layout-id=\"a50ca908-1eae-4531-9768-60fda0ecc210\" :param-document-id=\"params.document.id\"></ae-layout> -->\n    <!-- <button ref=\"listDownload\" @click.stop=\"$refs.popupDownload.$emit('show', { target: $refs.listDownload })\">\n      <ae-icon class=\"fa fa-list\"></ae-icon>\n      <ae-icon class=\"fa fa-download\"></ae-icon>\n    </button>\n    <ae-layout  layout-id=\"066b41f7-036f-422c-9afc-4c3015ddc4b4\"\n                param-list-id=\"a5bd8a6b-01d2-4d20-ba70-de4c67e587e3\"\n                :param-documents=\"['shortlist', 'optionsliste']\"\n                ref=\"popupDownload\"\n                @selected=\"controller.downloadList($event)\"\n    ></ae-layout> -->\n  </div>\n\n  <div>\n    <ae-design v-if=\"!locals.edit\" class=\"_CSS-title\" :document=\"params.document\" name=\"title\"></ae-design>\n    <ae-control v-else class=\"_CSS-title\" :document=\"params.document\" field-name=\"name\"></ae-control>\n\n    <h2>\n      Drag-and-Drop\n    </h2>\n\n    <ae-form \n      :document-id=\"params.document.data.configuration.id\"\n      :readonly=\"!locals.edit\" \n      :auto-save=\"true\"\n      ></ae-form>\n\n    <!-- <div>\n      <h1>Kopieren</h1>\n      <ae-form class=\"_CSS-field-form\" :document-id=\"params.document.data.fieldsToCopy.id\" :auto-save=\"true\" :readonly=\"!locals.edit\"></ae-form>\n    </div> -->\n\n    <h2>\n      Fragenbogen\n    </h2>\n\n    <ae-form \n      :document-id=\"params.document.data.questionnaire.id\"\n      :readonly=\"!locals.edit\" \n      :auto-save=\"true\"\n      ></ae-form>\n\n    <div>\n      <ae-form class=\"_CSS-field-form\" :document-id=\"params.document.data.fieldsToVerify.id\" :auto-save=\"true\" :readonly=\"!locals.edit\"></ae-form>\n    </div>\n\n    <!-- <div v-if=\"params.document && params.document.data\">\n      <div>\n        <h1>Optionsliste</h1>\n\n          <div class=\"_CSS-grid\">\n            <a style=\"font-size: 1.5rem; color:black;\" class=\"dbps-button\" :href=\"'/api/docs/' + params.document.id + '/_print?landscape=true&additionalQueryParams=' + encodeURIComponent('printLayoutId=23a839e2-6cfd-4edd-893d-5a9b92ebbb87')\" target=\"_blank\">\n              <ae-icon class=\"fa fa-file-pdf\"></ae-icon>\n              <span style=\"margin-left: 1rem;\">Optionsliste PDF</span>\n            </a>\n\n            <ae-form class=\"_CSS-field-form\" :document-id=\"params.document.data.fieldsToShowOnOptionlist.id\" :auto-save=\"true\" :readonly=\"!locals.edit\"></ae-form>\n          </div>\n      </div>\n    </div>  -->\n\n    <!-- <h1>\n      Models\n    </h1>\n\n    <ae-list\n      v-if=\"!locals.edit\"\n      list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n      :documents=\"params.document.data.models\"\n      @selected=\"Aeppic.navigateTo($event)\"\n    ></ae-list>\n    <ae-control v-if=\"locals.edit\" name=\"children\" field-name=\"models\" :document=\"params.document\" :param-no-add=\"true\"></ae-control>\n    <div v-if=\"!params.document.data.models.length\">Keine Models hinzugefügt.</div> -->\n  </div>\n</section>\n","css":"._CSS-title {\n  font-weight: bold;\n  font-size: 2rem;\n}\n\n._CSS-field-form {\n  margin-bottom: 2rem;\n}\n\n._CSS-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n}","controller":""},"locks":[],"created":{"at":"2018-06-20T14:58:43+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894048,"ct":1529506723962,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"564e7028-6b98-49b8-ac43-50f7873930a1","v":"4ba6cc344d9244b1","cloneOf":{"id":"f771a13d-8381-4bda-9750-ef8d215dda21","v":"initial","text":"Drill Into Manager"},"originalCloneOf":{"id":"f771a13d-8381-4bda-9750-ef8d215dda21","v":"initial","text":"Drill Into Manager"},"previous":{"v":"d600a6747ef34777"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Show Document Dialog (Drill Into Dialog)","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"150e1aeee6052825","text":"Window"}],"template":"<div class=\"_CSS-container\"\n      v-if=\"locals.drills.length\"\n      @ae-drill-into.stop.prevent=\"controller.onDialogDrill($event)\" \n      @keydown.esc.capture=\"!controller.activeDrillDocumentHasUnsavedChanges && controller.closeAndNavigate()\"\n      @ae-navigated=\"controller.onNavigated($event)\"\n>\n  <div class=\"_CSS-drill-manager\" :class=\"{ '_CSS-drill-manager--fullscreen': Aeppic.Device !== 'Desktop' }\">\n    <div class=\"_CSS-header\">\n     <!-- Change? {{ controller.activeDrillDocumentHasUnsavedChanges }} -->\n      <div class=\"_CSS-nav\">\n        <div class=\"_CSS-nav__title\" v-if=\"controller.currentDrill\">\n          <ae-design :document=\"controller.currentDrill.targetDocument\" name=\"page-title\" :param-hide-path=\"true\"></ae-design>\n        </div>\n \n        <div class=\"_CSS-nav__path\"> \n          <ae-design v-if=\"controller.currentDrill\" name=\"path\" :document=\"controller.currentDrill.targetDocument\" @selected=\"controller.closeAndNavigate($event)\"></ae-design>\n          <!-- <ae-design v-if=\"controller.currentDrill\" name=\"path\" :document=\"controller.currentDrill.targetDocument\"></ae-design> -->\n        </div>\n        <!-- <div class=\"_CSS-nav__path\">\n          <div class=\"_CSS-nav__entry\" v-for=\"(drill, index) of locals.drills\" @click.stop=\"controller.setCurrentDrill(index)\">\n            <span v-if=\"index > 0\" style=\"margin: 0 var(--ae-size-1);\">/</span>\n            <ae-design style=\"display:inline-block;\" :document=\"drill.targetDocument\" name=\"title\"></ae-design>\n          </div>\n        </div> -->\n      </div> \n\n      <template v-if=\"controller.currentDrill.documents\">\n        <button class=\"ae-button\" @click.stop=\"controller.back()\" title=\"Voriges Dokument anzeigen [STRG + Linkspfeil]\" :disabled=\"!controller.canBack\">\n          <ae-icon class=\"fa fa-angle-left\"></ae-icon>\n        </button>\n\n        <button class=\"ae-button\" @click.stop=\"controller.forward()\" title=\"Nächstes Dokument anzeigen [STRG + Rechtspfeil]\" :disabled=\"!controller.canForward\">\n          <ae-icon class=\"fa fa-angle-right\"></ae-icon>\n        </button>\n        <!-- {{ controller.currentDrill.documents.length }}  -->\n        <!-- {{ controller.currentDrill.documentsIndex }} -->\n      </template>\n \n      <button class=\"ae-button\" title=\"In Vollbild anzeigen\" @click.stop=\"controller.closeAndNavigate(controller.currentDrill.targetDocument);\" :disabled=\"controller.disableExpand\">\n        <ae-icon class=\"fa fa-expand-arrows-alt\"></ae-icon>\n      </button>\n      <button class=\"ae-button\" @click.stop=\"controller.closeAndNavigate()\" :disabled=\"controller.activeDrillDocumentHasUnsavedChanges\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n\n    <div class=\"_CSS-body\" >\n      <!-- {{ controller.currentDrill.targetDocument }} -->\n      <ae-design\n        v-if=\"controller.currentDrill\"\n        class=\"_CSS-page-toolbar bp-page__toolbar\"\n        :document=\"controller.currentDrill.targetDocument\"\n        :xkey=\"controller.currentDrill.targetDocument.id\"\n        name=\"page-toolbar\"\n        @toolbar=\"controller.dispatchEventChildren('body', 'toolbar', $event)\"\n        :param-document-changed-bus=\"params.documentChangedBus\"\n        :param-readonly=\"!controller.currentDrill.canEdit\"\n        ></ae-design>\n\n        <div class=\"_CSS-body__page-container\">\n          <div class=\"_CSS-body__page--register\" xv-if=\"locals.drills.length > 1\">\n            <div style=\"padding: var(--ae-size-1);color:var(--ae-background-700);font-size:var(--ae-font-size-2);\">\n              Geöffnet\n            </div>\n            <template v-for=\"(drill, index) of locals.drills\">\n              <button class=\"ae-button _CSS-register-button\" :class=\"{ 'ae-button--secondary': index === locals.activeDrillIndex }\" :disabled=\"controller.activeDrillDocumentHasUnsavedChanges\" @click.stop=\"controller.setCurrentDrill(index)\" :title=\"drill.targetDocument?.data.name\">\n                <ae-design class=\"_CSS-register__icon\" xstyle=\"margin-right: 0.5em;\" name=\"icon\" :document=\"drill.targetDocument\"></ae-design>\n                <div class=\"_CSS-register__title\">\n                  <div class=\"_CSS-register__title-text\">\n                    <ae-design name=\"title\" :document=\"drill.targetDocument\"></ae-design>\n                    <!-- {{ drill.targetDocument?.data.name }} -->\n                  </div>\n                  <!-- <ae-design name=\"title\" :document=\"drill.targetDocument\"></ae-design> -->\n                </div>\n                <!-- <div style=\"flex: 1;\"></div> -->\n                <!-- <button class=\"ae-button ae-button--small _CSS-register__remove\" v-if=\"index > 0\" @click.stop=\"controller.removeDrillAtIndex(index)\"  :disabled=\"controller.activeDrillDocumentHasUnsavedChanges\">\n                  <ae-icon class=\"fa fa-times\"></ae-icon>\n                </button> -->\n              </button>\n              <!-- <div v-if=\"index !== locals.drills.length -1\" style=\"padding: 0 var(--ae-size-3);\">\n                <ae-icon class=\"fa fa-chevron-down\"></ae-icon>\n              </div> -->\n            </template>\n            <!-- <button class=\"ae-button ae-button--small\"> -->\n              <!-- <ae-icon class=\"fa fa-chevron-left\" style=\"transform: rotate(45deg);\"></ae-icon> -->\n            <!-- </button> -->\n          </div>\n          <ae-design  name=\"page\" \n                      v-for=\"(drill, index) of locals.drills\"\n                      xv-show=\"index === locals.activeDrillIndex \"\n                      class=\"bp-page__body _CSS-body__page\"\n                      :class=\"{ '_CSS-body--hidden': index !== locals.activeDrillIndex }\"\n                      ref=\"body\"\n                      :document=\"drill.targetDocument\"\n                      @document-changed=\"controller.documentChanged($event)\"\n                      :param-document-changed-bus=\"params.documentChangedBus\"\n                      @delete=\"controller.onDocumentDeleted($event)\"\n                      :param-readonly=\"!drill.canEdit\"\n                      @keydown.native.stop\n          ></ae-design>\n        </div>\n    </div>\n  </div>\n\n  <!-- <ae-dialog ref=\"confirmLeave\">\n    <template v-slot:header=\"scope\">\n      Drill Into schließen?\n    </template>\n    <template v-slot:body=\"scope\">\n      <div>\n        <p>\n          Soll der Drill Into Dialog geschlossen werden?\n        </p>\n        <p>\n          Nicht gespeicherte Änderungen werden verworfen.\n        </p>\n      </div>\n    </template>\n    <template v-slot:commands=\"scope\">\n      <div class=\"_CSS-confirm__commands\">\n        <button class=\"ae-button\" @click.stop=\"scope.close()\">\n          Abbrechen\n        </button>\n        <button class=\"ae-button ae-button--primary\" @click.stop=\"controller.executeNavigation()\">\n          Dialog schließen\n        </button>\n      </div>\n    </template>\n  </ae-dialog> -->\n</div>\n\n\n<ae-design name=\"title\" document-id=\"root\" style=\"display:none;\" ref=\"hiddenDomElement\"></ae-design>\n","css":"._CSS {\n /* ATTENTION: this layout is always rendered and one may break everything */\n}\n\n._CSS-container {\n  background: rgba(0,0,0,0.3);\n  height: 100%;\n  width: 100%;\n\n  display: flex;\n}\n\n._CSS-drill-manager {\n  height: 98%;\n  width: var(--ae-dialog__width--big);\n  xwidth: 98%;\n  max-width: 98%;\n  margin: auto;\n\n  background: var(--ae-ui-background);\n\n  display: flex;\n  flex-flow: column;\n\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-drill-manager._CSS-drill-manager--fullscreen {\n  height: 100%;\n  max-height: 100%;\n\n  width: 100%;\n  max-width: 100%;\n}\n\n._CSS-header {\n  border-radius: 0 var(--ae-border-radius) 0 var(--ae-border-radius);\n  padding: var(--bp-page-content-padding);\n  display: flex;\n  justify-content: space-between;\n}\n\n._CSS-body {\n  border-radius: 0 0 var(--ae-border-radius) var(--ae-border-radius) ;\n\n  flex: 1;\n  display: flex;\n  flex-flow: column;\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: hidden;\n}\n\n._CSS-body__page-container {\n  position: relative;\n  height: 100%;\n  width: 100%;\n\n  overflow: hidden;\n\n  flex: 1;\n  display: flex;\n}\n\n._CSS-body__page--back {\n  height: 100%;\n  width: 100%;\n  overflow: hidden;\n}\n\n._CSS-body__page--register {\n  width: 60px;\n  min-width: 60px;\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-register__title {\n  max-width: 40px;\n  xdisplay: flex;\n  xflex-flow: column;\n  xjustify-content: center;\n  font-size: var(--ae-font-size-2);\n  writing-mode: vertical-lr;\n  transform: rotateZ(180deg);\n  flex: 1;\n\n  max-height: 90px;\n  min-height: 60px;\n  overflow: hidden;\n}\n\n._CSS-register__icon {\n  position: absolute;\n  top: 0;\n  left: 0;\n  font-size: var(--ae-font-size-3);\n} \n\n._CSS ._CSS-register-button {\n  position: relative;\n  display: flex;\n  align-items: center;\n\n  padding: 4px;\n}\n\n._CSS-register__remove {\n  position: absolute;\n  left: 0;\n}\n\n/*\n._CSS-body__page--overlayed {\n  position: absolute;\n  top: var(--ae-size-5);\n  left: var(--ae-size-5);\n  bottom: 0;\n  right: 0;\n\n  border-width: var(--ae-border-width) 0 0 var(--ae-border-width);\n  border-style: solid;\n  border-color: var(--ae-border-color);\n\n  box-shadow: var(--ae-shadow-2);\n}\n*/\n\n\n\n._CSS-body__page {\n  box-shadow: var(--ae-shadow-2);\n\n  flex: 1;\n  min-height: 0;\n  min-width: 0;\n\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n\n  height: 100%;\n  width: 100%;\n}\n\n._CSS-nav {\n  display: flex;\n  flex-flow: column;\n\n  padding-left: var(--bp-page-content-padding);\n\n  width: 100%;\n  overflow: hidden;\n  min-width: 0;\n}\n\n._CSS-nav__title {\n  font-size: 1.5em;\n  color: var(--ae-foreground-l1);\n  font-weight: bold;\n\n  display: flex;\n}\n\n._CSS-title-form-title {\n  display: initial;\n  margin-right: 0.5em;\n  color: var(--ae-background-600);\n}\n\n\n._CSS-nav__path {\n  font-size: var(--ae-font-size-3);\n\n  display: flex;\n}\n\n._CSS-nav__entry {\n  display: flex;\n  align-items: center;\n}\n\n._CSS-body--hidden {\n  visibility: hidden;\n  position: absolute;\n  left: -100vw;\n}","controller":"class Controller {\n  async init() {\n    console.log('# init')\n    this.disableExandForms = [\n      '5d0ac040-1428-48bc-9b4f-28c69e098b3c',\n      '6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2',\n    ]\n\n    locals.drills = []\n    locals.activeDrillIndex = 0\n\n    $on('navigate-to', (event) => this.navigateIfDocumentIsSomewhereElse(event))\n    $on('show', (event) => this.onShow(event))\n\n    this.loadViewHandler = () => this.loadView()\n\n    // packages.window && packages.window.addEventListener('popstate', this.loadViewHandler)\n\n    this.loadView()\n\n    Aeppic.on('change', (change) => this.handleChange(change))\n\n       \n    await Aeppic.nextRenderPass()\n\n    this._teardownListeners()\n\n\n    this._setupKeydownListener()\n\n    this._onNavigatedHandler = (event) => this.onNavigated(event)\n    $refs.hiddenDomElement.$root.$el.addEventListener('ae-navigated', this._onNavigatedHandler)\n  }\n\n\n  onNavigated(event) {\n    console.log('onNavigated', event)\n\n    this.loadView()\n  }\n\n\n  handleChange(change) {\n    console.log('handleChange', {change})\n    if (!change || !this.currentDrill || (change.type !== 'deleted' && change.type !== 'deleted-hard')) {\n      return\n    }\n\n    if (change.document.id === this.currentDrill.targetDocument.id) {\n      locals.drills = []\n      $emit('deactive')\n    }\n  }\n\n  get disableExpand() {\n    if (!this.currentDrill.targetDocument || this.disableExandForms.includes(this.currentDrill.targetDocument.f.id)) {\n      return true\n    }\n\n    return this.activeDrillDocumentHasUnsavedChanges\n  }\n\n  get activeDrillDocumentHasUnsavedChanges() {\n    return params.documentChangedBus.documentChanged\n  }\n\n  async onDialogDrill(drillEvent) {\n    console.log('onDialogDrill', drillEvent)\n    const document = await Aeppic.get(drillEvent.detail.targetDocument)\n    const drillEventWithDocument = { ...drillEvent.detail, ... { targetDocument: document }}\n\n    this.onShow(drillEventWithDocument)\n  }\n\n  async navigateIfDocumentIsSomewhereElse(event) {\n    console.log('navigateIfDocumentIsSomewhereElse', event)\n\n    const { targetDocument: document }  = event\n\n    if (!this.currentDrill) {\n      return false\n    }\n\n    const useDialog = event.mode === 'dialog'\n    if (useDialog) {\n      return false\n    }\n\n    if (document.a_depth <= 1) {\n      this.closeAndNavigate()\n\n      Aeppic.navigateTo(document)\n      return true\n    }\n\n    const form = await Aeppic.get(document.f.id)\n    const formFolder = await Aeppic.get(form.p)\n    const isStructual = formFolder.data.structural\n\n    if (isStructual) {\n      this.closeAndNavigate()\n\n      Aeppic.navigateTo(document)\n      return true\n    }\n\n    const topAncestorIsDifferent = document.a[1] !== this.currentDrill.targetDocument.a[1]\n    const targetIsBelowCurrentDrill = !document.a.includes(this.currentDrill.targetDocument.id)\n\n    if (topAncestorIsDifferent && targetIsBelowCurrentDrill) {\n      this.closeAndNavigate()\n\n      Aeppic.navigateTo(document)\n      return true\n    }\n\n    return false\n  }\n\n  async onShow(event, insertAtDrillIndex) {\n    console.log('on-show', event)\n    const document = await Aeppic.get(this._getAllowedTargetDocument(await Aeppic.get(event.targetDocument)))\n\n    if (event.mode !== 'dialog' && await this.navigateIfDocumentIsSomewhereElse({ targetDocument: document })) {\n      return\n    }\n\n    const drillEvent = {\n      detail: {\n        targetDocument: document,\n        documents: event.documents,\n        documentsIndex: event.documentsIndex\n      }\n    }\n \n    await this._show(drillEvent, insertAtDrillIndex)\n  }\n\n  _getAllowedTargetDocument(targetDocument) {\n    const targetIsComment = targetDocument?.f.id === 'cf155969-ede1-43a4-9b10-3a697b19db91'\n\n    if (targetIsComment && !(Aeppic.Account?.id === targetDocument.created.by)) {\n      return targetDocument.p\n    }\n\n    return targetDocument\n  }\n\n  async _show(event, insertAtDrillIndex) {\n    console.log('_show', insertAtDrillIndex)\n    $emit('activate')\n\n    const drillEvent = event.detail\n    const { targetDocument } = drillEvent\n\n    const ensureTargetDocument = 'id' in targetDocument && 'data' in targetDocument ? targetDocument : await Aeppic.get(targetDocument)\n\n\n    const drill = {\n      targetDocument: ensureTargetDocument,\n      canEdit: false,\n      documents: drillEvent.documents,\n      documentsIndex: drillEvent.documentsIndex,\n    }\n\n    const existingDrillIndex = locals.drills.findIndex(drill => drill.targetDocument.id === ensureTargetDocument.id)\n\n    if (existingDrillIndex >= 0) {\n      locals.activeDrillIndex = existingDrillIndex\n    } else {\n      this._removeFollowupDrills(insertAtDrillIndex)\n\n      if (insertAtDrillIndex != null) {\n        locals.drills.splice(insertAtDrillIndex, 1, drill)\n      } else {\n        locals.drills.push(drill)\n      }\n\n      locals.activeDrillIndex = locals.drills.length - 1\n\n      this.persistView()\n    }\n\n    drill.canEdit = await Aeppic.canEdit(targetDocument)\n  }\n\n  async removeFollowupDrills(startingAtIndex) {\n    this._removeFollowupDrills(startingAtIndex)\n \n    await this.setCurrentDrill(startingAtIndex - 1)\n    await this.persistView()\n  }\n\n  _removeFollowupDrills(startingAtIndex) {\n    const index = startingAtIndex != null ? startingAtIndex : locals.activeDrillIndex\n\n    if (locals.drills.length > index) {\n      locals.drills = locals.drills.slice(0, index + 1)\n    }\n\n    locals.activeDrillIndex = locals.drills.length - 1\n  }\n\n  async removeDrillAtIndex(index) {\n    if (this.activeDrillDocumentHasUnsavedChanges) {\n      return\n    }\n\n    if (locals.drills[index]) {\n      locals.drills.splice(index, 1)\n    }\n\n    await this.setCurrentDrill(index - 1)\n    await this.persistView()\n  }\n\n\n  get currentDrill() {\n    return locals.drills[locals.activeDrillIndex]\n  }\n\n  get firstDrill() {\n    return locals.drills[0]\n  }\n\n  async setCurrentDrill(index) {\n    if (this.activeDrillDocumentHasUnsavedChanges) {\n      return\n    }\n\n    const isAlreadyCurrent = index < 0 || index === locals.activeDrillIndex\n    \n    if (isAlreadyCurrent) {\n      return\n    }\n\n    const targetDocument = locals.drills[index].targetDocument\n    this.onShow({ targetDocument, mode: 'dialog' })\n  }\n\n  back() {\n    const { documents, documentsIndex } = this.currentDrill\n    const newIndex = documentsIndex -1\n\n    if (newIndex < 0) {\n      throw new Error('Index out of bounds')\n    }\n\n    const targetDocument = documents[newIndex]\n\n    this.onShow({ targetDocument, documents, documentsIndex: newIndex }, locals.activeDrillIndex)\n  }\n\n\n  forward() {\n    const { documents, documentsIndex } = this.currentDrill\n    const newIndex = documentsIndex + 1\n\n    if (newIndex >= documents.length) {\n      throw new Error('Index out of bounds')\n    }\n\n    const targetDocument = documents[newIndex]\n\n    this.onShow({ targetDocument, documents, documentsIndex: newIndex }, locals.activeDrillIndex)\n  }\n\n  get canBack() {\n    return this.currentDrill.documentsIndex != null && this.currentDrill.documents?.length && this.currentDrill.documentsIndex > 0 && !this.activeDrillDocumentHasUnsavedChanges\n  }\n\n  get canForward() {\n    return this.currentDrill.documentsIndex != null && this.currentDrill.documents?.length && this.currentDrill.documentsIndex < this.currentDrill.documents.length - 1 // && !this.activeDrillDocumentHasUnsavedChanges\n  }\n\n  closeAndNavigate(navigationTargetDocument) {\n    if (this.activeDrillDocumentHasUnsavedChanges) {\n      return\n    }\n\n    Aeppic.navigateTo(navigationTargetDocument || Aeppic.Root.params.pageDocumentId)\n    \n    locals.drills = []\n    $emit('deactive')\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) { \n    console.log(refName, eventName, eventValue)\n    const activeRef = $refs[refName] && $refs[refName][locals.activeDrillIndex]\n\n    if (!activeRef || !activeRef.$el || !activeRef.$el.children) {\n      return\n    }\n    const children = activeRef.$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    activeRef.$emit(eventName, eventValue)\n  }\n\n  persistView() {\n    const drills = locals.drills\n\n    const ids = drills.map(d => d.targetDocument.id).join('_')\n    console.log('PERSISTVIEW ==> ', ids)\n\n    const queryParamsChanged = (!Aeppic.Root.params.queryParams && ids) || Aeppic.Root.params.queryParams.d !== ids\n\n    if (ids) {\n      if (queryParamsChanged) {\n        Aeppic.navigateTo(Aeppic.Root.params.pageDocumentId, { ...Aeppic.Root.params.queryParams, d: ids })\n      }\n    } else {\n      Aeppic.navigateTo(Aeppic.Root.params.pageDocumentId, { ...Aeppic.Root.params.queryParams })\n    }\n  }\n\n  async loadView() {\n    const idsQueryParam = Aeppic.Root.params.queryParams ? Aeppic.Root.params.queryParams.d : null\n    console.log('====>', idsQueryParam)\n\n    if (!idsQueryParam) {\n      locals.drills = []\n      $emit('deactive')\n      return\n    }\n\n    const ids = idsQueryParam.split('_')\n\n    const idsAreAlreadyActive = locals.drills.length && locals.drills.every(drill => ids.includes(drill.targetDocument.id))\n    if (idsAreAlreadyActive) {\n      return \n    }\n\n    const documents = await Aeppic.getAll(ids)\n    \n\n    const drills = []\n\n    for (const document of documents) {\n      if (!document) {\n        console.warn('Could not restore all documents. Aborting')\n        return\n      }\n\n\n      drills.push({\n        targetDocument: document,\n        canEdit: await Aeppic.canEdit(document)\n      })\n    }\n\n    locals.drills = drills\n    locals.activeDrillIndex = drills.length - 1\n\n    $emit('activate')\n  }\n\n  documentChanged(didChange) {\n    if (didChange) {\n      params.documentChangedBus.changed()\n    } else {\n      params.documentChangedBus.reset()\n    }\n  }\n\n  async onDocumentDeleted(deleteEvent) {\n    console.log({ deleteEvent })\n\n    await this.removeFollowupDrills(locals.activeDrillIndex - 1)\n\n    if (!this.currentDrill) {\n      this.closeAndNavigate()\n    }\n  }\n\n  _setupKeydownListener() {\n    if (packages.window) {\n      this._keydownHandler = (event) => {\n        if (event.key) {\n          let handled = true\n \n          if (event.key === 'Escape' && this.currentDrill && !this.activeDrillDocumentHasUnsavedChanges) {\n            this.closeAndNavigate()\n          // } else if (event.ctrlKey && event.key === 'ArrowRight' && this.canForward) {\n            // this.forward()\n          // } else if (event.ctrlKey && event.key === 'ArrowLeft' && this.canBack) {\n            // this.back()\n          } else {\n            handled = false\n          }\n\n          if (handled) {\n            event.preventDefault()\n            event.stopPropagation()\n          }\n        }\n      }\n\n\n      packages.window.addEventListener('keydown', this._keydownHandler)\n    }\n  }\n\n  _teardownListeners() {\n    if (packages.window) {\n      packages.window.removeEventListener('popstate', this.loadViewHandler)\n      packages.window.removeEventListener('keydown', this._keydownHandler)\n    } \n\n    if ($refs.hiddenDomElement) {\n      $refs.hiddenDomElement.$root.$el.removeEventListener('ae-navigated', this._onNavigatedHandler)\n    }\n  }\n\n  destroy() {\n    locals.drills = []\n    $emit('deactive')\n\n    this._teardownListeners()\n  }\n} "},"locks":[],"created":{"at":"2020-05-26T13:11:19+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2023-04-24T10:02:55+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1682330575903,"ct":1590498679407,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"4a2dc072-cd8a-43d6-8cce-d4b7b0992f80","v":"5e402b22db1dd51d","previous":{"v":"d7f152fd2685ba8f"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"data":{"name":"Sidebar","applies":"","template":"<header class=\"_CSS-header\">\r\n  <template v-for=\"(tab, i) in locals.tabs\" v-if=\"tab\">\r\n    <ae-layout  v-if=\"tab.data.titleLayout.id\"\r\n                :layout-id=\"tab.data.titleLayout.id\"\r\n                :param-document-id=\"params.documentId\"\r\n                class=\"_CSS-tab\"\r\n                :class=\"{ '_CSS-tab--active': locals.activeTabIndex === i }\"\r\n                @click.native=\"locals.activeTabIndex = i\">\r\n    </ae-layout>          \r\n    <ae-design  v-else\r\n                name=\"title\"\r\n                class=\"_CSS-tab\"\r\n                :class=\"{ '_CSS-tab--active': locals.activeTabIndex === i }\"\r\n                :document-id=\"tab.id\"\r\n                @click.native=\"locals.activeTabIndex = i\"\r\n    ></ae-design>\r\n                \r\n  </template>\r\n\r\n</header>\r\n<div class=\"_CSS-tab-content\">\r\n  <ae-layout  v-if=\"locals.tabs && locals.tabs[locals.activeTabIndex]\"\r\n              :layout-id=\"locals.tabs[locals.activeTabIndex].data.contentLayout.id\"\r\n              :param-document-id=\"params.documentId\">\r\n  </ae-layout>\r\n</div>\r\n","css":"._CSS {\r\n  background: var(--ae-background-d1);/* var(--bp-sidebar-background, #EEE);*/\r\n  border-left:1px solid #DDD;\r\n  width: 30%;\r\n  max-width: 300px;\r\n  display: flex;\r\n  flex-direction: column;\r\n}\r\n\r\n._CSS ._CSS-header {\r\n  position: relative;\r\n  display: flex; \r\n  height: 56px;\r\n  /* justify-content: space-between; */\r\n  color: var(--bp-sidebar-text, #777);  \r\n}\r\n\r\n._CSS-header::before {\r\n  content:'';\r\n  position:absolute;\r\n  left:0;right:0;bottom:0;top:0px;\r\n  border-bottom: 2px solid  var(--ae-primary, transparent);\r\n  opacity: 0.25;\r\n}\r\n\r\n._CSS-header ._CSS-tab:last-child {\r\n  margin-left: auto;\r\n}\r\n\r\n\r\n._CSS-tab-content {\r\n  /* border-top: solid 1px #AAA; */\r\n  padding: 0.5em;\r\n  flex:1;\r\n\r\n  display: flex;\r\n  flex-flow: column;\r\n}\r\n\r\n._CSS-tab {\r\n  padding: 16px 16px 14px 16px;\r\n  display:flex;\r\n  flex-direction: row;\r\n  align-items: center;\r\n  position: relative;\r\n  height: 56px;\r\n  text-transform: uppercase;\r\n  font-weight: bolder;\r\n  font-size: 0.9em;\r\n  cursor: pointer;\r\n  box-sizing: border-box;\r\n}\r\n\r\n._CSS-tab > *{\r\n  z-index: 1;\r\n}\r\n\r\n/* ._CSS-tab__title:nth-child(2) {\r\n  margin-left:4px;\r\n} */\r\n\r\n._CSS-tab._CSS-tab--active {\r\n  color: var(--ae-foreground-l2, var(--bp-sidebar-text, #DDD));\r\n  border-bottom: 2px solid  var(--ae-primary);\r\n}\r\n\r\n\r\n._CSS-tab::before {\r\n  content:'';\r\n  position:absolute;\r\n  left:0;right:0;bottom:0;top:0px;\r\n  background: var(--ae-primary, transparent);\r\n  opacity: 0;\r\n  transition: all 0.1s ease-in-out;\r\n  /* border-radius:2px 2px 0 0; */\r\n}\r\n\r\n\r\n._CSS-tab._CSS-tab--active::before {\r\n  background: var(--ae-primary, transparent);\r\n  opacity: 0.10;\r\n  /* border-radius:2px 2px 0 0; */\r\n}\r\n\r\n\r\n._CSS-tab:hover::before {\r\n  opacity: 0.3;\r\n}\r\n\r\n\r\n._CSS-tab:hover::after {\r\n  /* background: var(--ae-primary, black); */\r\n  opacity: 1;\r\n}\r\n\r\n\r\n._CSS-tab > * {\r\n  margin: 0px;\r\n}\r\n\r\ni + ._CSS-tab__title {\r\n  margin-left: 8px;\r\n}\r\n\r\n","controller":"class Controller {\n  async init() {\n\n    this.SIDEBAR_TABS_FORM = '80e3533e-2f50-4043-963c-763187859480'\n\n    const userConfig = await this.getUserTabConfiguration()\n    if (userConfig) {\n      locals.tabs = await Aeppic.getAll(userConfig.data.tabs)\n    } else {\n      const config = await this.getDefaultTabConfiguration()\n      locals.tabs = await Aeppic.getAll(config.data.tabs)\n    }\n\n    locals.activeTabIndex = locals.tabs.length - 1\n  }\n\n  async getDefaultTabConfiguration() {\n    return await Aeppic.get('3d4a2960-12f9-4b41-be9d-836fabb671a5')\n  }\n\n  async getUserTabConfiguration() {\n    if (!Aeppic.Account || !Aeppic.Account.id) {\n      return\n    }\n\n    const results = await Aeppic.find(`p:${Aeppic.Account.id} f.id:${this.SIDEBAR_TABS_FORM}`)\n    return results[0]\n  }\n}\n","packages":[]},"locks":[],"created":{"at":"2017-12-05T17:13:18+01:00","by":"","from":"","client":"6a2c51b4-465c-4dac-9dc2-cca2ba0da04b"},"modified":{"at":"2018-12-21T11:03:30+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1545390210850,"ct":1512490393830,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"470e8f68-a12c-4af0-8e5f-fb562f5b1cec","v":"043152e66c0af253","previous":{"v":"08cb1d3b579a2510"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Sidebar Toggle Button","applies":"","packages":[],"template":"<button \n  v-if=\"Aeppic.Device === 'Desktop'\"\n  class=\"_CSS-action-button bp-button-icon _CSS-action-button--hide-if-large\"\n  title=\"Toggle Info Sidebar\"\n  @click=\"$emit('toggle-sidebar')\"\n  :class=\"{ '_CSS-action-button--active': params.sidebarOpen }\"\n  >\n    <ae-icon class=\"fa fa-info-square\"></ae-icon>\n</button>\n\n\n","css":"._CSS-action-button {\n  transition: scale 0.2s ease-in-out;\n  /* margin: 0 16px; */\n}\n/* \n.ae-large ._CSS-action-button--hide-if-large {\n  display: none;\n} */\n\n._CSS-action-button {\n  display:flex;\n  align-items: center;\n}\n\n._CSS-action-button._CSS-action-button--active {\n  color: var(--ae-primary);\n}\n\n._CSS-action-button:hover {\n  transform:scale(1.1);\n}\n\n","controller":""},"locks":[],"created":{"at":"2018-04-20T12:23:53+02:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"f8312258-bdc9-438a-a510-de77a69e61e9"},"modified":{"at":"2018-12-21T11:03:33+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1545390213412,"ct":null,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"fefa8352-0e9a-4ba8-8349-c9402ac8aefa","v":"0dc501356b5ec757","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Spinner","applies":"","packages":[],"template":"<!-- Source: https://github.com/tobiasahlin/SpinKit -->\n<div class=\"_CSS-sk-folding-cube\">\n  <div class=\"_CSS-sk-cube1 _CSS-sk-cube\"></div>\n  <div class=\"_CSS-sk-cube2 _CSS-sk-cube\"></div>\n  <div class=\"_CSS-sk-cube4 _CSS-sk-cube\"></div>\n  <div class=\"_CSS-sk-cube3 _CSS-sk-cube\"></div>\n</div>","css":"._CSS-sk-folding-cube {\n  margin: 20px auto;\n  width: 50%;\n  height: 50%;\n  position: relative;\n  -webkit-transform: rotateZ(45deg);\n          transform: rotateZ(45deg);\n}\n\n._CSS-sk-folding-cube ._CSS-sk-cube {\n  float: left;\n  width: 50%;\n  height: 50%;\n  position: relative;\n  -webkit-transform: scale(1.1);\n      -ms-transform: scale(1.1);\n          transform: scale(1.1); \n}\n._CSS-sk-folding-cube ._CSS-sk-cube:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: var(--ae-primary);\n  -webkit-animation: sk-foldCubeAngle 2.4s infinite linear both;\n          animation: sk-foldCubeAngle 2.4s infinite linear both;\n  -webkit-transform-origin: 100% 100%;\n      -ms-transform-origin: 100% 100%;\n          transform-origin: 100% 100%;\n}\n._CSS-sk-folding-cube ._CSS-sk-cube2 {\n  -webkit-transform: scale(1.1) rotateZ(90deg);\n          transform: scale(1.1) rotateZ(90deg);\n}\n._CSS-sk-folding-cube ._CSS-sk-cube3 {\n  -webkit-transform: scale(1.1) rotateZ(180deg);\n          transform: scale(1.1) rotateZ(180deg);\n}\n._CSS-sk-folding-cube ._CSS-sk-cube4 {\n  -webkit-transform: scale(1.1) rotateZ(270deg);\n          transform: scale(1.1) rotateZ(270deg);\n}\n._CSS-sk-folding-cube ._CSS-sk-cube2:before {\n  -webkit-animation-delay: 0.3s;\n          animation-delay: 0.3s;\n}\n._CSS-sk-folding-cube ._CSS-sk-cube3:before {\n  -webkit-animation-delay: 0.6s;\n          animation-delay: 0.6s; \n}\n._CSS-sk-folding-cube ._CSS-sk-cube4:before {\n  -webkit-animation-delay: 0.9s;\n          animation-delay: 0.9s;\n}\n@-webkit-keyframes sk-foldCubeAngle {\n  0%, 10% {\n    -webkit-transform: perspective(140px) rotateX(-180deg);\n            transform: perspective(140px) rotateX(-180deg);\n    opacity: 0; \n  } 25%, 75% {\n    -webkit-transform: perspective(140px) rotateX(0deg);\n            transform: perspective(140px) rotateX(0deg);\n    opacity: 1; \n  } 90%, 100% {\n    -webkit-transform: perspective(140px) rotateY(180deg);\n            transform: perspective(140px) rotateY(180deg);\n    opacity: 0; \n  } \n}\n\n@keyframes sk-foldCubeAngle {\n  0%, 10% {\n    -webkit-transform: perspective(140px) rotateX(-180deg);\n            transform: perspective(140px) rotateX(-180deg);\n    opacity: 0; \n  } 25%, 75% {\n    -webkit-transform: perspective(140px) rotateX(0deg);\n            transform: perspective(140px) rotateX(0deg);\n    opacity: 1; \n  } 90%, 100% {\n    -webkit-transform: perspective(140px) rotateY(180deg);\n            transform: perspective(140px) rotateY(180deg);\n    opacity: 0; \n  }\n}","controller":""},"locks":[],"created":{"at":"2018-04-18T15:44:58+02:00","by":"","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481260,"ct":1621428481260,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"7c5d39a29f242705","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"73637da4-0d5c-47d3-8524-877762c34268","v":"7b24dc48dbd364c4","previous":{"v":"9f4a400b91404f61"},"p":"a24e129a-47ca-4348-8ded-d3ba57446daa","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"},"data":{"name":"Startseite","applies":"","packages":[],"template":"<div class=\"_CSS-page\">\n  <ae-design class=\"_CSS-page__dashboard\" name=\"page\" :document=\"locals.dashboard\" :style=\"{ 'min-width': Aeppic.ResponsiveSizes.MIN_MEDIUM_SIZE + 'px' }\"></ae-design>\n\n  <div class=\"_CSS-page__stream\">\n    <ae-list list-id=\"ea63de1f-8ccb-41a3-8864-c21e980e18fe\" :params=\"{ companyId: params.companyId }\"></ae-list>\n  </div>\n</div>\n","css":"._CSS-page {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n._CSS-page__dashboard {\n  flex: 1 0 50%;\n  min-width: 900px;\n}\n\n._CSS-page__stream {\n  flex: 1 0 50%;\n  background: var(--ae-ui-background);\n  padding: var(--ae-size-2);\n  border-radius: var(--ae-border-radius);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n}\n","controller":"class Controll {\n  async init() {\n    this.FORMS = {\n      Dashboard: '7be5f2c5-206b-4ab6-9d4d-c4834baf8e32',\n    }\n\n    locals.dashboard = null\n    locals.dashboard = await Aeppic.findOne(`p:${params.companyId} f.id:${this.FORMS.Dashboard}`)\n  }\n}\n "},"locks":[],"created":{"at":"2020-08-10T15:15:47+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-10-11T14:07:22+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1633961242117,"ct":1597072547025,"a_depth":3,"a":["apps","fc1a4a52-200d-473b-bd8a-29818356064d","a24e129a-47ca-4348-8ded-d3ba57446daa"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"2c8b15ba-8fed-44fd-89d1-04f859b4ee33","v":"initial","p":"65de949e-5426-41c2-a86c-97c74512280d","f":{"id":"layout-form","v":"4bad04bdaa666934","text":"Layout"},"data":{"name":"Sub Component Ref Layout","applies":"","packages":[],"template":"<div  v-if=\"locals.document\">\r\n  <div @click.prevent.stop=\"Aeppic.navigateTo(document)\"  class=\"_CSS-title _CSS-line\" style=\"cursor:pointer\">\r\n    <ae-design style=\"flex:1\" name=\"title\" :document=\"locals.document\" ></ae-design>\r\n    <span v-if=\"locals.document.data.notice\">{{locals.document.data.notice}}</span>   \r\n    <ae-design v-if=\"locals.document.data.hasSerialNumbers\" name=\"serial-numbers-check\" :document=\"locals.document\" ></ae-design>\r\n    <span v-else>\r\n      <ae-icon title=\"No serial number required. Documentation valid.\" class=\"fa fa-check\"></ae-icon>\r\n    </span>\r\n  </div> \r\n  <ae-design v-if=\"locals.document.data.hasSerialNumbers\" name=\"serial-numbers\" :document=\"locals.document\" ></ae-design>\r\n</div>","css":"._CSS {\r\n  margin-bottom: 16px;\r\n}\r\n\r\n._CSS-title {\r\n  // font-weight: bold;\r\n  border-bottom: 1px solid lightgray;\r\n}\r\n\r\n._CSS-line {\r\n  display: flex;\r\n}","controller":"async init() {\r\n  locals.document = await Aeppic.get(params.documentId)\r\n}"},"locks":[],"created":{"at":"2021-11-02T09:38:40+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-11-02T09:38:40+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1635845920527,"ct":1635845920517,"a_depth":3,"a":["apps","781ff5de-69db-49dc-99f0-f328b308cd7d","65de949e-5426-41c2-a86c-97c74512280d"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_depth":2,"a_forms":["system-folder-form","folder"],"created":{"at":"2017-09-25T13:27:39+02:00","by":"","client":"0b09ce2b-728f-4187-bfc4-ac908c4124a4","from":""},"ct":1674227272321,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.STORAGE_KEYS = {\n      tabIndex: 'tabIndex',\n    }\n\n    locals.longMode = false\n    locals.tabSections = []\n    locals.hiddenTabSections = []\n\n    locals.showTabIndex = 0\n\n    if(params.form && !params.noSubsections) {\n      for (const section of params.form._info.sections[0].directSubsections) {\n        if (section.type !== 'VIRTUAL'){\n          locals.tabSections.push(section)\n        }\n      }\n    }\n\n    watchParam('fieldConditions', ()=>this.determineHiddenTabSections(), {deep:true})\n\n    this.restoreTabIndex()\n  }\n\n\n  determineHiddenTabSections() {\n    locals.hiddenTabSections.splice(0, locals.hiddenTabSections.length)\n    \n    if (!params.fieldConditions || !params.form) {  \n      return\n    }\n\n    for (let section of locals.tabSections){\n      if (params.form.shouldApplyStyleToSection(section, 'hidden', params.fieldConditions) ){\n        locals.hiddenTabSections.push(section)\n      }\n    }\n\n    \n    let searchDirection = -1\n    while (this.isSectionHidden(locals.tabSections[locals.showTabIndex])){\n      if(locals.showTabIndex === 0 )\n        searchDirection = 1;\n      \n      locals.showTabIndex += searchDirection\n\n      if(locals.showTabIndex >= locals.tabSections.length){\n        locals.showTabIndex = -1\n        break\n      }\n\n    }\n  }\n\n  isSectionHidden(section){\n    return locals.hiddenTabSections.indexOf(section) >= 0\n  }\n\n  async keydownAlt(event) {\n    console.log(event)\n    // FIMXE: this breaks writing brakets on MacOS\n    // return\n    if (!event || !event.key || !event.altKey) {\n      return\n    }\n  \n    const digitPressed = Number(event.key)\n    if (Number.isNaN(digitPressed) || digitPressed < 0 || digitPressed > params.form._info.sections[0].directSubsections.length) {\n      return\n    }\n\n    event.preventDefault()\n    locals.showTabIndex = digitPressed - 1 // array is zero indexed, keycode start at 1\n\n    await Aeppic.nextRenderPass()\n\n    const tab = $refs.tabs[locals.showTabIndex]\n    tab.focus()\n  }\n\n  get showTabs(){\n    return locals.longMode === false && locals.tabSections.length > 0\n  }\n\n  \n  restoreTabIndex() {\n    const isHistoricNavigation = Aeppic.Root.params && Aeppic.Root.params.history && Aeppic.Root.params.history.historic\n\n    params.debug && console.log('restoreTabIndex', isHistoricNavigation, this._generateStoragePrefix())\n\n    if (!isHistoricNavigation) {\n      return\n    }\n\n    const tabIndex = Aeppic.SessionStorage.getValue(this._generateStoragePrefix()) \n\n    locals.showTabIndex = tabIndex || 0\n  }\n\n  setTabIndex(index) {\n    locals.showTabIndex = index\n\n    Aeppic.SessionStorage.setValue(this._generateStoragePrefix(), index)\n  }\n\n  _generateStoragePrefix() {\n    const timestamp = Aeppic.Root.params.history.timestamp\n\n    return `bp-pref__${this.STORAGE_KEYS.tabIndex}@layout=${layout.id}@document=${params.document.id}@form=${params.document.f.id}@time=${timestamp}`\n  }\n} ","css":"._CSS-empty {\r\n  flex:1;\r\n  min-width: 45px;\r\n  border-bottom: 1px solid var(--ae-ui-element-border-color, #aaa);\r\n} \r\n\r\n._CSS-tabs-header {\r\n  position:relative;\r\n  z-index:0;\r\n  white-space: nowrap;\r\n  overflow-y: none;\r\n  overflow-x: auto;\r\n  width:100%;\r\n  display: flex;\r\n  align-items: stretch;\r\n  justify-content: flex-start;\r\n}\r\n\r\n.ae-col.ae-tabs {\r\n  opacity: 1;\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  width: 100%;\r\n}\r\n\r\n\r\n.ae-tab__label {\r\n  display: inline-block;\r\n  cursor: pointer;\r\n  padding: 12px 24px;  \r\n  background: transparent;\r\n  border-top: 1.6px solid transparent;\r\n  border-left: 1px solid transparent;\r\n  border-right: 1px solid transparent;\r\n  margin-right: -1px;\r\n  /* margin-left: -1px; */\r\n  border-bottom: 1px solid var(--ae-ui-element-border-color, #aaa);\r\n  transition: all 0.05s ease-in-out;\r\n  font-weight: bold;\r\n  color: var(--ae-foreground-l3);\r\n}\r\n\r\n.ae-tab__label:focus {\r\n  outline:none;\r\n}\r\n\r\n.ae-tab__label--active {\r\n  border-top-color: var(--ae-primary, #aaa);\r\n  border-left-color: var(--ae-ui-element-border-color, #aaa);\r\n  border-right-color: var(--ae-ui-element-border-color, #aaa);\r\n  border-bottom-color: var(--ae-background-d1, #fafafa);\r\n  color: var(--ae-foreground-l2);\r\n  background: var(--ae-background-d2, #fafafa);\r\n  position:relative;\r\n  z-index:1;\r\n}\r\n\r\n\r\n.ae-tab__label--active::after {\r\n  content:'';\r\n  position: absolute;\r\n  bottom:0;\r\n  left:0;\r\n  right:0;\r\n}\r\n\r\n.ae-tab__label:hover {\r\n  background: var(--ae-background-d2, rgba(238,238,238,0.8));\r\n}\r\n\r\n.ae-tab__content {\r\n  position: relative;  \r\n  width: 100%;\r\n  \r\n  padding-top: 8px;   \r\n}\r\n\r\n._CSS ._CSS-tab-mode-off h1:first-of-type {\r\n  margin-top: 5px;\r\n}\r\n\r\n\r\n/* The switch - the box around the slider */\r\n._CSS-switch {\r\n  position: relative;\r\n  display: inline-block;\r\n  width: 30px;\r\n  height: 17px;\r\n}\r\n\r\n/* Hide default HTML checkbox */\r\n._CSS-switch input {display:none;}\r\n\r\n/* The slider */\r\n._CSS-slider {\r\n  position: absolute;\r\n  cursor: pointer;\r\n  top: 0;\r\n  left: 0;\r\n  right: 0;\r\n  bottom: 0;\r\n  background-color: var(--ae-background-d4, #777);\r\n  -webkit-transition: .4s;\r\n  transition: .4s;\r\n}\r\n\r\n._CSS-slider:before {\r\n  position: absolute;\r\n  content: \"\";\r\n  height: 13px;\r\n  width: 13px;\r\n  left: 2px;\r\n  bottom: 2px;\r\n  background-color: var(--ae-background, #fff);\r\n  -webkit-transition: .4s;\r\n  transition: .4s;\r\n}\r\n\r\ninput:checked + ._CSS-slider {\r\n  background-color: var(--ae-background-d3, #777);\r\n}\r\n\r\ninput:focus + ._CSS-slider {\r\n  box-shadow: 0 0 1px #2196F3;\r\n}\r\n\r\ninput:checked + ._CSS-slider:before {\r\n  -webkit-transform: translateX(13px);\r\n  -ms-transform: translateX(13px);\r\n  transform: translateX(13px);\r\n}\r\n\r\n/* Rounded sliders */\r\n._CSS-slider.round {\r\n  border-radius: 17px;\r\n}\r\n\r\n._CSS-slider.round:before {\r\n  border-radius: 50%;\r\n}\r\n\r\n/* needs to go somewhere else: */\r\n.ae-control-container {\r\n  padding: .5rem;\r\n  display: flex;\r\n  flex-direction: column;\r\n  justify-content: flex-end;\r\n  /* overflow:hidden; */\r\n  \r\n}\r\n\r\n.ae-control-container-inline{\r\n  display: inline-block\r\n}\r\n\r\n.ae-control-container-inline input{\r\n    background: white;\r\n    /* padding: var(--bp-input-content-padding); */\r\n    border: solid var(--ae-foreground-l2);\r\n    border-width: 0 0 1px 0;\r\n    border-color: rgba(0,0,0,0.2);\r\n    text-align: center;\r\n}\r\n\r\n ","name":"Tabbed Form Layout","packages":[],"template":"<!-- {{ params.document?.editVersion }}\n{{ params.document?.revisions }} -->\n<div class=\"ae-expandable-group-scope\" xstyle=\"height:100%\">\n  <!-- has tabs --> \n  <template v-if=\"controller.showTabs\">\n    <!-- section level 0 -->\n    <ae-form-section :form=\"params.form\"  :field-conditions=\"params.fieldConditions\" :document=\"params.document\"  :readonly=\"params.readonly\"  style=\"padding:0 8px\" :include-subsections=\"false\">\n    </ae-form-section>\n    <!-- level 1 sections as tabs -->\n    <div class=\"_CSS-tabs\">\n      <div class=\"ae-col ae-tabs\" @keydown.alt.capture=\"controller.keydownAlt($event)\">\n        <div class=\"_CSS-tabs-header ae-scrollbars--subtle\">\n          <label v-for=\"(subSection, sectionIndex) in locals.tabSections\" ref=\"tabs\" class=\"ae-tab__label ae-noselect\" :for=\"id('tab-' + sectionIndex)\" aria-hidden=\"true\" @click=\"controller.setTabIndex(sectionIndex)\" :class=\"{ 'ae-tab__label--active': sectionIndex === locals.showTabIndex }\" :style=\"{display: (controller.isSectionHidden(subSection)? 'none' : 'block')}\" tabindex=\"-1\" :key=\"sectionIndex\">{{ subSection.title }}</label>\n          <div class=\"_CSS-empty\" style=\"position:relative\">\n            <button style=\"position:absolute; top:7px; right: 0px\" class=\"ae-button\" @click.stop=\"locals.longMode = !locals.longMode\" title=\"Lang-Lesemodus aktivieren\">\n              <ae-icon v-if=\"locals.longMode\" class=\"fa fa-toggle-on\"></ae-icon>\n              <ae-icon v-else class=\"fa fa-toggle-off\"></ae-icon>\n            </button>\n            <!-- <div style=\"position:absolute; bottom:10px; right: 0px\" title=\"Switch to long-mode\" >\n              <label class=\"_CSS-switch\">\n                <input type=\"checkbox\" v-model=\"locals.longMode\">\n                <span class=\"_CSS-slider\"></span>\n              </label>\n            </div> -->\n          </div>\n        </div>\n        <!-- NOTE: (2020-08-06): tabs were v-shown'n here before, but using v-if for performance reasons now -->\n        <div v-for=\"(subSection, sectionIndex) in locals.tabSections\" :id=\"id('tab-' + sectionIndex)\" ref=\"content\" class=\"ae-tab__content\" v-if=\"sectionIndex === locals.showTabIndex\" :key=\"sectionIndex\">\n          <ae-form-section  :key=\"sectionIndex + '_section'\" xtabindex=\"0\" :form=\"params.form\" :document=\"params.document\" :section=\"subSection\" :readonly=\"params.readonly\" style=\"padding:0 8px\"\n            :include-subsections=\"true\" :render-title=\"false\" :field-conditions=\"params.fieldConditions\"></ae-form-section>\n        </div>        \n      </div>\n    </div>  \n  </template>\n\n  <!-- has tabs but tabMode is off -->\n  <template v-else-if=\"locals.tabSections.length > 0\">\n    <!-- section level 0 -->\n    <ae-form-section :form=\"params.form\"  :field-conditions=\"params.fieldConditions\" :document=\"params.document\"  :readonly=\"params.readonly\"  style=\"padding:0 8px\" :include-subsections=\"false\">\n    </ae-form-section>\n    <!-- level 1 sections consecutively -->\n    <div style=\"position:relative\">\n      <ae-form-section v-for=\"subSection in locals.tabSections\" :form=\"params.form\"  :field-conditions=\"params.fieldConditions\" :document=\"params.document\" :section=\"subSection\" :readonly=\"params.readonly\"  style=\"padding:0 8px\" :include-subsections=\"true\" class=\"_CSS-tab-mode-off\" :key=\"subSection.index\" ></ae-form-section>\n        <button style=\"position:absolute; top:0; right:0\" class=\"ae-button\" @click.stop=\"locals.longMode = !locals.longMode\" title=\"Tabs-Ansicht aktivieren\">\n          <ae-icon v-if=\"locals.longMode\" class=\"fa fa-toggle-on\"></ae-icon>\n          <ae-icon v-else class=\"fa fa-toggle-off\"></ae-icon>\n        </button>\n      <!-- <div style=\"position:absolute; top:10px; right: 8px\" title=\"Switch to tab-mode\">\n        <label class=\"_CSS-switch\">\n          <input type=\"checkbox\" v-model=\"locals.longMode\">\n          <span class=\"_CSS-slider\"></span>\n        </label>\n      </div> -->\n    </div>\n  </template>\n\n  <!-- has no tabs -->\n  <ae-form-section v-else :form=\"params.form\"  :field-conditions=\"params.fieldConditions\" :document=\"params.document\"  :readonly=\"params.readonly\"  style=\"padding:0 8px\" :include-subsections=\"true\"></ae-form-section>\n  \n</div>\n\n\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"a34ed21c-7246-45ae-9f9c-9e6148ad92cf","inheritedLocks":[null,null,null],"locks":[],"modified":{"at":"2026-05-12T09:28:41+00:00","backedBy":"","by":"47325375-27fb-4303-8bf5-9438a0524219","client":"server","from":"","impersonatedBy":""},"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","previous":{"v":"4a60c9a8cf71d452"},"stamps":[],"t":1778578121493,"v":"0bac654548b55e91"},{"id":"8c5b1721-c52b-46b0-adad-cad0d2820c7a","v":"fd581291d3768dd5","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Tabbed Layout","applies":"","packages":[],"template":"<div class=\"ae-col\">\n\t<div class=\"ae-row _CSS ae-tabs\">\n\t\t<template v-for=\"(designName, index) in locals.designs\" class=\"_CSS__tab\">\n      <label class=\"ae-col ae-tab__label\" aria-hidden=\"true\" @click=\"locals.tabIndex = index\" :class=\"{ 'ae-tab__label--active': index === locals.tabIndex }\">{{ locals.headers && locals.headers[index] || designName }}</label>\n      <ae-design :document=\"params.document\" :name=\"designName\" class=\"ae-tab__content _CSS__tab-body\" v-show=\"locals.tabIndex === index\"></ae-design>\n\t\t</template>\n\t</div>\n</div>","css":"","controller":"class Controller {\n  init() {\n    locals.tabIndex = 0\n    locals.designs = params.designs.split(',')\n    locals.headers = params.headers.split(',')\n  }\n}"},"locks":[],"created":{"at":"2017-12-06T11:02:38+01:00","by":"","from":"","client":"8b96d91f-7c23-43ba-add0-e80f651e1d38"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481260,"ct":1621428481260,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"b19a64f58936ae0d","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"a":["apps","75c6f72a-08a2-44f4-a29c-86b58be26f96","ab120df9-69d9-43ca-9433-3704ec2598ab"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2021-06-23T14:08:58+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1624457338283,"data":{"applies":"","controller":"class Controller {\n  init() {\n    this.formattingStrings = {\n      month: 'yyyy-LL-01',\n      year: 'yyyy-01-01',\n      day: 'yyyy-LL-dd',\n    }\n\n    locals.controls = {\n      start: '',\n      end: '',\n      type: 'month'\n    }\n    const { dates, start, end } = this.parseDocumentDates(params.document.data.dateColumns)\n    locals.dates = dates\n    locals.controls.start = start\n    locals.controls.end = end\n\n    this.parseDocumentDates(params.document.data.dateColumns)\n  }\n\n  parseDocumentDates(value) {\n    const result = {\n      dates: [],\n      start: '',\n      end: '',\n    }\n\n    const parts = value.split(',')\n    \n    for (let i = 0; i < parts.length; i+= 1) {\n      const part = parts[i]\n\n      if (!part.startsWith(locals.controls.type)) {\n        console.warn(`Invalid part \"${part}\"`)\n        continue\n      }\n\n\n      const date = part.replace(/(month|year|day)\\./gi, '')\n      if (i === 0) {\n        result.start = date\n      } else if (i === parts.length - 1) {\n        result.end = date\n      }\n\n      result.dates.push(date)\n    }\n\n    return result\n  }\n\n  async update(value) {\n    const newValue = { ...locals.controls, ...value }\n\n    for (const key of ['start', 'end']) {\n      if (newValue[key]) {\n        newValue[key] = Aeppic.DateTime.fromISO(newValue[key]).toFormat(this.formattingStrings[locals.controls.type])\n      }\n    }\n\n    locals.controls = newValue\n    locals.dates = this.updateDates()\nconsole.log({ dates: locals.dates })\n    if (locals.dates.length) {\n      const datesString = locals.dates.map(date => `${locals.controls.type}.${date}`).join(',')\n      \n      // $emit('dates', datesString)\n\n      await this.updateTableDates(datesString)\n    }\n  }\n\n  updateDates() {\n    const dates = []\n\n    if (!locals.controls.start | !locals.controls.end) {\n      return dates\n    }\n\n    const start = Aeppic.DateTime.fromISO(locals.controls.start)\n    const end = Aeppic.DateTime.fromISO(locals.controls.end)\n\n    dates.push(start.toFormat(this.formattingStrings[locals.controls.type]))\n\n    let steppedDate = start\n    let run = true\n    while(run) {\n      steppedDate = steppedDate.plus({ [locals.controls.type]: 1 })\n\n      if (steppedDate.diff(end, 'days').toObject().days > 0) {\n        run = false\n        break\n      }\n\n      const date = steppedDate.toFormat(this.formattingStrings[locals.controls.type])\n      dates.push(date)\n    }\n\n    return dates\n  }\n\n\n  async updateTableDates(datesString) {\n    const editable = await Aeppic.edit(params.document)\n    editable.data.dateColumns = datesString\n    Aeppic.save(editable)\n  }\n}\n ","css":"._CSS-container {\n  display: flex;\n}\n\n._CSS-cell {\n  display: flex;\n  align-items: baseline;\n}\n\n._CSS-cell__label {\n  margin-right: var(--ae-space-2);\n}","name":"Table Date Control","packages":[],"template":"<div class=\"_CSS-container\">\n  <div class=\"ae-form-cell _CSS-cell\">\n    <label class=\"ae-form-cell__label _CSS-cell__label\">\n      von\n    </label>\n    <ae-layout layout-id=\"3e185751-e4f9-4493-b73d-3c99055d1b86\" :params=\"{ value: locals.controls.start }\" @input=\"controller.update({ start: $event })\"></ae-layout>\n  </div>\n\n  <div class=\"ae-form-cell _CSS-cell\">\n    <label class=\"ae-form-cell__label _CSS-cell__label\">\n      bis\n    </label>\n    <ae-layout layout-id=\"3e185751-e4f9-4493-b73d-3c99055d1b86\" :params=\"{ value: locals.controls.end }\" @input=\"controller.update({ end: $event })\"></ae-layout>\n  </div>\n</div>\n\n<!-- <div v-if=\"Aeppic.Account.data.allowDevMode\">\n\t{{locals.controls}} {{locals.dates}}\n</div> -->"},"f":{"id":"layout-form","text":"Layout","v":"aeefd024c2682948"},"id":"2a8a4535-b320-4fa1-b1e3-2b6f583c6540","inheritedLocks":[null,null,null,null],"locks":[],"meta":{"modified":{"at":"2024-11-21T14:17:13+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null}},"modified":{"at":"2023-04-20T11:05:14+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"ab120df9-69d9-43ca-9433-3704ec2598ab","previous":{"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","v":"6ecf5c671ccdd06f"},"stamps":[],"t":1732198633423,"v":"35994ba08533113c"},{"id":"44861e3c-ebe8-4ed2-9a93-0b16e5e9e365","v":"0554309b42b89dab","previous":{"v":"initial"},"p":"3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"},"data":{"name":"Table Print Layout","applies":"","packages":[],"template":"\n<ae-design :document=\"params.pageDocument\" name=\"page\" class=\"_CSS-page--print\" :param-print-mode=\"params.queryParams && 'print' in params.queryParams\"></ae-design>","css":"._CSS-page--print {\n  min-height: 100%;\n}","controller":""},"locks":[],"created":{"at":"2020-10-22T14:52:46+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2022-03-23T15:32:42+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1648049562852,"ct":1603378366211,"a_depth":3,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"24a6c20a-ee6b-4255-9d6d-aea4130621b7","v":"initial","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"},"data":{"name":"table row with layouts (ENERGIEBERATER ONLY)","applies":"","packages":[],"template":"<div class=\"_CSS-row\">\n  <div class=\"_CSS-column\" v-for=\"(column, index) of params.columns\" :style=\"{ 'min-width': params.columnWidths[index], 'max-width': params.columnWidths[index] }\">\n    <template v-if=\"params.designs[index]\"> \n      <ae-layout  v-if=\"params.designs[index] === 'table:title-as-link'\"\n                  layout-id=\"5fb31ea4-c9f9-4008-a1bb-e493481af0c8\"\n                  :params=\"{ document: params.document.data.document, field: locals.columnData[index] }\"\n                  @selected=\"$emit('selected', params.document)\"\n      ></ae-layout>\n      <ae-layout  v-else-if=\"params.designs[index] === 'table:tasks'\"\n                  layout-id=\"3dd7a4f3-4623-4b3b-9e8d-aac00694c03c\"\n                  :params=\"{ field: locals.columnData[index] }\"\n      ></ae-layout>\n      <ae-layout  v-else-if=\"params.designs[index] === 'table:avatar--small'\"\n                  layout-id=\"67289d03-f2f2-46bc-a801-1fa3193ffaba\"\n                  :params=\"{  document: locals.columnData[index] }\"\n      ></ae-layout>\n      <ae-layout  v-else-if=\"params.designs[index] === 'table:ref'\"\n                  layout-id=\"be02e4d4-c8f3-4f13-9cae-94a975b2313c\"\n                  :params=\"{  document: locals.columnData[index] }\"\n      ></ae-layout>\n      <ae-layout  v-else-if=\"params.designs[index] === 'table:uploads'\"\n                  layout-id=\"be1ebb57-ff0c-46fb-9bd0-47b21517f11e\"\n                  :params=\"{ document: params.document, field: locals.columnData[index] }\"\n      ></ae-layout>\n      <ae-layout  v-else-if=\"params.designs[index] === 'table:tracked-time'\"\n                  layout-id=\"dfb282a5-652b-482a-be87-f74cd2686bc6\"\n                  :params=\"{ field : locals.columnData[index] }\"\n      ></ae-layout>\n\n      <template v-else>\n        {{ params.designs[index] }}\n      </template>\n\n\n    </template>\n    <template v-else>\n        {{ locals.columnData[index] }}\n    </template>\n  </div>\n</div>","css":"._CSS {\n  overflow: hidden;\n}\n\n._CSS-row {\n  height: 100%;\n  width: 100%;\n\n\n  xdisplay: flex;\n\n  page-break-inside: avoid;\n\n  padding: var(--ae-size-1) 0;\n}\n\n._CSS-column {\n  overflow: hidden;\n  flex: 1;\n  padding: var(--ae-space-1);\n\n\n\n\n\n\n  \n  display: inline-block;\n  height: 100%;\n} \n","controller":"class Controller {\n  init() {\n    // locals.key = params.document.id + params.document.v\n    locals.columnData = params.columns.map((columnName) => this.dataByColumnName(params.document, columnName))\n\n    watchParam('document', (newDocument) => {\n      // locals.key = newDocument.id + newDocument.v\n      locals.columnData = params.columns.map((columnName) => this.dataByColumnName(newDocument, columnName))\n    })\n  }\n\n  dataByColumnName(document, columnName) { \n    if (!columnName) {\n      return\n    }\n\n    return this.resolveField(document, columnName)\n  }\n\n  resolveField(obj, path) {\n    const parts = path.split('.')\n    let value = obj\n\n    for (const part of parts) {\n      if (value == null) {\n        if (part === 'raw') {\n          return value\n        }\n\n        return undefined\n      }\n\n      value = value[part]\n    }\n\n    if (value === obj) {\n      value = null\n    }\n\n    return value\n  }\n}"},"locks":[],"created":{"at":"2021-06-23T14:08:51+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-06-23T14:08:51+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1624457331638,"ct":1624457331638,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"be02e4d4-c8f3-4f13-9cae-94a975b2313c","v":"bedb220c8e72ede4","previous":{"v":"initial"},"p":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"},"data":{"name":"table:ref LAYOUT","applies":"","packages":[],"template":"<template v-if=\"locals.document\">\n  <span class=\"_CSS-text\" v-if=\"!controller.calculatedTitle\" :class=\"[params.classForUnnamed]\" :title=\"locals.document.id\">\n  <ae-design-selector style=\"font-style:italic;\" name=\"title\" :document-id=\"locals.document.f.id\"></ae-design-selector>\n</span>\n<span class=\"_CSS-text\" v-else :title=\"controller.calculatedTitle\">\n  {{ controller.calculatedTitle }}\n</span>\n</template>","css":"._CSS,\n._CSS-text {\n  overflow: hidden; \n  text-overflow: ellipsis;\n  white-space: nowrap;\n}","controller":"class Controller {\n  async init() {\n    locals.document = null\n\n    locals.document = await Aeppic.get(params.document)\n\n    watchParam('document', async (newDocument) => {\n      if (newDocument.id) {\n        locals.document = await Aeppic.get(newDocument)\n      } else {\n        locals.document = null\n      }\n    })\n  }\n\n  get calculatedTitle() {\n    const name = locals.document.data.namespace ? `${locals.document.data.namespace}:${locals.document.data.name}` : locals.document.data.name\n    const label = locals.document.data.label\n\n    const title = params.preferLabel ? label || name : name || label\n\n    return title && title.trim() || ''\n  } \n}"},"locks":[],"created":{"at":"2020-09-17T11:55:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-07-20T13:44:52+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1626788692337,"ct":1600343721330,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","2add3026-2869-40ea-9e6d-dcb14ef0ba19"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"3dd7a4f3-4623-4b3b-9e8d-aac00694c03c","v":"initial","p":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"},"data":{"name":"table:tasks LAYOUT","applies":"","packages":[],"template":"  <div v-if=\"locals.progress\" class=\"_CSS-progress\" style=\"position:relative; display:flex;\">\n    <div v-if=\"locals.progress.closed\" title=\"Erledigte\" class=\"_CSS-progress__value _CSS-progress__closed\" :style=\"{ width: locals.progress.closedPercentile + '%' }\">\n      <span>\n      {{ locals.progress.closed }}\n      </span>\n    </div>\n    <div v-if=\"locals.progress.open\" title=\"Offene\" class=\"_CSS-progress__value _CSS-progress__open\" :style=\"{ width: locals.progress.openPercentile + '%' }\">\n      <span>\n      {{ locals.progress.open }}\n      </span>\n    </div>\n  </div>\n</div>\n","css":"._CSS {\n  max-width: 200px;\n  margin: 0 0.5rem;\n}\n\n._CSS-progress {\n  display: flex;\n  position: relative;\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-progress__title {\n  display: flex;\n  justify-content: center;\n  font-size: 14px;\n  height: 20px;\n  color: var(--ae-foreground-l2);\n}\n\n._CSS-progress__value {\n  height: 8px;\n\n  display: flex;\n  justify-content: center;\n  color: var(--ae-foreground-l1);\n}\n\n._CSS-progress > ._CSS-progress__value:first-child {\n  border-top-left-radius: var(--ae-border-radius);\n  border-bottom-left-radius: var(--ae-border-radius);\n}\n\n._CSS-progress > ._CSS-progress__value:last-child {\n  border-top-right-radius: var(--ae-border-radius);\n  border-bottom-right-radius: var(--ae-border-radius);\n}\n\n._CSS-progress__value > * {\n  padding: 7px;\n}\n\n._CSS-progress__overdue {\n  background: rgb(255, 122, 109);\n}\n\n\n._CSS-progress__open {\n  background: rgb(182, 182, 182);\n}\n\n._CSS-progress__closed {\n  background: rgba(9, 113, 178, 0.708);\n  /* background: rgb(129, 203, 0); */\n}\n","controller":"class Controller {\n  init() {\n    locals.progress = params.field ? JSON.parse(params.field) : null\n\n    watchParam('field', (newField) => {\n      locals.progress = newField ? JSON.parse(newField) : null\n    })\n  }\n}\n"},"locks":[],"created":{"at":"2020-09-17T11:55:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-09-17T11:55:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1600343721436,"ct":1600343721436,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","2add3026-2869-40ea-9e6d-dcb14ef0ba19"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"5fb31ea4-c9f9-4008-a1bb-e493481af0c8","v":"initial","p":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"},"data":{"name":"table:title-as-link LAYOUT","applies":"","packages":[],"template":"<!-- <a v-if=\"controller.allowLinkNavigation\" class=\"ae-link\" :href=\"params.document.id\" @click.stop=\"Aeppic.onLinkClicked($event, params.document.id)\" @click.right.stop> -->\n<a class=\"ae-link\" :href=\"params.document.id\" @click.stop.prevent=\"$emit('selected', params.field)\" @click.right.stop>\n  {{ params.field }}\n  <!-- <ae-layout layout-id=\"be02e4d4-c8f3-4f13-9cae-94a975b2313c\" :params=\"{ document: params.field }\"></ae-layout> -->\n  <!-- <ae-design-selector name=\"title\" :params=\"params\" v-on=\"$listeners\" :document-id=\"params.field.id\"></ae-design-selector> -->\n</a>\n<!-- <ae-design-selector v-else name=\"title\" :params=\"params\" v-on=\"$listeners\" :document=\"params.document\"></ae-design-selector> -->\n\n","css":"._CSS,\n._CSS-text {\n  overflow: hidden; \n  text-overflow: ellipsis;\n  white-space: nowrap;\n}","controller":"// class Controller {\n//   async init() {\n//     this.FORMS = {\n//       Unternehmen: 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df'\n//     }\n\n//     const document = await Aeppic.get(params.field)\n//     locals.allowLinkNavigation = document.a_forms[0] === this.FORMS.Unternehmen\n//   }\n// }\n"},"locks":[],"created":{"at":"2020-09-17T11:55:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-09-17T11:55:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1600343721506,"ct":1600343721506,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","2add3026-2869-40ea-9e6d-dcb14ef0ba19"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"dfb282a5-652b-482a-be87-f74cd2686bc6","v":"initial","p":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"},"data":{"name":"table:tracked-time LAYOUT","applies":"","packages":[],"template":"<template v-if=\"locals.duration.millis\">\n  <ae-icon class=\"fa fa-hourglass-end\"></ae-icon>\n  {{ locals.duration.readable  }}\n</template>","css":"._CSS {\n  max-width: 200px;\n  margin: 0 0.5rem;\n}\n\n._CSS-progress {\n  display: flex;\n  position: relative;\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-progress__title {\n  display: flex;\n  justify-content: center;\n  font-size: 14px;\n  height: 20px;\n  color: var(--ae-foreground-l2);\n}\n\n._CSS-progress__value {\n  height: 8px;\n\n  display: flex;\n  justify-content: center;\n  color: var(--ae-foreground-l1);\n}\n\n._CSS-progress > ._CSS-progress__value:first-child {\n  border-top-left-radius: var(--ae-border-radius);\n  border-bottom-left-radius: var(--ae-border-radius);\n}\n\n._CSS-progress > ._CSS-progress__value:last-child {\n  border-top-right-radius: var(--ae-border-radius);\n  border-bottom-right-radius: var(--ae-border-radius);\n}\n\n._CSS-progress__value > * {\n  padding: 7px;\n}\n\n._CSS-progress__overdue {\n  background: rgb(255, 122, 109);\n}\n\n\n._CSS-progress__open {\n  background: rgb(182, 182, 182);\n}\n\n._CSS-progress__closed {\n  background: rgba(9, 113, 178, 0.708);\n  /* background: rgb(129, 203, 0); */\n}\n","controller":"class Controller {\n  init() {\n    this.update(params.field)\n\n    watchParam('field', (newField) => {\n      this.update(newField)\n    })\n\n  }\n\n  update(field) {\n    locals.duration = {\n      millis: field,\n      readable: field === 0 ? '-' : Aeppic.DateTimeDuration.fromMillis(field).toFormat(\"hh'h' mm 'm'\")\n    }\n  }\n}\n "},"locks":[],"created":{"at":"2020-09-17T11:55:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-09-17T11:55:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1600343721666,"ct":1600343721666,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","2add3026-2869-40ea-9e6d-dcb14ef0ba19"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"be1ebb57-ff0c-46fb-9bd0-47b21517f11e","v":"537ff91b8228244e","previous":{"v":"initial"},"p":"2add3026-2869-40ea-9e6d-dcb14ef0ba19","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"},"data":{"name":"table:uploads LAYOUT","applies":"","packages":[],"template":"<template v-if=\"locals.formulare\">\n  {{ locals.formulare }} <ae-icon class=\"fa fa-envelope\"></ae-icon> \n</template>\n<template v-if=\"locals.uploads\">\n  {{ locals.uploads }} <ae-icon class=\"fa fa-file-alt\"></ae-icon>\n</template>\n","css":"._CSS {\n  max-width: 200px;\n}\n\n._CSS-progress {\n  display: flex;\n  position: relative;\n}\n\n._CSS-progress__title {\n  display: flex;\n  justify-content: center;\n  font-size: 14px;\n  height: 20px;\n  color: var(--ae-foreground-l2);\n}\n\n._CSS-progress__value {\n  height: 8px;\n\n  display: flex;\n  justify-content: center;\n  color: var(--ae-foreground-l1);\n}\n\n._CSS-progress__value > * {\n  padding: 7px;\n}\n\n._CSS-progress__overdue {\n  background: rgb(255, 122, 109);\n}\n\n\n._CSS-progress__open {\n  background: rgb(182, 182, 182);\n}\n\n._CSS-progress__closed {\n  background: rgba(9, 113, 178, 0.708);\n  /* background: rgb(129, 203, 0); */\n}\n","controller":"class Controller {\n  init() {\n    this.update(params.field)\n\n    watchParam('field', (newField) => {\n      this.update(newField)\n    })\n\n  }\n\n  update(fieldParam) {\n    if (!fieldParam) {\n      locals.formulare = null\n      locals.uploads = null\n      return\n    }\n    \n    const field = JSON.parse(fieldParam)\n    \n    locals.formulare = field.mails\n    locals.uploads = field.uploads\n  }\n}\n\n"},"locks":[],"created":{"at":"2020-08-06T08:37:39+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2020-08-06T10:32:54+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1596709974562,"ct":1596703059736,"a_depth":4,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","f254ce25-42f1-4333-8ee7-23554bf746c1","2add3026-2869-40ea-9e6d-dcb14ef0ba19"],"a_forms":["folder","application-form","form-folder","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"f8e70f7d-1d28-4c05-98b5-cd0614b8d9c3","v":"1d2bf2325248d6d4","previous":{"v":"4ec5df27461574b2"},"p":"0c8ef865-fd1b-40bd-b665-97ad067fd10f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Tasks","applies":"","packages":[],"template":"<h3 class=\"_CSS_header\"><ae-icon class=\"fa fa-tasks _CSS-icon\"></ae-icon>&nbsp;<span style=\"flex:1\">Heutige Aufgaben</span></h3>\n\n<template v-if=\"locals.tasks.length\">\n  <ae-design v-for=\"task of locals.tasks\" :key=\"task.id\" class=\"_CSS-task\" name=\"card--sidebar,title\" :document=\"task\"  @click.native=\"Aeppic.navigateTo(task.id)\"></ae-design>\n</template>\n<span v-else>\n  Keine vorgesehen.\n</span>\n\n<!-- <template v-if=\"locals.boardTasks.length\">\n  <h3 class=\"_CSS_header\"><ae-icon class=\"fa fa-tasks _CSS-icon\"></ae-icon>&nbsp;<span style=\"flex:1\">Scrum Board Aufgaben</span></h3>\n  <ae-design v-for=\"task of locals.boardTasks\" :key=\"task.id\" v-if=\"!task.data.erledigt\" class=\"_CSS-task\" name=\"card--sidebar,title\" :document=\"task\"  @click.native=\"Aeppic.navigateTo(task.id)\"></ae-design>\n  <ae-design v-for=\"task of locals.boardTasks\" :key=\"task.id\" v-if=\"task.data.erledigt\"  class=\"_CSS-task\" name=\"card--sidebar,title\" :document=\"task\"  @click.native=\"Aeppic.navigateTo(task.id)\"></ae-design>\n</template> -->\n","css":"._CSS {\n  flex: 1;\n  display:flex;\n  flex-direction: column;\n}\n\n._CSS_header {\n  display: flex;\n  align-items:center;\n  color: var(--ae-primary);\n  font-weight: 600;\n}\n\n._CSS-icon {\n  min-width: 24px;\n  opacity: 1;\n  color: var(--ae-primary);\n}\n\n._CSS-task {\n  cursor: pointer;\n}","controller":"class Controller {\n  async init() {\n    locals.tasks = []\n    // locals.boardTasks = []\n\n    const subscribeOptions = {\n      size: 1000\n    }\n\n    const now = Aeppic.DateTime.local()\n    const startOfDay = now.startOf('day').toISO()\n    const endOfDay = now.endOf('day').toISO()\n\n    Aeppic.subscribe(`f.id:3d456c38-6282-416e-8c5e-7d20b0517a6e data.verantwortlich:${this._userId} data.bis:[now-1d/d TO now+2d/d]`, subscribeOptions, (documents) => {\n      locals.tasks = this._tasksForToday(documents)\n    })\n    // Aeppic.subscribe(`f.id:6157a32a-a989-4798-94d5-2674b1675919 data.verantwortlich:${this._userId}`, subscribeOptions, (documents) => locals.boardTasks = documents)\n\n    // const subscribeOptions = {\n    //   size: 1000\n    // }\n\n    // Aeppic.subscribe('f.id:3d456c38-6282-416e-8c5e-7d20b0517a6e', subscribeOptions, (documents) => {\n    //   locals.tasks = documents.filter((doc) => this.isIncluded(doc.data.verantwortlich))\n    // })\n    // Aeppic.subscribe('f.id:6157a32a-a989-4798-94d5-2674b1675919', subscribeOptions, (documents) => {\n    //   locals.boardTasks = documents.filter((doc) => this.isIncluded(doc.data.verantwortlich))\n    // })\n  }\n\n  get _userId() {\n    return Aeppic.ProfilePage ? Aeppic.ProfilePage.id : null\n  }\n\n  _tasksForToday(documents) {\n    const now = Aeppic.DateTime.local()\n\n    const dayStart = now.startOf('day')\n    const dayEnd = now.endOf('day')\n\n    const interval = Aeppic.DateTimeInterval.fromDateTimes(dayStart, dayEnd)\n    const tasks = documents.filter(t => interval.contains(Aeppic.DateTime.fromISO(t.data.bis)))\n\n    return tasks\n  }\n}\n"},"locks":[],"created":{"at":"2018-08-10T12:37:03+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2018-12-21T11:03:54+00:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1545390234987,"ct":1533904623396,"a_depth":4,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","6b892ddf-3264-4056-b191-166f4410d9fa","0c8ef865-fd1b-40bd-b665-97ad067fd10f"],"a_forms":["folder","application-form","folder","folder"],"inheritedLocks":[null,null,null,null,null],"stamps":[]},{"id":"07c76e84-e202-4b73-9d88-7efb5726f901","v":"11295587d22b8c9f","previous":{"v":"63146c105ab6ff7d"},"p":"a72b89db-1811-40ae-89fa-572eb9bcbe53","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"Termin Inline Layout","applies":"","packages":[],"template":"<div class=\"_CSS-actions\">\n  <button v-if=\"!params.readonly\" class=\"ae-button\" @click.stop=\"locals.edit = !locals.edit\">\n    <ae-icon v-if=\"locals.edit\" class=\"fad fa-save\"></ae-icon>\n    <ae-icon v-else class=\"fad fa-edit\"></ae-icon>\n  </button>\n  <i v-if=\"locals.edit\"> wird automatisch gespeichert </i>\n\n  <div style=\"flex:1;\"></div>\n\n  <button class=\"ae-button\" @click.stop=\"Aeppic.drillInto(locals.contextDocument, { mode: 'dialog' })\" title=\"Anzeigen\">\n    <ae-icon class=\"fa fa-expand-arrows-alt\"></ae-icon>\n  </button>\n\n  <button v-if=\"!params.readonly\" class=\"ae-button\" @click.stop=\"$emit('remove', params.documentId)\">\n    <ae-icon class=\"fa fa-times\"></ae-icon>\n  </button>\n</div>\n\n<ae-form :document=\"locals.contextDocument\" :readonly=\"!locals.edit\" :auto-save=\"true\" :xlayout-id=\"params.inlineForm || 'c9438122-73f2-41aa-b414-a0ea0491ef21'\"></ae-form>\n\n","css":"._CSS-actions {\n  display: flex;\n  justify-content: space-between;\n\n  border-bottom: var(--ae-border-width) solid var(--ae-border-color);\n}\n","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Kunde: '8fc08287-dbcc-4e41-9d5d-28e4cd828943'\n    }\n\n    locals.document = null\n    locals.contextDocument = null\n\n    locals.document = await Aeppic.get(params.documentId)\n\n    const customerFormIndex = locals.document?.a_forms.findIndex(aForm => aForm === this.FORMS.Kunde)\n\n    if (customerFormIndex !== -1) {\n      const customer = await Aeppic.get(locals.document.a[customerFormIndex])\n      // const contact = await Aeppic.get(customer.data.kontakt)\n      locals.contextDocument = customer\n    } else {\n      locals.contextDocument = await Aeppic.get(locals.document.p)\n    }\n  }\n}\n\n"},"locks":[],"created":{"at":"2021-11-12T10:51:20+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2021-12-01T15:51:32+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1638373892099,"ct":1636714279986,"a_depth":3,"a":["apps","d8c9a42b-e289-4c9a-97ea-801de8ab480a","a72b89db-1811-40ae-89fa-572eb9bcbe53"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["root-test-folder"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2026-07-14T13:22:09+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"ct":1784035329394,"data":{"applies":"","controller":"","css":"","name":"Test: Root Layout Override Marker","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<div :data-test=\"'layout' + '_' + layout.id\" style=\"padding:20px;\">Route override marker</div>"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"7c39cbbf-9998-40c0-8f63-9585c509255e","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2026-07-14T13:22:09+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"root-test-folder","stamps":[],"t":1784035329394,"v":"initial"},{"a":["root-test-folder"],"a_depth":1,"a_forms":["folder"],"created":{"at":"2026-07-14T13:22:31+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"ct":1784035351000,"data":{"applies":"","controller":"","css":"","name":"Test: Root Layout Override Wrapper","packages":[],"parameters":[],"parametersCardinalities":[],"parametersControls":[],"parametersDescriptions":[],"parametersTypes":[],"template":"<ae-layout layout-id=\"5913cb1e-9979-4eb7-84e8-488cdd658cbb\"\n           param-layout-id=\"7c39cbbf-9998-40c0-8f63-9585c509255e\"\n           :param-no-navigation=\"true\"></ae-layout>\n"},"f":{"id":"layout-form","text":"Layout","v":"009ca1eb13023717"},"id":"92d9b10e-28bb-47c1-aa78-4978f93dff55","inheritedLocks":[null,null],"locks":[],"modified":{"at":"2026-07-14T13:22:31+00:00","backedBy":"","by":"09763886-6748-4a56-8e0e-54a2293ee96b","client":"server","from":"","impersonatedBy":""},"p":"root-test-folder","stamps":[],"t":1784035351001,"v":"initial"},{"id":"4857f872-3b57-451b-b614-4d81614cdd4f","v":"initial","p":"35f2f1de-00c4-4d79-847b-e7d5360731d1","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Text Recognition","applies":"","packages":[],"template":"<input type=\"text\" :value=\"locals.text\" @update=\"controller.onUpdate($event)\">\n\n{{ locals.detections }}\n\n<div class=\"_CSS-container\">\n  <div class=\"_CSS-overlay\" ref=\"overlay\">\n    <!-- <ae-design name=\"title\" document-id=\"root\" style=\"display:inline;\"></ae-design> -->\n    {{locals.editable}}\n  </div>\n  <div class=\"_CSS-input\" wrap=\"soft\" contenteditable=\"true\" ref=\"editable\" spellcheck=\"false\"></div>\n</div>","css":"._CSS-editable {\n  background: var(--ae-background-300);\n  width: 200px;\n}\n\n._CSS-container {\n  position: relative;\n  xoverflow: auto;\n  border-bottom: 1px solid #E4E4E4;\n  background: lightgrey;\n  min-height: 120px;\n  min-width: 120px;\n  height: 100%;\n  width: 100%;\n}\n\n._CSS-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n\n  padding: 0;\n  margin: 0;\n  border: 0;\n  outline: none;\n\n  display: block;\n\n\n  xwhite-space: pre-wrap;\n  overflow-wrap: break-word;\n}\n\n._CSS-input {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n\n  border: 0;\n  background: transparent;\n  color: transparent;\n  caret-color: black;\n  outline: none;\n}","controller":"class Controller {\n  async init() {\n    locals.foo = 0\n    locals.text = 'Projektname p1 blaa p1'\n    locals.detections = []\n\n    // this.detect(locals.text)\n\n    locals.editable = 'foo bar'\n\n    await Aeppic.nextRenderPass()\n    this.observe()\n  }\n\n  observe() {\n    // const p = document.querySelector('p')\n    // const result = document.querySelector('div')\n    // const observer = new MutationObserver((mutationRecords) => {\n    // result.textContent = mutationRecords[0].target.data\n    // // result.textContent = p.textContent\n    // })\n    // observer.observe(p, {\n    // characterData: true,\n    // subtree: true,\n    // })\n\n    const observer = new MutationObserver((mutationRecords) => {\n      const text = mutationRecords[0].target.data\n      console.log(text)\n      locals.editable = text\n    })\n\n    const observerConfig = {\n      characterData: true,\n      subtree: true,\n    }\n\n    observer.observe($refs.editable, observerConfig)\n  }\n\n  onUpdate(value) {\n    locals.text = value\n\n    this.detect(value)\n  }\n\n  async detect(text) {\n    const detections = []\n\n    const matches = []\n\n    let match = null\n\n    const regExp = /p1/g\n\n    while((match = regExp.exec(text)) !== null) {\n      console.log(match)\n    }\n \n    console.log(matches)\n\n    locals.detections = detections\n  }\n\n\n  log(e){console.log(e)}\n}\n"},"locks":[],"created":{"at":"2020-05-08T08:52:49+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:52:49+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927969380,"ct":1588927969380,"a_depth":3,"a":["apps","b7897ae7-5276-43f0-90ce-8e3c5d3d6ff5","35f2f1de-00c4-4d79-847b-e7d5360731d1"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"cf3b721d-9825-40ba-8076-4e6cbaf164d1","v":"1f2896cf52c1014e","p":"85cd7d8f-35be-4092-a40c-274f50729126","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Time Tracking Buttons","applies":"","template":"<!-- {{ new Date() }} -->\n\n<template v-if=\"locals.canTrack\">\n  <div v-if=\"params.singleButton\" class=\"_CSS-split-button\">\n    <button :class=\"['ae-button', { '_CSS-button--active': controller.isRunning , '_CSS-action-button--overlay': params.overlay }]\" @click.stop=\"$refs.popup.show({ target: $event.currentTarget })\">\n      <ae-icon class=\"fa fa-stopwatch\"></ae-icon>\n    </button>\n\n    <button class=\"ae-button\"\n            style=\"max-width:150px;\"\n            v-if=\"controller.isRunning && controller.isGlobalTimer && locals.existingTimer.data.dokument.id\"\n            @click.stop=\"Aeppic.drillInto(locals.existingTimer.data.dokument.id)\"\n    >\n      <ae-design :document-id=\"locals.existingTimer.data.dokument.id\"\n                  name=\"title\"\n      ></ae-design>\n    </button>\n\n  </div>\n  <template v-else>\n      <button style=\"margin-left: var(--ae-space-3);\" :class=\"['ae-button', { '_CSS-button--active': controller.isRunning }]\" @click.stop=\"controller.show('timer');\" :title=\"controller.isRunning ? 'Timer stoppen' : 'Timer starten'\">\n        <ae-icon v-if=\"controller.isRunning\" class=\"fa fa-stop\"></ae-icon>\n        <ae-icon v-else class=\"fa fa-play-circle\"></ae-icon>\n      </button>\n  \n      <button class=\"ae-button\" @click.stop=\"controller.show('manual');\" title=\"Zeiteintrag hinzufügen\">\n        <ae-icon class=\"fa fa-hourglass-half\"></ae-icon>\n      </button>\n\n      <button class=\"ae-button\" v-if=\"!controller.isGlobalTimer\" @click.stop=\"controller.show('estimate');\" title=\"Schätzung bearbeiten\">\n        <ae-icon class=\"fa fa-clock\"></ae-icon>\n      </button>\n\n      <!-- <button class=\"ae-button\" @click=\"Aeppic.drillInto(Aeppic.ProfilePage)\" title=\"Meine Zeiten anzeigen\">\n        <ae-icon class=\"fa fa-user-clock\"></ae-icon>\n      </button> -->\n  </template>\n\n  <ae-popup  v-if=\"params.singleButton\" ref=\"popup\" placement=\"bottom-start\">\n    <template slot=\"popup\" slot-scope=\"popup\">\n      <div class=\"_CSS-popup\" :style=\"{ 'min-width': popup.baseWidth * 2 +'px' }\" @click.stop>\n        <div class=\"_CSS-list__entry\" @click.stop=\"popup.close(); controller.show('timer')\">\n          <template v-if=\"controller.isRunning\">\n            <ae-icon class=\"fa fa-stop\" style=\"margin-right: 1ch;\"></ae-icon>\n            Timer stoppen\n          </template>\n          <template v-else>\n            <ae-icon class=\"fa fa-play-circle\" style=\"margin-right: 1ch;\"></ae-icon>\n            Timer starten\n          </template>\n        </div>\n        <div class=\"_CSS-list__entry\" @click.stop=\"popup.close(); controller.show('manual')\">\n          <ae-icon class=\"fa fa-hourglass-half\" style=\"margin-right: 1ch;\"></ae-icon>\n          Zeiteintrag hinzufügen\n        </div>\n        <div class=\"_CSS-list__entry\" v-if=\"!controller.isGlobalTimer\" @click.stop=\"popup.close(); controller.show('estimate')\">\n          <ae-icon class=\"fa fa-clock\" style=\"margin-right: 1ch;\"></ae-icon>\n          Schätzung bearbeiten\n        </div>\n      </div>\n    </template>\n  </ae-popup> \n\n  <ae-dialog v-if=\"locals.dialogLayout\" ref=\"dialog\" @close=\"locals.dialogLayout = ''\" :full-screen=\"Aeppic.Device === 'Phone'\" :backdrop-close=\"false\" :dialog-size=\"{ width: 'var(--ae-dialog__width--medium)', height: 'var(--ae-dialog__height--medium)' }\">\n    <template v-slot:header=\"scope\">\n    <div class=\"_CSS-dialog__header\">\n      Timer\n      <button class=\"ae-button\" @click.stop=\"scope.close()\">\n        <ae-icon class=\"fa fa-times\"></ae-icon>\n      </button>\n    </div>\n  </template>\n    <template v-slot:body=\"scope\">\n      <ae-layout v-if=\"locals.dialogLayout === 'timer'\"\n                  layout-id=\"3de67155-ac4d-4e0a-9e04-4c80679a2d65\"\n                  :param-document=\"params.document\"\n                  :param-document-id=\"params.documentId\"\n                  :param-allowed-target-forms=\"locals.allowedForms\"\n                  @close=\"scope.close()\"\n      ></ae-layout>\n      <ae-layout v-if=\"locals.dialogLayout === 'manual'\"\n                  layout-id=\"4aa68c04-72ed-4f25-9b4f-7a6b6449f614\"\n                  :param-document=\"params.document\"\n                  :param-document-id=\"params.documentId\"\n                  :param-allowed-target-forms=\"locals.allowedForms\"\n                  @close=\"scope.close()\"\n      ></ae-layout>\n      <ae-layout v-if=\"locals.dialogLayout === 'estimate'\"\n                  layout-id=\"4642a086-2247-48c6-b155-5879b098503c\"\n                  :param-document=\"params.document\"\n                  :param-document-id=\"params.documentId\"\n                  @close=\"scope.close()\"\n      ></ae-layout>\n    </template>\n  </ae-dialog>\n\n</template>","css":"._CSS-popup {\n  padding: var(--ae-size-2) 0;\n  background-color: white;\n  box-shadow: var(--ae-shadow-2);\n  transition: opacity .15s, visibility 1s;\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-list__entry {\n  display: flex;\n  flex-flow: row;\n  align-items: center;\n  cursor: pointer;\n  padding: 0.5rem;\n}\n\n._CSS-list__entry:hover {\n  background: var(--ae-background-200);\n}\n\n\n._CSS-button--active {\n  color: var(--ae-accent-red) !important;\n}\n\n._CSS ._CSS-action-button--overlay {\n  color: var(--ae-ui-background);\n    filter: drop-shadow( 0px 0px 1px rgba(0,0,0,1) ) drop-shadow( 0px 0px 10px rgba(0,0,0,0.8));\n\n}\n\n._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n._CSS ._CSS-button--left {\n  margin-right: 0;\n}\n\n\n._CSS ._CSS-button--right {\n  margin-left: 0;\n}\n\n._CSS-split-button {\n  display: flex;\n}\n\n._CSS-split-button:hover {\n  background: var(--ae-background-100);\n  border-radius: var(--ae-border-radius);\n}","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Timer: '9b1d0329-8699-4382-bda3-8eae27e35d03'\n    }\n\n    locals.allowedForms = []\n    locals.dialogLayout = ''\n    locals.canTrack = false\n    locals.existingTimer = null\n\n    locals.allowedForms = await Aeppic.Preferences.getSetting('bizpin:timetracking:forms')\n    locals.canTrack = await this.canTrack()\n\n    if (!locals.canTrack) {\n      return\n    }\n\n    this.subscribeTimer()\n  }\n\n  async canTrack() {\n    if (!Aeppic.Account || Aeppic.Account.data.isGroupAccount) {\n      return false\n    }\n\n    const enabled = await Aeppic.Preferences.getSetting('bizpin:timetracking:enabled')\n    if (!enabled) {\n      return false\n    }\n\n    const document = params.document || await Aeppic.get(params.documentId)\n\n    if (document) {\n      const documentIsTrackable = locals.allowedForms.find(f => f.id === document.f.id)\n\n      if (!documentIsTrackable) {\n        return false\n      }\n\n      const canEdit = await Aeppic.canEdit(document)\n\n      if (!canEdit) {\n        return false\n      }\n    }\n\n    return true\n  }\n\n\n  get isRunning() {\n    return !!locals.existingTimer?.data.running\n  }\n\n  get isGlobalTimer() {\n    return params.document == null && params.documentId == null\n  }\n\n  async subscribeTimer() {\n    Aeppic.subscribe(`p:${Aeppic.Account.id} f.id:${this.FORMS.Timer}`, (documents) => {\n      const timer = documents[0]\n\n      locals.existingTimer = timer\n    })\n  }\n\n  async show(dialogLayout) {\n    locals.dialogLayout = dialogLayout\n\n    await Aeppic.nextRenderPass()\n    await Aeppic.nextRenderPass()\n\n    $refs.dialog.show()\n  }\n}","packages":[]},"locks":[],"created":{"at":"2019-09-13T09:20:43+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2023-12-20T15:43:49+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1740666014605,"ct":1740666014605,"a_depth":3,"a":["apps","0c440c7a-219d-4465-9cbe-2d0eff6ec7ad","85cd7d8f-35be-4092-a40c-274f50729126"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"previous":{"v":"05dfed29eb4e2f7f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"}},"meta":{"modified":{"at":"2025-02-27T14:20:14+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"id":"515f6042-13c7-4c82-849f-900f58f85f06","v":"977c01a7dd218739","previous":{"v":"initial"},"p":"0dc51e1e-2f6d-43d8-b782-1dec52ad67c3","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Toast Handler Layout","applies":"","packages":[],"template":"<button @click=\"controller.addDemo()\" style=\" pointer-events:auto;\">\n  ADD DEMO TOAST\n</button>\n \n\n<div class=\"_CSS-toasts\" >\n  <transition-group name=\"slide\" tag=\"div\">\n    <template v-if=\"locals.toasts.length\">\n        <div v-for=\"(toast, index) of locals.toasts\" class=\"_CSS-toast\" v-if=\"toast.data.target.id\" :key=\"toast._renderKey\">\n            <ae-design  :name=\"toast.data.design + ',toast'\" \n                        :param-toast=\"toast\"\n                        :document-id=\"toast.data.target.id\"\n                        @remove=\"controller.removeToast(index)\"\n            ></ae-design>\n        </div>\n    </template>\n  </transition-group>\n</div>\n\n","css":"._CSS {\n  position: absolute;\n  right: 0;\n  top: 60px;\n\n  pointer-events:none;\n  overflow: hidden;\n  max-height: 100vh;\n  width: 300px;\n}\n\n._CSS-toasts {\n  min-width: 300px;\n  max-width: 20vw;\n  min-height: 200px;\n  overflow: visible;\n  padding: 2px 4px;\n  display: flex;\n  flex-flow: column;\n  pointer-events:none;\n}\n\n._CSS-toast {\n  overflow: hidden;\n  pointer-events:auto;\n\n  box-shadow: var(--ae-shadow);\n}\n\n._CSS-toast ~ ._CSS-toast {\n  margin: 5px 0;\n}\n\n\n.slide-leave-active,\n.slide-enter-active {\n  transition: all 0.5s;\n}\n\n.slide-enter {\n  transform: translate(100%, 0);\n}\n.slide-leave-to {\n  transform: translate(100%, 0);\n}\n","controller":"class Controller {\n  async init() {\n    this.TOAST_DEFAULTS = {\n      close: true\n    }\n\n    locals.renderCounter = 0\n    locals.toasts = []\n    locals.show = false\n\n    $on('show-toast', (toast) => this.addToast(toast))\n\n    $emit('register-listener', 'show-toast')\n  }\n\n  addDemo() {\n    const demoToast = {\n      id: Aeppic.uuid(),\n      data: {\n        text: `Datei wurde hochgeladen`,\n        title: 'Upload',\n        target: {\n          id: '62a77b60-94ae-497b-8852-c3de0cb2d0dd'\n        },\n        design: 'toast-upload--finished',\n        timeout: 2000,\n        close: true,\n        color: 'green',\n        icon: 'fa fa-cloud-upload'\n      },\n      created: {\n        at: Aeppic.DateTime.local().toISO()\n      }\n    }\n\n    this.addToast(demoToast) \n  }\n\n  addToast(toast) {\n    console.log('addToast', toast)\n\n    if (!toast.id) {\n      console.error('Could not add toast: toast.id is null')\n      return\n    }\n\n    console.log('adding toast', toast)\n\n    const t = { \n      ...this.TOAST_DEFAULTS, \n      ...JSON.parse(JSON.stringify(toast))\n    }\n\n    toast._renderKey = this._getRenderKey(toast)\n\n    locals.toasts.push(toast)\n\n    if (locals.toasts.length > 10) {\n      locals.toasts = locals.toasts.slice(1)\n    }\n  }\n\n  _getRenderKey(toast) {\n    const key = `${toast.id}_${locals.renderCounter}`\n    locals.renderCounter += 1\n    return key\n  }\n\n  removeToast(index) {\n    locals.toasts.splice(index, 1)\n  }\n}"},"locks":[],"created":{"at":"2020-05-13T07:50:16+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2022-05-17T12:33:02+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1652790782004,"ct":1589356216786,"a_depth":3,"a":["apps","001579a1-8f0a-40e5-8072-72c3a27195a9","0dc51e1e-2f6d-43d8-b782-1dec52ad67c3"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"abaf389e-81ae-4a56-870c-f5c28fe7579f","v":"1d132b1345a4ca24","previous":{"v":"ae99b736a0dc9fdf"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"ba5d78cce2528b40","text":"Layout"},"data":{"name":"Top Application Bar","applies":"","template":"<div class=\"_CSS-actions\" :class=\"{ '_CSS-actions--print': params.showPrintLayout, '_CSS-actions--overlay': params.overlay }\">\r\n\t<div class=\"_CSS-actions-group\">\r\n    <template v-if=\"Aeppic.Device === 'Phone' || Aeppic.Device === 'Tablet'\">\r\n      <!-- <button class=\"_CSS-action-button bp-button-icon\" @click=\"Aeppic.navigateTo('root')\"><ae-icon class=\"fa fa-home\"></ae-icon></button>   -->\r\n      <button class=\"ae-button\" @click.stop=\"locals.showMenu = true\">\r\n        <ae-icon class=\"fa fa-bars\"></ae-icon>\r\n      </button>\r\n    </template>\r\n    <button v-if=\"controller.isElectron\" class=\"_CSS-action-button bp-button-icon\" @click=\"Aeppic.navigateBack()\"><ae-icon class=\"fa fa-arrow-left\"></ae-icon></button>\r\n    <ae-design \r\n      class=\"_CSS-page-title\"\r\n      name=\"page-title\"\r\n      :document-id=\"params.pageDocumentId\"\r\n      :param-hide-path=\"params.showPrintLayout\">\r\n    </ae-design>\r\n  </div>\r\n    <ae-layout\r\n      v-if=\"!params.showPrintLayout\"\r\n      layout-id=\"bb3563d9-6391-4472-ab69-97b836479ec7\"\r\n      class=\"_CSS-secondary-actions\"\r\n      :param-page-document-id=\"params.pageDocumentId\"\r\n      :param-sidebar-open=\"params.sidebarOpen\"\r\n      :param-company-id=\"params.companyId\"\r\n      :param-reload-notification-triggered=\"params.reloadNotificationTriggered\"\r\n      :param-overlay=\"params.overlay\"\r\n      @show-sidebar=\"$emit('show-sidebar', $event)\"\r\n      @hide-sidebar=\"$emit('hide-sidebar', $event)\"\r\n      @language-change=\"$emit('language-change')\"\r\n      @toggle-developer=\"$emit('toggle-developer', $event)\"\r\n      ref=\"buttons\"\r\n    ></ae-layout>\r\n</div>\r\n\r\n<div class=\"_CSS-phone-navigation\" v-show=\"locals.showMenu\">\r\n  <ae-design  class=\"_CSS-phone-navigation__design\"\r\n              name=\"navigation-vertical\"\r\n              :document-id=\"params.companyId\"\r\n              :param-force-expand=\"true\"\r\n              @navigated=\"locals.showMenu = false\"\r\n  ></ae-design>\r\n</div>","css":"._CSS {\r\n  /* background-color: var(--ae-background, var(--ae-background-d1, white)); */\r\n  color: var(--ae-foreground-l2); \r\n}\r\n\r\n._CSS-phone-navigation {\r\n  position: absolute;\r\n  top:0 ;\r\n  bottom: 0;\r\n  height: 100vh;\r\n}\r\n\r\n._CSS-phone-navigation__design {\r\n  height: 100%;\r\n}\r\n\r\n.ae-phone ._CSS, .ae-tablet ._CSS {\r\n  background-color: var(--ae-primary);\r\n  color: var(--ae-foreground-l1);\r\n}\r\n\r\n._CSS-page-title {\r\n  padding-left: var(--bp-page-content-padding);\r\n  /* font-size: 1.5em;\r\n  color: var(--ae-foreground-l1);\r\n  font-weight: bold; */\r\n}\r\n\r\n.ae-phone ._CSS-page-title {\r\n  color: var(--ae-theme-text-primary-on-primary);\r\n}\r\n \r\n._CSS-logo  {\r\n  padding:0;\r\n  margin:0;\r\n  height:24px;\r\n  overflow: hidden;\r\n} \r\n\r\n._CSS-logo svg {\r\n  z-index: 1;\r\n}\r\n \r\n._CSS-actions {\r\n  flex: 1;\r\n  display: grid;\r\n  grid-template-columns: min-content auto;\r\n  grid-template-rows: 76px;\r\n}\r\n\r\n._CSS-actions-group {\r\n  overflow: hidden;\r\n  white-space: nowrap;\r\n  text-overflow: ellipsis;\r\n\r\n  display: flex;\r\n  align-items: center;\r\n  align-content: center;\r\n  padding: 12px 0; \r\n}\r\n\r\n._CSS-actions ._CSS-action-button {\r\n  transition: scale 0.2s ease-in-out;\r\n  margin: 0 16px;\r\n  cursor: pointer;\r\n}\r\n\r\n.ae-large ._CSS-action-button--hide-if-large {\r\n  display: none;\r\n}\r\n\r\n._CSS-secondary-actions {\r\n  overflow: auto;\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  align-items: center;\r\n}\r\n\r\n._CSS-actions--overlay ._CSS-action-button {\r\n  color: var(--ae-primary-fg);\r\n  filter: drop-shadow( 0px 0px 1px rgba(0,0,0,1) ) drop-shadow( 0px 0px 10px rgba(0,0,0,0.8));\r\n}\r\n\r\n._CSS-action-button {\r\n  display:flex;\r\n  align-items: center;\r\n}\r\n\r\n._CSS-actions ._CSS-label-input, ._CSS-actions ._CSS-label-icon {\r\n  display: inline-block;\r\n}\r\n\r\n._CSS-header-heading {\r\n  display: block;\r\n  width: 100%;\r\n  font-size: 2rem;\r\n}\r\n\r\n._CSS-titleFade-enter-active {\r\n  animation: _CSS-slide-in 0.1s;\r\n}\r\n\r\n._CSS-titleFade-leave-active {\r\n  animation: _CSS-slide-in 0.1s reverse;\r\n}\r\n\r\n@keyframes _CSS-slide-in {\r\n  0% {\r\n    transform: translateY(15px);\r\n    opacity: 0;\r\n  }\r\n  100% {\r\n    transform: translateY(0);\r\n    opacity: 0.4;\r\n  }\r\n}\r\n\r\n/* PRINT STYLES  */\r\n\r\n._CSS-actions--print {\r\n  grid-template-columns: auto;\r\n}","controller":"class Controller {\r\n  init() {\r\n    locals.noUpForms = [\r\n      'd990fd22-7ffc-4395-86a7-804da25f908b',\r\n      'c69a0c1c-6c53-40c2-87e8-5ace866bf1df'\r\n    ]\r\n    locals.topMostInstanceId = null\r\n    locals.showMenu = false\r\n\r\n    watchParam('pageDocumentId', (pageDocumentIdParam) => {\r\n      Aeppic.get(pageDocumentIdParam).then(((document) => {\r\n        if (!document || !document.a) {\r\n          locals.topMostInstanceId = null\r\n          return \r\n        }\r\n        locals.topMostInstanceId = document.a.length > 1 ? document.a[1] : null\r\n      }))\r\n    }, {\r\n      immediate: true\r\n    })\r\n\r\n    this.openSearch = () => $refs.buttons && $refs.buttons.$emit('openSearch')\r\n    $on('openSearch', this.openSearch)\r\n  }\r\n\r\n  showLogo() {\r\n    return true\r\n  }\r\n\r\n  showTitle() {\r\n    return Aeppic.Device !== 'Desktop'\r\n  }\r\n\r\n  get isElectron() {\r\n    const isChromeWebApp = matchMedia && matchMedia('(display-mode: standalone)') && matchMedia('(display-mode: standalone)').matches\r\n    const isElectron = typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0\r\n\r\n    return isChromeWebApp || isElectron\r\n  }\r\n\r\n  get isAndroid() {\r\n    return typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Android') >= 0\r\n  }\r\n  \r\n  async navigateUp() {\r\n    const document = await Aeppic.get(params.pageDocumentId)\r\n    Aeppic.navigateTo(document.p)\r\n  }\r\n}","packages":[]},"locks":[],"created":{"at":"2017-12-04T11:19:25+01:00","by":"","from":"","client":"8badf2cf-2103-476e-8482-f65cdc02f880"},"modified":{"at":"2022-03-22T09:01:11+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1647939671339,"ct":1512382760533,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"bb3563d9-6391-4472-ab69-97b836479ec7","v":"58e2b2c149878ab5","previous":{"v":"9c3d5d562338be1a"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Top Application Buttons","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"d4ce6dec568c3dc1","text":"Window"}],"template":"<div class=\"_CSS-container\" :class=\"{ '_CSS-container--overlay': params.overlay }\">\n  <div style=\"flex:1;\"></div>\n  <ae-layout layout-id=\"fc031ba9-67be-44c7-a473-71eb2a9b69b0\"></ae-layout>\n  <ae-layout layout-id=\"85b6cba1-c9a4-4fd1-8198-a28e8893152e\"></ae-layout>\n  <ae-layout v-show=\"!locals.connected\" layout-id=\"ee288bba-3301-4d3b-b2bd-e6e86128e0e6\" :param-connected=\"locals.connected\"></ae-layout>\n  <ae-layout layout-id=\"36614477-3d62-4545-bcc6-cba534a6331d\"></ae-layout>\n  \n  <button @click=\"$emit('toggle-developer')\" :xclass=\"{'_CSS-developer-preview-enabled': Aeppic.Developer.remoteDeveloperMode === 'None'}\" class=\"_CSS-action-button ae-button\" v-show=\"controller.showDeveloperButton\" title=\"Developer Mode\"><ae-icon class=\"fad fa-hammer fa-flip-horizontal\" ></ae-icon></button>\n  <i class=\"_CSS-divider\" v-show=\"controller.showDeveloperButton\"></i>\n  <button @click=\"$emit('toggle-developer', { server: true })\" :class=\"{'_CSS-developer-preview-enabled': Aeppic.Developer.remoteDeveloperMode === 'Server'}\" class=\"_CSS-action-button ae-button\" v-show=\"controller.showDeveloperButton\" title=\"Remote Developer Mode\"><ae-icon class=\"fad fa-hammer-war\" ></ae-icon></button>\n\n  <button @click=\"controller.toggleDeveloperPreview()\" :class=\"{'_CSS-developer-preview-enabled': Aeppic.Developer.remoteDeveloperMode === 'Client'}\" class=\"_CSS-action-button ae-button\" v-show=\"controller.showDeveloperButton\"  title=\"Remote Developer Preview Mode\"><ae-icon class=\"fad fa-presentation\" ></ae-icon></button>\n  <button class=\"ae-button\" v-show=\"controller.showRedesignButton\" @click.stop=\"Aeppic.LocalStorage.setValue('appLayoutId', '6670fc35-7bbd-40f5-bea7-6c068d323155');Aeppic.reload()\">\n    <ae-icon class=\"fa fa-sparkles\"></ae-icon>\n  </button>\n  <i class=\"_CSS-divider\" v-show=\"controller.showDeveloperButton\"></i>\n\n  <ae-layout ref=\"search\" layout-id=\"5ecf36b8-bb47-4039-ac29-0dc2e854195e\" :param-company-id=\"params.companyId\" :param-page-document-id=\"params.pageDocumentId\" :param-overlay=\"params.overlay\"></ae-layout>\n\n  <ae-layout layout-id=\"46644ef3-95a9-49f0-902b-d2c879ee3966\" v-if=\"!controller.isGroupAccount\" :param-overlay=\"params.overlay\"></ae-layout>\n\n  <ae-layout style=\"margin-left: 2ch;\" layout-id=\"cf3b721d-9825-40ba-8076-4e6cbaf164d1\" v-if=\"!controller.isGroupAccount\" :param-overlay=\"params.overlay\" :param-single-button=\"true\"></ae-layout>\n  <ae-layout v-if=\"locals.notificationsEnabled && !controller.isGroupAccount\" layout-id=\"e4e9f138-103a-4b54-8f9a-2442ba138f8f\" :param-overlay=\"params.overlay\"></ae-layout>\n\n\n  <!-- NOTE: do not remove language switch. It enables translation enabling -->\n  <ae-layout v-show=\"false\" layout-id=\"7a66c0bd-aaa4-406d-80da-0b0d5a6ee330\" @language-change=\"$emit('language-change')\"></ae-layout>\n  <!-- <ae-layout layout-id=\"156ca056-e777-41d3-ba0c-2e5c07108914\" v-show=\"!params.sidebarOpen\"></ae-layout> -->\n\n  <i class=\"_CSS-divider\"></i>\n  <ae-layout layout-id=\"156ca056-e777-41d3-ba0c-2e5c07108914\"></ae-layout>\n</div>  \n  ","css":"._CSS {\n  display: flex;\n}\n\n._CSS-container {\n  flex: 1;\n  display: flex;\n  padding: 0 var(--ae-size-2) 0 0;\n}\n\n._CSS-container > * {\n  padding:0;\n  margin:0;\n  // margin-right: 16px;\n  // height:24px;\n  display: flex;\n  align-items: center;\n}\n\n._CSS-container--overlay > ._CSS-action-button {\n  color: var(--ae-ui-background);\n  filter: drop-shadow( 0px 0px 1px rgba(0,0,0,1) ) drop-shadow( 0px 0px 10px rgba(0,0,0,0.8));\n}\n\n._CSS-action-button-uploading {\n  height: 24px;\n  width: 24px;\n}\n\n._CSS-divider {\n  width:1px;\n  border-right:1px solid #DDD;\n  // height:1.5em;\n  margin: 0 var(--ae-size-2);\n}\n\n._CSS-tab-button {\n  position:relative;\n  border-bottom: 1px solid transparent;\n}\n\n._CSS-tab-button--active::after {\n  content:'\\00a0';\n  position:absolute;\n  bottom: -6px;\n  left:0;right:0;\n  border-bottom: 2px solid var(--ae-primary);\n}\n\n\n._CSS-action-button._CSS-developer-preview-enabled svg{\n  color: var(--ae-accent-red)!important;\n}","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Company: 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df'\n    }\n\n    locals.notificationsEnabled = false\n    locals.connected = true\n\n    this.openSearch = () => $refs.search && $refs.search.$emit('openSearch')\n    $on('openSearch', this.openSearch)\n\n    locals.notificationsEnabled = await this.areNotificationsEnabled()\n\n    this.vue = new Vue({\n      computed: {\n        connection() {\n          return Aeppic.ConnectionStatus.connected\n        }\n      },\n      watch: {\n        connection(newValue, oldValue) {\n          locals.connected = newValue\n        }\n      } \n    })\n\n    const forceLoadRedesign = await Aeppic.findOne(`p:${params.companyId} f.id:9caede3f-75ae-4b0a-aaee-0e2dd59f28ee`)\n\n    if (forceLoadRedesign) { \n      Aeppic.LocalStorage.setValue('appLayoutId', '6670fc35-7bbd-40f5-bea7-6c068d323155');Aeppic.reload()\n    }\n  }\n\n  get isGroupAccount() {\n    return Aeppic.Account && Aeppic.Account.data.isGroupAccount\n  }\n\n  async getDefaultTabConfiguration() {\n    return await Aeppic.get('3d4a2960-12f9-4b41-be9d-836fabb671a5')\n  }\n\n  toggleSidebar(tabId) {\n    if (locals.activeTabId === tabId) {\n      locals.activeTabId = null\n      $emit('hide-sidebar', tabId)\n    } else {\n      locals.activeTabId = tabId\n      $emit('show-sidebar', tabId)\n    }\n  }\n\n  get showDeveloperButton() {\n    if (!Aeppic.Account || !Aeppic.Account.id) {\n      return\n    }\n\n    return Aeppic.Account.data.allowDevMode || Aeppic.Account.data.isAdmin\n  }\n\n  toggleDeveloperPreview() {\n    Aeppic.Developer.remoteDeveloperMode === 'None' ? Aeppic.Developer.enableRemoteDeveloper(Aeppic.Account.id, 'Client') : Aeppic.Developer.disableRemoteDeveloper()\n  }\n\n  async areNotificationsEnabled() {\n    if (Aeppic.ProfilePage && Aeppic.ProfilePage.f.id === this.FORMS.Company) {\n      return Aeppic.Preferences.getSettingForDocument('bizpin:notifications:enabled', Aeppic.ProfilePage)\n    }\n\n    return Aeppic.Preferences.getSettingForDocument('bizpin:notifications:enabled')\n  }\n\n  get showRedesignButton() {\n    return this.showDeveloperButton || \n            params.companyId === '13c8167b-c411-4ec5-8346-bd19e7c62bf3' || \n            params.companyId === '50d9cd73-4d70-452f-bddb-c2020f75fd8a' ||\n            packages.window.location.host === 'bizpin-dev.bizpin.de' || \n            packages.window.location.host === 'keeptrack.bizpin.de'\n  }\n\n  destroy() {\n    if (this.vue) {\n      this.vue.$destroy()\n    }\n  }\n}\n\n"},"locks":[],"created":{"at":"2018-04-20T12:23:56+02:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"f8312258-bdc9-438a-a510-de77a69e61e9"},"modified":{"at":"2024-06-11T12:21:33+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1718108493282,"ct":null,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"2f55f820-a5fe-4b77-8808-5dcd57067416","v":"2eb93feb10da8a41","previous":{"v":"0f121ece8d225144"},"p":"647b2571-aea1-4247-8adb-b43bb4c94afc","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Tracked Time","applies":"","packages":[{"id":"9fbc0645-b97a-4b98-8520-02670f21ac0b","v":"ab6255cfc2e565e3","text":"Aeppic Search Helpers"}],"template":"<template v-if=\"locals.visible\">\n  <div class=\"ae-control-container ae-form-cell\">\n    <div class=\"ae-form-cell__input\">\n\n      <div class=\"_CSS-controls\">\n        <button class=\"ae-button\" @click=\"controller.changeMonth(-1)\">\n          <ae-icon class=\"fa fa-arrow-left\"></ae-icon>\n        </button>\n        <div class=\"_CSS-controls__date\">{{locals.readableDate}}</div>\n        <button class=\"ae-button\" @click=\"controller.changeMonth(1)\">\n          <ae-icon class=\"fa fa-arrow-right\"></ae-icon>\n        </button>\n\n        <ae-layout class=\"_CSS-controls__CSV\" layout-id=\"a7c668bb-022c-4ffd-94bb-b3430fa73dbb\" :params=\"{ documents: locals.documents, includeParentName: true }\"></ae-layout>\n      </div>\n\n      <template v-if=\"locals.statistics && locals.statistics.durationByProjectId\">\n        <div class=\"ae-form-cell__label\">Erfasste Zeiten pro Projekt</div>\n\n        <div class=\"_CSS-project-durations\">\n          <div class=\"_CSS-project-duration\" v-for=\"(duration, projectId) in locals.statistics.durationByProjectId\">\n            <ae-design name=\"title\" :document-id=\"projectId\"></ae-design>\n            <div class=\"_CSS-project-duration__duration\">\n              {{ duration }}\n            </div>\n          </div>\n        </div>\n      </template>\n\n      <div class=\"ae-form-cell__label\" style=\"margin-top: var(--ae-size-4);\">\n        Erfasste Zeiten\n        <template v-if=\"locals.statistics && locals.statistics.duration\">\n          (\n          <ae-icon class=\"fa fa-sigma\"></ae-icon>\n          {{ locals.statistics.duration }}\n          )\n        </template>\n\n      </div>\n\n\n<!-- \n  list-id=\"72289c3e-23e1-428a-ae82-99c1ea7acc54\"\n  -->\n  <ae-list  list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n                :documents=\"locals.documents\"\n                param-design=\"line-item\"\n                :param-design-params=\"{ showProject: true, readonly: true }\"\n                param-empty-text=\"Keine Zeiten in diesem Zeitraum erfasst\"\n                @selected=\"Aeppic.drillInto($event)\"\n      ></ae-list>\n      \n    </div>\n  </div>\n</template>","css":"._CSS-controls {\n  display: flex;\n  align-items: center;\n}\n\n._CSS-controls__date {\n  width: 150px;\n  display: flex;\n  justify-content: center;\n}\n\n._CSS-project-durations {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-project-duration+._CSS-project-duration {\n  margin-top: var(--ae-size-2);\n}\n\n._CSS-project-duration {\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  background-color: var(--ae-ui-background);\n  border-radius: var(--ae-border-radius);\n\n  flex: 1;\n  padding: var(--ae-size-1) var(--ae-size-2) var(--ae-size-1) var(--ae-size-2);\n  display: grid;\n  grid-template-columns: auto 90px;\n}\n\n._CSS-project-duration__duration {\n  font-weight: bold;\n}\n\n._CSS-controls__CSV {\n  flex:1;\n  display: inline-flex;\n  justify-content: flex-end;\n}","controller":"class Controller {\n  async init() {\n    this.ACCOUNT_FORM = 'account'\n    this.PROJECT_FORMS = ['17c3a5d3-90ba-4592-961b-0800873ef9c1', '98c77209-1245-43d6-90b5-8625183f470c', '0b6a2b21-9425-466e-9e8d-57ec39cc95e1']\n    this.DURATION_FORMAT = `hh'h' mm'm'`\n\n    locals.visible = false\n    locals.documents = []\n\n    const trackingIsEnabled = await Aeppic.Preferences.getSetting('bizpin:timetracking:enabled')\n    if (!trackingIsEnabled) {\n      return\n    }\n\n    locals.visible = await this._isTrackedTimeAdmin()\n\n    this.changeMonthBy = 0\n    locals.readableDate = ''\n\n    const accounts = await this._getProfileAccounts()\n\n    if (accounts.find(account => account.id === Aeppic.Account.id)) {\n      locals.visible = true\n    }\n\n    if (accounts.length) {\n      this.createdBySearch = accounts.map(account => `created.by:${account.id}`).join(' OR ')\n      await this.updateDocuments()\n    }\n  }\n \n  async _isTrackedTimeAdmin() {\n    if (Aeppic.Account && Aeppic.Account.data.isAdmin) {\n      return true\n    }\n\n    const securityFolder = await this._getSecurityFolder()\n\n    const trackedTimeGroup = await Aeppic.get(securityFolder.data.trackedTimeGroup)\n\n    if (trackedTimeGroup) {\n      return Aeppic.findOne(`id:${Aeppic.Account.id} data.groups:${trackedTimeGroup.id}`)\n    }\n\n    return false\n  }\n\n  \n  async _getSecurityFolder() {\n    if (!params.document || !params.document.a) {\n      return null\n    }\n\n    const securityFolder = await Aeppic.findOne(`a:${params.document.a[0]} AND f.id:81939b86-a48e-480e-afd1-cb2907568550`)\n    return securityFolder\n  }\n\n  async changeMonth(by) {\n    this.changeMonthBy = this.changeMonthBy + by\n    await this.updateDocuments()\n  }\n\n  async updateDocuments() {\n    const local = Aeppic.DateTime.local().plus({\n      months: this.changeMonthBy\n    })\n\n    locals.readableDate = `${local.monthLong} ${local.year}`\n\n    const daysInMonth = local.daysInMonth\n    const month = `${local.month}`.padStart(2, '0')\n\n    const queryString = `a:${params.document.a[0]} (${this.createdBySearch}) f.id:f9279010-1935-4139-abbb-82d928aa09dc `\n    const findOptions = {\n      sort: {\n        field: 'data.tag'\n      },\n      size: 9999\n    }\n\n    const intervalOptions = {\n      start: `${local.year}-${month}-01`,\n      end: `${local.year}-${month}-${daysInMonth}`,\n      fieldName: 'data.tag',\n      fullDays: true\n    }\n\n    const documents = await packages.SearchHelpers.findInterval(Aeppic, intervalOptions, queryString, findOptions)\n\n    locals.documents = documents\n\n    if (documents.length) {\n      locals.statistics = this.calculateStatistics(documents)\n    } else {\n      locals.statistics = null\n    }\n  }\n\n  calculateStatistics(trackings) {\n    const statistics = {\n      durationDateTime: {}, \n      durationDateTimeByProjectId: {}\n    }\n\n    for (const track of trackings) {\n      const durationToAdd = Aeppic.DateTimeDuration.fromObject(track.data.dauer)\n      statistics.durationDateTime = durationToAdd.plus(statistics.durationDateTime)\n\n\n      const indexOfProject = track.a_forms.findIndex(a_form => this.PROJECT_FORMS.includes(a_form))\n      const projectId = indexOfProject >= 0 ? track.a[indexOfProject] : null\n\n      if (projectId) {\n        if (!statistics.durationDateTimeByProjectId[projectId]) {\n          statistics.durationDateTimeByProjectId[projectId] = {}\n        }\n\n        statistics.durationDateTimeByProjectId[projectId] = durationToAdd.plus(statistics.durationDateTimeByProjectId[projectId])\n      }\n    }\n \n    // const duration =  trackings.reduce((prev, cur) => {\n    //   if (prev) {\n    //     return Aeppic.DateTimeDuration.fromObject(cur.data.dauer).plus(prev)\n    //   }\n\n    //   return Aeppic.DateTimeDuration.fromObject(cur.data.dauer)\n    // }, null)\n\n    const result = {\n      duration: statistics.durationDateTime.toFormat(this.DURATION_FORMAT),\n      durationByProjectId: {}\n    }\n\n    for (const key in statistics.durationDateTimeByProjectId) {\n      result.durationByProjectId[key] = statistics.durationDateTimeByProjectId[key].toFormat(this.DURATION_FORMAT) \n    }\n\n    return result\n  }\n\n  async _getProfileAccounts() {\n    const accounts = (await Aeppic.find(`f.id:account p:${params.document.id}`)).filter((account) => {\n      return !account.data.profilePage.id || account.data.profilePage.id === params.document.id\n    })\n\n    return accounts\n  }\n}"},"locks":[],"created":{"at":"2019-09-13T09:19:44+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2022-10-11T14:28:40+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1665498520331,"ct":1568366384404,"a_depth":3,"a":["apps","144e85c0-d7f9-4b20-8928-be30f0c78bda","647b2571-aea1-4247-8adb-b43bb4c94afc"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"1c56807a-e7bc-45a9-86fd-730139d82747","v":"8b0bc263a7c4e599","previous":{"v":"c686c1e19d7480c8"},"p":"6fe4f7aa-7792-4a1f-bc15-3cdb817ecff3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"Tree","applies":"","packages":[{"id":"ed1e09cd-963e-4f7b-afce-fb70e1f84312","v":"a61d1c7c27923dd4","text":"vue-draggable"}],"template":"<template v-if=\"locals.document\">\r\n  <draggable\r\n    :key=\"locals.document.v\"\r\n    :list=\"locals.document.data.pages\"\r\n    :move=\"(e) => controller.startDrag(e)\"\r\n    @change=\"controller.endDrag($event)\"\r\n    handle=\"._CSS-tree-title\"\r\n    group=\"tree\"\r\n    > \r\n    <div v-show=\"locals.pages\" v-for=\"page of locals.document.data.pages\" role=\"group\"> \r\n      <div\r\n        class=\"_CSS-page\"\r\n        :class=\"{ '_CSS-selected': params.selectedPageId == page.id, '_CSS-page-hover': locals.hoveredItem === page }\"\r\n        :key=\"page.id\"\r\n        @mouseenter=\"locals.hoveredItem = page\"\r\n        @mouseleave=\"locals.hoveredItem = null\"\r\n        @click=\"$emit('selected', page)\">\r\n        <button\r\n          class=\"ae-button _CSS-tree-toggle\"\r\n          :class=\"{ '_CSS-tree-toggle__empty': !locals.hasChildrenPages[page.id] }\"\r\n          @click.stop=\"controller.toggleOpen(page)\"\r\n          >\r\n          <ae-icon v-if=\"!controller.isOpen(page)\" :key=\"id('closed-tree')\" class=\"fa fa-chevron-right\"></ae-icon>\r\n          <ae-icon v-else :key=\"id('opened-tree')\" class=\"fa fa-chevron-down\"></ae-icon>\r\n        </button>\r\n        <ae-design\r\n          :document=\"page\"      \r\n          style=\"margin-right:4px;opacity:0.8\"\r\n          name=\"kb-tree-icon,icon\"\r\n          ></ae-design> \r\n        <ae-design\r\n          :document-id=\"page.id\"\r\n          style=\"flex:1\"\r\n          class=\"_CSS-tree-title\"\r\n          name=\"kb-tree-title,title\" \r\n          :watch=\"true\"\r\n          ></ae-design> \r\n        <div class=\"_CSS-ops\" v-if=\"params.selectedPageId == page.id || locals.hoveredItem === page\">\r\n          <template v-if=\"locals.canEdit\">\r\n            <button @click.stop.prevent=\"controller.deletePage(page)\">\r\n              <ae-icon class=\"fa fa-trash-alt\"></ae-icon>\r\n            </button>\r\n          </template>\r\n        </div>\r\n      </div> \r\n      <ae-layout\r\n          v-if=\"locals.loadDescendants\"\r\n          v-show=\"controller.isOpen(page)\"\r\n          class=\"_CSS_descendants\"\r\n          layout-id=\"1c56807a-e7bc-45a9-86fd-730139d82747\"\r\n          :param-root-document=\"page\" \r\n          :param-load-descendants=\"controller.isOpen(page)\"\r\n          :param-selected-page-id=\"params.selectedPageId\"\r\n          :param-selected-page-ancestry=\"locals.selectedPageAncestry\"\r\n          @selected=\"selectedPage => controller.selectPage(selectedPage)\"\r\n          @deleted-page=\"$emit('deleted-page', $event)\"\r\n          ></ae-layout>\r\n    </div>\r\n    <div slot=\"footer\" key=\"id('footer')\" class=\"_CSS-page\" v-if=\"locals.canEdit\" role=\"group\">\r\n      <button disabled class=\"ae-button _CSS-tree-toggle\"></button>\r\n      <button class=\"ae-button _CSS-add-button\" @click=\"controller.addPage()\" >\r\n        <ae-icon :key=\"id('add')\" class=\"fa fa-file-plus\"></ae-icon>\r\n      </button>\r\n    </div>\r\n  </draggable>\r\n</template>","css":"._CSS {\r\n  display:flex;\r\n  flex-direction: column;\r\n}\r\n\r\n._CSS_descendants {\r\n  margin-left:0.8em;\r\n  padding-left:0.5em;\r\n  display:flex;\r\n  flex-direction:column;\r\n  border-left:2px dotted var(--ae-background-300);\r\n}\r\n\r\n._CSS-tree-toggle__empty {\r\n  opacity: 0.2;\r\n}\r\n\r\n._CSS-tree-toggle__empty:hover {\r\n  opacity: 1.0;\r\n}\r\n\r\n._CSS_descendants:hover {\r\n  border-left:2px dotted var(--ae-background-800); \r\n}\r\n\r\n._CSS-page {\r\n  border: 1px solid transparent;\r\n  cursor: pointer;\r\n  position: relative;\r\n  display:flex;\r\n  align-items:center;\r\n}\r\n\r\n._CSS-page-hover::before {\r\n  opacity: 0.15;\r\n  background: var(--ae-primary-800);\r\n  content: '';\r\n  position: absolute;\r\n  top:0;left:0;right:0;bottom:0;\r\n}\r\n\r\n._CSS-page._CSS-selected {\r\n  background: var(--ae-primary-200);\r\n  border: 1px solid var(--ae-primary-400);\r\n}\r\n\r\n._CSS-ops > button {\r\n  border:none;\r\n  padding:0px;\r\n  transform: scale(0.85);\r\n}\r\n\r\n._CSS-ops > button:hover {\r\n  cursor: pointer;\r\n}\r\n\r\n._CSS ._CSS-tree-toggle {\r\n  margin: 0;\r\n  padding: var(--ae-size-1) var(--ae-size-1);\r\n  width:24px;\r\n  height:28px;\r\n}\r\n\r\n._CSS-tree-toggle > * {\r\n  transform: scale(0.75);\r\n  opacity: 0.5;\r\n}\r\n\r\n._CSS ._CSS-add-button {\r\n  margin: 0;\r\n  padding: 0;\r\n  opacity: 0.5;\r\n  flex:1;\r\n}","controller":"init() {\r\n  locals.document = null\r\n  locals.hoveredItem = null \r\n  locals.open = {}\r\n  locals.loadDescendants = false\r\n  locals.canEdit = false\r\n  locals.drag = false\r\n  locals.pages = []\r\n  locals.hasChildrenPages = {}\r\n  locals.selectedPageAncestry = []\r\n  \r\n  watchParam('selectedPageAncestry', (ancestry) => {\r\n    const top = ancestry[0]\r\n    if (top) { \r\n      locals.open[top] = true\r\n      locals.selectedPageAncestry = ancestry.slice(1)\r\n    } else {\r\n      locals.selectedPageAncestry = []\r\n    }\r\n  }, { immediate: true })\r\n\r\n  watchParam('loadDescendants', (loadDescendants) => {\r\n    Aeppic.setTimeout(() => {\r\n      locals.loadDescendants = loadDescendants == null || loadDescendants === true\r\n    }, 10)\r\n  }, { immediate: true })\r\n\r\n  this.watcher = null\r\n\r\n  watchParam('rootDocument', async (rootDocument) => {\r\n    const newRoot = await Aeppic.get(rootDocument)\r\n\r\n    const watcherWillHandleThis = locals.document && newRoot.id === locals.document.id\r\n    \r\n    if (watcherWillHandleThis) {\r\n      return \r\n    } \r\n    \r\n    this.watcher?.stop()\r\n \r\n    console.log('rootDocument set/replaced', locals.document?.id, locals.document?.v, newRoot?.v, newRoot)\r\n    locals.document = await Aeppic.edit(newRoot)\r\n    \r\n    this._updateChildren()\r\n\r\n    // if (locals.document && locals.document.id === newRoot.id) {\r\n    //   // Aeppic.integrate(locals.document, newRoot)\r\n    // } else {\r\n    // }\r\n\r\n    locals.canEdit = await Aeppic.canEdit(locals.document)\r\n\r\n    this.watcher = Aeppic.watch(rootDocument, async (newVersion, reason) => {\r\n      if (reason.updated) {\r\n        console.log('rootDocument updated', locals.document?.v, newVersion?.v, newVersion?.data.name)\r\n        // Aeppic.integrate(locals.document, newVersion)\r\n        locals.document = await Aeppic.edit(newRoot)\r\n        locals.canEdit = await Aeppic.canEdit(locals.document)\r\n        this._updateChildren()\r\n\r\n        console.log(locals.document.data.name, locals.document.data.pages)\r\n      } else if (reason.deleted) {\r\n        locals.document = null\r\n        locals.canEdit = false\r\n      }\r\n    })\r\n\r\n  }, { immediate: true })\r\n}\r\n\r\nasync _updateChildren() {\r\n  locals.pages = await Aeppic.getAll(locals.document.data.pages)\r\n  locals.hasChildrenPages = {}\r\n  \r\n  for (const page of locals.pages) {\r\n    if (page.data.pages.length > 0) {\r\n      locals.hasChildrenPages[page.id] = true\r\n    }\r\n  }\r\n}\r\n \r\ndestroy() {\r\n  this.watcher && this.watcher.stop()\r\n}\r\n\r\ntoggleOpen(page) {\r\n  if (this.isOpen(page)) {\r\n    locals.open[page.id] = false\r\n  } else {\r\n    locals.open[page.id] = true\r\n  }\r\n\r\n  const key = this.makeLocalStorageKey(page.id)\r\n  Aeppic.LocalStorage.setValue(key, locals.open[page.id].toString())\r\n  \r\n  locals.open = { ...locals.open }\r\n}\r\n\r\nmakeLocalStorageKey(pageId, name = 'toggle-state') {\r\n  return `KnowledgeBase-${pageId}__${name}`\r\n}\r\n\r\nisOpen(page) {\r\n  if (locals.open[page.id] == null) {\r\n    const key = this.makeLocalStorageKey(page.id)\r\n    locals.open[page.id] = Aeppic.LocalStorage.getValue(key) === 'true'\r\n  }\r\n\r\n  return locals.open[page.id] === true\r\n}\r\n\r\nselectPage(selectedPage) {\r\n  $emit('selected', selectedPage)\r\n}\r\n\r\nasync addPage(parentPage) {\r\n  const parent = await Aeppic.edit(locals.document)\r\n\r\n  const newPage = await Aeppic.new('cb2adf77-7636-41a7-9a16-1610b06fa91e', parent)\r\n  parent.addReference('pages', newPage)\r\n\r\n  Aeppic.save(newPage)\r\n  Aeppic.save(parent)\r\n\r\n  this.selectPage(newPage)\r\n} \r\n\r\nasync deletePage(pageRef) {\r\n  if (!locals.document) {\r\n    return \r\n  }\r\n\r\n  const confirmed = confirm('Are you sure ?')\r\n\r\n  if (!confirmed) {\r\n    return\r\n  }\r\n  \r\n  const parent = await Aeppic.edit(locals.document)\r\n  parent.removeReference('pages', pageRef)\r\n\r\n  Aeppic.save(parent)\r\n  Aeppic.delete(pageRef)\r\n\r\n  $emit('deleted-page', { parent: parent.asReference(), page: pageRef } )\r\n}\r\n\r\nstartDrag(info) {\r\n  return locals.canEdit\r\n}\r\n\r\nendDrag(info) {\r\n  Aeppic.save(locals.document)\r\n\r\n  if (info.added) {\r\n    const documentId = info.added.element.id\r\n    Aeppic.move(documentId, locals.document.id)\r\n  }\r\n}\r\n"},"locks":[],"created":{"at":"2021-07-07T11:16:57+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","from":"","client":"server"},"modified":{"at":"2021-11-02T09:38:16+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1635845896572,"ct":1625656617107,"a_depth":3,"a":["apps","cf914a7f-ff5f-4598-80f1-63c9129e0a71","6fe4f7aa-7792-4a1f-bc15-3cdb817ecff3"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"d0ab5d91-0486-4555-869a-b8a5873e7da2","v":"68de8669b9ddd851","cloneOf":{"id":"9d6ba0de-4e22-4291-b1d8-4e73b55ed3b9","v":"b50d8ef68eab486e","text":"Aufgaben eines Users ohne Fälligkeit"},"originalCloneOf":{"id":"9d6ba0de-4e22-4291-b1d8-4e73b55ed3b9","v":"b50d8ef68eab486e","text":"Aufgaben eines Users ohne Fälligkeit"},"previous":{"v":"12db1aff797a6927"},"p":"77223328-2527-4344-84b1-4092bdf006ba","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Überfällige, delegierte Aufgaben eines Users","applies":"","packages":[],"template":"<div class=\"_CSS-card\">\n  <div class=\"_CSS-card__title\">\n    Von mir erstellte, überfällige Aufgaben (andere Verantwortliche)\n  </div>\n  <ae-list  list-id=\"058195c7-9ba4-4f79-ab01-4a50ef2347fe\"\n            :documents=\"locals.tasks\"\n            param-design=\"ref-card\"\n            :param-design-params=\"{ readonly: true }\"\n            param-min-column-width=\"300px\"\n            class=\"_CSS-card__list\"\n            @selected=\"Aeppic.navigateTo($event)\"\n  ></ae-list>\n</div>\n","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n  width: 400px;\n}\n\n._CSS-card {\n  background: var(--ae-ui-card-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-card__title {\n  padding: 10px;\n  font-size: 1.2em;\n}\n\n._CSS-card__list {\n  background: var(--ae-background-100);\n  padding: 5px;\n  overflow: auto;\n\n  border-radius: 0 0 var(--ae-border-radius) var(--ae-border-radius);\n}","controller":"class Controller {\n  async init() {\n    locals.tasks = await this.tasks()\n  }\n\n  async tasks() {\n    return Aeppic.find((task) => {\n      if (task.data.verantwortlich.length === 0) {\n        return true\n      }\n\n      return !task.data.verantwortlich.find(ref => ref.id === Aeppic.ProfilePage.id)\n    }, `f.id:3d456c38-6282-416e-8c5e-7d20b0517a6e data.erledigt:false data.bis: [* TO now/d] created.by:${Aeppic.Account.id}`)\n  }\n} "},"locks":[],"created":{"at":"2019-06-04T14:57:14+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2019-06-05T11:37:56+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1559734676741,"ct":1559660234884,"a_depth":3,"a":["apps","5acfd7a2-33e4-498a-9150-71e1ab772bfc","77223328-2527-4344-84b1-4092bdf006ba"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","144e85c0-d7f9-4b20-8928-be30f0c78bda","647b2571-aea1-4247-8adb-b43bb4c94afc"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"2f55f820-a5fe-4b77-8808-5dcd57067416","text":"Tracked Time","v":"7fe36e6e528c55e4"},"created":{"at":"2021-06-14T12:38:10+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1623674290913,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      Account: 'account',\n      Lesebestaetigung: '14931d03-c3bb-4cf7-9f62-747f94d8b01a',\n      UnterweisungenEinesProfiles: 'd1762f3d-541a-4100-bab3-3a4b74b2131a',\n    } \n\n    locals.documents = []\n    locals.usersLinks = null\n\n    if (await this._isManager()) {\n      locals.visible = true\n    } else {\n      locals.visible = Aeppic.ProfilePage?.id === params.document.id\n    }\n\n    if (!locals.visible) {\n      return\n    }\n\n    watchParam('document', (doc) => {\n      this.updateDocuments(doc)\n    })\n\n    await this.updateDocuments(params.document)\n  }\n \n  async _isManager() {\n    return (await Aeppic.Actions.run(['7c4c6268-b24a-43c4-b876-a2a07f13942c'], { Account: Aeppic.Account, target: params.document }))[0].value\n  }\n\n  async changeMonth(by) {\n    this.changeMonthBy = this.changeMonthBy + by\n    await this.updateDocuments()\n  }\n\n  async updateDocuments(doc) { \n    const sort = [\n        'data.gelesen',\n        {\n        field: 'created.at',\n        descending: true\n    }]\n\n    locals.usersLinks = await Aeppic.get(`${doc.id}_${this.FORMS.UnterweisungenEinesProfiles}`)\n\n    if (locals.usersLinks) {\n      locals.documents = Aeppic.sort(await Aeppic.getAll([...locals.usersLinks.data.ungeleseneLesebestaetigungen,...locals.usersLinks.data.geleseneLesebestaetigungen]), sort)\n    } else {\n      locals.documents = []\n    }\n  }\n}","css":"._CSS-controls {\n  display: flex;\n  align-items: center;\n}\n\n._CSS-controls__date {\n  width: 150px;\n  display: flex;\n  justify-content: center;\n}\n\n._CSS-project-durations {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-project-duration+._CSS-project-duration {\n  margin-top: var(--ae-size-2);\n}\n\n._CSS-project-duration {\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  background-color: var(--ae-ui-background);\n  border-radius: var(--ae-border-radius);\n\n  flex: 1;\n  padding: var(--ae-size-1) var(--ae-size-2) var(--ae-size-1) var(--ae-size-2);\n  display: grid;\n  grid-template-columns: auto 90px;\n}\n\n._CSS-project-duration__duration {\n  font-weight: bold;\n}\n\n._CSS-controls__CSV {\n  flex:1;\n  display: inline-flex;\n  justify-content: flex-end;\n}","name":"Unterweisungen: Lesebestätigungen","packages":[{"id":"9fbc0645-b97a-4b98-8520-02670f21ac0b","text":"Aeppic Search Helpers","v":"ab6255cfc2e565e3"}],"template":"<template v-if=\"locals.visible && locals.documents.length\">\n  <div class=\"bg-white p-2\">\n    <div class=\"\">\n      <div class=\"font-bold\">\n        Lesebestätigungen\n      </div>\n\n      <ae-list  list-id=\"922e8251-6e60-45a4-9df6-3d434363ac01\"\n                :documents=\"locals.documents\"\n                param-design=\"rd:card\"\n                :param-readonly=\"true\"\n                @selected=\"Aeppic.ProfilePage.id === $event.data.empfaenger.id && Aeppic.drillInto($event)\"\n                :param-design-params=\"{ showProject: true }\"\n      ></ae-list>\n      \n    </div>\n  </div>\n</template>\n"},"f":{"id":"layout-form","text":"Layout","v":"dc3356051e0928cf"},"id":"636104ed-aa41-4ba1-be77-928bb5de5b39","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-12-04T14:58:43+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"originalCloneOf":{"id":"2f55f820-a5fe-4b77-8808-5dcd57067416","text":"Tracked Time","v":"7fe36e6e528c55e4"},"p":"647b2571-aea1-4247-8adb-b43bb4c94afc","previous":{"v":"7455b7582a2bcefc"},"stamps":[],"t":1764860323956,"v":"8ec404f3f040a3a3"},{"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","427e6b73-968a-4747-be77-c6bb820a3190","7fd7c5cc-1eed-440b-8ce2-d6183cdb421b"],"a_depth":5,"a_forms":["folder","application-form","folder","folder","folder"],"created":{"at":"2021-10-11T12:00:35+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1633953635566,"data":{"applies":"","controller":"class Controller {\n  init() {\n    locals.uploadsFileNameHex = '6165707069632d6c6f63616c3a2f2f38336439616237312d393633352d346336312d623064372d3065653236353464396163392f3133'\n    locals.dataUrl = ''\n\n    this.updateFileName()\n  }\n  aHexToText(str) {\n    console.log(str)\n    var arr = [];\n    for (var i = 0, l = str.length; i < l; i+=2) {\n      const decimal = parseInt(`${str[i]}${str[i + 1]}`, 16) \n      console.log(decimal)\n      var hex = String.fromCharCode(decimal)\n      // console.log(str[i], parseInt(str[i], 16), hex) \n      arr.push(hex);\n    }\n\n    return arr.join('');\n  }\n\n  updateFileName() {\n    locals.dataUrl = this.aHexToText(locals.uploadsFileNameHex)\n  }\n\n  fromDataUrlToFileName() {\n    locals.uploadsFileNameHex = this.stringToHex(locals.dataUrl)\n  }\n\n  stringToHex(str) {\n    let hex = '';\n    for (let i = 0; i < str.length; i++) {\n        hex += str.charCodeAt(i).toString(16).padStart(2, '0');\n    }\n    return hex;\n  }\n}","css":"","name":"Upload checker","packages":[],"template":"<div style=\"display:flex; flex-flow:column\">\n  <input v-model=\"locals.uploadsFileNameHex\" @input=\"controller.updateFileName()\">\n\n  <hr>\n  <div>\n  dataUrl for given uploadsFileName (base 16/hex):<br>\n  <input v-model=\"locals.dataUrl\" @input=\"controller.fromDataUrlToFileName()\">\n  </div>\n</div>\n "},"f":{"id":"layout-form","text":"Layout","v":"aeefd024c2682948"},"id":"2378228e-2192-4e17-9ec7-2989e693f399","inheritedLocks":[null,null,null,null,null,null],"locks":[],"modified":{"at":"2024-11-20T13:53:18+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"p":"7fd7c5cc-1eed-440b-8ce2-d6183cdb421b","previous":{"v":"145759602584f7ff"},"stamps":[],"t":1732110798927,"v":"9adcb2d02fe7e480"},{"id":"85b6cba1-c9a4-4fd1-8198-a28e8893152e","v":"8d928228f185945a","previous":{"v":"6af7d102414dfee9"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"Uploads Button","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"dc4529325d5a5c20","text":"Window"}],"template":"\n<!-- <button class=\"ae-button _CSS-button\" v-if=\"controller.isUploading\" @click.stop=\"$refs.popup.show($event)\" ref=\"button\"> -->\n<button class=\"ae-button _CSS-button\" v-if=\"controller.isUploading\" @click.stop=\"$refs.popup.show($event)\" ref=\"button\" title=\"Uploads\">\n  <span ref=\"buttonCount\" class=\"_CSS-button__count\">{{ controller.uploads.length }}</span> <ae-icon class=\"fa fa-sync fa-spin\"></ae-icon>\n</button>\n\n<ae-popup ref=\"popup\">\n  <div class=\"_CSS-popup\" slot-scope=\"scope\">\n    <div class=\"_CSS-progress-list\" >\n      <div class=\"_CSS-header\">\n        <div>Dateien hochladen</div>\n        <button class=\"ae-button\" @click.stop=\"scope.close()\">\n          <ae-icon class=\"fa fa-times\"></ae-icon>\n        </button>\n      </div>\n\n      <div class=\"_CSS-progress\" v-for=\"upload of controller.uploads\"> \n        <ae-design style=\"font-size:var(--ae-font-size-7);\" name=\"icon\" :document=\"upload.document\"></ae-design>\n        <div class=\"_CSS-progress__title\">\n          <ae-design name=\"title\" :document=\"upload.document\"></ae-design>\n          <div v-if=\"controller.isUploading && upload.progressPercent == 0\" class=\"ae-progress--indeterminate\" title=\"uploading\">\n          </div>\n          <div v-else style=\"display:flex;transform:scaleX(-1)\">\n            <div class=\"ae-progress\" :style=\"{ 'padding-left': (100 - (upload.progressPercent * 100)).toString() + '%' }\" ></div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</ae-popup>\n\n<ae-layout layout-id=\"e5accfd9-8d33-46e5-a4d7-69a91b5f8543\"\n          :param-force-warn=\"controller.isUploading\"\n          :param-events=\"['beforeunload']\"\n></ae-layout>","css":".ae-button._CSS-button {\n  position: relative;\n  color: var(--ae-primary-600);\n}\n\n._CSS-button__count {\n  margin: 0 var(--ae-space-1) 0 0;\n}\n\n._CSS-popup {\n  display: flex;\n  flex-flow: column;\n  max-width: 300px;\n  min-width: 300px;\n  max-height: 400px;\n  overflow: auto;\n}\n\n._CSS-progress-list {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-progress {\n  display: flex;\n  align-items: center;\n  padding: var(--ae-space-2);\n}\n._CSS-progress__title {\n  flex: 1;\n  min-width: 0;\n\n  padding: var(--ae-space-1);\n  font-size: var(--ae-font-size-3);\n}\n\n._CSS-header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 0 0 0 var(--ae-space-2);\n}","controller":"class Controller {\n  async init() {\n    const playAnimation = async () => {\n      await Aeppic.nextRenderPass()\n      Aeppic.Anime({\n        targets: $refs.button,\n        keyframes: [\n          { scale: 1.1 },\n          { scale: 1 },\n        ],\n        autoplay: true,\n        xduration: 1000,\n        easing: 'spring(1, 80, 10, 0)'\n      })\n    }\n\n\n    locals.vue = new Vue({\n      computed: {\n        uploads() {\n          if (!Aeppic.Uploads.isUploading) {\n            return []\n          }\n\n          return Aeppic.Uploads.getAll()\n        }\n      },\n      methods: {\n\n      },\n      watch: {\n        uploads(newValue, oldValue) {\n          if (newValue.length === 0) {\n            $refs.popup && $refs.popup.close()\n            return\n          }\n\n          if (newValue.length > oldValue.length) {\n            playAnimation()\n          }\n        }\n      }\n    })\n\n    locals.fakeUploads = []\n    locals.fakeUploads = [\n      { status: 'started', progressPercent: 0.20, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'pending', progressPercent: 0.63, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'started', progressPercent: 0.20, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'pending', progressPercent: 0.63, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'started', progressPercent: 0.20, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'pending', progressPercent: 0.63, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'started', progressPercent: 0.20, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'pending', progressPercent: 0.63, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'started', progressPercent: 0.20, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'pending', progressPercent: 0.63, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'started', progressPercent: 0.20, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n      { status: 'pending', progressPercent: 0.63, document: await Aeppic.get(Aeppic.ProfilePage.a[0]) },\n    ]\n  \n    await Aeppic.nextRenderPass()\n    // $refs.popup.show({ target: $refs.button })\n    // playAnimation()\n  }\n\n  get uploads() {\n    if (params.simulate) {\n      return locals.fakeUploads\n    }\n\n    return Aeppic.Uploads.getAll()\n  }\n\n  get isUploading() {\n    if (params.simulate) {\n      return true\n    }\n\n    return Aeppic.Uploads.isUploading\n  }\n\n  destroy() {\n    if (locals.vue) {\n      locals.vue.$destroy()\n      locals.vue = null\n    }\n  }\n}"},"locks":[],"created":{"at":"2020-11-24T13:49:04+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-01-11T10:36:59+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1673433419257,"ct":1632907537924,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"721bbfc4-3537-43f2-8383-f7494c024a7c","v":"initial","p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Usage","applies":"","packages":[{"id":"4a6e27ae-e4a0-4e22-9997-b352899f86f5","v":"f9636ca9470e9f81","text":"Chart.js"}],"template":"\r\n<canvas ref=\"chart\">\r\n</canvas>","css":"._CSS {\r\n  background: var(--ae-background);\r\n}","controller":"class Controller {\r\n  async init() {\r\n    locals.activity = await this._findActivity()\r\n    this._buildChart()\r\n  }\r\n\r\n  async _buildChart() {\r\n    await Aeppic.nextRenderPass()\r\n    \r\n    const chartConfiguration = {\r\n      data: {\r\n        datasets: [\r\n          {\r\n            label: 'Document Activity (Days Ago)',\r\n            data: await this._refreshData(),\r\n          }\r\n        ]\r\n      },\r\n      options: {\r\n        title: {\r\n          text: 'Document Activity'\r\n        },\r\n        animation: {\r\n\t\t\t\t\tduration: 100\r\n\t\t\t\t}\r\n      }\r\n    }\r\n    console.log(packages.ChartJs)\r\n    const chartContext = $refs.chart.getContext('2d')\r\n    this._chart = packages.ChartJs.Chart.Scatter(chartContext, chartConfiguration)\r\n  }\r\n\r\n  async _refreshData() {\r\n    const now = DateTime.local()\r\n    const activity = await this._findActivity()\r\n \r\n    return activity.map(d => {\r\n      const modified = DateTime.fromISO(d.modified.at)\r\n      const daysAgo = modified.diff(now).as('days')\r\n      \r\n      return { \r\n        x: daysAgo,\r\n        y: modified.get('hour')*60 + modified.get('minute'),\r\n      }\r\n    })\r\n  }\r\n\r\n  async _findActivity() {\r\n    const rootId = params.rootId || 'apps'\r\n\r\n    const recents = await Aeppic.find(`a:${rootId} OR id:${rootId}`, { size: 100000, sort: { field: 'modified.at', descending: true }})\r\n    return recents.splice(0, 4000)\r\n  }\r\n}"},"locks":[],"created":{"at":"2020-05-08T08:50:38+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2020-05-08T08:50:38+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927838606,"ct":1588927838605,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"2ae4c635-4b8b-40c9-be8e-87ca34d782f2","v":"04e8e0665bbaf0ab","previous":{"v":"041c0f633e9e4601"},"p":"3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e","f":{"id":"layout-form","v":"ed5c44e6a01cc5b2","text":"Layout"},"data":{"name":"Vertrags Planung Inline Layout","applies":"","packages":[],"template":"<div class=\"ae-form-cell__input\" v-if=\"locals.document && locals.document.data.planungen && locals.document.data.planungen.length\">\n  <ae-design name=\"title-as-link,title\" :document=\"locals.document\" @selected=\"$emit('selected', $event, arguments[1])\"></ae-design>\n  <ae-control name=\"children\" :document=\"locals.document\" field-name=\"planungen\" :readonly=\"true\" :param-handle-selected-readonly=\"true\"></ae-control>\n</div>\n","css":"._CSS {\n  margin: var(--ae-space-2) 0;\n}","controller":"class Controller {\n  async init() {\n    locals.document = null\n    locals.document = await Aeppic.get(params.documentId)\n  }\n}\n"},"locks":[],"created":{"at":"2021-05-25T13:08:24+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2022-02-16T13:25:52+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1645017952569,"ct":1621948104440,"a_depth":3,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"fc031ba9-67be-44c7-a473-71eb2a9b69b0","v":"07f8ce0617aa9865","previous":{"v":"96a0c7b5ec5c7998"},"p":"a73fe610-b1b7-4008-a9cd-22013217cb2f","f":{"id":"layout-form","v":"aeefd024c2682948","text":"Layout"},"data":{"name":"Video Converter Status","applies":"","packages":[],"template":"<!-- <button class=\"ae-button _CSS-button\" v-if=\"controller.isUploading\" @click.stop=\"$refs.popup.show($event)\" ref=\"button\"> -->\n<button class=\"ae-button _CSS-button\" v-if=\"locals.status && locals.status.data.jobsLeft\" @click.stop ref=\"button\" :title=\"controller.title\">\n  <!-- <span ref=\"buttonCount\" class=\"_CSS-button__count\">{{ locals.fakeUploads.length || Aeppic.Uploads.getAll().length }}</span> <ae-icon class=\"fa fa-cloud-upload\"></ae-icon> -->\n  <span ref=\"buttonCount\" class=\"_CSS-button__count\">\n    {{ locals.status.data.jobsLeft }}\n  </span> \n  <ae-icon class=\"fa fa-photo-video\"></ae-icon>\n</button>\n","css":".ae-button._CSS-button {\n  position: relative;\n  color: var(--ae-primary-600);\n}\n\n._CSS-button__count {\n  margin: 0 var(--ae-space-1) 0 0;\n}","controller":"class Controller {\n  init() {\n    this.FORMS = {\n      ConverterStatus: 'e861741c-3be2-4cd7-bfe3-84d3a2e506c5'\n    }\n\n    locals.status = null\n\n    if (params.simulate) {\n      locals.status = {\n        data: {\n          jobsLeft: 15\n        }\n      }\n\n      return\n    }\n\n    Aeppic.subscribe(`p:root f.id:${this.FORMS.ConverterStatus}`, { size: 1 }, (docs) => {\n      locals.status = docs[0]\n    })\n  }\n\n  get title() {\n    return locals.status && `Offene Video Konvertierungen (Stand: ${Aeppic.DateTime.fromISO(locals.status.modified.at).toLocaleString(Aeppic.DateTime.DATETIME_SHORT)})`\n  }\n}"},"locks":[],"created":{"at":"2021-09-29T09:26:07+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-01-11T10:31:02+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1673433062244,"ct":1632907567489,"a_depth":3,"a":["apps","77ee8815-2c3a-4bb5-abd9-90541a545a24","a73fe610-b1b7-4008-a9cd-22013217cb2f"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"51b697c6-2ae7-484e-9087-f7050e29b276","v":"dbdfbf688a598eef","previous":{"v":"initial"},"p":"d3d08873-80a4-471b-b999-eadf1f28c038","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Von mir delegierte überfällige Aufgaben","applies":"","packages":[],"template":"<ae-layout layout-id=\"d0ab5d91-0486-4555-869a-b8a5873e7da2\">\n</ae-layout>","css":"","controller":""},"locks":[],"created":{"at":"2019-06-04T14:53:51+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2019-06-04T15:01:23+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1559660483273,"ct":1559660031816,"a_depth":3,"a":["apps","43f84041-0fd7-4ccb-b7b5-7a38f89ada37","d3d08873-80a4-471b-b999-eadf1f28c038"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"a317925e-4cf8-4618-9f5e-18c740a77d3b","v":"ec5234408b85a29b","previous":{"v":"initial"},"p":"c3df0a76-ded1-4a65-92f0-8f78ecbde232","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Von mir delegierte überfällige Aufgaben","applies":"","packages":[],"template":"<ae-layout layout-id=\"d0ab5d91-0486-4555-869a-b8a5873e7da2\"\n></ae-layout>","css":"","controller":""},"locks":[],"created":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-05-08T08:51:35+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1588927895878,"ct":1568969971670,"a_depth":3,"a":["apps","8fa52498-fa07-4bad-87b3-5c8df671aca4","c3df0a76-ded1-4a65-92f0-8f78ecbde232"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"3675ffcc-f19a-4d72-907c-c0b09bf31da7","v":"3ec3250b1333cccb","previous":{"v":"a8c67d68b5dc279f"},"p":"0d2ed632-691b-479a-8003-008b4a6d815e","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"Von mir erstellte, überfällige Aufgaben (andere Verantwortliche) im Zeitraum","applies":"","packages":[{"id":"9fbc0645-b97a-4b98-8520-02670f21ac0b","v":"0f100c934c055d1e","text":"Aeppic Search Helpers"}],"template":"<div class=\"_CSS-body\" v-if=\"locals.tasks.length\">\n  <ae-list  list-id=\"560bc0a7-c08f-4cde-959b-87878878f453\"\n            @selected=\"Aeppic.drillInto($event)\"\n            :documents=\"locals.tasks\"\n            :param-disable-filters=\"true\"\n            param-title-text=\"Von mir erstellte, überfällige Aufgaben (andere Verantwortliche)\"\n  ></ae-list>\n</div>","css":"\n._CSS-body {\n  display: flex;\n  flex-flow: column;\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n  background: var(--ae-ui-background);\n\n  padding: var(--ae-size-2);\n}\n","controller":"class Controller {\n  async init() {\n    this.FORMS = {\n      CoreAufgabe: '0deb4864-cbb6-420c-99ee-337c7444ab24',\n      Aufgabe: '3d456c38-6282-416e-8c5e-7d20b0517a6e',\n      LeistungsAufgabe: '88b1f60e-71f6-46f5-94ea-3d7bbe972950',\n    }\n\n    locals.tasks = []\n    locals.tasks = await this.getTasks()\n\n    watchParam('date', async () => {\n      locals.tasks = await this.getTasks()\n    })\n  }\n\n  async getTasks() {\n    const filterCb = (task) => {\n      const verantwortliche = Array.isArray(task.data.verantwortlich) ? task.data.verantwortlich : [task.data.verantwortlich]\n\n      if (verantwortliche.length === 0) {\n        return true\n      }\n\n      return !verantwortliche.find(ref => ref.id === Aeppic.ProfilePage.id)\n    }\n\n    const search = {\n      query: '',\n      findOptions: {\n        sort: {\n          field: 'data.bis',\n          descending: false\n        },\n        size: 9999\n      },\n      intervalOptions: null\n    }\n\n    if (params.dashboardType === 'BIZPIN_CORE' ) {\n      search.query = `a:${Aeppic.Account.a[0]} f.id:${this.FORMS.CoreAufgabe} created.by:\"${Aeppic.Account.id}\" data.erledigt:false`\n      search.intervalOptions = {\n        start: params.date.start,\n        end: params.date.end,\n        fieldName: 'data.bisStart',\n        filterCb: filterCb\n      }\n    } else {\n      search.query = `a:${Aeppic.Account.a[0]} (f.id:${this.FORMS.Aufgabe} OR f.id:${this.FORMS.LeistungsAufgabe}) created.by:\"${Aeppic.Account.id}\" data.erledigt:false`\n      search.intervalOptions = {\n        start: params.date.start,\n        end: params.date.end,\n        fieldName: 'data.bis',\n        filterCb: filterCb\n      }\n    }\n\n    return packages.SearchHelpers.findInterval(Aeppic, search.intervalOptions, search.query, search.findOptions)\n  }\n}\n"},"locks":[],"created":{"at":"2020-05-08T08:51:35+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2023-09-20T11:56:27+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1695210987906,"ct":1588927895408,"a_depth":3,"a":["apps","599db2de-4e07-4722-98bd-7f42d498b352","0d2ed632-691b-479a-8003-008b4a6d815e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","594e6b26-7310-4d00-aad9-2a577ccab542"],"a_depth":3,"a_forms":["folder","application-form","folder"],"created":{"at":"2025-08-06T15:38:21+00:00","backedBy":null,"by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":null},"ct":1754494711130,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    console.log('init')\n    \n    locals.theme = 'ae-light'\n    locals.ready = false\n\n    const appId = layout.a[1]\n\n    const preloadIds = [\n    ]\n\n    // preload app\n    const preloadLocations = [\n      `a:${appId}`,\n      'p:91f205bc-9989-4fbe-8966-bd4ba9777c26 f.id:control-form',\n      'p:controls-folder f.id:control-form',\n    ]\n\n    const [, ids] = await Promise.all([\n      Aeppic.find(preloadLocations.join(' OR '), { size: 9999 }),\n      Aeppic.getAll(preloadIds)\n    ])\n\n    if (Aeppic.Account?.isAdmin) {\n      console.log('preloaded these documents')\n\n      const loggingArray = ids.map(id => id ? [id.data.name, id.a.join(' > ')] : [])\n      loggingArray.push(['Aeppic.find( ... )', preloadLocations.join(' OR ')])\n      console.table(loggingArray)\n    }\n\n    const realmId = Aeppic.Account?.data.isAdmin ? \n      '4e5abc6c-f843-4121-8601-fbb9d6636fff' : // _DEV_Keeptrack 2.0\n        Aeppic.Account?.a[0]\n\n    locals.startup = Aeppic.Account && await Aeppic.findOne(`a:${realmId} a_forms:c69a0c1c-6c53-40c2-87e8-5ace866bf1df f.id:941d2b8f-5694-4054-8c99-c51ad62f6c2f`, { sort: { field: 'created.at', descending: true }})\n\n    Aeppic.on('login', async () => {\n      const realmId = Aeppic.Account?.data.isAdmin ? \n      '4e5abc6c-f843-4121-8601-fbb9d6636fff' : // _DEV_Keeptrack 2.0\n        Aeppic.Account?.a[0]\n\n      locals.startup = Aeppic.Account && await Aeppic.findOne(`a:${realmId} a_forms:c69a0c1c-6c53-40c2-87e8-5ace866bf1df f.id:941d2b8f-5694-4054-8c99-c51ad62f6c2f`, { sort: { field: 'created.at', descending: true }})\n    })\n\n    locals.ready = true\n  }\n}","css":"._CSS {\n  width:100%;\n  height:100%;\n}\n\n._CSS-root {\n  background: var(--ae-background-100);\n  flex-direction:column;\n  width:100%;\n  height:100%;\n  overflow: hidden;\n}\n \n._CSS-app {\n  width:100%;\n  height:100%;\n  overflow: hidden;\n}\n\n._CSS-loader {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    width: 100%;\n    height: 100%;\n}\n\n._CSS-main {\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n  flex:1;\n  xalign-items: stretch;\n  height:100%;\n  line-height: 1.4;\n  color: var(--ae-background-900);\n\n  background-color: hsla(0, 0%, 99%);\n  /* \"Topography\" by \"Steve Schoger\" (https://www.heropatterns.com) is licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) */\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='600' viewBox='0 0 600 600'%3E%3Cpath fill='%239C92AC' fill-opacity='0.04' d='M600 325.1v-1.17c-6.5 3.83-13.06 7.64-14.68 8.64-10.6 6.56-18.57 12.56-24.68 19.09-5.58 5.95-12.44 10.06-22.42 14.15-1.45.6-2.96 1.2-4.83 1.9l-4.75 1.82c-9.78 3.75-14.8 6.27-18.98 10.1-4.23 3.88-9.65 6.6-16.77 8.84-1.95.6-3.99 1.17-6.47 1.8l-6.14 1.53c-5.29 1.35-8.3 2.37-10.54 3.78-3.08 1.92-6.63 3.26-12.74 5.03a384.1 384.1 0 0 1-4.82 1.36c-2.04.58-3.6 1.04-5.17 1.52a110.03 110.03 0 0 0-11.2 4.05c-2.7 1.15-5.5 3.93-8.78 8.4a157.68 157.68 0 0 0-6.15 9.2c-5.75 9.07-7.58 11.74-10.24 14.51a50.97 50.97 0 0 1-4.6 4.22c-2.33 1.9-10.39 7.54-11.81 8.74a14.68 14.68 0 0 0-3.67 4.15c-1.24 2.3-1.9 4.57-2.78 8.87-2.17 10.61-3.52 14.81-8.2 22.1-4.07 6.33-6.8 9.88-9.83 12.99-.47.48-.95.96-1.5 1.48l-3.75 3.56c-1.67 1.6-3.18 3.12-4.86 4.9a42.44 42.44 0 0 0-9.89 16.94c-2.5 8.13-2.72 15.47-1.76 27.22.47 5.82.51 6.36.51 8.18 0 10.51.12 17.53.63 25.78.24 4.05.56 7.8.97 11.22h.9c-1.13-9.58-1.5-21.83-1.5-37 0-1.86-.04-2.4-.52-8.26-.94-11.63-.72-18.87 1.73-26.85a41.44 41.44 0 0 1 9.65-16.55c1.67-1.76 3.18-3.27 4.83-4.85.63-.6 3.13-2.96 3.75-3.57a71.6 71.6 0 0 0 1.52-1.5c3.09-3.16 5.86-6.76 9.96-13.15 4.77-7.42 6.15-11.71 8.34-22.44.86-4.21 1.5-6.4 2.68-8.6.68-1.25 1.79-2.48 3.43-3.86 1.38-1.15 9.43-6.8 11.8-8.72 1.71-1.4 3.26-2.81 4.7-4.3 2.72-2.85 4.56-5.54 10.36-14.67a156.9 156.9 0 0 1 6.1-9.15c3.2-4.33 5.9-7.01 8.37-8.07 3.5-1.5 7.06-2.77 11.1-4.02a233.84 233.84 0 0 1 7.6-2.2l2.38-.67c6.19-1.79 9.81-3.16 12.98-5.15 2.14-1.33 5.08-2.33 10.27-3.65l6.14-1.53c2.5-.63 4.55-1.2 6.52-1.82 7.24-2.27 12.79-5.06 17.15-9.05 4.05-3.72 9-6.2 18.66-9.9l4.75-1.82c1.87-.72 3.39-1.31 4.85-1.91 10.1-4.15 17.07-8.32 22.76-14.4 6.05-6.45 13.95-12.4 24.49-18.92 1.56-.96 7.82-4.6 14.15-8.33v-64.58c-4 8.15-8.52 14.85-12.7 17.9-2.51 1.82-5.38 4.02-9.04 6.92a1063.87 1063.87 0 0 0-6.23 4.98l-1.27 1.02a2309.25 2309.25 0 0 1-4.87 3.9c-7.55 6-12.9 10.05-17.61 13.19-3.1 2.06-3.86 2.78-8.06 7.13-5.84 6.07-11.72 8.62-29.15 10.95-11.3 1.5-20.04 4.91-30.75 11.07-1.65.94-7.27 4.27-6.97 4.1-2.7 1.58-4.69 2.69-6.64 3.66-5.63 2.8-10.47 4.17-15.71 4.17-17.13 0-41.44 11.51-51.63 22.83-12.05 13.4-31.42 27.7-45.25 31.16-7.4 1.85-11.85 7.05-14.04 14.69-1.26 4.4-1.58 8.28-1.58 13.82 0 .82.01.98.24 3.63.45 5.18.35 8.72-.77 13.26-1.53 6.2-4.89 12.6-10.59 19.43-13.87 16.65-22.88 46.58-22.88 71.68 0 2.39.02 4.26.06 8.75.12 10.8.1 15.8-.22 21.95-.56 11.18-2.09 20.73-5 29.3h-1.05c2.94-8.56 4.49-18.12 5.05-29.35.31-6.13.34-11.1.22-21.9-.04-4.48-.06-6.36-.06-8.75 0-25.32 9.07-55.47 23.12-72.32 5.6-6.72 8.88-12.99 10.38-19.03 1.09-4.4 1.18-7.85.74-12.93-.23-2.7-.24-2.86-.24-3.72 0-5.62.32-9.57 1.62-14.1 2.28-7.95 6.97-13.44 14.76-15.39 13.6-3.4 32.82-17.59 44.75-30.84C409 360.14 433.58 348.5 451 348.5c5.07 0 9.77-1.33 15.26-4.07 1.93-.96 3.9-2.05 6.58-3.62-.3.18 5.33-3.16 6.98-4.11 10.82-6.21 19.66-9.67 31.11-11.2 17.23-2.3 22.9-4.75 28.57-10.64 4.25-4.41 5.04-5.16 8.22-7.28 4.68-3.11 10.01-7.14 17.55-13.14a1113.33 1113.33 0 0 0 4.86-3.89l1.28-1.02a4668.54 4668.54 0 0 1 6.23-4.98c3.67-2.9 6.55-5.12 9.07-6.95 4.37-3.19 9.16-10.56 13.29-19.4v66.9zm0-116.23c-.62.01-1.27.06-1.95.13-6.13.63-13.83 3.45-21.83 7.45-3.64 1.82-8.46 2.67-14.17 2.71-4.7.04-9.72-.47-14.73-1.33-1.7-.3-3.26-.61-4.67-.93a31.55 31.55 0 0 0-3.55-.57 273.4 273.4 0 0 0-16.66-.88c-10.42-.16-17.2.74-17.97 2.73-.38.97.6 2.55 3.03 4.87 1.01.97 2.22 2.03 4.04 3.55a1746.07 1746.07 0 0 0 4.79 4.02c1.39 1.2 3.1 1.92 5.5 2.5.7.16.86.2 2.64.54 3.53.7 5.03 1.25 6.15 2.63 1.41 1.76 1.4 4.54-.15 8.88-2.44 6.83-5.72 10.05-10.19 10.33-3.63.23-7.6-1.29-14.52-5.06-4.53-2.47-6.82-7.3-8.32-15.26-.17-.87-.32-1.78-.5-2.86l-.43-2.76c-1.05-6.58-1.9-9.2-3.73-10.11-.81-.4-1.59-.74-2.36-1-2.27-.77-4.6-1.02-8.1-.92-2.29.07-14.7 1-13.77.93-20.55 1.37-28.8 5.05-37.09 14.99a133.07 133.07 0 0 0-4.25 5.44l-2.3 3.09-2.51 3.32c-4.1 5.36-7.06 8.48-10.39 11.12-.65.52-1.33 1.04-2.13 1.62l-4.11 2.94a106.8 106.8 0 0 0-5.16 3.99c-4.55 3.74-9.74 8.6-16.25 15.38-8.25 8.58-11.78 13.54-11.7 15.95.07 1.65 1.64 2.11 6.79 2.38 1.61.09 2.15.12 2.98.2 2.95.24 5.09.73 6.81 1.68 7.48 4.15 11.63 7.26 13.95 11.58 3.3 6.15.8 12.88-8.89 20.26-8.28 6.3-11.1 10.37-11.31 14.96-.06 1.17 0 1.93.26 4.43.69 6.47.25 10.65-2.8 17.42a44.23 44.23 0 0 1-4.16 7.53c-2.82 3.97-5.47 5.74-10.6 7.69-.43.16-3.34 1.23-4.27 1.59-1.8.68-3.38 1.36-5.01 2.14-4.18 2-8.4 4.6-13.1 8.24-8.44 6.51-13.23 14.56-15.98 25.06-1.1 4.2-1.55 6.81-2.8 15.21-1.26 8.6-2.17 12.64-4.08 16.55-2.1 4.28-11.93 26.59-12.97 28.88a382.7 382.7 0 0 1-6.37 13.41c-4.07 8.11-7.61 14.07-10.73 17.81-5.38 6.46-8.98 14.37-13.77 28.42a810.14 810.14 0 0 0-1.89 5.6c-1.8 5.35-2.96 8.6-4.26 11.85-6.13 15.32-25.43 26.31-46.46 26.31-11.2 0-20.58-2.74-31.02-8.55-5.6-3.13-4.55-2.42-22.26-14.54-14.33-9.8-17.7-10.73-20.47-6.9-.37.5-1.81 2.74-1.83 2.77a52.24 52.24 0 0 1-4.94 5.9c-.73.79-5.52 5.87-6.97 7.45-2.38 2.6-4.3 4.81-5.98 6.93a45.6 45.6 0 0 0-5.08 7.66c-1.29 2.57-1.9 5.25-2.66 10.6a997.6 997.6 0 0 1-.46 3.18h-1l.47-3.32c.77-5.45 1.4-8.2 2.75-10.9a46.54 46.54 0 0 1 5.2-7.84c1.7-2.14 3.63-4.38 6.03-6.98 1.45-1.59 6.24-6.68 6.96-7.46a51.58 51.58 0 0 0 4.84-5.78s1.47-2.26 1.86-2.8c3.25-4.5 7.08-3.44 21.84 6.67 17.67 12.08 16.62 11.38 22.19 14.48 10.3 5.73 19.5 8.43 30.53 8.43 20.65 0 39.57-10.77 45.54-25.69a219.7 219.7 0 0 0 4.24-11.8 6752.32 6752.32 0 0 0 1.88-5.6c4.83-14.16 8.47-22.14 13.96-28.73 3.05-3.66 6.56-9.57 10.6-17.61 1.97-3.93 4.04-8.31 6.35-13.38 1.03-2.28 10.88-24.61 12.98-28.91 1.85-3.79 2.75-7.76 4-16.25 1.24-8.44 1.7-11.07 2.81-15.32 2.8-10.7 7.71-18.94 16.33-25.6a73.18 73.18 0 0 1 13.29-8.35c1.66-.8 3.27-1.48 5.08-2.18.94-.36 3.86-1.43 4.28-1.59 4.95-1.88 7.44-3.55 10.14-7.33 1.35-1.9 2.68-4.3 4.06-7.37 2.97-6.58 3.39-10.59 2.72-16.9a27.13 27.13 0 0 1-.27-4.58c.22-4.94 3.21-9.24 11.7-15.7 9.33-7.11 11.66-13.34 8.62-19-2.2-4.09-6.25-7.12-13.55-11.17-1.57-.88-3.6-1.33-6.42-1.57-.8-.07-1.34-.1-2.95-.19-5.77-.3-7.63-.85-7.72-3.34-.1-2.81 3.5-7.87 11.97-16.69 6.53-6.8 11.75-11.69 16.33-15.45 1.79-1.47 3.42-2.72 5.2-4.03l4.12-2.94c.79-.58 1.46-1.08 2.1-1.59 3.26-2.6 6.16-5.65 10.21-10.94a383.2 383.2 0 0 0 2.5-3.32l2.31-3.09c1.8-2.39 3.04-4 4.29-5.48 8.47-10.17 16.98-13.96 37.27-15.3-.44.02 12-.9 14.32-.98 3.62-.1 6.05.16 8.46.98.8.27 1.62.62 2.47 1.04 2.27 1.14 3.17 3.87 4.27 10.85l.44 2.76c.17 1.07.33 1.97.5 2.83 1.44 7.69 3.62 12.29 7.8 14.57 6.76 3.68 10.6 5.15 13.99 4.94 4-.25 6.99-3.17 9.3-9.67 1.45-4.04 1.46-6.49.32-7.92-.9-1.12-2.28-1.62-5.57-2.27a55.8 55.8 0 0 1-2.67-.55c-2.54-.6-4.39-1.4-5.93-2.71a252.63 252.63 0 0 0-4.78-4.01 84.35 84.35 0 0 1-4.08-3.6c-2.73-2.6-3.86-4.43-3.28-5.95 1.02-2.64 7.82-3.54 18.93-3.37a230.56 230.56 0 0 1 16.73.88c2.76.39 3.2.49 3.68.6 1.4.3 2.95.62 4.62.91a82.9 82.9 0 0 0 14.56 1.32c5.56-.04 10.24-.86 13.73-2.6 8.1-4.05 15.89-6.9 22.17-7.56.7-.07 1.4-.11 2.05-.13v1zm0-100.94v1.5c-8.62 16.05-17.27 29.55-23.65 35.92-3.19 3.2-7.62 4.9-13.54 5.56-4.45.48-8.28.4-19.18-.2-9.91-.55-15.32-.44-20.52.78a84.05 84.05 0 0 1-15 2.11l-2.25.14c-12.49.75-19.37 1.78-32.72 5.74-4.5 1.33-9.27 2.49-14.3 3.48a246.27 246.27 0 0 1-32.6 3.97c-7.56.45-13.21.57-20.24.57-5.4 0-11.9 1.61-18 5.18-8.3 4.87-15.06 12.87-19.53 24.5a68.57 68.57 0 0 1-4.56 9.8c-3.6 6.2-6.92 8.99-13.38 12.18l-4.03 1.96a64.48 64.48 0 0 0-15.16 10.25c-8.2 7.33-13.72 16.63-22.54 35.6l-2.08 4.49c-7.3 15.7-11.5 23.3-17.35 29.87-7.7 8.66-20.25 14.42-40.31 20.08-4.37 1.23-19.04 5.08-19.24 5.13-6.92 1.87-11.68 3.34-15.63 4.92-10.55 4.22-18.71 10.52-36.38 26.52l-1.7 1.54c-8.58 7.76-13.41 11.9-18.81 15.88-3.95 2.9-8 5.67-12.97 8.91-2.06 1.34-10.3 6.6-12.33 7.94-11.52 7.5-18.53 13.04-24.62 20.08a62.01 62.01 0 0 0-6.44 8.85c-4.13 6.91-6.27 13.15-9.2 25.11l-1.54 6.26c-.6 2.45-1.15 4.54-1.72 6.58-2.97 10.7-6.9 17.36-14.78 26.91L69.6 491a148.51 148.51 0 0 0-4.19 5.3 23.9 23.9 0 0 0-3.44 6.28c-1.16 3.23-1.52 5.9-1.87 11.94-.58 10.05-1.42 15.04-4.63 22.67-1.57 3.72-5.66 14.02-6.41 15.8a73.46 73.46 0 0 1-3.57 7.4c-2.88 5.14-6.71 10.12-13.12 16.95-5.96 6.36-8.87 10.9-10.61 16a56.88 56.88 0 0 0-1.38 4.82l-.46 1.84h-1.03l.52-2.08c.52-2.09.92-3.49 1.4-4.9 1.8-5.25 4.78-9.9 10.84-16.36 6.35-6.78 10.13-11.7 12.97-16.77a72.5 72.5 0 0 0 3.52-7.29c.75-1.76 4.84-12.06 6.4-15.8 3.17-7.5 3.99-12.4 4.56-22.33.35-6.14.72-8.88 1.93-12.23a24.9 24.9 0 0 1 3.58-6.54c1.27-1.7 2.6-3.37 4.22-5.34l4.11-4.95c7.8-9.46 11.66-16 14.59-26.54.56-2.04 1.1-4.12 1.71-6.56l1.53-6.26c2.96-12.04 5.13-18.36 9.32-25.39 1.84-3.08 4-6.05 6.54-8.99 6.17-7.12 13.24-12.7 24.83-20.26 2.05-1.33 10.28-6.6 12.33-7.94 4.96-3.22 9-5.98 12.92-8.87 5.37-3.95 10.19-8.08 18.74-15.82l1.7-1.54c17.76-16.09 25.98-22.43 36.67-26.7 4-1.6 8.8-3.09 15.75-4.96.21-.06 14.87-3.9 19.22-5.13 19.9-5.61 32.32-11.31 39.85-19.78 5.76-6.48 9.93-14.02 17.18-29.64l2.09-4.5c8.87-19.07 14.44-28.46 22.77-35.9a65.48 65.48 0 0 1 15.38-10.4l4.04-1.97c6.3-3.1 9.47-5.77 12.96-11.77a67.6 67.6 0 0 0 4.48-9.67c4.56-11.84 11.47-20.02 19.97-25 6.25-3.66 12.93-5.32 18.5-5.32 7.01 0 12.65-.12 20.17-.57a245.3 245.3 0 0 0 32.47-3.96c5-.98 9.75-2.13 14.22-3.45 13.43-3.98 20.38-5.02 32.94-5.78l2.24-.14c5.76-.37 9.8-.9 14.85-2.09 5.31-1.25 10.79-1.35 22.6-.7 9.04.5 12.84.58 17.21.1 5.71-.62 9.94-2.26 12.95-5.26 6.44-6.45 15.3-20.37 24.35-36.72zm0 450.21c-1.28-4.6-2.2-10.55-3.33-20.25l-.24-2.04-.23-2.03c-1.82-15.7-3.07-21.98-5.55-24.47-2.46-2.46-3.04-5.03-2.52-8.64.1-.6.18-1.1.39-2.15.69-3.54.77-5.04.08-6.84-.91-2.38-3.31-4.41-7.79-6.26-5.08-2.09-6.52-4.84-4.89-8.44.66-1.45 1.79-3.02 3.52-5.01 1.04-1.2 5.48-5.96 5.08-5.53 6.15-6.7 8.98-11.34 8.98-16.48a15.2 15.2 0 0 1 6.5-12.89v1.26a14.17 14.17 0 0 0-5.5 11.63c0 5.47-2.93 10.29-9.24 17.16.38-.42-4.04 4.33-5.07 5.5-1.67 1.93-2.75 3.43-3.36 4.77-1.37 3.04-.23 5.22 4.36 7.1 4.71 1.95 7.32 4.16 8.34 6.83.78 2.04.7 3.67-.03 7.4-.2 1.03-.3 1.51-.38 2.09-.48 3.33.03 5.59 2.23 7.8 2.74 2.74 3.98 8.96 5.84 25.06l.24 2.03.23 2.04c.82 7.01 1.53 12.06 2.34 16.03v4.33zm0-62.16c-1.4-3.13-4.43-9.9-4.95-11.17-1.02-2.53-1.25-3.8-.91-5.18.2-.84 2.05-4.68 2.32-5.33a70.79 70.79 0 0 0 3.54-11.2v3.99a62.82 62.82 0 0 1-2.62 7.6c-.31.75-2.09 4.46-2.27 5.18-.28 1.12-.08 2.22.87 4.57.41 1.02 2.5 5.7 4.02 9.09v2.45zm0-85.09c-1.65 1.66-3.66 2.9-6.4 4.13-.25.1-13.97 5.47-20.4 8.43-9.35 4.32-16.7 5.9-23.03 5.25-5.08-.53-9.02-2.25-14.77-5.92l-3.2-2.07a77.4 77.4 0 0 0-5.44-3.27c-4.05-2.18-3.25-5.8 1.47-10.47 3.71-3.68 9.6-7.93 18.73-13.8l4.46-2.82c17.95-11.33 18.22-11.5 22.27-14.74 11.25-9 19.69-14.02 26.31-15.1v1.02c-6.37 1.1-14.62 6-25.69 14.86-4.1 3.28-4.34 3.44-22.36 14.8a652.4 652.4 0 0 0-4.45 2.83c-9.07 5.83-14.92 10.05-18.57 13.66-4.31 4.28-4.95 7.13-1.7 8.88 1.7.91 3.29 1.88 5.5 3.3l3.2 2.08c5.64 3.59 9.45 5.25 14.34 5.76 6.13.64 13.32-.9 22.52-5.15 6.46-2.98 20.18-8.35 20.4-8.44 3.04-1.37 5.1-2.71 6.81-4.69v1.47zm0-41.37v1c-6.56.26-12.11 3.13-19.71 9.08l-4.63 3.68a51.87 51.87 0 0 1-4.4 3.14c-.82.52-5.51 3.33-6.22 3.76-3.31 2-6.15 3.8-8.87 5.6a112.61 112.61 0 0 0-8.16 5.92c-4.61 3.72-7.4 6.9-7.97 9.35-.63 2.67 1.48 4.53 7.05 5.46 10.7 1.78 20.92-.05 30.45-4.65a61.96 61.96 0 0 0 17.1-12.2 41.8 41.8 0 0 0 5.36-7.42v1.92a38.94 38.94 0 0 1-4.64 6.19 62.95 62.95 0 0 1-17.39 12.41c-9.7 4.68-20.13 6.55-31.05 4.73-6.06-1-8.65-3.29-7.85-6.67.64-2.74 3.53-6.05 8.31-9.9 2.35-1.9 5.1-3.88 8.24-5.97 2.73-1.82 5.58-3.61 8.9-5.62.72-.44 5.4-3.24 6.22-3.75 1.26-.8 2.6-1.76 4.3-3.09.8-.62 3.9-3.1 4.63-3.67 7.77-6.1 13.49-9.04 20.33-9.3zm0-154.6v1c-1.75-.24-4.3.23-7.82 1.55-10.01 3.75-13.8 5.07-19.15 6.76-1.78.56-2.63.83-3.87 1.24-1.48.5-3.16.76-6.74 1.16a1550.34 1550.34 0 0 0-2.64.3c-7.8.94-11.28 2.47-11.28 6.07 0 4.45 2.89 13.18 7.96 25.81a57.34 57.34 0 0 1 2.33 7.6 258.32 258.32 0 0 1 .84 3.46c1.86 7.62 3.17 10.71 5.56 11.67 2.21.88 4.7.6 7.47-.72 3.48-1.69 7.22-4.94 11.2-9.47 1.52-1.7 2.97-3.49 4.59-5.57l3.16-4.1c2.59-3.23 6.07-12.21 8.39-20.23v3.45c-2.29 7.2-5.27 14.5-7.61 17.41-.44.55-2.67 3.46-3.15 4.09-1.63 2.1-3.1 3.9-4.62 5.62-4.08 4.61-7.9 7.94-11.53 9.7-2.99 1.44-5.77 1.75-8.28.74-2.84-1.13-4.2-4.34-6.15-12.35a2097.48 2097.48 0 0 1-.84-3.46c-.8-3.2-1.47-5.45-2.28-7.46-5.14-12.8-8.04-21.55-8.04-26.19 0-4.37 3.84-6.06 12.16-7.07a160.9 160.9 0 0 1 2.65-.3c3.5-.39 5.15-.64 6.53-1.1 1.26-.42 2.1-.7 3.88-1.26 5.34-1.68 9.11-3 19.1-6.74 3.53-1.32 6.22-1.84 8.18-1.61zM0 292c10.13-11.31 18.13-23.2 23.07-35.39 3.3-8.14 6.09-16.12 10.81-30.55l1.59-4.84c6.53-19.94 10.11-29.82 14.77-39.56 6.07-12.72 12.55-21.18 20.27-25.54 6.66-3.76 10.2-7.86 12.22-13.15a46.6 46.6 0 0 0 1.86-6.58c1.23-5.2 2.05-7.59 3.93-10.36 2.45-3.62 6.27-6.53 12.1-8.96 15.78-6.58 16.73-7.04 18.05-9.01.65-.98.83-2.15.74-4.51-.03-.73-.23-3.82-.24-4A93.8 93.8 0 0 1 119 94c0-10.04.18-11.37 2.37-13.15.52-.42 1.13-.8 2.07-1.3.27-.14 2.18-1.12 2.84-1.48a68.4 68.4 0 0 0 9.12-5.87c2.06-1.54 2.64-2.14 8.01-7.93 3.78-4.09 6.21-6.36 8.96-8.12 3.64-2.33 7.2-3.12 10.9-2.11 4.4 1.2 10.81 2 18.78 2.46 6.9.4 12.9.5 21.95.5 4.87 0 8.97.47 15.4 1.57 7.77 1.33 9.3 1.54 12.38 1.54 4.05 0 7.43-.88 10.68-2.95 5.06-3.22 8.11-4.67 11.2-5.2 3.62-.64 4.77-.46 16.55 2.06 17.26 3.7 30.85 1.36 41.06-9.7 5.1-5.53 5.48-8.9 3.48-14.8-.83-2.42-1.03-3.1-1.17-4.3-.29-2.52.5-4.71 2.71-6.93 2.65-2.65 4.72-9.17 6.22-18.29h2.03c-1.56 9.71-3.77 16.65-6.83 19.7-1.79 1.8-2.36 3.39-2.14 5.28.11 1 .3 1.63 1.07 3.9 2.22 6.53 1.76 10.66-3.9 16.8-10.77 11.66-25.07 14.13-42.95 10.3-11.42-2.45-12.55-2.62-15.78-2.06-2.77.48-5.62 1.84-10.47 4.92a20.93 20.93 0 0 1-11.76 3.27c-3.25 0-4.81-.22-12.73-1.57C212.74 59.46 208.73 59 204 59c-9.1 0-15.11-.1-22.07-.5-8.09-.47-14.62-1.29-19.2-2.54-5.62-1.53-10.17 1.38-17.85 9.66-5.5 5.94-6.08 6.53-8.28 8.18a70.38 70.38 0 0 1-9.38 6.03c-.68.37-2.58 1.35-2.84 1.49-.84.44-1.35.76-1.75 1.08C121.16 83.6 121 84.8 121 94c0 1.85.06 3.54.17 5.44 0 .17.2 3.28.24 4.03.1 2.75-.13 4.29-1.08 5.71-1.67 2.5-2.27 2.8-18.95 9.74-5.48 2.29-8.99 4.96-11.2 8.24-1.71 2.51-2.47 4.73-3.64 9.7-.83 3.5-1.21 4.92-1.94 6.83-2.18 5.73-6.05 10.19-13.1 14.18-7.3 4.12-13.55 12.28-19.46 24.66-4.6 9.64-8.17 19.46-14.67 39.32l-1.58 4.84c-4.75 14.47-7.54 22.48-10.86 30.69-5.28 13.01-13.95 25.65-24.93 37.6v-2.97zm0 78v-.5l1-.01c6.32 0 7.47 5.2 4.6 13.36a60.36 60.36 0 0 1-5.6 11.3v-1.92a57.76 57.76 0 0 0 4.65-9.72c2.69-7.6 1.71-12.02-3.65-12.02-.34 0-.67 0-1 .02v-46.59a340.96 340.96 0 0 0 13.71-8.34c13.66-9.46 29.79-37.6 29.79-53.59 0-18.1 21.57-72.64 32.23-79.42 12.71-8.09 32.24-27.96 35.8-37.75 1.93-5.3 5.5-7.27 14.42-9.37 6.15-1.44 8.64-2.42 10.67-4.79 1.5-1.74 2.72-4.79 4.33-10.3.23-.78 1.9-6.68 2.43-8.46 3.62-12.08 7.3-18.49 13.47-20.39 2.5-.76 3.03-.98 9.74-3.7 7.49-3.03 11.97-4.43 17.12-4.92 6.75-.65 13.13.75 19.55 4.67 5.43 3.32 12.19 4.72 20.17 4.56 6.03-.12 12.2-1.07 19.83-2.8 1.82-.4 7.38-1.74 8.26-1.94 2.69-.6 4.34-.89 5.48-.89 4.97 0 8.93-.05 14.2-.27 7.9-.32 15.56-.92 22.75-1.88 8.5-1.14 15.9-2.73 21.88-4.82 18.9-6.62 32.64-18.3 33.67-27.59.29-2.56.4-2.96 2.79-11.11 2.33-7.95 3.21-12.93 2.72-18.23-.2-2.24-.69-4.38-1.48-6.42-1.5-3.92-2.63-9.4-3.43-16.18h.9c.77 6.47 1.89 11.72 3.47 15.82a24.93 24.93 0 0 1 1.54 6.69c.5 5.46-.4 10.54-2.77 18.6-2.36 8.06-2.47 8.47-2.74 10.95-1.09 9.75-15.1 21.68-34.33 28.41-6.06 2.12-13.52 3.72-22.09 4.87-7.22.96-14.92 1.57-22.83 1.89-5.3.21-9.27.27-14.25.27-1.04 0-2.64.27-5.26.87-.87.2-6.43 1.53-8.26 1.94-7.68 1.73-13.92 2.7-20.03 2.82-8.15.17-15.1-1.27-20.71-4.7-6.23-3.81-12.4-5.16-18.93-4.54-5.04.48-9.44 1.86-16.84 4.86-6.75 2.74-7.29 2.95-9.82 3.73-5.73 1.76-9.28 7.96-12.81 19.72-.53 1.77-2.2 7.66-2.43 8.46-1.66 5.65-2.91 8.78-4.53 10.67-2.22 2.58-4.84 3.62-12.01 5.3-7.8 1.83-11.13 3.66-12.9 8.54-3.65 10.04-23.32 30.06-36.2 38.25C65.94 190 44.5 244.2 44.5 262c0 16.34-16.3 44.78-30.22 54.41-2.14 1.48-8.24 5.12-14.28 8.68v-1.16 46.09zm0-173.7v-1.11c7.42-3.82 14.55-10.23 21.84-18.98 3.8-4.56 14.21-18.78 15.79-20.55 1.8-2.04 4.06-3.96 7.42-6.45 1.08-.8 4.92-3.57 5.49-3.99 9.36-6.85 14-11.96 15.98-19.36.8-2.98 1.54-6.78 2.46-12.3.23-1.44 2-12.46 2.56-15.79 2.87-16.77 5.73-26.79 10.07-32.1C92.46 52.43 101.5 38.13 101.5 33c0-2.54.34-3.35 6.05-15.71.68-1.49 1.25-2.74 1.77-3.93 2.5-5.75 3.9-10.04 4.14-13.36h1c-.23 3.48-1.66 7.87-4.23 13.76-.52 1.2-1.09 2.45-1.78 3.95-5.54 12.01-5.95 12.99-5.95 15.29 0 5.47-9.09 19.84-20.11 33.31-4.2 5.12-7.03 15.06-9.86 31.64-.57 3.33-2.33 14.33-2.57 15.78-.92 5.56-1.67 9.38-2.48 12.4-2.05 7.68-6.82 12.93-16.35 19.91l-5.49 3.98c-3.3 2.45-5.51 4.34-7.27 6.31-1.53 1.73-11.94 15.93-15.76 20.53-7.52 9.02-14.88 15.6-22.61 19.46zm0 361.83v-4.33c.48 2.36 1 4.35 1.6 6.15 2 6.03 4.6 8.26 8.19 6.59C28.76 557.69 43.5 542.4 43.5 527c0-16.2 6.37-31.99 17.1-46.3 1.88-2.5 3.66-4.4 5.53-6 .73-.62 1.45-1.18 2.3-1.8l2-1.43c3.68-2.68 5.32-5.28 7.08-12.59.75-3.07 1.38-5.02 4.2-13.26l.63-1.88c3.24-9.58 4.56-14.97 4.17-18.65-.48-4.43-3.8-5.23-11.3-1.64a81.12 81.12 0 0 1-9.15 3.7c-13.89 4.67-26.96 5.8-42.66 5.42l-1.95-.05-1.45-.02a39.8 39.8 0 0 0-15.05 2.96A21.81 21.81 0 0 0 0 438.37v-1.26a23.55 23.55 0 0 1 4.55-2.57 40.77 40.77 0 0 1 16.92-3.02l1.95.05c15.6.38 28.57-.75 42.32-5.37a80.12 80.12 0 0 0 9.04-3.65c8.04-3.84 12.16-2.85 12.72 2.43.42 3.89-.92 9.34-4.21 19.08l-.64 1.88c-2.8 8.2-3.43 10.15-4.16 13.18-1.82 7.52-3.59 10.34-7.47 13.16l-2 1.43c-.84.6-1.54 1.15-2.25 1.75a35.45 35.45 0 0 0-5.37 5.84c-10.61 14.15-16.9 29.74-16.9 45.7 0 15.88-15 31.45-34.29 40.45-4.3 2.01-7.39-.66-9.56-7.18-.23-.68-.44-1.39-.65-2.13zm0-62.16v-2.45l1.46 3.27c2.1 4.8 3.46 10.33 4.26 16.77.66 5.3.84 9.3 1.04 18.5.2 9.32.5 12.75 1.63 15.05 1.28 2.6 3.67 2.35 8.29-1.5 17.14-14.3 21.82-22.9 21.82-38.62 0-7.17 1.1-12.39 3.7-17.68 2.27-4.67 3.65-6.62 13.4-19.62a69.8 69.8 0 0 1 7.6-8.79 44.76 44.76 0 0 1 3.54-3.06c.38-.3.64-.52.89-.74a10.47 10.47 0 0 0 2.63-3.32 35.78 35.78 0 0 0 2.26-5.94l.37-1.2.36-1.15c.29-.91.48-1.55.66-2.16.45-1.53.74-2.68.91-3.66.38-2.2.12-3.49-.85-4.15-2.35-1.61-9.28-.24-23.8 4.94-9.54 3.4-16.12 4.17-27.85 4.26-7.71.06-10.43.4-13.25 2.12-3.48 2.12-5.84 6.4-7.58 14.26-.5 2.2-.99 4.19-1.49 5.98v-3.98l.51-2.22c1.8-8.1 4.28-12.6 8.04-14.9 3.04-1.85 5.86-2.2 13.77-2.26 11.61-.09 18.1-.84 27.51-4.2 14.93-5.32 21.95-6.71 24.7-4.83 1.38.94 1.71 2.6 1.28 5.15a33.69 33.69 0 0 1-.94 3.78l-.66 2.17-.36 1.15-.37 1.2a36.64 36.64 0 0 1-2.33 6.1c-.8 1.53-1.61 2.52-2.86 3.61l-.92.77-1.02.83c-.9.74-1.65 1.4-2.47 2.18a68.84 68.84 0 0 0-7.48 8.66c-9.7 12.93-11.07 14.87-13.31 19.46-2.52 5.15-3.59 10.22-3.59 17.24 0 16.04-4.82 24.91-22.18 39.38-5.04 4.2-8.18 4.55-9.83 1.18-1.22-2.5-1.52-5.94-1.73-15.47-.2-9.16-.38-13.15-1.03-18.4-.79-6.34-2.12-11.8-4.19-16.49L0 495.98zM379.27 0h1.04l1.5 5.26c3.28 11.56 4.89 19.33 5.26 27.8.49 11.01-1.52 21.26-6.63 31.17-7.8 15.13-20.47 26.5-36.22 34.1-12.38 5.96-26.12 9.17-36.22 9.17-6.84 0-17.24 1.38-37.27 4.62l-2.27.37c-24.5 3.99-31.65 5-37.46 5-3.49 0-4.08-.08-19.54-2.8-3.56-.64-6.32-1.1-9-1.5-20.23-2.96-31-1.2-31.96 7.86-.1.85-.18 1.72-.29 2.81l-.27 2.73c-1.1 10.9-2.02 15.73-4.31 19.96-2.9 5.34-7.77 7.95-15.63 7.95-10.2 0-12.92.6-15.5 3.17.52-.51-5.03 5.85-8.16 8.7-2.75 2.5-14.32 12.55-15.77 13.83a341.27 341.27 0 0 0-6.54 5.92c-6.97 6.49-11.81 11.76-14.6 16.15-5.92 9.3-10.48 18.04-11.69 24.08-1.66 8.3 3.67 9.54 19.02 1.21a626.23 626.23 0 0 1 44.54-21.9c3.5-1.56 14.04-6.2 15.68-6.95 5.05-2.25 8.3-3.8 10.78-5.15l1.95-1.07 2.18-1.18c1.76-.94 3.38-1.76 5-2.55 18.1-8.72 34.48-10.46 50.33-1.2 22.89 13.34 38.28 37.02 38.28 56.44 0 19.12-.73 25.13-5.18 33.2a45.32 45.32 0 0 1-4.94 7.12c-6.47 7.77-11.81 16.2-12.76 21.27-1.2 6.34 4.69 7.03 20.17-.05 13.31-6.08 22.4-14.95 28.5-26.32a80.51 80.51 0 0 0 6.1-15.13c.9-2.98 3.17-11.65 3.41-12.48a29.02 29.02 0 0 1 1.75-4.83c7.47-14.93 21.09-30.5 36.25-37.24 7.61-3.38 13-9.65 19.4-20.79.84-1.48 4.26-7.64 5.14-9.17 3.52-6.1 6.22-9.7 9.37-11.98 10.15-7.4 28.7-11.1 50.29-11.1 7.52 0 16.54-1.24 27.51-3.58a420.1 420.1 0 0 0 14.96-3.52c-1.3.33 15.54-3.98 19.42-4.89 14.15-3.33 41.07-5.01 64.11-5.01 17.36 0 27.82-9.23 38.53-38.67 6.62-18.21 6.62-26.37 2.69-34.35l-1.18-2.37A13.36 13.36 0 0 1 587.5 58c0-4.03 0-4.01 2.5-24.56.46-3.73.8-6.74 1.12-9.64.9-8.45 1.38-15.2 1.38-20.8 0-.94-.02-1.94-.04-3h1c.03 1.06.04 2.06.04 3 0 5.65-.48 12.43-1.39 20.9-.3 2.91-.66 5.93-1.11 9.66-2.5 20.45-2.5 20.47-2.5 24.44 0 1.97.45 3.57 1.45 5.68.24.51 1.16 2.35 1.17 2.36 4.06 8.24 4.06 16.68-2.65 35.13-10.84 29.8-21.63 39.33-39.47 39.33-22.96 0-49.83 1.68-63.89 4.99-3.86.9-20.69 5.2-19.4 4.88a421.05 421.05 0 0 1-14.99 3.53c-11.04 2.35-20.11 3.6-27.72 3.6-21.4 0-39.76 3.67-49.7 10.9-3 2.19-5.64 5.7-9.1 11.68-.87 1.52-4.29 7.68-5.14 9.17-6.49 11.3-12 17.71-19.86 21.2-14.9 6.63-28.38 22.03-35.75 36.77a28.17 28.17 0 0 0-1.69 4.67c-.23.8-2.5 9.49-3.4 12.5a81.48 81.48 0 0 1-6.19 15.3c-6.2 11.56-15.44 20.58-28.96 26.76-16.1 7.36-23 6.55-21.58-1.04 1-5.29 6.4-13.83 12.99-21.73a44.33 44.33 0 0 0 4.82-6.96c4.35-7.88 5.06-13.77 5.06-32.72 0-19.04-15.19-42.4-37.72-55.55-15.57-9.08-31.62-7.38-49.45 1.21a132.9 132.9 0 0 0-7.14 3.71l-1.95 1.07a158.83 158.83 0 0 1-10.85 5.19c-1.65.74-12.18 5.38-15.69 6.95a625.25 625.25 0 0 0-44.46 21.86c-15.95 8.66-22.37 7.16-20.48-2.29 1.24-6.2 5.83-15.02 11.82-24.42 2.85-4.48 7.74-9.8 14.77-16.34 1.98-1.85 4.12-3.79 6.56-5.94 1.46-1.29 13.02-11.33 15.75-13.82 3.09-2.8 8.6-9.14 8.14-8.67 2.82-2.82 5.75-3.46 16.2-3.46 7.5 0 12.04-2.43 14.75-7.42 2.2-4.07 3.11-8.84 4.2-19.59l.26-2.73.3-2.81c.56-5.42 4.47-8.5 11.23-9.6 5.44-.88 12.51-.51 21.86.86 2.7.4 5.47.86 9.04 1.49 15.33 2.7 15.96 2.8 19.36 2.8 5.73 0 12.9-1.03 37.3-5l2.27-.36c20.1-3.26 30.52-4.64 37.43-4.64 9.95 0 23.54-3.18 35.78-9.08 15.57-7.5 28.09-18.73 35.78-33.65 5.02-9.75 7-19.82 6.51-30.67-.37-8.37-1.96-16.08-5.23-27.57L379.27 0zm13.68 0h1.02c.78 3.9 1.92 8.7 3.51 14.88 3.63 14.05 3.06 27.03-.75 38.77a61 61 0 0 1-11.35 20.68 138.36 138.36 0 0 1-19.32 18.77c-11.32 9.02-23.36 15.49-35.95 18.39a258.63 258.63 0 0 1-22.57 4.07c-3.17.44-6.36.85-10.3 1.32l-9.39 1.12c-11.53 1.41-17.45 2.55-21.64 4.46-9.28 4.21-28.35 6.04-49.21 6.04-1.37 0-2.8-.12-4.3-.35-2.62-.41-5-1.03-9.14-2.29-7.34-2.21-9.63-2.75-12.63-2.56-3.9.23-6.63 2.29-8.47 6.89-1.86 4.66-2.42 7.53-3.34 14.98-1.1 8.98-2.87 12.12-9.97 14.3a40.12 40.12 0 0 0-6.8 2.66c-.63.33-1.16.64-1.76 1.02l-1.34.86c-1.9 1.14-3.86 1.49-9.25 1.49-3.2 0-8.83-.55-9.51-.39-1.22.28-.75-.14-7.14 6.24-1.5 1.5-3.49 3.18-6.32 5.37-1.52 1.18-7.16 5.43-7.94 6.03-4.96 3.78-8.33 6.6-11.06 9.38-4.88 4.98-6.85 9.15-5.56 12.7 1.34 3.67 4.07 4.42 8.9 2.82a55.72 55.72 0 0 0 7.77-3.48c1.5-.77 7.78-4.13 9.37-4.96a116.8 116.8 0 0 1 12.31-5.68 162.2 162.2 0 0 0 11.04-4.84c2.04-.97 10.74-5.16 13-6.22 4.41-2.1 8.1-3.78 11.65-5.29 17.14-7.3 29.32-9.9 37.67-6.65l5.43 2.1c2.3.88 4.17 1.62 6.02 2.38a150.9 150.9 0 0 1 13.07 6c18.34 9.63 30.35 22.13 34.79 39.87 6.96 27.85 3.6 45.53-8.08 62.4-3.97 5.75-3.52 9.2.06 8.97 4.14-.28 10.21-4.95 15.11-12.52 3.1-4.8 5.1-10.45 8.05-21.53l1.69-6.35c.66-2.47 1.24-4.52 1.83-6.5 4.93-16.56 11-27.28 21.56-34.76 7.15-5.06 23.73-15.5 25.48-16.75 6.74-4.81 10.53-9.44 14.34-18 7.74-17.44 21.09-24.34 44.47-24.34 9.36 0 17.91-1.13 29.53-3.49a624.86 624.86 0 0 0 6.2-1.28c2.4-.5 4.07-.84 5.66-1.13 4.03-.74 7.04-1.1 9.61-1.1 4.44 0 9.39-1 31.39-5.99l2.95-.66c16.34-3.67 25.64-5.35 31.66-5.35 1.54 0 2.4.01 6.4.1 7.8.15 12.27.13 17.33-.2 16.41-1.06 26.73-5.36 29.8-14.56a87.1 87.1 0 0 1 3.55-8.83c-.15.31 2.29-4.96 2.9-6.38 5.38-12.3 5.57-21.92-1.44-39.44a86.4 86.4 0 0 1-5.26-20.72c-1.61-11.98-1.38-23.14.1-40.35l.2-2.12h1l-.2 2.2c-1.48 17.15-1.7 28.24-.11 40.14a85.4 85.4 0 0 0 5.2 20.47c7.1 17.78 6.91 27.67 1.43 40.22-.62 1.43-3.06 6.72-2.91 6.4a86.17 86.17 0 0 0-3.52 8.73c-3.23 9.72-13.9 14.15-30.68 15.24-5.1.33-9.58.35-17.42.2-3.98-.09-4.84-.1-6.37-.1-5.91 0-15.18 1.67-31.44 5.32l-2.95.67c-22.16 5.02-27.05 6.01-31.61 6.01-2.5 0-5.45.36-9.43 1.09-1.58.29-3.25.62-5.64 1.11a4894.21 4894.21 0 0 0-6.2 1.29c-11.68 2.37-20.3 3.51-29.73 3.51-23.02 0-36 6.71-43.53 23.66-3.9 8.8-7.82 13.58-14.7 18.5-1.78 1.27-18.36 11.7-25.48 16.75-10.34 7.32-16.3 17.87-21.19 34.23-.58 1.96-1.15 4-1.82 6.47l-1.69 6.35c-2.98 11.18-5 16.9-8.17 21.81-5.05 7.81-11.37 12.68-15.89 12.98-4.7.31-5.3-4.23-.94-10.53 11.52-16.64 14.82-34.03 7.92-61.6-4.35-17.42-16.16-29.72-34.27-39.22-4-2.1-8.2-4-12.99-5.97-1.84-.75-3.7-1.49-6-2.38l-5.43-2.08c-8.03-3.12-20.02-.58-36.92 6.63-3.52 1.5-7.21 3.19-11.61 5.27l-13 6.22c-4.71 2.22-8.16 3.75-11.11 4.88a115.87 115.87 0 0 0-12.21 5.63c-1.58.83-7.86 4.18-9.37 4.96a56.55 56.55 0 0 1-7.9 3.54c-5.3 1.75-8.62.85-10.17-3.43-1.46-4.02.66-8.5 5.8-13.74 2.75-2.82 6.16-5.66 11.15-9.48.79-.6 6.43-4.85 7.94-6.02a66.96 66.96 0 0 0 6.23-5.28c6.74-6.74 6.1-6.16 7.61-6.51.87-.2 6.69.36 9.74.36 5.22 0 7.03-.32 8.74-1.35l1.31-.84c.62-.4 1.18-.72 1.84-1.07a41.07 41.07 0 0 1 6.96-2.72c6.64-2.04 8.22-4.84 9.28-13.47.93-7.53 1.5-10.47 3.4-15.24 1.99-4.95 5.04-7.26 9.34-7.51 3.17-.2 5.5.35 12.97 2.6a63.54 63.54 0 0 0 9.02 2.26c1.45.22 2.83.34 4.14.34 20.71 0 39.7-1.82 48.8-5.96 4.32-1.96 10.29-3.1 21.93-4.53l9.4-1.12c3.92-.48 7.11-.88 10.27-1.32 8.16-1.14 15.4-2.43 22.49-4.06 12.42-2.86 24.33-9.26 35.55-18.2a137.4 137.4 0 0 0 19.18-18.64 60.02 60.02 0 0 0 11.15-20.32c3.76-11.57 4.32-24.36.75-38.23A284.86 284.86 0 0 1 392.95 0zM506.7 0h1.26c-.5.66-.9 1.18-1.17 1.51-3.95 4.96-6.9 7.92-9.82 9.57A10.02 10.02 0 0 1 492 12.5c-2.38 0-4.24.67-6.71 2.21l-2.65 1.71c-4.38 2.8-8.01 4.08-13.64 4.08-5.6 0-9.99-1.26-16.08-4.05a202.63 202.63 0 0 1-2.3-1.06l-2.18-.98c-1.6-.7-2.92-1.17-4.17-1.48a13.42 13.42 0 0 0-3.27-.43c-2.3 0-4.3-.68-11-3.37l-1.56-.62c-5-1.97-8.1-2.82-10.52-2.66-2.93.2-4.42 2.03-4.42 6.15 0 20.76-5.21 50.42-12.15 57.35-7.58 7.59-26.55 23.7-34.06 29.06-13.16 9.4-31.17 20.2-44.11 25.06a106.87 106.87 0 0 1-13.32 4.03c-3.28.78-6.6 1.43-11.25 2.24-.53.1-8.8 1.5-11.5 1.99-4.86.87-9.3 1.74-14 2.76-20.62 4.48-25.07 5.01-38.11 5.01-2.49 0-2.9-.07-14.05-2-2.42-.42-4.31-.73-6.15-1-8.11-1.19-13.83-1.36-17.64-.2-4.54 1.4-5.93 4.65-3.7 10.52 2.02 5.28 4.84 8.61 8.84 10.74 3.26 1.74 6.75 2.6 13.82 3.71 9.42 1.48 10.94 1.75 15.5 2.92a78.2 78.2 0 0 1 18.62 7.37c8.3 4.58 14.58 11.5 19.98 20.89 2.73 4.73 9.46 19.33 10.54 21.19 3.4 5.85 6.26 6.63 10.89 2 4.95-4.94 10.35-8.37 21.13-14.06.47-.25 2.06-1.1 2.12-1.12 7.98-4.21 11.92-6.51 15.87-9.54 5.11-3.9 8.66-8.1 10.77-13.11 8.52-20.24 20.75-33.31 32.46-33.31l5.5.03c10.53.08 17.35.02 24.9-.31 13.66-.62 23.78-2.09 29.39-4.67 5.85-2.7 13.42-5.49 24.18-9.02 3.46-1.14 6.29-2.05 12.7-4.1 7.7-2.45 11.08-3.54 15.17-4.9a1059.43 1059.43 0 0 1 11.33-3.72c3.67-1.2 5.96-2 8.03-2.78a59.88 59.88 0 0 0 6.66-2.94c1.87-.98 3.76-2.1 5.86-3.5 3.48-2.33 6.15-3.13 12.04-4.13l1.15-.2c5.71-1.01 9-2.3 12.76-5.63 7.82-6.96 8.58-23.18 3.84-44.52-1.7-7.67-2.1-19.28-1.57-35.47A837.22 837.22 0 0 1 546.76 0h1l-.15 3.06c-.32 6.42-.53 11.02-.68 15.62-.51 16.1-.12 27.65 1.56 35.21 4.82 21.68 4.04 38.2-4.16 45.48-3.91 3.48-7.37 4.84-13.24 5.87l-1.16.2c-5.76.99-8.32 1.75-11.65 3.98a63.73 63.73 0 0 1-5.96 3.56 60.86 60.86 0 0 1-6.77 2.99c-2.09.79-4.39 1.58-8.07 2.79a5398.31 5398.31 0 0 1-11.32 3.71c-4.1 1.37-7.48 2.46-15.18 4.92-6.42 2.04-9.24 2.95-12.7 4.08-10.73 3.53-18.27 6.3-24.07 8.98-5.76 2.66-15.97 4.14-29.77 4.77-7.56.33-14.4.39-24.95.31l-5.49-.03c-11.19 0-23.16 12.79-31.54 32.7-2.19 5.19-5.84 9.52-11.08 13.52-4.02 3.07-7.99 5.39-16.01 9.62l-2.12 1.12c-10.7 5.65-16.04 9.04-20.9 13.9-5.14 5.14-8.75 4.15-12.45-2.22-1.12-1.92-7.85-16.5-10.54-21.2-5.33-9.24-11.48-16.02-19.6-20.5a77.2 77.2 0 0 0-18.4-7.28c-4.5-1.17-6.02-1.43-15.4-2.9-7.17-1.12-10.74-2-14.13-3.81-4.22-2.25-7.2-5.77-9.3-11.27-2.43-6.39-.78-10.26 4.34-11.83 4-1.22 9.82-1.05 18.08.17 1.84.27 3.74.58 6.17 1 11.02 1.9 11.48 1.98 13.88 1.98 12.96 0 17.35-.52 37.9-4.99 4.71-1.02 9.16-1.9 14.03-2.77 2.71-.48 10.98-1.9 11.5-1.98 4.64-.81 7.95-1.46 11.2-2.23 4.55-1.07 8.76-2.34 13.2-4 12.83-4.81 30.79-15.59 43.88-24.94 7.47-5.33 26.4-21.4 33.94-28.94C407.3 61.98 412.5 32.49 412.5 12c0-4.61 1.86-6.9 5.35-7.15 2.63-.18 5.8.7 10.96 2.73l1.56.62c6.53 2.62 8.53 3.3 10.63 3.3 1.14 0 2.3.16 3.5.46 1.32.33 2.68.82 4.34 1.53a90.97 90.97 0 0 1 3.34 1.52l1.15.54c5.98 2.73 10.23 3.95 15.67 3.95 5.41 0 8.87-1.21 13.1-3.92.2-.13 2.1-1.38 2.66-1.72 2.62-1.63 4.64-2.36 7.24-2.36 1.47 0 2.94-.43 4.47-1.3 2.78-1.56 5.67-4.45 9.54-9.31l.7-.89zM324.54 600h-2.03c.49-2.96.91-6.2 1.28-9.66.44-4.1.76-8.25.98-12.21.08-1.39.14-2.65-.35-7.29-.47-1.94-.93-4.14-1.36-6.54-2.01-11.26-2.66-22.9-1.14-33.78a60.76 60.76 0 0 1 5.18-17.95 70.78 70.78 0 0 1 12.6-18.22c3.38-3.6 5.53-5.5 11.83-10.79 4.5-3.78 6.35-5.56 7.52-7.5.64-1.07.95-2.06.95-3.06 0-1.75 0-1.74-.75-9.23-.36-3.7-.57-6.3-.68-8.96-.5-12.1 1.62-19.6 8.11-21.76 15.9-5.3 25.89-12.1 33.45-25.54C409.6 390.65 425.85 376 436 376c12.36 0 20-1.96 29.41-8.8 6.76-4.92 9.5-6.6 12.47-7.46 2.22-.64 3.8-.74 9.12-.74 1.86 0 3.53-.83 5.57-2.62 1.08-.96 5.11-5.12 5.6-5.6 6.04-5.85 11.98-8.78 20.83-8.78 2.45 0 4.54.04 7.32.12 7.51.23 8.87.17 11.27-.7 3.03-1.1 5.53-3.03 14.75-11.17 8-7.06 10.72-8.92 22.87-16.47 1.44-.9 2.59-1.63 3.69-2.37a69.45 69.45 0 0 0 9.46-7.5c4.12-3.88 8.02-7.85 11.64-11.9v2.98a201.58 201.58 0 0 1-10.27 10.38c-3.18 3-6.2 5.35-9.72 7.7-1.12.76-2.28 1.5-3.75 2.4-12.05 7.5-14.71 9.32-22.6 16.28-9.46 8.35-12.01 10.32-15.39 11.55-2.74 1-4.19 1.06-12.01.82-2.76-.08-4.83-.12-7.26-.12-8.27 0-13.75 2.7-19.43 8.22-.44.43-4.52 4.64-5.68 5.66-2.37 2.09-4.46 3.12-6.89 3.12-5.1 0-6.6.1-8.56.66-2.67.78-5.29 2.37-11.85 7.15-9.8 7.13-17.85 9.19-30.59 9.19-9.22 0-24.96 14.2-34.13 30.49-7.84 13.94-18.24 21.02-34.55 26.46-5.31 1.77-7.21 8.51-6.75 19.78.1 2.6.31 5.19.68 8.84.75 7.62.75 7.58.75 9.43 0 1.38-.42 2.73-1.24 4.09-1.33 2.2-3.26 4.07-7.94 8-6.25 5.24-8.36 7.12-11.67 10.63a68.8 68.8 0 0 0-12.25 17.71 58.8 58.8 0 0 0-5 17.36c-1.49 10.66-.85 22.09 1.13 33.15.43 2.37.88 4.53 1.33 6.44.16.66.3 1.25.6 4.06a249.3 249.3 0 0 1-1.17 16.12c-.37 3.37-.78 6.53-1.25 9.44zm-13.4 0h-1.05l.12-.28c3.07-7.16 4.29-11.83 4.29-18.72 0-3.57-.07-4.93-.76-15.65-.77-12.04-1-19.64-.55-28.3.58-11.5 2.4-22.1 5.81-32.16 1.3-3.8 2.8-7.5 4.55-11.1 3.46-7.14 6.83-12.39 10.42-16.6a59.02 59.02 0 0 1 4.35-4.56c.43-.4 3-2.8 3.67-3.45 5.72-5.6 7.51-11.52 7.51-29.18 0-18.84 2.9-23.77 15.82-28.24 1.09-.37 1.92-.67 2.77-.98a51.3 51.3 0 0 0 6.1-2.7c4.95-2.6 9.64-6.22 14.44-11.42 25.5-27.63 37.15-35.16 56.37-35.16 8.28 0 14.54-1.95 22-6.3 1.78-1.03 13.82-8.82 18.16-11.27 2.83-1.59 5.66-3.03 8.63-4.39 7.92-3.6 13.97-4.45 26.6-4.8 7.53-.2 10.7-.49 14.26-1.58 4.55-1.4 8.06-4 10.93-8.43 2.2-3.41 6.85-7.08 14.66-12.06 1.61-1.03 3.27-2.05 5.65-3.5 9.53-5.85 11.56-7.13 14.81-9.57 5.34-4 9.3-8.37 13.68-14.77a204.2 204.2 0 0 0 5.62-8.75v1.9c-1.97 3.17-3.4 5.38-4.8 7.42-4.42 6.48-8.46 10.92-13.9 15-3.29 2.46-5.32 3.75-14.89 9.61a375.06 375.06 0 0 0-5.63 3.5c-7.7 4.9-12.26 8.52-14.36 11.76-3 4.63-6.7 7.39-11.48 8.85-3.68 1.12-6.9 1.42-14.53 1.63-12.5.34-18.44 1.18-26.2 4.7a111.08 111.08 0 0 0-8.56 4.35c-4.3 2.43-16.34 10.22-18.15 11.27-7.6 4.43-14.03 6.43-22.5 6.43-18.87 0-30.3 7.4-55.63 34.84-4.88 5.28-9.67 8.97-14.7 11.62-2 1.05-4 1.92-6.23 2.75-.86.32-1.7.62-5.37 1.87-5.08 1.76-7.44 3.25-9.28 6.37-2.23 3.78-3.29 9.94-3.29 20.05 0 17.9-1.87 24.07-7.8 29.89-.69.67-3.27 3.06-3.69 3.46a58.04 58.04 0 0 0-4.28 4.49c-3.53 4.14-6.86 9.32-10.28 16.38a95.19 95.19 0 0 0-4.5 10.99c-3.38 9.97-5.18 20.48-5.76 31.9-.44 8.6-.22 16.17.55 28.17.69 10.76.76 12.12.76 15.72 0 6.35-1.02 10.87-4.35 19zm25.08 0h-1c-.04-4.73.06-9.39.28-15.02.26-6.41-.4-11.79-2.53-24.37l-.31-1.86c-2.12-12.55-2.76-19.35-1.97-26.47 1.03-9.25 4.75-16.68 12-22.67 22.04-18.2 29.81-30.18 29.81-44.61 0-2.6-.3-4.81-.98-8.17-.97-4.79-1.1-5.68-.97-7.57.2-2.56 1.27-4.7 3.56-6.72 2.67-2.35 7.05-4.6 13.72-7.01 9.72-3.5 15.52-9.18 24.3-21.57l1.78-2.5c4.48-6.33 7.1-9.63 10.43-12.78 4.31-4.07 8.98-6.77 14.54-8.17 13.3-3.32 20.37-5.47 25.34-7.64a49.5 49.5 0 0 0 5.28-2.7c1.1-.65 1.75-1.04 4.24-2.6 2.7-1.68 5.22-2.08 11.38-2.28 5.44-.18 7.9-.43 10.97-1.41a21.47 21.47 0 0 0 9.54-6.22c4.87-5.3 10.03-7.61 17.79-8.9 1.07-.18 1.88-.3 3.86-.58 6.9-.97 9.94-1.69 13.48-3.62 4.5-2.45 6.79-4.44 23.46-19.68l3.14-2.85c9.65-8.71 16.12-13.83 21.42-16.48 4.25-2.12 7.6-4.69 11.22-8.6v1.45c-3.42 3.57-6.69 6-10.78 8.05-5.18 2.59-11.61 7.67-21.2 16.32l-3.12 2.85c-16.8 15.35-19.05 17.3-23.66 19.82-3.68 2-6.8 2.75-13.82 3.73-1.97.28-2.78.4-3.84.57-7.56 1.26-12.52 3.48-17.21 8.6a22.47 22.47 0 0 1-9.97 6.5c-3.2 1-5.72 1.27-11.25 1.45-5.98.2-8.39.57-10.89 2.13a144 144 0 0 1-4.25 2.61 50.48 50.48 0 0 1-5.39 2.75c-5.04 2.2-12.15 4.37-25.5 7.7-9.74 2.44-15.26 7.65-24.4 20.56l-1.77 2.5c-8.9 12.54-14.82 18.34-24.78 21.93-6.57 2.36-10.85 4.57-13.4 6.82-2.1 1.86-3.05 3.74-3.22 6.04-.13 1.76 0 2.63.95 7.3.7 3.42 1 5.7 1 8.37 0 14.79-7.93 27-30.18 45.39-7.03 5.8-10.64 13-11.64 22-.78 7-.14 13.73 1.96 26.2l.32 1.85c2.15 12.65 2.8 18.07 2.54 24.58-.22 5.57-.32 10.2-.28 14.98zM95.9 600h-2.04c.68-3.82 1.14-8.8 1.61-15.98.2-3.11.27-4.06.39-5.6 1.3-17.54 4.04-27.14 11.5-33.2 4.65-3.77 7.22-8.92 8.67-16 .51-2.52.7-3.87 1.33-9.17.66-5.5 1.16-8.06 2.24-10.36 1.45-3.09 3.82-4.69 7.39-4.69 14.28 0 38.48 9.12 53.6 20.2 8.66 6.35 21.26 13.32 31.74 17.11 13.03 4.71 21.89 4.41 24.75-1.73 1.7-3.64 1.92-4.11 2.65-5.77 2.93-6.67 4.69-12.2 5.25-17.5.23-2.17.24-4.23.02-6.2-.32-2.75-1.42-4.55-4.08-7.35l-1.32-1.37a30.59 30.59 0 0 1-2.41-2.79 30.37 30.37 0 0 1-2.5-4.07l-1.13-2.14c-1.62-3.1-2.68-4.6-4.12-5.56-5.26-3.5-14.8-5.5-28.55-6.83a272.42 272.42 0 0 0-9.04-.71l-2.18-.17c-9.57-.73-15.12-1.56-19.06-3.2C156.57 471.07 136 450.5 136 440c0-5.34 1.74-9.53 5.47-14.13 1.98-2.44 11.12-11.71 12.79-13.54 4.52-4.97 10.16-9.54 17.68-14.66 2.8-1.9 14.78-9.6 17.49-11.49a50.54 50.54 0 0 0 6.34-5.43c1.53-1.5 6.96-7.13 7.12-7.3 7.18-7.3 12.7-11.56 19.74-14.38 3.36-1.34 8.13-2.79 17.45-5.38a9577.18 9577.18 0 0 1 11.78-3.28 602.6 602.6 0 0 0 12.67-3.7c20.4-6.24 34-12.08 40.79-18.44 8.74-8.2 11.78-13.84 15.73-26.02 2.02-6.22 3.09-9.04 5.07-12.72 9.54-17.71 28.71-39.37 43.5-45.45C383.77 238.25 389 232.34 389 226c0-2.89 2.73-8.4 6.83-13.73 4.76-6.2 10.65-11.36 16.75-14.18 12.5-5.77 33.5-10.09 47.42-10.09 5.32 0 9.83-1.5 16.42-4.89 9.2-4.71 10.1-5.11 13.58-5.11 10.42 0 32.06-2.55 45.76-5.97l3.88-.98 3.47-.89c2.6-.66 4.33-1.08 5.93-1.43 3.9-.86 6.76-1.23 9.58-1.17 2.74.06 5.47.52 8.67 1.48 4.56 1.37 13.71-.9 22.87-5.68a68.07 68.07 0 0 0 9.84-6.2v2.4c-11.09 8.14-25.76 13.66-33.29 11.4a29.72 29.72 0 0 0-8.13-1.4c-2.63-.05-5.36.3-9.11 1.12a238 238 0 0 0-9.33 2.3l-3.9.99C522.38 177.43 500.58 180 490 180c-2.99 0-3.91.4-12.67 4.89-6.85 3.51-11.61 5.11-17.33 5.11-13.65 0-34.35 4.26-46.58 9.9-5.78 2.67-11.42 7.62-16 13.58-3.85 5.02-6.42 10.2-6.42 12.52 0 7.27-5.8 13.82-20.62 19.92-14.27 5.88-33.16 27.21-42.5 44.55-1.9 3.55-2.95 6.28-4.93 12.4-4.05 12.47-7.23 18.39-16.27 26.86-7.08 6.64-20.87 12.57-41.57 18.89a604.52 604.52 0 0 1-12.7 3.71 1495.1 1495.1 0 0 1-11.8 3.28c-9.24 2.58-13.97 4.01-17.24 5.32-6.73 2.69-12.05 6.8-19.05 13.92-.15.15-5.6 5.8-7.15 7.32a52.4 52.4 0 0 1-6.6 5.65c-2.74 1.92-14.75 9.63-17.5 11.5-7.4 5.04-12.94 9.52-17.33 14.35-1.72 1.9-10.8 11.11-12.71 13.46-3.47 4.26-5.03 8.03-5.03 12.87 0 9.5 20 29.5 33.38 35.08 3.67 1.53 9.1 2.34 18.45 3.05a586.23 586.23 0 0 0 4.34.32c3.24.23 5.07.37 6.93.55 14.08 1.37 23.82 3.4 29.45 7.17 1.82 1.2 3.02 2.91 4.8 6.29l1.11 2.13a28.55 28.55 0 0 0 2.34 3.81c.62.83 1.3 1.6 2.26 2.61.23.24 1.1 1.16 1.32 1.37 2.93 3.09 4.24 5.23 4.61 8.5.24 2.12.23 4.33-.01 6.64-.59 5.55-2.4 11.25-5.41 18.1-.74 1.67-.96 2.15-2.66 5.8-3.49 7.47-13.33 7.8-27.25 2.77-10.67-3.86-23.43-10.92-32.25-17.38C164.62 515.96 140.82 507 127 507c-5 0-6.4 3.02-7.64 13.29a99.03 99.03 0 0 1-1.36 9.33c-1.53 7.5-4.3 13.04-9.37 17.16-6.87 5.58-9.5 14.78-10.77 31.8-.11 1.52-.18 2.47-.38 5.57-.46 7.01-.91 11.99-1.57 15.85zm8.05 0h-1.02c.29-1.41.58-2.94.9-4.59l1.05-5.62c2.5-13.3 4.2-19.92 6.68-24.05 1.7-2.84 3.68-5.5 8.05-11.03 8.21-10.36 10.88-14.55 10.88-18.71l-.02-1.69c-.02-1.78-.02-2.7.02-3.77.21-5.05 1.47-8.2 4.64-9.4 3.92-1.5 10.39.44 20.12 6.43 9.56 5.88 17.53 10.7 25.91 15.66 1.31.78 14.27 8.41 17.67 10.45a714.21 714.21 0 0 1 6.42 3.9c13.82 8.5 38.94 5.05 46.3-7.83 3.6-6.28 4.54-8.52 7.78-17.32a82.3 82.3 0 0 1 1.18-3.07 42.27 42.27 0 0 1 4.06-7.64c9.33-13.98 14.92-26.1 14.92-36.72 0-3.66.75-6.62 3.36-14.85.52-1.64.83-2.66 1.15-3.73 3.64-12.23 3.04-19.12-4.29-24a23.1 23.1 0 0 0-9.98-3.78c-7.2-.93-14.49 1.17-23.91 5.88-1.55.78-6.64 3.44-7.6 3.93a62.6 62.6 0 0 0-4.14 2.3l-4.4 2.66c-11.62 6.92-20.4 9.18-32.81 6.08-3.32-.84-6.24-1.4-13.1-2.64-13.25-2.39-18.7-3.75-23.33-6.46-6.23-3.67-7.46-9.02-2.88-16.65A93.1 93.1 0 0 1 172 415.42a157 157 0 0 1 8.32-7.66c-.07.05 6.16-5.3 7.82-6.77a85.12 85.12 0 0 0 6.5-6.33c7.7-8.46 12.78-13.36 20.08-18.57 9.94-7.1 21.4-12.36 35.18-15.58 37.03-8.64 51-12.7 58.83-17.93 8.6-5.73 21.3-24.77 36.84-54.81 5.22-10.1 12.27-18.4 21.13-25.71 5.13-4.24 9.56-7.25 17.55-12.23 7.42-4.62 9.62-6.14 11.38-8.16a21.15 21.15 0 0 0 2.95-4.87c.61-1.3 2.87-6.47 3-6.77 1.36-3 2.56-5.4 3.95-7.73 6.53-10.97 16.03-18 31.4-20.8 12.73-2.3 19.85-2.7 29.68-2.3 3.25.13 4.13.16 5.6.14 5.15-.07 9.71-1.04 16.61-3.8 20.74-8.3 38.75-12.04 59.19-12.04 3.05 0 6.03.15 10.48.48l2.09.16c12.45.96 18.08.96 25.34-.63a49.65 49.65 0 0 0 14.09-5.45v1.15a50.52 50.52 0 0 1-13.88 5.28c-7.38 1.61-13.08 1.61-25.63.65l-2.08-.16c-4.43-.33-7.39-.48-10.41-.48-20.3 0-38.2 3.72-58.81 11.96-7.01 2.8-11.7 3.8-16.97 3.88-1.5.02-2.39-.01-5.66-.14-9.76-.4-16.8-.01-29.47 2.3-15.06 2.73-24.32 9.58-30.71 20.31a72.8 72.8 0 0 0-3.9 7.63c-.12.28-2.39 5.47-3.01 6.79a22 22 0 0 1-3.1 5.1c-1.86 2.13-4.07 3.66-11.6 8.35-7.95 4.96-12.35 7.95-17.44 12.15-8.76 7.23-15.73 15.43-20.89 25.4-15.61 30.2-28.36 49.32-37.16 55.19-7.98 5.32-21.97 9.39-59.17 18.07-13.65 3.18-24.98 8.39-34.82 15.42-7.22 5.16-12.27 10.01-19.92 18.43a86.07 86.07 0 0 1-6.57 6.4c-1.67 1.48-7.91 6.83-7.84 6.77-3.27 2.84-5.8 5.16-8.26 7.62a92.1 92.1 0 0 0-14.27 18.13c-4.3 7.16-3.22 11.89 2.53 15.26 4.47 2.63 9.88 3.99 23.24 6.39a185.7 185.7 0 0 1 12.92 2.6c12.11 3.03 20.64.84 32.06-5.96l4.4-2.65c1.66-1 2.96-1.73 4.2-2.35.95-.48 6.04-3.14 7.6-3.92 9.59-4.8 17.04-6.94 24.49-5.98a24.1 24.1 0 0 1 10.4 3.93c7.82 5.21 8.45 12.52 4.7 25.13-.32 1.07-.64 2.1-1.16 3.74-2.57 8.12-3.31 11.04-3.31 14.55 0 10.88-5.66 23.14-15.08 37.28a41.28 41.28 0 0 0-3.97 7.46c-.37.9-.73 1.82-1.18 3.04-3.25 8.85-4.21 11.13-7.84 17.47-7.67 13.42-33.43 16.95-47.7 8.18a578.4 578.4 0 0 0-6.4-3.89c-3.4-2.04-16.36-9.67-17.67-10.45-8.38-4.97-16.36-9.78-25.92-15.66-9.5-5.85-15.7-7.7-19.24-6.36-2.68 1.02-3.8 3.82-4 8.51a61.12 61.12 0 0 0-.02 3.72l.02 1.7c0 4.5-2.69 8.73-11.52 19.87-3.92 4.95-5.87 7.59-7.55 10.39-2.39 3.97-4.08 10.56-6.56 23.72l-1.05 5.62-.86 4.4zm10.5 0h-1c.03-.34.04-.68.04-1 0-12.39 8.48-33.57 19.16-43.37a26.18 26.18 0 0 0 3.67-4.17 35.8 35.8 0 0 0 2.88-4.9c.36-.72 1.75-3.66 2.1-4.36 3.22-6.29 6.84-6.54 16.97.39 1.34.9 6.07 4.16 6.4 4.38 2.62 1.8 4.67 3.2 6.7 4.56 5.03 3.39 9.37 6.2 13.51 8.7 14.33 8.67 25.49 13.27 34.11 13.27 16.86 0 32.71-5.95 39.6-14.8 1.59-2.04 3.2-5.17 5.06-9.63.8-1.92 1.64-4.06 2.67-6.8l2.74-7.33c4.66-12.44 7.76-19.06 11.56-23.27 7.9-8.79 14.87-36 14.87-52.67 0-1.9.17-3.11 1.02-8.27.37-2.2.58-3.6.74-5.07.63-5.51.21-9.46-1.68-12.39-4.6-7.1-19.7-9.23-38.46-4.78a100.57 100.57 0 0 0-18.94 6.3c-5.17 2.37-17.11 9.74-16.5 9.4-6.72 3.64-12.97 4.15-24.8 1.3-29.55-7.14-30.43-8.62-15.26-26.81 17.44-20.93 47.12-46.18 56.38-46.18 9.92 0 53.84-11.98 65.78-17.95 9.46-4.73 24.32-21.18 36.82-37.85.71-.95 13.5-21.6 19.2-29.6 9.35-13.13 18.22-22.55 26.95-27.53 7.29-4.17 13.16-10.28 18.8-18.73 1.93-2.9 10.52-17.65 12.73-20.41 1.54-1.93 3-3.21 4.52-3.89 14.07-6.25 24.22-9.04 39.2-9.04h29c4.05 0 7.36-.4 22.93-2.5l4.3-.57c9.92-1.3 16.57-1.93 21.77-1.93 1.66 0 2.95.01 6.03.04 18.61.19 28.55-.48 44.86-4.03 3.1-.67 6.13-1.78 9.11-3.31v1.12a37.96 37.96 0 0 1-8.9 3.17c-16.4 3.56-26.4 4.24-45.08 4.05-3.08-.03-4.36-.04-6.02-.04-5.15 0-11.76.63-21.64 1.92l-4.3.58c-15.64 2.11-18.94 2.5-23.06 2.5h-29c-14.81 0-24.84 2.75-38.8 8.96-1.34.6-2.69 1.78-4.14 3.6-2.16 2.68-10.72 17.39-12.68 20.33-5.72 8.57-11.7 14.8-19.13 19.04-8.57 4.9-17.36 14.23-26.63 27.24-5.68 7.97-18.47 28.64-19.22 29.63-12.6 16.8-27.52 33.32-37.18 38.15-12.06 6.03-56.14 18.05-66.22 18.05-8.82 0-38.39 25.15-55.62 45.82-14.6 17.52-14.19 18.21 14.74 25.2 11.6 2.8 17.6 2.3 24.09-1.2-.67.35 11.31-7.03 16.56-9.44 5.41-2.48 11.6-4.59 19.11-6.37 19.13-4.53 34.65-2.35 39.54 5.22 2.05 3.17 2.48 7.32 1.84 13.04a96.34 96.34 0 0 1-.75 5.13c-.84 5.08-1.01 6.29-1.01 8.1 0 16.9-7.03 44.33-15.13 53.33-3.68 4.09-6.76 10.65-11.37 22.96-.35.93-2.2 5.94-2.73 7.33-1.04 2.76-1.88 4.9-2.68 6.84-1.9 4.53-3.55 7.73-5.2 9.85-7.1 9.13-23.25 15.19-40.39 15.19-8.86 0-20.15-4.65-34.63-13.42-4.15-2.51-8.5-5.32-13.55-8.72a861.54 861.54 0 0 1-6.71-4.56l-6.4-4.39c-9.68-6.63-12.61-6.42-15.5-.75-.35.68-1.74 3.62-2.1 4.35a36.77 36.77 0 0 1-2.96 5.03c-1.12 1.57-2.37 3-3.81 4.33-10.47 9.6-18.84 30.51-18.84 42.63l-.03 1zm-29.65 0h-1.1c1.17-2.52 1.79-5.2 1.79-8 0-20 4.83-42.04 12.15-49.35 5.17-5.18 7.77-8.38 9.9-12.74 2.64-5.41 3.95-12 3.95-20.91 0-6.82 1.14-11.59 3.37-15.07 1.74-2.7 3.6-4.21 8.91-7.52a31.64 31.64 0 0 0 3.9-2.79c4.61-3.96 6.58-6.2 7.72-9.41 1.43-4.02.93-9.04-1.86-16.02a68.98 68.98 0 0 0-3.99-8.07l-.93-1.7a75.47 75.47 0 0 1-2.64-5c-5.16-10.71-3.77-18.9 7.68-29.78a204 204 0 0 1 26.81-21.55c3.96-2.69 16.8-10.8 19.24-12.5 1.99-1.4 4.33-3.3 7.77-6.3-.02 0 7.23-6.39 9.47-8.3 4.97-4.26 9.09-7.5 13.05-10.15 4.72-3.15 8.97-5.28 12.87-6.32 12.78-3.41 15.6-4.18 21.77-5.97 12.55-3.64 21.96-6.9 28.14-10a45.47 45.47 0 0 1 7.47-2.79c8.66-2.66 12.02-4.1 16.97-8.1 6.78-5.46 13.07-14.25 19.33-27.87 15.97-34.77 19.08-39.39 32.15-49.19 3.14-2.36 6.37-4.1 11.43-6.4l2.33-1.04c11.93-5.35 16.87-8.93 21.1-17.38 1.88-3.77 2.48-6.29 3.37-12.27.78-5.19 1.48-7.56 3.53-10.25 2.57-3.4 7.03-6.27 14.36-9.01 3.37-1.26 7.36-2.5 12.05-3.73 16.33-4.3 25.28-5.36 39.6-5.81 6.9-.22 9.5-.56 12.66-2 1.19-.54 2.36-1.23 3.58-2.11 3.7-2.7 8.14-4.54 13.24-5.67 5.71-1.27 10.69-1.54 18.7-1.45l2.35.02c2.82 0 6.8-1 19.7-4.69 10.83-3.08 15.95-4.31 19.3-4.31.82 0 1.9.13 3.55.41l5.01.9c9.82 1.68 17.44 1.89 25.15-.21 7.98-2.18 14.8-6.77 20.29-14.24V147c-5.47 7.04-12.21 11.42-20.03 13.55-7.88 2.15-15.63 1.94-25.58.23l-5-.9c-1.6-.26-2.64-.39-3.39-.39-3.2 0-8.32 1.22-19.74 4.48-12.35 3.53-16.3 4.52-19.26 4.52l-2.36-.02c-7.94-.1-12.85.17-18.47 1.42-4.97 1.11-9.3 2.9-12.88 5.5a21.4 21.4 0 0 1-3.75 2.22c-3.32 1.5-6 1.87-13.04 2.09-14.25.44-23.13 1.5-39.37 5.77a125.56 125.56 0 0 0-11.95 3.7c-7.17 2.7-11.49 5.46-13.93 8.68-1.9 2.52-2.58 4.76-3.33 9.8-.9 6.08-1.53 8.68-3.47 12.56a30.6 30.6 0 0 1-9.66 11.45c-3.12 2.26-5.95 3.73-11.93 6.4l-2.31 1.04c-5.01 2.27-8.18 3.99-11.25 6.29-12.9 9.68-15.93 14.17-31.85 48.8-6.31 13.76-12.7 22.68-19.6 28.25-5.08 4.1-8.53 5.57-17.3 8.27a44.64 44.64 0 0 0-7.33 2.73c-6.24 3.12-15.7 6.4-28.3 10.06a867.4 867.4 0 0 1-21.8 5.97c-3.77 1.01-7.93 3.1-12.56 6.19a137.35 137.35 0 0 0-12.95 10.07c-2.24 1.92-9.48 8.3-9.48 8.3a98.2 98.2 0 0 1-7.84 6.37c-2.46 1.72-15.32 9.83-19.26 12.5a203 203 0 0 0-26.69 21.45c-11.13 10.58-12.43 18.3-7.47 28.63a74.52 74.52 0 0 0 2.62 4.95l.94 1.7a69.84 69.84 0 0 1 4.03 8.17c2.88 7.2 3.4 12.46 1.89 16.73-1.22 3.43-3.28 5.77-8.02 9.84-1.14.97-2.32 1.8-5.3 3.67-3.92 2.45-5.69 3.89-7.31 6.42-2.13 3.3-3.22 7.89-3.22 14.53 0 9.05-1.34 15.79-4.05 21.34-2.19 4.49-4.85 7.77-10.1 13.01-7.07 7.07-11.85 28.9-11.85 48.65 0 2.8-.58 5.48-1.7 8zm282.54 0h-1.01l-1.1-5.8c-3.08-16.26-4.05-26.2-2.74-37.26.7-5.8.77-9.68.55-15.3-.18-4.45-.17-5.68.19-7.63.78-4.3 3.44-8.53 10.39-16.34 9.07-10.2 12.26-15.41 19.8-30.15 1.35-2.64 2.33-4.47 3.38-6.3.9-1.58 1.82-3.06 2.77-4.5 3.14-4.7 7.03-8.42 16.84-16.81 11.22-9.6 15.5-13.86 18.13-19.13.7-1.4 1.3-2.8 1.93-4.4a206 206 0 0 0 1.49-4.05c3.63-9.94 8.01-13.93 22.9-17.81 4.99-1.3 20.55-5.13 21.38-5.34 16.19-4.1 25.33-7.36 33.48-12.6 5.86-3.77 5.84-3.76 27.66-16.53l2.6-1.52c10.23-6 17.1-10.2 22.73-13.95a149.3 149.3 0 0 0 8.8-6.3 723.7 723.7 0 0 0 6.37-5.08A87.74 87.74 0 0 1 600 342.95v1.12a85.76 85.76 0 0 0-15.49 9.9c.18-.14-4.76 3.84-6.38 5.1a150.3 150.3 0 0 1-8.85 6.35c-5.65 3.76-12.53 7.96-22.78 13.97l-2.6 1.53c-21.8 12.75-21.78 12.74-27.63 16.5-8.27 5.32-17.49 8.61-33.78 12.73-.83.21-16.39 4.04-21.36 5.33-8.03 2.1-13.15 4.5-16.45 7.5-2.66 2.42-4 4.86-5.77 9.7l-1.5 4.07a51.12 51.12 0 0 1-1.96 4.47c-2.72 5.45-7.04 9.75-18.38 19.45-9.73 8.32-13.6 12.02-16.65 16.6a77.18 77.18 0 0 0-2.74 4.45c-1.05 1.81-2.01 3.63-3.35 6.25-7.58 14.81-10.82 20.08-19.96 30.36-6.83 7.7-9.4 11.78-10.15 15.86-.34 1.85-.34 3.04-.17 7.4.22 5.68.14 9.6-.55 15.47-1.3 10.92-.34 20.79 2.73 36.95l1.12 5.99zm-76.59 0h-2.1l1.39-4.3c1.04-3.3 1.93-6.78 2.68-10.4 2.65-12.73 3.27-23.63 3.27-41.3 0-5.71-1.86-9.75-4.13-9.75-2.94 0-6.96 5.61-10.93 17.08C271.14 579.68 258.3 593 238 593c-22.42 0-29.26-1.35-48.42-10.09a87.69 87.69 0 0 1-9.42-5.04c-2.95-1.8-12.78-8.57-14.84-9.72-4.2-2.36-7-2.71-9.72-.99-.63.4-1.26.91-1.9 1.55a57.69 57.69 0 0 1-4.31 3.86 147.88 147.88 0 0 1-3.06 2.44l-1 .8C137.01 582.43 134 587.18 134 597c0 1.02-.02 2.01-.07 3h-2c.05-.99.07-1.98.07-3 0-10.52 3.33-15.78 12.09-22.76a265.61 265.61 0 0 1 2-1.6c.83-.64 1.43-1.13 2.03-1.61a55.76 55.76 0 0 0 4.17-3.74c.74-.73 1.48-1.34 2.24-1.82 3.47-2.2 7-1.75 11.77.93 2.15 1.21 12.03 8 14.9 9.76a85.7 85.7 0 0 0 9.22 4.93C209.29 589.7 215.85 591 238 591c19.25 0 31.49-12.7 41.06-40.33 4.24-12.25 8.66-18.42 12.81-18.42 3.8 0 6.13 5.06 6.13 11.75 0 17.8-.63 28.8-3.3 41.7-.77 3.7-1.68 7.23-2.75 10.6-.4 1.3-.8 2.53-1.19 3.7zm-149.25 0l.5-.94a160.1 160.1 0 0 0 6.53-13.26c2.73-6.29 5.78-9.64 9.24-10.52 3.74-.95 7.15.74 12.56 5.13 5.43 4.4 6.07 4.86 7.73 5.1 1.6.22 4.28 1.14 8.86 2.95 1.3.5 10.78 4.35 13.85 5.55 3.07 1.2 5.85 2.25 8.49 3.18 3.1 1.1 5.98 2.04 8.65 2.81h-3.45c-1.76-.56-3.6-1.18-5.54-1.87a281.2 281.2 0 0 1-8.51-3.19c-3.08-1.2-12.57-5.04-13.86-5.55-4.5-1.78-7.15-2.68-8.63-2.9-1.94-.27-2.53-.7-8.22-5.3-5.17-4.2-8.36-5.78-11.69-4.94-3.1.78-5.94 3.92-8.56 9.95a161 161 0 0 1-6.82 13.8h-1.13zm112.89 0a30.34 30.34 0 0 0 11.27-6.27c1.55-1.36 3.32-3.46 5.34-6.29 1.05-1.46 2.15-3.1 3.41-5.04a349.73 349.73 0 0 0 2.5-3.9l.47-.75.93-1.47a89.17 89.17 0 0 1 3.25-4.86c1.05-1.43 1.82-2.23 2.44-2.46 1.02-.37 1.49.48 1.49 2.04l.01 2.11c.05 6.91-.08 11.32-.7 16.33a48.4 48.4 0 0 1-2.38 10.56h-1.07a46.47 46.47 0 0 0 2.45-10.68c.62-4.96.75-9.33.7-16.2l-.01-2.12c0-.97-.08-1.12-.15-1.1-.36.14-1.05.85-1.97 2.1a88.44 88.44 0 0 0-3.22 4.82l-.92 1.46-.48.75a1268.1 1268.1 0 0 1-2.5 3.92c-1.26 1.95-2.38 3.6-3.44 5.08-2.06 2.88-3.87 5.04-5.5 6.45a30.87 30.87 0 0 1-8.94 5.52h-2.98zm-183.72 0H69.3c3.37-3.43 5.19-8.33 5.19-15 0-18.6-.04-17.35 1.02-20.77.6-1.93 1.5-3.74 3.27-6.63.42-.7 4.92-7.8 6.78-10.86 3.04-4.97 11.04-16.5 12.21-18.56 3.48-6.08 4.72-12.06 4.72-24.18 0-7.85 2.5-14.2 8.1-23.44l2.84-4.63a72.67 72.67 0 0 0 2.49-4.4c1.62-3.15 2.48-5.78 2.62-8.28.2-3.78-1.3-7.29-4.9-10.9-5.13-5.12-8.6-5.43-11.2-1.85-2.12 2.92-3.48 7.74-5.06 16.47-.2 1.03-.82 4.6-.82 4.57-.83 4.67-1.4 7.33-2.1 9.6-1.35 4.42-3.7 7.61-8.36 12.26l-3.26 3.2c-6.38 6.39-9.68 11.51-11.36 19.5l-1.16 5.52c-.87 4.1-1.56 7.04-2.33 9.94-3.67 13.74-9.65 25.97-22.59 44.72-7.68 11.14-11.05 18.87-10.92 23.72h-1c-.12-5.16 3.35-13.05 11.1-24.28 12.87-18.67 18.8-30.8 22.44-44.42.77-2.88 1.45-5.8 2.32-9.89l1.16-5.51c1.73-8.22 5.13-13.5 11.64-20 .63-.64 2.84-2.8 3.25-3.21 4.57-4.54 6.82-7.62 8.12-11.84a81.58 81.58 0 0 0 2.07-9.48l.81-4.57c1.62-8.9 3-13.8 5.24-16.89 3-4.15 7.2-3.78 12.71 1.74 3.8 3.8 5.42 7.58 5.2 11.66-.15 2.66-1.05 5.41-2.73 8.68a73.6 73.6 0 0 1-2.52 4.46l-2.84 4.63c-5.52 9.1-7.96 15.3-7.96 22.92 0 12.28-1.28 18.43-4.85 24.68-1.2 2.1-9.21 13.65-12.22 18.58-1.87 3.06-6.37 10.18-6.78 10.86-1.73 2.82-2.6 4.57-3.17 6.4-1.02 3.28-.98 2.1-.98 20.48 0 6.52-1.7 11.44-4.82 15zM310.09 0h1.06c-.37.9-.77 1.83-1.2 2.82-3.9 9.06-5.45 15.15-5.45 25.18 0 7.64-2.1 11.6-6.64 13.05-3.46 1.1-5.72.98-17.57-.43-11.55-1.36-19.17-1.58-28.16-.14-6.24 2.49-25.91 7.02-32.13 7.02-11.15 0-36.76-2.88-54.12-7.01a22.08 22.08 0 0 0-16.95 2.48c-4.05 2.33-7.09 5.03-13.9 11.97-6.28 6.39-9.53 9.23-13.8 11.5-7.09 3.79-11.22 7.65-13.4 12.27-1.82 3.85-2.33 7.84-2.33 15.29 0 4.4-2.65 6.69-9.45 9.74.1-.05-2.97 1.31-3.84 1.71-8.78 4.06-12.71 8.29-12.71 16.55 0 12.52-4.86 19.22-17.34 27.96l-4.56 3.14c-1.9 1.3-3.3 2.3-4.67 3.3-.92.68-1.79 1.34-2.62 2-7.16 5.62-11 14.54-15.56 33.28-.63 2.57-3.3 14-4.07 17.14a350.44 350.44 0 0 1-5.2 19.33c-1.37 4.5-4.5 15.07-4.96 16.53-1.05 3.4-1.64 4.94-2.46 6.32-.82 1.4-6.85 9.08-12.64 18.27L0 277.98v-1.9l4.58-7.35a270.8 270.8 0 0 1 12.61-18.23c-.3.5 1.35-2.8 2.38-6.12.45-1.44 3.58-12.01 4.95-16.53 1.83-6.03 3.44-12.09 5.19-19.27.76-3.13 3.44-14.56 4.06-17.14 4.62-18.95 8.52-28.02 15.92-33.83.84-.67 1.72-1.33 2.65-2.01 1.38-1.02 2.8-2.01 4.7-3.32l4.54-3.14C73.83 140.57 78.5 134.13 78.5 122c0-8.74 4.2-13.26 13.29-17.45.88-.41 3.96-1.77 3.85-1.73 6.46-2.9 8.86-4.97 8.86-8.82 0-7.6.53-11.7 2.42-15.71 2.29-4.84 6.57-8.85 13.84-12.73 4.15-2.21 7.35-5 14.15-11.93 6.28-6.4 9.36-9.13 13.52-11.53a23.07 23.07 0 0 1 17.69-2.59c17.27 4.12 42.8 6.99 53.88 6.99 6.1 0 25.73-4.53 31.92-7 9.12-1.46 16.83-1.25 28.49.13 11.63 1.38 13.9 1.5 17.15.47 4.06-1.3 5.94-4.85 5.94-12.1 0-10.1 1.56-16.3 6.6-28zm25.12 0h1c.05 5.62.26 11.48.65 19.4.47 9.7.64 14.57.64 21.6 0 9.81-4.68 17.46-13.1 23.16-6.53 4.43-14.94 7.46-24.33 9.33-3.74.54-9.42.56-22.68.23-6.74-.17-9.35-.22-12.39-.22-2.77 0-4.97.43-7.63 1.36-.88.3-4.55 1.74-5.58 2.11-6.55 2.35-13.59 3.53-24.79 3.53-8.1 0-13.58-1.38-22.46-4.9l-3.18-1.25c-12.55-4.87-21.27-5.15-37.18 1.12-11.15 4.39-18.13 9.2-22.28 14.81-3.15 4.26-4.33 7.8-5.94 15.8-1.22 6.09-1.93 8.74-3.5 12.13-1.65 3.53-3.97 5.81-7.07 7.22-2.33 1.07-4.35 1.5-9.32 2.19-9.04 1.27-12.77 3.09-15.61 9.58-3.71 8.48-7.72 13.87-14.22 19.76-2.4 2.18-13.14 11.02-15.91 13.42-8.2 7.1-13.85 17.37-18.7 31.97a258.81 258.81 0 0 0-3.27 10.7c-.01.05-2.26 7.97-2.88 10.1-8.49 28.85-17.88 52.95-26.13 61.2-2.8 2.8-5.06 5.64-10.4 12.96-3.4 4.68-6.23 8.25-8.95 11.1v-1.55c2.74-2.98 5.73-6.82 9.48-11.97 4.03-5.52 6.32-8.4 9.17-11.24 8.07-8.08 17.44-32.14 25.87-60.8.62-2.1 2.86-10.03 2.88-10.08 1.21-4.24 2.21-7.53 3.28-10.74 4.9-14.75 10.63-25.16 19-32.4 2.78-2.42 13.5-11.25 15.89-13.4 6.4-5.8 10.32-11.09 13.97-19.43 1.68-3.83 4.05-6.31 7.2-7.86 2.4-1.17 4.64-1.67 9.53-2.36 4.54-.63 6.5-1.05 8.7-2.06 2.89-1.31 5.03-3.42 6.58-6.73 1.53-3.3 2.23-5.9 3.43-11.9 1.64-8.14 2.85-11.79 6.11-16.2 4.28-5.79 11.41-10.7 22.73-15.16 16.15-6.36 25.13-6.07 37.9-1.11l3.19 1.26c8.77 3.47 14.13 4.82 22.09 4.82 11.09 0 18.02-1.16 24.46-3.47 1-.36 4.68-1.8 5.58-2.11A22.5 22.5 0 0 1 265 72.5c3.05 0 5.67.05 14.07.26 11.53.29 17.2.27 20.83-.25 9.25-1.85 17.54-4.83 23.94-9.17C332 57.8 336.5 50.46 336.5 41c0-7-.17-11.86-.7-22.7-.35-7.26-.55-12.83-.59-18.3zM93.87 0h2.04c-.7 4-1.61 6.82-3.03 9.47-2.33 4.38-2.85 5.75-5.26 13.03a40.46 40.46 0 0 1-1.94 5.03c-2.24 4.66-5.92 8.8-13.07 14.26-8.01 6.13-14.27 16.55-20.03 31.55-2.4 6.23-8.75 25.63-9.64 28.01-2.69 7.16-6.56 12.7-15.63 23.68l-2.68 3.24c-6.02 7.34-9.35 12.07-11.72 17.15-2.3 4.94-7.12 9.9-12.91 14.15v-2.4c5.14-3.94 9.1-8.3 11.1-12.6 2.46-5.27 5.87-10.1 11.98-17.56l2.68-3.26c8.94-10.8 12.72-16.22 15.3-23.1.88-2.33 7.24-21.74 9.65-28.03 5.89-15.31 12.3-26 20.68-32.41 6.92-5.3 10.4-9.2 12.48-13.55.65-1.35 1.16-2.7 1.85-4.79 2.45-7.4 3-8.83 5.4-13.34A27.68 27.68 0 0 0 93.87 0zm9.07 0h1.02c-1.66 8.3-2.91 12.67-4.54 15.26a59.14 59.14 0 0 0-4.1 8.21c-1.27 3-2.44 6.2-3.5 9.4-.38 1.12-.7 2.16-2.41 5.39a251.48 251.48 0 0 0-12.81 13.3c-3.48 3.96-5.95 7.27-7.15 9.66-.95 1.9-2.06 5.99-3.61 12.97-.64 2.9-3.65 17.15-4.51 21.07-3.63 16.45-6.63 26.69-9.9 32-7.66 12.45-10.64 15.71-37.08 41.1A69.78 69.78 0 0 1 0 179.21v-1.15a69.39 69.39 0 0 0 13.65-10.42c26.4-25.33 29.32-28.55 36.92-40.9 3.2-5.18 6.18-15.37 9.78-31.7.86-3.91 3.87-18.16 4.51-21.06 1.57-7.09 2.7-11.2 3.7-13.2 1.24-2.5 3.76-5.86 7.29-9.89.9-1.03 1.86-2.1 2.86-3.18 2.4-2.6 4.96-5.22 7.53-7.76.9-.88 1.73-1.7 3.37-3.4a129.02 129.02 0 0 1 4.78-13.46 60.07 60.07 0 0 1 4.19-8.35c1.52-2.44 2.74-6.71 4.36-14.74zM83.71 0h1.1c-2.09 4.74-6.03 8.92-11.42 12.3-7.2 4.52-16.5 7.2-24.39 7.2-8.9 0-11.8 7-11.74 21.52 0 1.7.04 3.17.12 5.99.1 3.3.12 4.45.12 5.99 0 5.73-.76 11.3-2.01 16.5a66.67 66.67 0 0 1-2.15 6.97 2597.76 2597.76 0 0 1-7 15.86A4270.8 4270.8 0 0 1 6.44 136.2 54.64 54.64 0 0 1 0 147v-1.65a54.87 54.87 0 0 0 5.55-9.57A4269.82 4269.82 0 0 0 30.7 79.97c.53-1.2.99-2.23 2.44-5.9A69.23 69.23 0 0 0 36.5 53c0-1.52-.03-2.66-.12-5.95-.08-2.83-.12-4.31-.12-6.01-.03-6.79.53-11.62 2.07-15.34 1.94-4.68 5.39-7.19 10.67-7.19 7.7 0 16.81-2.63 23.86-7.05C77.93 8.27 81.66 4.38 83.7 0zm282.63 0h1.01c1.86 10.02 2.18 12.67 2.32 18.3a123.43 123.43 0 0 1 .37 27.83c-.96 8.78-3.1 16.01-6.63 21.15-11.34 16.5-39.8 29.22-66.41 29.22-5.09 0-10.47.28-16.31.83a413.8 413.8 0 0 0-24.37 3.16c-21.56 3.26-27.66 4.01-36.32 4.01-6.92 0-12.2-1.05-21.69-3.9l-2.78-.83c-1.39-.41-2.54-.74-3.65-1.02-8-2.05-14.22-2.04-21.7.72a16.32 16.32 0 0 0-9.17 8.18c-1.6 3.05-2.5 6.06-4.02 12.83-1.5 6.64-2.34 9.52-3.99 12.64a16.16 16.16 0 0 1-9.85 8.36 104.8 104.8 0 0 0-9.5 3.42c-6.55 2.8-10.1 5.57-13.8 10.47-1.33 1.75-1.03 1.3-5.43 7.9-1.98 2.97-4.66 5.8-8.48 9.14-2.01 1.76-10.71 8.83-12.88 10.7-7.37 6.35-12.58 12.14-16.63 19.14-4.22 7.3-7.8 18.3-11.28 33.26-.87 3.73-1.72 7.64-2.64 12.14l-1.18 5.8-1.09 5.45c-1.8 8.96-2.77 13.28-3.77 16.26-6.8 20.44-17.26 42.16-27.13 51.2-5.11 4.7-8.1 7.07-11.1 8.86-.9.54-1.84 1.04-2.92 1.57-.44.22-9.6 4.4-14.1 6.66l-1.22.62v-1.13l.78-.39c4.52-2.26 13.67-6.44 14.1-6.65a41.19 41.19 0 0 0 2.84-1.54c2.94-1.75 5.88-4.09 10.94-8.73 9.71-8.9 20.1-30.51 26.87-50.79.97-2.92 1.94-7.22 3.73-16.13l1.1-5.46a490.5 490.5 0 0 1 3.82-17.96c3.5-15.06 7.1-26.14 11.39-33.54 4.11-7.11 9.4-12.98 16.83-19.4 2.19-1.88 10.88-8.95 12.88-10.7 3.77-3.28 6.39-6.05 8.3-8.93 4.43-6.64 4.12-6.18 5.47-7.96 3.8-5.03 7.5-7.91 14.21-10.78 2.61-1.12 5.74-2.24 9.59-3.46a15.17 15.17 0 0 0 9.27-7.86c1.59-3.02 2.42-5.85 4.03-12.99 1.41-6.27 2.32-9.33 3.98-12.48a17.31 17.31 0 0 1 9.7-8.66c7.7-2.83 14.1-2.84 22.3-.75 1.12.29 2.28.61 3.68 1.03l3.73 1.11c8.47 2.54 13.66 3.58 20.46 3.58 8.59 0 14.67-.75 36.18-4a414.64 414.64 0 0 1 24.41-3.17c5.88-.54 11.29-.83 16.41-.83 26.3 0 54.45-12.58 65.59-28.78 3.42-4.98 5.5-12.06 6.46-20.7.84-7.74.73-16.02.02-23.9a136.2 136.2 0 0 0-.57-5.12c0-4.47-.3-6.94-2.16-17zM18.88 0h1.03C18 7.57 17.15 10.18 14.46 16.2c-1.95 4.37-2.67 9.19-2.42 14.89.2 4.33.71 7.7 2.28 16.13 1.09 5.88 1.57 8.77 1.94 12.2.96 8.9.24 16.08-2.8 22.79A463.4 463.4 0 0 1 0 109.43v-2.12a465 465 0 0 0 12.54-25.52c2.97-6.52 3.67-13.53 2.72-22.27-.36-3.4-.84-6.26-1.93-12.12-1.57-8.47-2.1-11.88-2.29-16.27-.26-5.84.48-10.81 2.5-15.33 2.64-5.9 3.48-8.47 5.34-15.8zm280.47 0a70.78 70.78 0 0 1-4.91 11.24c-2.56 4.7-4.01 8.45-4.86 11.98l-.4 1.8-.28 1.45a5.28 5.28 0 0 1-.74 2.07c-.74 1.03-1.93 1.28-5.13 1.25.92 0-9.85-.29-15.03-.29-10.2 0-18.45.82-29.46 2.56-16.87 2.66-17.73 2.77-23.66 2.52a42.57 42.57 0 0 1-8-1.09c-17.7-4.16-46.18-5.86-54.72-3.01-2.72.9-5.88 2.8-9.52 5.59a112.37 112.37 0 0 0-6.54 5.48c-1.4 1.25-9.17 8.5-10.78 9.84-1.45 1.2-8.18 7.42-8.85 8.02a114.65 114.65 0 0 1-4.55 3.9c-4.99 4.03-8.9 6.2-11.92 6.2-3.52.05-4.32 0-5.14-.4-1.13-.56-1.5-1.72-1.13-3.57.74-3.63 4.47-10.84 12.84-24.8 5.69-9.48 9.42-18 11.78-26.2 1.45-5.04 1.94-7.4 2.97-14.54h1.01c-1.05 7.3-1.54 9.7-3.01 14.82-2.39 8.28-6.16 16.89-11.9 26.44-8.3 13.84-12 21.01-12.7 24.48-.3 1.45-.08 2.14.59 2.47.6.3 1.35.35 3.48.3 3.92 0 7.69-2.1 12.5-5.98 1.4-1.13 2.87-2.39 4.51-3.86.66-.59 7.41-6.83 8.88-8.05 1.59-1.33 9.34-8.55 10.75-9.82 2.4-2.15 4.55-3.96 6.6-5.53 3.72-2.85 6.97-4.8 9.81-5.74 8.76-2.92 37.41-1.22 55.27 2.99 2.57.6 5.14.95 7.81 1.06 5.84.25 6.7.14 23.47-2.51 11.05-1.75 19.36-2.57 29.6-2.57 5.2 0 15.99.3 15.05.29 2.87.03 3.84-.17 4.3-.83.23-.32.4-.8.58-1.7l.28-1.43.4-1.85c.88-3.6 2.36-7.44 4.96-12.22 1.87-3.43 3.44-7 4.73-10.76h1.06zm-8.59 0c-5.91 17.94-9.55 22-19.76 22-4.5 0-10.22.32-28.69 1.5l-1.53.1c-15.6.99-23.47 1.4-28.78 1.4-5.35 0-13.24-.96-28.86-3.28l-1.54-.23C163.18 18.75 157.47 18 153 18c-4.45 0-7.3 1.01-10.96 3.34-.1.06-1.8 1.17-2.3 1.47-2.43 1.5-4.32 2.19-6.74 2.19-2.8 0-4.11-1.46-4.11-4.22 0-1.04.16-2.29.5-4.1.16-.82.9-4.4 1.07-5.32.8-4.11 1.3-7.68 1.47-11.36h2c-.17 3.82-.68 7.5-1.5 11.75-.19.94-.92 4.5-1.07 5.31a21.04 21.04 0 0 0-.47 3.72c0 1.7.46 2.22 2.11 2.22 1.99 0 3.55-.57 5.7-1.9.47-.28 2.15-1.37 2.26-1.44C144.92 17.14 148.12 16 153 16c4.62 0 10.3.74 28.9 3.51l1.53.23C198.93 22.04 206.8 23 212 23c5.25 0 13.11-.41 28.65-1.4l1.54-.1C260.73 20.32 266.43 20 271 20c8.95 0 12.15-3.4 17.66-20h2.1zM141.51 0h1.13c-2.06 3.86-2.63 5.1-2.77 6.19-.15 1.12.42 1.64 2.32 1.96 1.8.3 3.85.35 10.81.35 6.02 0 13 .56 21.35 1.62 3.95.5 8.03 1.1 13.13 1.89 24 3.7 22.5 3.49 26.83 3.49 24.02 0 51.83-2.24 60.45-6.94 2.88-1.57 5.05-4.49 6.6-8.56h1.07c-1.64 4.47-3.98 7.69-7.2 9.44-8.83 4.82-36.67 7.06-60.92 7.06-4.41 0-2.84.22-26.98-3.5-5.1-.8-9.17-1.38-13.1-1.88-8.31-1.06-15.26-1.62-21.23-1.62-7.04 0-9.1-.05-10.97-.37-2.38-.4-3.38-1.32-3.15-3.07.16-1.22.69-2.41 2.63-6.06zm76.4 0c5.69 1.64 10.37 2.5 14.09 2.5 9.59 0 16.7-.71 22.4-2.5h2.98C251.12 2.53 243.2 3.5 232 3.5c-4.5 0-10.32-1.21-17.53-3.5h3.45zM70.69 0c-2.87 3.27-6.95 5.39-12.02 6.53-3.98.89-7.5 1.08-12.92 1A97.24 97.24 0 0 0 44 7.5c-5.37 0-8.86-1.24-10.1-4.97A8.6 8.6 0 0 1 33.5 0h.99c.02.82.14 1.56.36 2.22C35.91 5.39 39.02 6.5 44 6.5l1.76.02c5.35.09 8.8-.1 12.69-.97C62.95 4.54 66.63 2.74 69.3 0h1.37zM0 207.87c7.31-.16 11.5 3.33 11.5 11.13 0 11.41-5.05 28.35-11.5 41.5v-2.3c5.93-12.72 10.5-28.47 10.5-39.2 0-7.18-3.7-10.3-10.5-10.13v-1zm0 7.05c1.23.14 2.18.58 2.87 1.31 1.4 1.48 1.6 3.72 1.16 7.58l-.16 1.3A28.93 28.93 0 0 0 3.5 229c0 3.2-1.48 9.52-3.5 15.9v-3.45c1.49-5.13 2.5-9.87 2.5-12.45 0-.98.08-1.75.37-4.02l.16-1.29c.42-3.56.24-5.59-.88-6.77-.5-.53-1.21-.87-2.15-1v-1zM0 410.9v-1.47a21.67 21.67 0 0 0 2.97-4.7c1.32-2.7 2.68-6.28 4.56-11.89 7.85-23.55 7.83-26.6.25-30.4-2.25-1.12-4.8-1.43-7.78-.91v-1.02a13.1 13.1 0 0 1 8.22 1.04c8.24 4.12 8.26 7.6.25 31.6-1.88 5.66-3.25 9.27-4.6 12.02A20.82 20.82 0 0 1 0 410.9zM33.64 452c1.68 0 3.04-.23 8.34-1.31l2.38-.47c8.26-1.57 12.72-1.3 14.53 2.33 1.38 2.75-.47 5.86-4.75 9.68a75.6 75.6 0 0 1-5.08 4.07c-.94.7-4.89 3.59-5.79 4.27-1.86 1.4-2.97 2.37-3.47 3.03a19.08 19.08 0 0 0-2.89 5.5c.07-.2-4.02 13.65-6.96 22.22-2.7 7.85-5.56 10.72-8.82 8.59-2.11-1.4-3.66-4.24-6.6-11.03-1.98-4.62-2.5-5.76-3.4-7.4-4.55-8.18-3.9-23.9-.05-32.87a9.6 9.6 0 0 1 6.98-5.96c2.59-.66 4.86-.75 11.78-.67l3.8.02zm0 2c-1.13 0-2.09 0-3.82-.02-12.07-.13-14.83.57-16.9 5.41-3.63 8.47-4.26 23.55-.05 31.12.96 1.73 1.48 2.88 3.5 7.58 2.72 6.3 4.24 9.08 5.86 10.14 1.64 1.08 3.5-.8 5.82-7.55a682.9 682.9 0 0 0 6.97-22.24 21.03 21.03 0 0 1 3.18-6.04c.65-.87 1.85-1.9 3.86-3.43.92-.7 4.87-3.57 5.8-4.27 2.02-1.5 3.6-2.77 4.95-3.97 3.63-3.23 5.09-5.7 4.3-7.28-1.21-2.42-5.07-2.65-12.38-1.27l-2.35.47c-5.49 1.11-6.86 1.35-8.74 1.35zm345.63 146c-3.45-12.26-3.77-14.13-3.77-19 0-3.33-.13-6.27-.43-11.34-.63-10.33-.65-13.5.26-17.07 1.21-4.74 4.21-7.1 9.67-7.1h26c4.08 0 5.19 1.85 5.93 7.11.1.79.13.97.19 1.32.84 5.35 2.8 7.58 8.88 7.58 3.64 0 5.54.4 6.43 1.37.76.83.76 1.44.36 3.93-.85 5.26.5 8.85 7.5 13.8 6.32 4.45 11.63 5.36 16.55 3.37 3.8-1.54 6.73-4.16 11.92-10l1.1-1.23 1.09-1.23a75.6 75.6 0 0 1 2.7-2.86 35.81 35.81 0 0 1 9.57-6.73c1.52-.76 1.72-.86 5.66-2.63 6.1-2.73 9.01-4.5 11.74-7.62 2.63-3 4.67-4.85 6.7-6.04 3.18-1.85 5.46-2.13 13.68-2.13 5.98 0 10.56-4.32 18-14.99l2.82-4.03c1.06-1.5 1.94-2.7 2.79-3.79 7.87-10.12 19.38-10.4 30.74.96 5.54 5.53 10.17 19.43 13.64 38.51 2.5 13.75 4.18 29.46 4.47 39.84h-1c-.3-10.32-1.96-25.97-4.45-39.66-3.43-18.87-8.02-32.65-13.36-37.99-10.95-10.95-21.76-10.68-29.26-1.04-.83 1.07-1.7 2.26-2.75 3.75l-2.81 4.02c-7.65 10.95-12.38 15.42-18.83 15.42-8.04 0-10.21.26-13.17 2-1.92 1.12-3.9 2.9-6.45 5.83-2.86 3.26-5.87 5.09-12.09 7.88a103.35 103.35 0 0 0-5.62 2.6 34.84 34.84 0 0 0-9.32 6.54 74.67 74.67 0 0 0-3.75 4.05l-1.1 1.24c-5.28 5.95-8.29 8.64-12.28 10.25-5.26 2.13-10.92 1.17-17.5-3.48-7.33-5.17-8.82-9.15-7.92-14.77.34-2.12.34-2.6-.1-3.1-.64-.69-2.34-1.04-5.7-1.04-6.63 0-8.96-2.63-9.87-8.42l-.2-1.34c-.67-4.82-1.53-6.24-4.93-6.24h-26c-5 0-7.6 2.04-8.7 6.34-.88 3.43-.85 6.57-.23 16.76a177 177 0 0 1 .43 11.4c0 4.78.32 6.63 3.81 19h-1.04zm13.68 0c-1.31-6.58-1.61-10.71-1.36-14.84.04-.7.1-1.44.18-2.38l.23-2.56c.34-3.81.5-6.97.5-11.22 0-4.94 1.46-7.76 4.21-8.42 2.38-.58 5.56.54 9.2 3 6.64 4.52 13.99 13.07 16.55 19.23 4.77 11.44 14.12 15.69 33.54 15.69 8.6 0 14.32-2.35 20.67-7.88 1.45-1.26 15.06-15 21-20 7.21-6.07 11.77-7.59 20.62-8.32 5.52-.45 7.98-.9 11.44-2.36 4.58-1.95 9.36-5.48 14.9-11.29 7.43-7.76 13.25-8.92 17.47-4.3 3.32 3.63 5.46 10.58 6.82 20.24.73 5.17.94 7.74 1.58 17.38.25 3.75.17 5.32-.92 18.03h-1c1.09-12.7 1.17-14.28.92-17.97-.64-9.6-.85-12.16-1.57-17.3-1.33-9.47-3.43-16.27-6.56-19.7-3.76-4.11-8.93-3.08-16 4.32-5.65 5.9-10.54 9.5-15.25 11.5-3.58 1.53-6.13 1.99-11.6 2.44-8.8.72-13.17 2.18-20.2 8.1-5.9 4.96-19.5 18.7-21 19.99-6.52 5.68-12.47 8.12-21.32 8.12-19.78 0-29.5-4.42-34.46-16.3-2.49-5.97-9.71-14.38-16.2-18.79-3.42-2.32-6.36-3.35-8.4-2.86-2.2.53-3.44 2.92-3.44 7.45 0 4.28-.16 7.47-.5 11.31l-.23 2.56c-.09.93-.14 1.65-.19 2.35-.24 4.08.06 8.18 1.39 14.78h-1.02zm113.75 0c2.52-3.26 8.93-11.79 10.9-14.3 5.48-6.98 13.05-12.38 19.4-13.94 7.01-1.71 11.5 1.45 11.5 9.24 0 4.02-.04 5.16-.74 19h-1c.7-13.85.74-15 .74-19 0-7.12-3.86-9.83-10.26-8.26-6.11 1.5-13.5 6.77-18.85 13.57-1.86 2.36-7.65 10.07-10.43 13.69h-1.26zm-9.86-338.96c3.44 2.71 7 5.1 11.44 7.75 1.06.64 8.42 4.9 10.35 6.1 11.27 7 15 13.35 12.35 25.33-1.45 6.52-4.53 11.1-9.39 14.44-3.83 2.63-8.07 4.26-16.08 6.56-11.97 3.45-13.68 3.99-18.82 6.28a60.18 60.18 0 0 0-7.81 4.18c-11.11 7.07-19.1 7.7-27.96 3.28-3.56-1.77-17.2-11-17.2-11.01a101.77 101.77 0 0 0-5.2-3.07c-16.04-8.83-34.27-24.16-34.52-31.85-.11-3.46 1.99-6.57 6.28-10.26 1.03-.9 2.18-1.81 3.68-2.95.72-.55 3.38-2.56 3.94-3 4.47-3.4 7.18-5.79 9.32-8.45 11.12-13.82 26.55-28.68 34.36-32.28 12.06-5.54 19.84-5.77 27.37.12 3.25 2.54 5.65 6.54 8.58 13.35.29.65 2.3 5.45 2.88 6.74 1.62 3.65 2.9 5.8 4.24 6.94.72.6 1.45 1.2 2.2 1.8zm-3.49-.28c-1.63-1.39-3.03-3.74-4.77-7.65-.58-1.3-2.6-6.12-2.88-6.76-2.81-6.5-5.08-10.3-7.98-12.56-6.83-5.35-13.85-5.15-25.3.12-7.45 3.42-22.7 18.12-33.64 31.72-2.27 2.82-5.08 5.3-9.67 8.79l-3.94 2.98a79.98 79.98 0 0 0-3.59 2.88c-3.87 3.33-5.67 6-5.58 8.69.21 6.64 18.14 21.72 33.48 30.15 1.76.97 3.5 2 5.3 3.13.12.08 13.61 9.22 17.03 10.92 8.22 4.1 15.46 3.52 26-3.18a62.17 62.17 0 0 1 8.07-4.31c5.25-2.35 7-2.9 19.08-6.38 7.8-2.24 11.9-3.82 15.5-6.3 4.44-3.04 7.23-7.18 8.56-13.22 2.44-11.02-.83-16.6-11.45-23.2-1.9-1.18-9.23-5.42-10.32-6.08-4.5-2.69-8.13-5.12-11.64-7.9-.77-.6-1.52-1.21-2.26-1.84zM87.72 241.6c4.3-2.98 7.88-5 12.14-6.95.84-.4 1.73-.78 2.78-1.24l4.37-1.88a164.3 164.3 0 0 0 17.74-8.96 320.67 320.67 0 0 1 27.87-14.5c4.22-1.95 21.89-9.84 21.17-9.52 19.17-8.62 28.1-6.93 49.5 8.05 7.91 5.54 13.24 13.25 16.45 22.66 3.02 8.83 3.76 16.51 3.76 27.75 0 8.32-.66 12.95-3.68 18.97-4.18 8.36-12.3 16.14-25.58 23.47-24.45 13.49-38.83 27.55-52.83 47.84-8.83 12.8-47.76 44.21-65.16 54.15C75.04 413.55 48.89 423.5 31 423.5c-10.05 0-14.67-4.78-14.76-13.37-.07-6.32 2.06-13.73 6.3-24.32 2.95-7.37 2.02-12.9-2.16-22.29-3.19-7.17-3.88-9.14-3.88-12.52 0-3.35 1.87-6.9 5.52-11.07 2.61-3 3.5-3.83 11.9-11.5 5.09-4.66 8.08-7.6 10.7-10.75 9.46-11.36 12.62-19.47 17.9-44.78 3.12-15.05 6.63-20.28 15.12-25.25.8-.47 3.95-2.25 4.7-2.68a76.66 76.66 0 0 0 5.38-3.38zm.56.82a77.63 77.63 0 0 1-5.44 3.43l-4.7 2.67c-8.23 4.82-11.57 9.81-14.65 24.6-5.3 25.45-8.51 33.7-18.1 45.21-2.66 3.19-5.68 6.16-10.8 10.84-8.36 7.64-9.24 8.48-11.82 11.42-3.5 4.01-5.27 7.36-5.27 10.42 0 3.18.68 5.1 3.8 12.12 4.27 9.6 5.24 15.37 2.16 23.07-4.18 10.47-6.29 17.78-6.22 23.93.08 8.06 4.26 12.38 13.76 12.38 17.67 0 43.68-9.9 64.75-21.93 17.28-9.88 56.1-41.2 64.84-53.85 14.08-20.42 28.57-34.59 53.17-48.16 13.12-7.23 21.09-14.87 25.17-23.03 2.92-5.86 3.57-10.35 3.57-18.53 0-11.13-.74-18.73-3.7-27.43-3.15-9.22-8.36-16.75-16.09-22.16-21.13-14.8-29.7-16.42-48.5-7.95.7-.32-16.96 7.56-21.17 9.5-1.7.8-3.3 1.55-4.86 2.3a319.68 319.68 0 0 0-22.93 12.17 165.3 165.3 0 0 1-17.85 9.01l-4.37 1.88c-1.04.45-1.92.84-2.76 1.23a74.56 74.56 0 0 0-11.99 6.86zm-7.6 12.2c7.7-6.25 12.3-8.17 23.68-11.27 6.12-1.67 9.12-2.95 12.31-5.72 3.8-3.3 7.47-4.52 15.86-6.1 2.75-.52 3.67-.7 5.06-1.02 5.48-1.24 9.48-2.93 13.1-5.89 10.42-8.53 25.4-14.11 36.31-14.11 5.33 0 16.77 7.58 25.74 17.16 10.73 11.46 15.96 23.27 12.73 32.5-3.18 9.1-11.39 18.57-23.03 27.86-8.44 6.73-18.36 13-25.22 16.43-3.72 1.86-6.59 4.88-9.77 9.99-.69 1.1-11.1 20.25-16.03 27.83-5.62 8.65-15.4 17.36-30.23 27.96a552.58 552.58 0 0 1-9.2 6.42c-.13.09-6.81 4.65-8.6 5.89-6.47 4.46-10.35 7.35-13.05 9.83-11.64 10.67-37.14 15.54-43.7 8.98-1.96-1.96-2.2-4.06-1.95-10.52.37-9.42-.5-14.5-4.95-20.51a34.09 34.09 0 0 0-7.04-6.92c-3.93-2.95-6.07-6.11-6.56-9.49-.97-6.61 3.87-13.06 14.17-21.69 1.58-1.32 6.67-5.44 7.09-5.78a48.03 48.03 0 0 0 5.23-4.77c4.1-4.63 5.85-9.55 7.8-20.07a501.52 501.52 0 0 0 .8-4.37c.33-1.87.6-3.3.88-4.73.74-3.78 1.5-7.18 2.4-10.63 1-3.78 1.38-5.5 2.36-10.37.6-3.02.93-4.21 1.56-5.47 1.22-2.45 1.27-2.5 12.25-11.42zm.64.78c-10.77 8.74-10.88 8.84-12 11.08-.58 1.16-.88 2.3-1.47 5.22-.98 4.89-1.36 6.63-2.37 10.44-.9 3.43-1.65 6.8-2.39 10.56a339.79 339.79 0 0 0-1.29 6.95l-.39 2.15c-1.98 10.68-3.77 15.74-8.04 20.54a48.77 48.77 0 0 1-5.34 4.88c-.42.34-5.5 4.47-7.07 5.78-10.04 8.4-14.72 14.65-13.83 20.78.45 3.1 2.44 6.03 6.17 8.83 3 2.25 5.39 4.62 7.24 7.12 4.63 6.24 5.52 11.52 5.15 21.15-.25 6.14-.01 8.1 1.66 9.78 6.1 6.1 31.02 1.33 42.31-9.02 2.75-2.52 6.66-5.43 13.16-9.92l8.6-5.89c3.63-2.48 6.45-4.44 9.19-6.4 14.73-10.54 24.44-19.18 29.97-27.7 4.9-7.54 15.31-26.68 16.02-27.8 3.27-5.26 6.26-8.41 10.18-10.37 6.79-3.4 16.65-9.63 25.03-16.32 11.52-9.18 19.61-18.53 22.72-27.4 3.07-8.78-2.02-20.27-12.52-31.49-8.8-9.4-20.04-16.84-25.01-16.84-10.67 0-25.43 5.5-35.68 13.89-3.76 3.07-7.9 4.81-13.5 6.09-1.41.32-2.35.5-5.11 1.02-8.21 1.55-11.76 2.73-15.38 5.88-3.34 2.9-6.45 4.22-12.7 5.92-11.26 3.07-15.75 4.94-23.31 11.09zM212 251.85c0 7.56-.6 10.92-2.6 14.3-1.1 1.84-7.66 10.05-8.6 11.3-5.96 7.94-9.33 10.28-17.26 13.76-1.34.58-2.2 1-3.03 1.5-.55.33-1.2.66-2 1.02-.71.33-4.46 1.9-5.52 2.39-6.05 2.78-8.99 5.8-8.99 10.73 0 10.97-18.95 36.12-34.51 44.87-8.18 4.6-21.3 9.36-32.78 11.86-13.33 2.9-22.49 2.48-24.62-2.32-1.32-2.97-4.4-4.26-11.98-5.81l-.6-.12c-4.84-.99-6.94-1.55-9.03-2.64-2.92-1.5-4.48-3.7-4.48-6.84 0-2.74 1.08-5.77 3.25-9.67.85-1.53 1.82-3.13 3.23-5.35-.16.25 2.83-4.4 3.67-5.76 6.69-10.7 9.85-18.5 9.85-27.22 0-18.41 11.22-33.37 27.5-42.86 5.22-3.05 9.23-3.31 15.2-2.12 5.04 1 6.05.9 7.43-1.52 4.5-7.85 7.04-9.5 15.87-9.5 3.93 0 6.97-.98 10.47-3.16 1.56-.97 8.67-6.17 10.99-7.68 9.2-5.98 11.34-7 25.2-11.95 6.95-2.48 15.18 1.28 22.33 9.12 6.55 7.19 11.01 16.61 11.01 23.67zm-2 0c0-6.5-4.25-15.48-10.49-22.32-6.67-7.32-14.16-10.74-20.17-8.59-13.73 4.9-15.73 5.85-24.8 11.75-2.24 1.46-9.37 6.68-11.01 7.7-3.8 2.36-7.2 3.46-11.53 3.46-8.08 0-9.98 1.23-14.13 8.5-1.1 1.91-2.51 2.88-4.35 3.09-1.3.14-1.9.05-5.22-.61-5.53-1.1-9.07-.88-13.8 1.88-15.72 9.17-26.5 23.55-26.5 41.14 0 9.2-3.28 17.29-10.15 28.28l-3.68 5.77c-1.39 2.19-2.35 3.77-3.17 5.25-2.02 3.63-3 6.38-3 8.7 0 4.19 2.87 5.67 11.9 7.52l.61.12c8.27 1.7 11.7 3.13 13.4 6.95 3.17 7.14 36 0 54.6-10.46 14.98-8.43 33.49-32.99 33.49-43.13 0-5.9 3.47-9.48 10.16-12.55 1.1-.5 4.85-2.08 5.52-2.38.74-.34 1.32-.64 1.8-.93.92-.55 1.85-1 3.25-1.62 7.65-3.35 10.75-5.5 16.47-13.12 1.02-1.36 7.47-9.42 8.47-11.11 1.79-3.01 2.33-6.06 2.33-13.3zm-37.18-22.4c.15-.1 2.4-1.51 2.95-1.84.96-.57 1.7-.94 2.43-1.17 2.57-.83 5.06-.1 11.04 3.12 14.86 8 19.43 22.87 9.18 38.71-4.04 6.24-9.37 9-18.72 11.11-.85.2-1.2.27-3.13.68-6.04 1.29-8.78 2.08-11.6 3.65-3.63 2.02-6.09 4.98-7.5 9.44-7.87 24.93-19.72 43.34-36.28 50.31-16.45 6.93-21.13 8.53-27.98 8.89-4.94.25-9.8-.65-15.4-2.89a44.45 44.45 0 0 1-5.64-2.6c-4.02-2.33-5.14-4.74-4.5-9.31.3-2.13 3.77-15.53 4.84-20.65.63-3.05 1.19-6.14 1.75-9.69a464.04 464.04 0 0 0 1.35-8.9c1.42-9.41 2.5-14.27 4.49-18.65 2.46-5.43 6.13-9.03 11.72-11.13 6.59-2.47 10.54-3.1 18.03-3.53 4.75-.27 6.68-.64 9-2.05.61-.37 1.22-.81 1.82-1.33a30.61 30.61 0 0 0 3.37-3.4c.59-.69 2.38-2.9 2.63-3.19 3.36-4 6.3-5.53 12.33-5.53 3.94 0 5.9-.92 8.18-3.36-.17.18 2.75-3.14 3.85-4.22a30.95 30.95 0 0 1 6.79-5c1.5-.83 3.15-1.62 4.99-2.38a64.92 64.92 0 0 0 10.01-5.1zm-14.52 8.34a29.95 29.95 0 0 0-6.57 4.84 116.68 116.68 0 0 0-3.82 4.2c-2.46 2.63-4.68 3.67-8.91 3.67-5.72 0-8.39 1.39-11.57 5.17-.23.28-2.03 2.5-2.63 3.2a31.6 31.6 0 0 1-3.47 3.51c-.65.55-1.3 1.03-1.96 1.43-2.5 1.51-4.55 1.9-9.47 2.19-7.39.42-11.25 1.04-17.72 3.47-5.34 2-8.82 5.4-11.17 10.6-1.93 4.27-3 9.07-4.41 18.39l-.65 4.34-.7 4.57c-.57 3.56-1.12 6.67-1.76 9.73-1.08 5.18-4.54 18.53-4.83 20.59-.59 4.17.35 6.18 4.01 8.3 1.35.77 3.1 1.58 5.52 2.55 5.46 2.18 10.18 3.05 14.97 2.8 6.69-.34 11.32-1.93 27.65-8.8 16.21-6.83 27.92-25.01 35.71-49.7 1.49-4.7 4.12-7.86 7.97-10 2.93-1.63 5.74-2.45 11.87-3.76 1.92-.4 2.28-.49 3.12-.68 9.12-2.06 14.24-4.7 18.1-10.67 9.92-15.34 5.55-29.55-8.82-37.29-5.75-3.1-8.03-3.76-10.25-3.05-.65.2-1.33.54-2.23 1.08-.55.32-2.77 1.72-2.93 1.82a65.91 65.91 0 0 1-10.16 5.17c-1.8.75-3.42 1.52-4.89 2.33zm-42.39 32.72c16.15-2.87 26.36-.97 32.47 6.16 5.08 5.93 1.13 21.42-5.93 35.55-4.79 9.58-10.6 16.21-23.16 25.19-14.15 10.1-35.5 12.2-40.71 3.85-1.86-2.97-2.1-8.14-1.06-15.73.78-5.68 1.86-10.71 4.73-22.98l.12-.51c1.59-6.8 2.37-10.31 3.14-14.14 1.45-7.25 3.74-11.47 7.26-13.74 2.81-1.8 5.53-2.28 12.33-2.62 5.33-.27 7.56-.46 10.81-1.03zm.18.98c-3.3.59-5.56.78-10.94 1.05-6.62.33-9.23.78-11.84 2.46-3.25 2.1-5.42 6.09-6.82 13.1-.77 3.84-1.56 7.35-3.15 14.17l-.12.5c-2.86 12.24-3.93 17.26-4.7 22.9-1.03 7.36-.79 12.36.9 15.07 4.82 7.7 25.54 5.67 39.29-4.15 12.43-8.88 18.13-15.39 22.84-24.81 6.86-13.72 10.75-29 6.07-34.45-5.84-6.81-15.7-8.65-31.53-5.84zM132 276.5c7.12 0 10.66 3.08 11.25 8.7.42 4.02-.43 8.14-2.77 15.94-2.56 8.52-18.36 25.38-27.2 31.28-7.01 4.67-20.02 5.67-26.57.99-3.99-2.85-3.53-12.08.02-26.46.68-2.75 1.47-5.65 2.37-8.76a412.6 412.6 0 0 1 3.05-10.14l.37-1.2c1.48-4.8 5.1-7.75 10.73-9.27 4.4-1.2 9.54-1.5 17.48-1.33l3.89.1c3.87.11 5.42.15 7.38.15zm0 1c-1.97 0-3.53-.04-7.41-.15l-3.88-.1c-7.85-.17-12.92.13-17.2 1.3-5.32 1.43-8.67 4.16-10.03 8.6a1277.83 1277.83 0 0 1-1.6 5.21c-.68 2.2-1.27 4.17-1.82 6.1-.9 3.1-1.68 5.99-2.36 8.73-3.43 13.88-3.87 22.93-.4 25.4 6.17 4.42 18.73 3.45 25.42-1 8.66-5.78 24.33-22.49 26.8-30.73 2.3-7.67 3.14-11.71 2.73-15.56-.53-5.1-3.64-7.8-10.25-7.8zm-17.79 7a31.3 31.3 0 0 1 8.57 1.4c5.42 1.78 8.72 5.03 8.72 10.1 0 9.59-9.51 17.2-22.34 21.47-9.82 3.28-13.62-1.79-11.66-16.54.84-6.28 3.82-10.67 8.24-13.46a20.38 20.38 0 0 1 8.47-2.97zm-.6 1.08a19.39 19.39 0 0 0-7.34 2.73c-4.18 2.64-6.98 6.78-7.77 12.76-1.89 14.11 1.36 18.45 10.34 15.46C121.3 312.37 130.5 305 130.5 296c0-4.56-2.98-7.5-8.03-9.15a28.05 28.05 0 0 0-8.2-1.35c-.13 0-.35.03-.66.08zm80.87-23.45c-2.72 9.8-14.93 9.86-26.72 3.3-10.17-5.64-13.8-17.98-5-22.87a66.53 66.53 0 0 0 4.48-2.7l2.03-1.3a50.15 50.15 0 0 1 3.92-2.3c4.73-2.43 8.82-2.8 14-.72 9.16 3.66 10.98 13.33 7.3 26.6zm-20.83-24.98a49.26 49.26 0 0 0-3.84 2.25l-2.03 1.3c-.84.53-1.5.95-2.16 1.35-.82.5-1.6.96-2.38 1.39-7.94 4.4-4.59 15.8 5 21.12 11.31 6.29 22.8 6.23 25.28-2.7 3.57-12.83 1.85-21.97-6.7-25.4-4.9-1.95-8.69-1.62-13.17.7zm17.85 12.15c0 5.7-2.44 9-6.64 9.96-3.3.76-7.56-.05-11.08-1.81l-1.89-.94c-.67-.34-1.18-.62-1.63-.88-4.07-2.38-4.13-4.97.34-10.93 6.8-9.06 20.9-7.16 20.9 4.6zm-1 0c0-5.3-2.87-8.55-7.32-9.16-4.23-.57-8.99 1.44-11.78 5.16-4.15 5.54-4.1 7.44-.64 9.47.44.25.93.51 1.59.85l1.87.93c3.34 1.67 7.36 2.44 10.42 1.74 3.73-.86 5.86-3.74 5.86-9zM387 530.3c0-12.8 2.44-16.74 18.48-29.77a56.8 56.8 0 0 1 7.61-5.2c2.6-1.5 5.33-2.82 8.5-4.18 1.24-.53 2.48-1.05 4.1-1.7l3.92-1.57c9.4-3.83 13.74-6.7 16.62-12.05 1.2-2.22 2.21-4.4 3.23-6.83a148.57 148.57 0 0 0 1.54-3.84l.3-.74.56-1.44c3.2-8.02 6.05-12.08 12.7-16.5a35.26 35.26 0 0 0 4.96-4 46.36 46.36 0 0 0 3.88-4.29c.27-.34 2.55-3.2 3.2-3.98 3.48-4.15 6.51-5.9 11.51-5.9 3.08 0 5.62-.63 9.57-2.1 5.42-2.02 6.53-2.34 8.96-2.2 2.53.13 4.85 1.26 7.18 3.59 1.3 1.3 5.55 5.83 6.52 6.78 5.06 5 9.44 6.92 17.77 6.92a197.5 197.5 0 0 1 12.08.45c15.93.87 21.94.57 25.28-2.21 6.91-5.77 11.64-2.73 11.64 7.76 0 10.73-8.6 20-19 20-4.8 0-8.32 1.43-9.34 3.67-1.12 2.48.68 6.15 5.98 10.57 13.6 11.33 11.24 20.76-7.64 20.76a21.91 21.91 0 0 0-14.6 5.24c-3.28 2.71-5.8 5.86-9.85 11.82l-1.52 2.25c-3.1 4.57-5.01 7.1-7.32 9.4-6.21 6.21-9.3 7.64-13.05 6.89l-1-.23a10.82 10.82 0 0 0-2.66-.37c-1.6 0-2.41.67-8.18 6.22-4.85 4.67-8.07 6.78-11.82 6.78-1.33 0-3.46 1.15-6.45 3.45-1.27.98-2.68 2.14-4.5 3.7l-4.92 4.29a181.11 181.11 0 0 1-4.54 3.82c-9.33 7.56-15.63 10.2-20.21 6.52-2.7-2.15-4.14-4.51-4.63-7.26-.37-2.04-.26-3.63.29-7.3.87-5.85.65-8.42-1.83-11.6-2.32-2.98-2.96-3.22-3.77-2.39-.25.26-1.35 1.63-1.61 1.94-2.21 2.5-4.85 3.57-9 2.82-4.6-.84-5.57-4.11-4.72-10.09l.24-1.56c.6-3.66.68-4.93.25-5.8-.44-.86-1.9-.94-5.23.4l-.74.29c-13.78 5.54-15.26 6.09-19.43 6.67-6.03.84-9.31-1.6-9.31-7.9zm2 0c0 5 2.14 6.6 7.04 5.92 3.91-.55 5.43-1.1 18.95-6.55l.75-.3c4.17-1.66 6.7-1.54 7.76.58.71 1.43.62 2.76-.06 7l-.24 1.53c-.72 5.04-.06 7.27 3.09 7.84 3.43.62 5.38-.17 7.15-2.18.2-.23 1.34-1.66 1.68-2 1.9-1.96 3.82-1.25 6.78 2.55 2.9 3.74 3.17 6.77 2.22 13.12-1 6.75-.52 9.4 3.62 12.71 3.49 2.8 9.1.45 17.7-6.51 1.35-1.1 2.75-2.28 4.49-3.78l4.93-4.3c1.84-1.58 3.27-2.76 4.58-3.77 3.34-2.56 5.74-3.86 7.67-3.86 3.04 0 5.95-1.9 10.43-6.22l2.46-2.39c.94-.89 1.67-1.56 2.37-2.13 1.81-1.49 3.3-2.26 4.74-2.26 1.03 0 1.81.13 3.1.42.7.16.71.17.96.21 2.96.6 5.45-.55 11.23-6.33 2.2-2.2 4.06-4.65 7.09-9.11l1.52-2.25c4.15-6.11 6.76-9.37 10.22-12.24a23.9 23.9 0 0 1 15.88-5.7c16.87 0 18.62-7.01 6.36-17.23-5.9-4.92-8.12-9.41-6.52-12.93 1.42-3.12 5.67-4.84 11.16-4.84 9.25 0 17-8.34 17-18 0-8.94-2.88-10.79-8.36-6.23-3.94 3.28-9.98 3.59-26.67 2.68l-1.02-.06c-5.09-.27-7.99-.39-10.95-.39-8.88 0-13.76-2.14-19.18-7.5-1-.98-5.26-5.53-6.53-6.79-1.99-1.99-3.86-2.9-5.87-3-2.03-.12-3.06.18-8.15 2.07-4.15 1.55-6.9 2.22-10.27 2.22-4.33 0-6.84 1.46-9.98 5.2-.63.74-2.89 3.6-3.18 3.95a48.29 48.29 0 0 1-4.04 4.46 37.26 37.26 0 0 1-5.24 4.23c-6.26 4.17-8.9 7.91-11.95 15.58l-.57 1.43-.28.74a531.5 531.5 0 0 1-1.56 3.88 77.49 77.49 0 0 1-3.32 7c-3.16 5.88-7.82 8.97-17.63 12.96l-3.92 1.58c-1.6.64-2.84 1.15-4.05 1.67a79.2 79.2 0 0 0-8.3 4.08 54.8 54.8 0 0 0-7.35 5.02C391.12 514.78 389 518.21 389 530.31zm133.22-79.76c3.06 1.53 6.54 2.02 10.68 1.7 2.53-.2 4.91-.62 8.8-1.49 5.36-1.19 6.33-1.38 8.33-1.54 2.78-.23 4.82.17 6.29 1.4 1.58 1.31 1.96 2.72 1.26 4.22-.66 1.38-1.05 1.74-5.05 5.07-3.53 2.93-5.03 4.83-5.03 7.09 0 7.3 1.29 10.02 7.83 15.62 3.86 3.3 5.93 6.84 5.28 9.62-.75 3.25-4.96 5.02-12.61 5.02-7.18 0-12.7 4.61-20.03 14.68-.5.7-3.96 5.57-4.94 6.87a38.89 38.89 0 0 1-4.72 5.5c-1.06.98-2.09 1.7-3.1 2.15-2.85 1.26-5.05 1.57-9.83 1.74-7.66.27-10.87 1.45-14.98 7.1-1.58 2.17-3.11 4-4.68 5.6a42.87 42.87 0 0 1-8.65 6.69c-.15.08-10.69 6.19-14.8 8.83-3.76 2.42-6.45 2.04-8.22-.77-1.28-2.03-1.9-4.54-2.87-10.35-.84-5.08-1.27-7.08-2.06-8.93-.97-2.3-2.21-3.24-4.02-2.88-6.2 1.24-8.95 1.39-10.98.2-2.37-1.4-3.13-4.62-2.62-10.73.16-1.96-1.04-2.87-3.76-3.04-2.24-.13-4.9.2-9.94 1.12l-.69.12c-7.97 1.45-10.72 1.72-12.72.73-2.91-1.43-1.6-5.27 4.23-12.21 5.48-6.53 10.6-10.81 15.76-13.53 3.74-1.97 5.94-2.65 12.16-4.1 7.29-1.72 10.4-3.51 14.04-9.31 2.96-4.75 10.74-18.62 12.14-20.84 3.59-5.67 6.8-9.1 11.05-11.34 2.6-1.38 4.72-2.82 9.17-6.07l1.38-1.01c7.85-5.72 12.3-7.98 17.68-7.98 4.22 0 6.49 1.36 9.13 4.77.34.43 1.67 2.22 2 2.67.85 1.09 1.6 1.98 2.45 2.83a24.29 24.29 0 0 0 6.64 4.78zm-.44.9c-2.8-1.4-5-3.03-6.92-4.97-.87-.9-1.65-1.81-2.51-2.93-.35-.46-1.68-2.25-2.01-2.67-2.47-3.18-4.46-4.38-8.34-4.38-5.09 0-9.4 2.2-17.09 7.78l-1.38 1.01c-4.49 3.29-6.63 4.74-9.3 6.15-4.06 2.15-7.16 5.45-10.66 11-1.39 2.19-9.16 16.05-12.15 20.82-3.79 6.07-7.13 7.98-14.66 9.75-6.13 1.45-8.27 2.1-11.92 4.02-5.04 2.66-10.05 6.86-15.46 13.3-5.43 6.46-6.53 9.69-4.55 10.66 1.7.84 4.48.57 12.1-.81l.7-.13c5.12-.93 7.82-1.27 10.17-1.12 3.21.2 4.92 1.48 4.7 4.11-.48 5.76.2 8.64 2.13 9.78 1.73 1.02 4.34.88 10.27-.31 2.35-.47 4 .78 5.14 3.47.83 1.95 1.27 4 2.07 8.8l.06.36c.94 5.65 1.55 8.11 2.72 9.98 1.46 2.3 3.52 2.6 6.84.46 4.14-2.66 14.69-8.77 14.81-8.85a41.9 41.9 0 0 0 8.46-6.54 47.89 47.89 0 0 0 4.6-5.48c4.32-5.95 7.81-7.23 15.74-7.5 4.66-.17 6.76-.47 9.46-1.67.9-.4 1.85-1.06 2.84-1.96a38.03 38.03 0 0 0 4.6-5.36c.96-1.3 4.4-6.16 4.93-6.87 7.5-10.31 13.22-15.09 20.83-15.09 7.24 0 11.02-1.6 11.64-4.24.54-2.32-1.36-5.55-4.97-8.64-6.75-5.79-8.17-8.79-8.17-16.38 0-2.67 1.64-4.74 5.39-7.86 3.8-3.17 4.23-3.56 4.78-4.73.5-1.06.25-1.99-.99-3.03-2.23-1.85-4.72-1.65-13.76.36-3.93.87-6.35 1.3-8.94 1.5-4.3.34-7.97-.18-11.2-1.8zm-28-3.9c5.65-2.82 8.96-2.2 12.9 1.37.56.5 2.6 2.47 3.02 2.87 4.2 3.89 8.07 5.71 14.3 5.71 11.37 0 14 1.41 16.1 8.09.26.83 1.35 4.6 1.66 5.62.8 2.63 1.64 5.03 2.7 7.6 2.13 5.17 2.64 8.32 1.72 10.24-.77 1.61-2.1 2.18-5.37 2.79-2.32.43-2.8.53-3.85.85-1.85.58-3.35 1.4-4.6 2.66-1 1-2.02 2.13-3.31 3.66-.6.71-2.91 3.5-3.46 4.14-7.2 8.54-12.43 12.35-19.59 12.35-3.76 0-6.95 1.28-10.59 4-1.84 1.37-11.62 10.31-15.22 13.06a73.09 73.09 0 0 1-8.95 5.88c-4.58 2.54-7.35 3.22-8.98 2.23-1.32-.8-1.65-2.07-1.94-5.5a52.53 52.53 0 0 0-.16-1.81c-.54-4.73-2.24-6.86-7.16-6.86-7.11 0-8.85-1.23-9.73-5.41-.96-4.61-2.1-6.7-6.55-9.67-3.97-2.65-4.31-5.42-1.52-8.22 2-2 4.63-3.5 11.35-6.87 6.61-3.3 9.2-4.8 11.1-6.68a39.09 39.09 0 0 0 5.3-6.48c.98-1.5 1.83-3.04 2.88-5.13l2.12-4.3c.91-1.83 1.72-3.37 2.61-4.98 5.74-10.32 10.37-14.78 23.22-21.2zm-22.34 21.7c-.89 1.59-1.69 3.12-2.6 4.94l-2.11 4.3a52.9 52.9 0 0 1-2.94 5.23 40.08 40.08 0 0 1-5.44 6.63c-2 2-4.62 3.51-11.35 6.87-6.6 3.3-9.2 4.8-11.1 6.69-2.33 2.34-2.08 4.37 1.38 6.67 4.7 3.14 5.96 5.46 6.97 10.3.78 3.7 2.09 4.62 8.75 4.62 5.5 0 7.57 2.57 8.15 7.75.06.5.09.82.17 1.84.25 3.06.55 4.17 1.46 4.72 1.2.74 3.69.13 7.98-2.25a72.09 72.09 0 0 0 8.82-5.8c3.55-2.7 13.34-11.65 15.24-13.07 3.79-2.83 7.18-4.19 11.18-4.19 6.77 0 11.8-3.67 18.83-12l3.45-4.13a60.07 60.07 0 0 1 3.37-3.72 11.72 11.72 0 0 1 5.01-2.91c1.1-.34 1.6-.45 3.97-.89 2.95-.55 4.07-1.02 4.65-2.23.76-1.59.28-4.5-1.74-9.43a84.46 84.46 0 0 1-2.74-7.69c-.31-1.03-1.4-4.8-1.66-5.61-1.95-6.2-4.16-7.39-15.14-7.39-6.5 0-10.61-1.93-14.98-5.98-.44-.4-2.46-2.37-3.01-2.86-3.65-3.3-6.52-3.85-11.79-1.21-12.67 6.33-17.15 10.65-22.78 20.8zm55.86 11.93c-2.98 6.45-16.78 15.26-26.74 15.26-5.33 0-7.56-2.98-7.11-7.86.32-3.48 2.1-7.91 3.93-10.61l1.52-2.32a44.95 44.95 0 0 1 1.88-2.7c3.66-4.8 7.85-7.45 13.62-7.45 9.06 0 15.75 9.52 12.9 15.68zm-.9-.42c2.52-5.47-3.65-14.26-12-14.26-5.4 0-9.33 2.48-12.82 7.06-.6.8-1.17 1.6-1.85 2.64 0 0-1.2 1.87-1.52 2.33-1.74 2.57-3.46 6.85-3.77 10.14-.4 4.33 1.43 6.77 6.12 6.77 9.57 0 23.02-8.58 25.83-14.68zm-69.67 20.74c2.08.18 4.44.81 5.88 1.8 2.12 1.47 2.2 3.6-.26 6.05-5.14 5.15-12.85 4.34-12.85-1.35 0-4.66 3.14-6.84 7.23-6.5zm-.09 1c-3.56-.3-6.14 1.5-6.14 5.5 0 4.58 6.53 5.26 11.15.65 2.03-2.04 1.98-3.43.4-4.52-1.27-.88-3.48-1.47-5.4-1.63zm29.59-225.95c4.64 2.35 17.27 8.24 19.39 9.43a24.14 24.14 0 0 1 7.05 5.64 45.03 45.03 0 0 1 3.75 5.2c2.4 3.78.04 7.66-6.2 11.63-4.97 3.16-12.18 6.3-21.95 9.82-4.84 1.74-19.63 6.68-21.1 7.2-6.59 2.33-14.85.1-25.14-5.86-3.93-2.27-8-5-12.94-8.54-2.23-1.61-9.5-6.99-10.7-7.85a81.21 81.21 0 0 0-8.63-5.7c-4.82-2.6-4.45-6.64.17-12.13 3.27-3.88 4.17-4.67 18.1-16.33a230.2 230.2 0 0 0 8.89-7.74 95.2 95.2 0 0 0 4.72-4.66c5.08-5.43 9.8-6.49 14.97-3.92 2.24 1.1 4.53 2.85 7.43 5.52 1.48 1.37 6.94 6.72 7.98 7.7 5.2 4.91 9.46 8.2 14.2 10.6zm-.46.9c-4.85-2.45-9.18-5.79-14.44-10.76-1.05-1-6.5-6.34-7.97-7.69-2.83-2.61-5.06-4.3-7.2-5.37-4.75-2.36-9-1.4-13.8 3.71a96.18 96.18 0 0 1-4.76 4.71c-2.48 2.3-5.16 4.62-8.92 7.77-13.86 11.6-14.77 12.4-17.98 16.21-4.28 5.08-4.58 8.4-.46 10.61 2.23 1.2 4.9 2.99 8.74 5.77 1.2.87 8.47 6.24 10.7 7.85a154.8 154.8 0 0 0 12.85 8.49c10.06 5.82 18.07 7.98 24.3 5.78 1.48-.52 16.27-5.47 21.1-7.2 9.7-3.5 16.86-6.61 21.75-9.72 5.84-3.71 7.9-7.1 5.9-10.26a44.09 44.09 0 0 0-3.67-5.08 23.16 23.16 0 0 0-6.78-5.42c-2.08-1.16-14.68-7.05-19.36-9.4zm-38.83 8.05c3.11-.37 5.7-.13 8.4.7 2.15.66 2.74.93 8.64 3.77 4.75 2.29 8.39 3.86 13.19 5.56 8.38 2.97 11.32 6.23 8.83 9.76-2.08 2.94-8.04 5.92-17.84 9.18-8.45 2.82-15.48 2.35-21.43-.9-4.65-2.55-8.33-6.5-12.15-12.3-2.9-4.41-2.73-8.2.16-11.06 2.48-2.45 6.87-4.07 12.2-4.7zm.12 1c-5.13.6-9.33 2.16-11.62 4.42-2.53 2.5-2.68 5.77-.02 9.8 3.73 5.68 7.3 9.51 11.8 11.97 5.7 3.11 12.43 3.57 20.62.84 9.59-3.2 15.44-6.12 17.34-8.82 1.94-2.75-.5-5.45-8.35-8.24-4.84-1.72-8.5-3.3-13.28-5.6-5.84-2.81-6.42-3.07-8.5-3.71a18.42 18.42 0 0 0-8-.66zM202.5 500.38c0 4.78-1.45 7.56-4.43 8.93-2.29 1.05-4.55 1.23-10.79 1.2l-1.78-.01c-9.19 0-17-7.65-17-15.5 0-7.59 10.6-10.51 19.74-5.44 2.78 1.55 4.21 1.94 8.57 2.75 4.44.83 5.69 2.27 5.69 8.07zm-1 0c0-5.3-.9-6.34-4.88-7.08-4.45-.83-5.96-1.25-8.86-2.86-8.57-4.76-18.26-2.1-18.26 4.56 0 7.3 7.36 14.5 16 14.5h1.79c6.06.04 8.26-.14 10.36-1.1 2.6-1.2 3.85-3.6 3.85-8.02zm33.33-117.85c3.71-1.31 8.7-2.7 16.1-4.55 2.58-.65 16.53-4.04 20.56-5.05 19.59-4.93 31.55-8.9 38.23-13.35 14.93-9.95 36.87-33.88 43.83-47.8 2.25-4.5 4.65-6.38 7.68-6.25 1.26.06 2.61.45 4.32 1.2a50.81 50.81 0 0 1 3.54 1.7l1.26.63c4.78 2.34 8.38 3.44 12.65 3.44 7.2 0 10.01 3.07 8.35 7.91-1.4 4.06-5.92 8.91-11.1 12.02-8.3 4.98-11.75 17.3-11.75 33.57 0 3.59-1.37 6.28-3.98 8.36-1.98 1.58-4.2 2.6-8.47 4.16l-1.02.37c-4.85 1.75-6.98 2.77-8.68 4.46-5.09 5.1-12.54 7.15-20.35 7.15-1.38 0-2.47.92-3.99 3.1-.29.41-1.32 1.95-1.47 2.18-2.68 3.92-4.93 5.72-8.54 5.72-7.84 0-10.74.93-21.76 6.94-5.18 2.82-8.8 3.58-14.66 3.68-.26 0-.47 0-.92.02-4.82.06-7.12.3-10.51 1.34a73.43 73.43 0 0 0-8.89 3.56c-2.17 1-10.53 5.01-10.23 4.87-7.79 3.7-13.32 5.98-18.9 7.57-12.41 3.55-18.58 2.24-27.42-4.07-2.58-1.85-2.72-4.43-.83-7.62 1.45-2.45 3.9-5.09 8.08-8.97l1.78-1.64c3.92-3.6 4.48-4.11 5.9-5.53 2.32-2.32 3.12-3.5 5.48-7.63 1.93-3.36 3.37-5.11 6.27-7.06 2.3-1.54 5.34-2.98 9.44-4.43zm.34.94c-4.03 1.42-7 2.83-9.22 4.32-2.75 1.85-4.1 3.49-5.96 6.73-2.4 4.2-3.24 5.44-5.64 7.83-1.43 1.44-2 1.96-5.94 5.57l-1.77 1.63c-4.1 3.82-6.52 6.41-7.9 8.75-1.65 2.79-1.54 4.8.55 6.3 8.6 6.14 14.46 7.38 26.57 3.92 5.5-1.57 11-3.84 18.74-7.51-.3.14 8.06-3.88 10.24-4.88a74.3 74.3 0 0 1 9.01-3.6c3.51-1.09 5.89-1.33 10.8-1.4h.91c5.72-.1 9.18-.83 14.2-3.57 11.16-6.08 14.2-7.06 22.24-7.06 3.19 0 5.2-1.6 7.71-5.28l1.48-2.2c1.7-2.43 3-3.52 4.81-3.52 7.57 0 14.78-2 19.65-6.85 1.83-1.84 4.04-2.9 9.04-4.7l1.02-.37c8.6-3.13 11.79-5.67 11.79-11.58 0-16.6 3.53-29.2 12.24-34.43 5-3 9.35-7.67 10.66-11.48 1.42-4.13-.83-6.59-7.4-6.59-4.45 0-8.19-1.14-13.09-3.54-7.52-3.67-6.78-3.34-8.72-3.43-2.58-.1-4.65 1.52-6.74 5.7-7.04 14.07-29.1 38.14-44.17 48.19-6.81 4.54-18.84 8.52-38.55 13.48-4.03 1.02-17.98 4.4-20.56 5.05-7.37 1.84-12.33 3.23-16 4.52zM252 387.5c2.08 0 4-.2 7.25-.69 5.22-.77 6.64-.9 8.46-.5 2.52.56 3.79 2.35 3.79 5.69 0 4.05-2.27 7.29-6.62 10.11-3.24 2.1-6.53 3.53-14.15 6.4l-.27.1-2.28.86c-3.04 1.16-5.27 2.52-9.33 5.43l-.8.57c-8.19 5.88-13.35 8.03-23.05 8.03-4.98 0-6.88-2.03-5.75-5.62.87-2.81 3.58-6.56 7.8-11.13 1.26-1.37 2.64-2.8 4.15-4.3 3.17-3.14 11.25-10.61 11.45-10.8.46-.47.93-.89 1.4-1.26 3.38-2.71 5.77-3.08 14.18-2.93 1.65.03 2.63.04 3.77.04zm0 1c-1.15 0-2.13-.01-3.79-.04-8.18-.14-10.4.2-13.54 2.71-.44.35-.88.74-1.32 1.18-.2.21-8.3 7.69-11.45 10.82a134.6 134.6 0 0 0-4.12 4.26c-4.12 4.47-6.76 8.12-7.58 10.75-.9 2.88.45 4.32 4.8 4.32 9.46 0 14.44-2.07 22.46-7.84l.8-.57c4.13-2.96 6.42-4.36 9.56-5.56l2.3-.86.25-.1c7.55-2.84 10.8-4.25 13.97-6.3 4.08-2.65 6.16-5.6 6.16-9.27 0-2.89-.97-4.26-3-4.7-1.65-.37-3.05-.25-8.1.5-3.3.5-5.26.7-7.4.7zm112.47-45.34c-1.88 5.44-1.98 6.76-.98 12.76 1.18 7.06-1.38 16.58-5.49 16.58a16.89 16.89 0 0 0-1.51.07l-.64.04c-2.86.18-4.83.17-6.94-.17-6.55-1.06-10.41-5.14-10.41-13.44 0-13.9 2.14-19.69 8.13-26.33a21.9 21.9 0 0 0 2.52-3.75c.59-1.03 2.78-5.13 2.72-5.01 4.44-8.14 7.71-11.53 12.25-10.4 1.17.3 2.2.77 3.58 1.59l1.39.84a20 20 0 0 0 3.1 1.6c.7.27 1.8.32 4.75.26l.72-.01c3.16-.05 4.78.08 5.83.66 1.61.89 1.2 2.56-1.14 4.9a215.9 215.9 0 0 1-3.86 3.76c-10.6 10.1-12.75 12.4-14.02 16.05zm-.94-.32c1.34-3.9 3.46-6.17 14.27-16.46 1.55-1.47 2.73-2.62 3.85-3.73 1.94-1.95 2.17-2.88 1.35-3.33-.82-.45-2.37-.58-5.32-.53l-.72.01c-3.14.06-4.26.02-5.14-.34-1.06-.41-1.97-.9-3.25-1.67l-1.38-.83a12.1 12.1 0 0 0-3.31-1.47c-3.88-.97-6.92 2.17-11.13 9.9.07-.13-2.14 3.98-2.73 5.02a22.71 22.71 0 0 1-2.65 3.92c-5.81 6.47-7.87 12-7.87 25.67 0 7.79 3.48 11.47 9.57 12.45 2.01.33 3.92.34 6.71.16a371.33 371.33 0 0 0 1.23-.07c.42-.03.73-.04.99-.04 3.2 0 5.6-8.9 4.5-15.42-1.02-6.16-.91-7.64 1.03-13.24zm-9.26 12.42c.58.52 2.5 1.9 2.55 1.93 1.96 1.57 2.04 3.31.01 6.36-3.74 5.64-8.83 3.09-8.83-4.55 0-3.81.51-5.67 2.07-6.02 1.18-.26 2 .3 4.2 2.28zm-1.34 1.48c-1.5-1.35-2.23-1.85-2.43-1.8-.17.03-.5 1.23-.5 4.06 0 5.87 2.67 7.21 5.17 3.45 1.5-2.26 1.47-2.84.4-3.7.03.03-1.95-1.4-2.64-2zm222.9-130.19c2.2-1.1 3.67-1.66 5.88-2.36l.28-.09a48.92 48.92 0 0 0 8.79-3.55c4.17-2.08 6.35-1.88 6.96.84.44 2 .2 4.01-1.25 12.7-2.27 13.62-9.16 26.14-21.17 36.3-4.3 3.63-7.41 4.39-9.75 2.44-1.88-1.57-3.1-4.57-4.61-10.48-.3-1.15-1.43-5.83-1.72-6.96a114.18 114.18 0 0 0-2.71-9.22c-2.4-6.82-3.03-10.78-2.1-12.94.77-1.83 2.08-2.24 5.6-2.45 1.49-.09 2.09-.14 2.97-.28l1.95-.33c.72-.12 1.22-.2 1.68-.29 1.1-.2 1.92-.38 2.71-.6 1.7-.49 3.42-1.2 6.49-2.73zm.44.9c-3.11 1.54-4.88 2.29-6.65 2.79-.84.23-1.69.42-2.81.63a108.77 108.77 0 0 1-3.81.63c-.77.13-1.39.19-2.92.28-3.13.18-4.17.51-4.74 1.85-.78 1.84-.2 5.62 2.13 12.2a115.12 115.12 0 0 1 2.74 9.31l1.72 6.96c1.46 5.7 2.62 8.58 4.28 9.96 1.87 1.56 4.49.93 8.47-2.44 11.82-10 18.6-22.3 20.83-35.7 1.4-8.45 1.65-10.51 1.25-12.31-.41-1.87-1.86-2-5.54-.16a49.87 49.87 0 0 1-8.93 3.6l-.28.1a35.4 35.4 0 0 0-5.74 2.3zm-4.5 6.58c1.37-.32 2.5-.75 3.9-1.42.35-.18 2.57-1.31 3.32-1.67 1.5-.71 2.97-1.31 4.7-1.89 2.7-.9 4.64-.77 5.88.4.98.94 1.34 2.26 1.41 4.18.02.4.02.7.02 1.37 0 5.63-4.63 16.88-11.34 22.75-4.34 3.8-7.31 4.67-9.92 2.52-2.06-1.7-3.5-4.65-6.67-12.91-1.86-4.83-2.05-8.1-.68-10.2 1.12-1.7 2.9-2.36 5.83-2.7l1.26-.12c1.19-.12 1.75-.19 2.3-.31zm-2.1 2.3l-1.22.12c-2.4.27-3.7.76-4.39 1.81-.93 1.43-.78 4.1.87 8.38 3.02 7.84 4.41 10.71 6.08 12.09 1.63 1.34 3.64.75 7.33-2.48C584.6 250.77 589 240.08 589 235c0-.64 0-.93-.02-1.29-.05-1.44-.3-2.33-.79-2.8-.6-.57-1.8-.65-3.87.04a37.95 37.95 0 0 0-4.47 1.8c-.72.34-2.93 1.47-3.32 1.66a19.54 19.54 0 0 1-4.3 1.56c-.66.16-1.28.24-2.56.36zm-227.73-88.98c-1.59 4.3-3.54 7.25-7.14 11.4l-2.6 2.97a67.02 67.02 0 0 0-2.63 3.23 46.4 46.4 0 0 0-4.68 7.5c-2.85 5.7-7.14 10.18-12.85 13.89-4.25 2.76-8.25 4.62-15.67 7.59-11.01 4.4-16.43 1.26-27.22-16.4-2.86-4.69-8.8-8.63-17.98-12.66-3-1.33-12.88-5.24-14.43-5.92-4.96-2.18-7.04-3.72-6.42-5.85.67-2.32 5.3-4.05 15.48-6.08 16.63-3.32 26.93-3.82 39.93-3.02 7.9.49 9.67.5 12.74-.26 1.99-.48 3.92-1.3 6-2.6l2.79-1.71c9.86-6.14 12.94-7.96 17.3-9.9 6.03-2.71 10.57-3.32 13.94-1.4 7.2 4.12 7.68 7.7 3.44 19.22zm-1.88-.7c3.95-10.7 3.6-13.26-2.56-16.78-2.66-1.52-6.62-.99-12.12 1.48-4.24 1.9-7.3 3.7-17.07 9.77l-2.79 1.73a22.6 22.6 0 0 1-6.57 2.84c-3.36.81-5.22.8-13.34.3-12.84-.78-22.97-.29-39.41 3-4.9.97-8.45 1.88-10.79 2.75-2.03.76-3.04 1.45-3.17 1.91-.16.57 1.48 1.79 5.3 3.46 1.5.67 11.39 4.58 14.44 5.93 9.52 4.19 15.74 8.3 18.87 13.44 10.35 16.93 14.87 19.56 24.78 15.6 7.3-2.93 11.21-4.75 15.33-7.42 5.42-3.53 9.47-7.75 12.15-13.1 1.44-2.9 3.02-5.4 4.86-7.82a68.95 68.95 0 0 1 2.72-3.33l2.6-2.97c3.46-3.99 5.28-6.75 6.77-10.79zm-6.64-.39c-7.94 12.8-18.53 21.75-33.3 25.23-7.82 1.83-12.47-.79-13.12-5.93-.55-4.45 2.29-9.06 6-9.06 3.02 0 5.6-1.68 15.38-9.16 1.47-1.12 2.57-1.96 3.66-2.74 4.4-3.2 7.77-5.17 10.82-6.08 5.57-1.67 9.33-2.15 11.35-1.22 2.5 1.14 2.22 4.13-.79 8.96zm-.84-.52c2.72-4.4 2.94-6.74 1.21-7.53-1.71-.79-5.32-.33-10.65 1.27-2.9.87-6.2 2.79-10.51 5.92-1.08.79-2.18 1.62-3.65 2.74-10.08 7.72-12.62 9.36-15.98 9.36-3.02 0-5.5 4.02-5 7.94.56 4.5 4.62 6.78 11.89 5.07 14.48-3.4 24.86-12.18 32.69-24.77zM461.17 33.53c13.88 4.96 20.75 4.96 31.62.01 3.02-1.37 5.47-2.94 11-6.82 5.57-3.92 8.05-5.51 11.14-6.92 4.14-1.88 7.78-2.38 11.22-1.28 3.92 1.26 6.2 12.3 6.78 28.45.5 14.2-.52 28.93-2.46 34.2-1.82 4.93-5.86 8.17-11.51 10.02A41.7 41.7 0 0 1 506 93.01c-5.79 0-9 2.4-12.2 7.64-.37.59-1.55 2.6-1.71 2.87-1.75 2.9-3.05 4.33-4.93 4.95-.94.32-2.07.83-3.87 1.74l-2.43 1.23c-1.03.53-1.87.94-2.7 1.34-6.43 3.1-11.73 4.72-17.16 4.72-5.71 0-10.04 2.09-14.02 5.92-1.16 1.11-4.2 4.53-4.63 4.94-2.54 2.44-5.93 4.24-10.85 6.1-1.4.52-5.98 2.13-6.25 2.22l-2.06.78c-.89.36-1.78.63-2.7.81-5.55 1.14-11.14-.54-17.98-4.42-1.27-.73-5.13-3.06-5.76-3.42-2.05-1.16-4.12-1.53-9.09-1.9l-1.73-.15c-4.78-.4-7.68-1.14-10.22-2.97-5-3.61-6.77-7.76-5.65-12.33 1.33-5.42 6.5-11.02 14.85-17.28a169.2 169.2 0 0 1 6.5-4.61c-.33.23 4.33-2.92 5.3-3.6 2.73-1.91 4.8-3.9 12.75-12.04l1.09-1.1c3.49-3.56 5.89-5.89 8.12-7.83 2.9-2.5 4.72-5.95 7.5-13.05l.63-1.61c2.7-6.92 4.28-10 6.87-12.33 1.42-1.28 6.68-6.54 7.93-7.5 3.98-3 8.01-2.73 19.57 1.4zm-.34.94c-11.26-4.02-15-4.28-18.62-1.53-1.19.9-6.4 6.11-7.88 7.43-2.42 2.18-3.96 5.19-6.6 11.95l-.63 1.61c-2.83 7.26-4.72 10.8-7.77 13.45a141.85 141.85 0 0 0-9.16 8.87c-8.02 8.2-10.08 10.2-12.88 12.16-.99.69-5.65 3.84-5.31 3.6-2.5 1.71-4.52 3.13-6.47 4.59-8.17 6.13-13.23 11.6-14.48 16.72-1.02 4.15.58 7.9 5.26 11.27 2.36 1.7 5.11 2.4 9.72 2.8l1.73.13c5.12.4 7.28.78 9.5 2.05.65.36 4.5 2.7 5.76 3.4 6.66 3.78 12.04 5.4 17.29 4.32.86-.17 1.7-.42 2.52-.75a67 67 0 0 1 2.1-.8c.28-.1 4.86-1.7 6.24-2.22 4.8-1.8 8.08-3.56 10.5-5.88.4-.38 3.44-3.8 4.63-4.94 4.16-4 8.72-6.2 14.72-6.2 5.25 0 10.42-1.59 16.73-4.62.82-.4 1.65-.8 2.68-1.33.12-.06 1.93-.99 2.43-1.23 1.84-.93 3-1.46 4-1.8 1.6-.52 2.76-1.82 4.39-4.52l1.7-2.88c3.39-5.5 6.87-8.11 13.07-8.11 4.45 0 8.73-.49 12.64-1.77 5.4-1.76 9.2-4.8 10.9-9.41 1.87-5.11 2.9-19.75 2.39-33.83-.56-15.53-2.81-26.48-6.08-27.52-3.18-1.02-6.57-.55-10.5 1.23-3.02 1.37-5.47 2.94-11 6.83-5.57 3.92-8.05 5.5-11.14 6.92-11.13 5.05-18.26 5.05-32.38.01zM475 55c5.38 0 7.55-.21 9.72-.96 1.26-.43 9.95-4.8 14.88-6.96 1.9-.82 3.56-2.44 6.6-6.04 2.56-3.04 3.19-3.75 4.4-4.84 3.7-3.35 7.07-3.28 10.22 1.23 6.23 8.9 5.61 15.94.07 27.02a71.26 71.26 0 0 0-2.5 5.48c-.32.8-1 2.7-1.09 2.9-.17.45-.34.81-.54 1.17-.63 1.14-1.56 2.21-4.05 4.7-2.4 2.4-5.16 3.27-11.68 4.33-1.81.3-2.2.36-3 .51-6.02 1.1-9.6 2.69-12.24 6.07-3.57 4.59-7.9 7.48-14.98 10.74-.55.24-1.1.5-1.8.8l-1.78.8a60.08 60.08 0 0 0-7.7 3.9c-2.57 1.6-4.79 2.35-9.42 3.46-8.58 2.06-12.28 3.76-17.37 9.36-5.12 5.64-10.17 7.64-16.63 6.7-5.36-.79-10.63-3.01-23.56-9.48-6.3-3.15-6.43-7.78-1.5-13.56 3.38-3.94 3.52-4.06 19.4-16.44 8.12-6.33 12.97-10.57 16.63-14.88 2.53-2.98 4.2-5.73 4.96-8.3 5.5-18.3 12.5-21.98 22.78-15.56 1.95 1.22 6.61 4.55 7.18 4.9 3.36 2.15 6.52 2.95 13 2.95zm0 2c-6.84 0-10.37-.89-14.08-3.26-.63-.4-5.27-3.71-7.16-4.9-9.05-5.65-14.66-2.7-19.8 14.45-.86 2.87-2.67 5.85-5.35 9.01-3.78 4.45-8.7 8.75-16.94 15.17-15.66 12.21-15.86 12.38-19.1 16.16-4.17 4.9-4.09 8 .88 10.48 12.71 6.35 17.89 8.54 22.94 9.28 5.78.84 10.18-.9 14.87-6.06 5.42-5.96 9.45-7.82 18.38-9.96 4.43-1.07 6.5-1.76 8.83-3.22a61.7 61.7 0 0 1 7.94-4.02l1.78-.8 1.78-.8c6.82-3.13 10.91-5.87 14.24-10.14 3-3.87 7-5.64 13.46-6.82.83-.15 1.21-.21 3.04-.51 6.1-1 8.6-1.78 10.58-3.77 2.36-2.36 3.21-3.34 3.72-4.26.15-.27.29-.56.44-.94.06-.15.75-2.06 1.09-2.9.64-1.6 1.45-3.4 2.57-5.64 5.24-10.49 5.8-16.8.07-24.98-2.4-3.44-4.37-3.48-7.24-.89-1.11 1-1.73 1.7-4.22 4.65-3.24 3.85-5.04 5.59-7.32 6.59-4.82 2.1-13.62 6.53-15.03 7.01-2.44.84-4.79 1.07-10.37 1.07zm-12.7 8.6c5.47 3.9 10.34 3.72 18.23.88 5.39-1.94 5.92-2.1 7.7-2.1 2.5-.01 4.21 1.36 5.24 4.46 1.66 4.98-2.32 8.52-12.3 12.68-2.7 1.13-16.25 6.18-20 7.73-7.86 3.24-13.93 6.42-18.87 10.15-13.02 9.84-18.36 11.93-23.71 9.68a24.67 24.67 0 0 1-3.62-1.98l-1.99-1.28a90.4 90.4 0 0 0-2.24-1.4c-3.33-2-2.82-4.28.85-7.34 1.35-1.13 10.66-7.61 13.53-9.91 7.1-5.69 11.91-11.47 14.41-18.34 3.07-8.45 4.89-12.1 6.8-13.39 1.73-1.16 3.36-.53 6.18 1.9.63.56 3.4 3.08 4.11 3.7 1.93 1.7 3.71 3.15 5.67 4.55zm-.6.8c-1.98-1.42-3.79-2.88-5.74-4.6-.73-.64-3.48-3.16-4.1-3.7-2.5-2.16-3.75-2.65-4.97-1.83-1.66 1.11-3.44 4.7-6.42 12.9-2.57 7.07-7.5 12.99-14.72 18.78-2.91 2.33-12.21 8.8-13.52 9.9-3.22 2.68-3.56 4.17-.97 5.72l2.26 1.4 1.99 1.28c1.47.93 2.48 1.5 3.47 1.91 4.9 2.07 9.96.07 22.72-9.56 5.02-3.79 11.15-7 19.1-10.28 3.76-1.55 17.3-6.6 20-7.72 9.5-3.97 13.14-7.2 11.73-11.44-.9-2.71-2.25-3.8-4.3-3.79-1.6 0-2.15.17-7.36 2.05-8.17 2.94-13.34 3.14-19.16-1.01z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n@media print {\n  ._CSS-main {\n    background: white !important;\n  }\n}","name":"Wartung: Root Layout","packages":[],"template":"<!-- Load translations! They will be there before any content loading I hope 😬  -->\n<ae-layout style=\"display: none\" layout-id=\"7a66c0bd-aaa4-406d-80da-0b0d5a6ee330\"></ae-layout>\n\n<!-- FIXME: without key, page is never reloaded -->\n<ae-layout\n  v-if=\"locals.ready\"\n  :key=\"'_CSS' + locals.startup?.id\"\n  layout-id=\"5913cb1e-9979-4eb7-84e8-488cdd658cbb\"\n  param-layout-id=\"f6811177-daaf-4f7d-b9a6-b5aae0960800\"\n  :param-query-params=\"params.queryParams\"\n  :param-page-document-id=\"params.pageDocumentId || locals.startup?.id\"\n  :param-no-navigation=\"true\"\n  class=\"_CSS-root\"\n></ae-layout>\n<div v-else class=\"bg-slate-50\" style=\"height: 100%; display: flex; justify-content: center; align-items: center\">\n  <ae-icon class=\"fa fa-spinner-third fa-2x fa-spin text-theme-400\"></ae-icon>\n</div>\n"},"f":{"id":"layout-form","text":"Layout","v":"239129c22623e2fc"},"id":"abc36759-63ce-423b-9176-69d395e76082","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2026-02-20T14:00:59+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"p":"594e6b26-7310-4d00-aad9-2a577ccab542","previous":{"v":"6c33e6bb66cfd5ff"},"stamps":[],"t":1771596059058,"v":"df11f6ec68a976bb"},{"id":"c5d2f60f-9037-4aa0-ad40-39aae8dbfad7","v":"0965379558c7343e","previous":{"v":"5e6d86133c013da2"},"p":"5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"Wartung: Root Layout","applies":"","packages":[],"template":"<!-- Load translations! They will be there before any content loading I hope 😬  -->\n<ae-layout style=\"display:none;\" layout-id=\"7a66c0bd-aaa4-406d-80da-0b0d5a6ee330\"></ae-layout>\n\n<ae-layout v-if=\"locals.ready\"\n          layout-id=\"5913cb1e-9979-4eb7-84e8-488cdd658cbb\"\n           param-layout-id=\"2c74fe2d-00f7-4cca-9f97-7a5d3bd49c8d\"\n           :param-query-params=\"params.queryParams\"\n           :param-page-document-id=\"params.pageDocumentId || locals.startup?.id\"\n           :param-no-navigation=\"true\"\n           class=\"_CSS-root\"\n></ae-layout>\n<div v-else class=\"bg-slate-50\" style=\"height:100%; display:flex; justify-content:center; align-items:center;\">\n  <ae-icon class=\"fa fa-spinner-third fa-2x fa-spin text-theme-400\"></ae-icon>\n</div>\n","css":"._CSS {\n  width:100%;\n  height:100%;\n}\n\n._CSS-root {\n  background: var(--ae-background-100);\n  flex-direction:column;\n  width:100%;\n  height:100%;\n  overflow: hidden;\n}\n \n._CSS-app {\n  width:100%;\n  height:100%;\n  overflow: hidden;\n}\n\n._CSS-loader {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    width: 100%;\n    height: 100%;\n}\n\n._CSS-main {\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n  position: relative;\n  flex:1;\n  xalign-items: stretch;\n  height:100%;\n  line-height: 1.4;\n  color: var(--ae-background-900);\n\n  background-color: hsla(0, 0%, 99%);\n  /* \"Topography\" by \"Steve Schoger\" (https://www.heropatterns.com) is licensed under CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) */\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='600' viewBox='0 0 600 600'%3E%3Cpath fill='%239C92AC' fill-opacity='0.04' d='M600 325.1v-1.17c-6.5 3.83-13.06 7.64-14.68 8.64-10.6 6.56-18.57 12.56-24.68 19.09-5.58 5.95-12.44 10.06-22.42 14.15-1.45.6-2.96 1.2-4.83 1.9l-4.75 1.82c-9.78 3.75-14.8 6.27-18.98 10.1-4.23 3.88-9.65 6.6-16.77 8.84-1.95.6-3.99 1.17-6.47 1.8l-6.14 1.53c-5.29 1.35-8.3 2.37-10.54 3.78-3.08 1.92-6.63 3.26-12.74 5.03a384.1 384.1 0 0 1-4.82 1.36c-2.04.58-3.6 1.04-5.17 1.52a110.03 110.03 0 0 0-11.2 4.05c-2.7 1.15-5.5 3.93-8.78 8.4a157.68 157.68 0 0 0-6.15 9.2c-5.75 9.07-7.58 11.74-10.24 14.51a50.97 50.97 0 0 1-4.6 4.22c-2.33 1.9-10.39 7.54-11.81 8.74a14.68 14.68 0 0 0-3.67 4.15c-1.24 2.3-1.9 4.57-2.78 8.87-2.17 10.61-3.52 14.81-8.2 22.1-4.07 6.33-6.8 9.88-9.83 12.99-.47.48-.95.96-1.5 1.48l-3.75 3.56c-1.67 1.6-3.18 3.12-4.86 4.9a42.44 42.44 0 0 0-9.89 16.94c-2.5 8.13-2.72 15.47-1.76 27.22.47 5.82.51 6.36.51 8.18 0 10.51.12 17.53.63 25.78.24 4.05.56 7.8.97 11.22h.9c-1.13-9.58-1.5-21.83-1.5-37 0-1.86-.04-2.4-.52-8.26-.94-11.63-.72-18.87 1.73-26.85a41.44 41.44 0 0 1 9.65-16.55c1.67-1.76 3.18-3.27 4.83-4.85.63-.6 3.13-2.96 3.75-3.57a71.6 71.6 0 0 0 1.52-1.5c3.09-3.16 5.86-6.76 9.96-13.15 4.77-7.42 6.15-11.71 8.34-22.44.86-4.21 1.5-6.4 2.68-8.6.68-1.25 1.79-2.48 3.43-3.86 1.38-1.15 9.43-6.8 11.8-8.72 1.71-1.4 3.26-2.81 4.7-4.3 2.72-2.85 4.56-5.54 10.36-14.67a156.9 156.9 0 0 1 6.1-9.15c3.2-4.33 5.9-7.01 8.37-8.07 3.5-1.5 7.06-2.77 11.1-4.02a233.84 233.84 0 0 1 7.6-2.2l2.38-.67c6.19-1.79 9.81-3.16 12.98-5.15 2.14-1.33 5.08-2.33 10.27-3.65l6.14-1.53c2.5-.63 4.55-1.2 6.52-1.82 7.24-2.27 12.79-5.06 17.15-9.05 4.05-3.72 9-6.2 18.66-9.9l4.75-1.82c1.87-.72 3.39-1.31 4.85-1.91 10.1-4.15 17.07-8.32 22.76-14.4 6.05-6.45 13.95-12.4 24.49-18.92 1.56-.96 7.82-4.6 14.15-8.33v-64.58c-4 8.15-8.52 14.85-12.7 17.9-2.51 1.82-5.38 4.02-9.04 6.92a1063.87 1063.87 0 0 0-6.23 4.98l-1.27 1.02a2309.25 2309.25 0 0 1-4.87 3.9c-7.55 6-12.9 10.05-17.61 13.19-3.1 2.06-3.86 2.78-8.06 7.13-5.84 6.07-11.72 8.62-29.15 10.95-11.3 1.5-20.04 4.91-30.75 11.07-1.65.94-7.27 4.27-6.97 4.1-2.7 1.58-4.69 2.69-6.64 3.66-5.63 2.8-10.47 4.17-15.71 4.17-17.13 0-41.44 11.51-51.63 22.83-12.05 13.4-31.42 27.7-45.25 31.16-7.4 1.85-11.85 7.05-14.04 14.69-1.26 4.4-1.58 8.28-1.58 13.82 0 .82.01.98.24 3.63.45 5.18.35 8.72-.77 13.26-1.53 6.2-4.89 12.6-10.59 19.43-13.87 16.65-22.88 46.58-22.88 71.68 0 2.39.02 4.26.06 8.75.12 10.8.1 15.8-.22 21.95-.56 11.18-2.09 20.73-5 29.3h-1.05c2.94-8.56 4.49-18.12 5.05-29.35.31-6.13.34-11.1.22-21.9-.04-4.48-.06-6.36-.06-8.75 0-25.32 9.07-55.47 23.12-72.32 5.6-6.72 8.88-12.99 10.38-19.03 1.09-4.4 1.18-7.85.74-12.93-.23-2.7-.24-2.86-.24-3.72 0-5.62.32-9.57 1.62-14.1 2.28-7.95 6.97-13.44 14.76-15.39 13.6-3.4 32.82-17.59 44.75-30.84C409 360.14 433.58 348.5 451 348.5c5.07 0 9.77-1.33 15.26-4.07 1.93-.96 3.9-2.05 6.58-3.62-.3.18 5.33-3.16 6.98-4.11 10.82-6.21 19.66-9.67 31.11-11.2 17.23-2.3 22.9-4.75 28.57-10.64 4.25-4.41 5.04-5.16 8.22-7.28 4.68-3.11 10.01-7.14 17.55-13.14a1113.33 1113.33 0 0 0 4.86-3.89l1.28-1.02a4668.54 4668.54 0 0 1 6.23-4.98c3.67-2.9 6.55-5.12 9.07-6.95 4.37-3.19 9.16-10.56 13.29-19.4v66.9zm0-116.23c-.62.01-1.27.06-1.95.13-6.13.63-13.83 3.45-21.83 7.45-3.64 1.82-8.46 2.67-14.17 2.71-4.7.04-9.72-.47-14.73-1.33-1.7-.3-3.26-.61-4.67-.93a31.55 31.55 0 0 0-3.55-.57 273.4 273.4 0 0 0-16.66-.88c-10.42-.16-17.2.74-17.97 2.73-.38.97.6 2.55 3.03 4.87 1.01.97 2.22 2.03 4.04 3.55a1746.07 1746.07 0 0 0 4.79 4.02c1.39 1.2 3.1 1.92 5.5 2.5.7.16.86.2 2.64.54 3.53.7 5.03 1.25 6.15 2.63 1.41 1.76 1.4 4.54-.15 8.88-2.44 6.83-5.72 10.05-10.19 10.33-3.63.23-7.6-1.29-14.52-5.06-4.53-2.47-6.82-7.3-8.32-15.26-.17-.87-.32-1.78-.5-2.86l-.43-2.76c-1.05-6.58-1.9-9.2-3.73-10.11-.81-.4-1.59-.74-2.36-1-2.27-.77-4.6-1.02-8.1-.92-2.29.07-14.7 1-13.77.93-20.55 1.37-28.8 5.05-37.09 14.99a133.07 133.07 0 0 0-4.25 5.44l-2.3 3.09-2.51 3.32c-4.1 5.36-7.06 8.48-10.39 11.12-.65.52-1.33 1.04-2.13 1.62l-4.11 2.94a106.8 106.8 0 0 0-5.16 3.99c-4.55 3.74-9.74 8.6-16.25 15.38-8.25 8.58-11.78 13.54-11.7 15.95.07 1.65 1.64 2.11 6.79 2.38 1.61.09 2.15.12 2.98.2 2.95.24 5.09.73 6.81 1.68 7.48 4.15 11.63 7.26 13.95 11.58 3.3 6.15.8 12.88-8.89 20.26-8.28 6.3-11.1 10.37-11.31 14.96-.06 1.17 0 1.93.26 4.43.69 6.47.25 10.65-2.8 17.42a44.23 44.23 0 0 1-4.16 7.53c-2.82 3.97-5.47 5.74-10.6 7.69-.43.16-3.34 1.23-4.27 1.59-1.8.68-3.38 1.36-5.01 2.14-4.18 2-8.4 4.6-13.1 8.24-8.44 6.51-13.23 14.56-15.98 25.06-1.1 4.2-1.55 6.81-2.8 15.21-1.26 8.6-2.17 12.64-4.08 16.55-2.1 4.28-11.93 26.59-12.97 28.88a382.7 382.7 0 0 1-6.37 13.41c-4.07 8.11-7.61 14.07-10.73 17.81-5.38 6.46-8.98 14.37-13.77 28.42a810.14 810.14 0 0 0-1.89 5.6c-1.8 5.35-2.96 8.6-4.26 11.85-6.13 15.32-25.43 26.31-46.46 26.31-11.2 0-20.58-2.74-31.02-8.55-5.6-3.13-4.55-2.42-22.26-14.54-14.33-9.8-17.7-10.73-20.47-6.9-.37.5-1.81 2.74-1.83 2.77a52.24 52.24 0 0 1-4.94 5.9c-.73.79-5.52 5.87-6.97 7.45-2.38 2.6-4.3 4.81-5.98 6.93a45.6 45.6 0 0 0-5.08 7.66c-1.29 2.57-1.9 5.25-2.66 10.6a997.6 997.6 0 0 1-.46 3.18h-1l.47-3.32c.77-5.45 1.4-8.2 2.75-10.9a46.54 46.54 0 0 1 5.2-7.84c1.7-2.14 3.63-4.38 6.03-6.98 1.45-1.59 6.24-6.68 6.96-7.46a51.58 51.58 0 0 0 4.84-5.78s1.47-2.26 1.86-2.8c3.25-4.5 7.08-3.44 21.84 6.67 17.67 12.08 16.62 11.38 22.19 14.48 10.3 5.73 19.5 8.43 30.53 8.43 20.65 0 39.57-10.77 45.54-25.69a219.7 219.7 0 0 0 4.24-11.8 6752.32 6752.32 0 0 0 1.88-5.6c4.83-14.16 8.47-22.14 13.96-28.73 3.05-3.66 6.56-9.57 10.6-17.61 1.97-3.93 4.04-8.31 6.35-13.38 1.03-2.28 10.88-24.61 12.98-28.91 1.85-3.79 2.75-7.76 4-16.25 1.24-8.44 1.7-11.07 2.81-15.32 2.8-10.7 7.71-18.94 16.33-25.6a73.18 73.18 0 0 1 13.29-8.35c1.66-.8 3.27-1.48 5.08-2.18.94-.36 3.86-1.43 4.28-1.59 4.95-1.88 7.44-3.55 10.14-7.33 1.35-1.9 2.68-4.3 4.06-7.37 2.97-6.58 3.39-10.59 2.72-16.9a27.13 27.13 0 0 1-.27-4.58c.22-4.94 3.21-9.24 11.7-15.7 9.33-7.11 11.66-13.34 8.62-19-2.2-4.09-6.25-7.12-13.55-11.17-1.57-.88-3.6-1.33-6.42-1.57-.8-.07-1.34-.1-2.95-.19-5.77-.3-7.63-.85-7.72-3.34-.1-2.81 3.5-7.87 11.97-16.69 6.53-6.8 11.75-11.69 16.33-15.45 1.79-1.47 3.42-2.72 5.2-4.03l4.12-2.94c.79-.58 1.46-1.08 2.1-1.59 3.26-2.6 6.16-5.65 10.21-10.94a383.2 383.2 0 0 0 2.5-3.32l2.31-3.09c1.8-2.39 3.04-4 4.29-5.48 8.47-10.17 16.98-13.96 37.27-15.3-.44.02 12-.9 14.32-.98 3.62-.1 6.05.16 8.46.98.8.27 1.62.62 2.47 1.04 2.27 1.14 3.17 3.87 4.27 10.85l.44 2.76c.17 1.07.33 1.97.5 2.83 1.44 7.69 3.62 12.29 7.8 14.57 6.76 3.68 10.6 5.15 13.99 4.94 4-.25 6.99-3.17 9.3-9.67 1.45-4.04 1.46-6.49.32-7.92-.9-1.12-2.28-1.62-5.57-2.27a55.8 55.8 0 0 1-2.67-.55c-2.54-.6-4.39-1.4-5.93-2.71a252.63 252.63 0 0 0-4.78-4.01 84.35 84.35 0 0 1-4.08-3.6c-2.73-2.6-3.86-4.43-3.28-5.95 1.02-2.64 7.82-3.54 18.93-3.37a230.56 230.56 0 0 1 16.73.88c2.76.39 3.2.49 3.68.6 1.4.3 2.95.62 4.62.91a82.9 82.9 0 0 0 14.56 1.32c5.56-.04 10.24-.86 13.73-2.6 8.1-4.05 15.89-6.9 22.17-7.56.7-.07 1.4-.11 2.05-.13v1zm0-100.94v1.5c-8.62 16.05-17.27 29.55-23.65 35.92-3.19 3.2-7.62 4.9-13.54 5.56-4.45.48-8.28.4-19.18-.2-9.91-.55-15.32-.44-20.52.78a84.05 84.05 0 0 1-15 2.11l-2.25.14c-12.49.75-19.37 1.78-32.72 5.74-4.5 1.33-9.27 2.49-14.3 3.48a246.27 246.27 0 0 1-32.6 3.97c-7.56.45-13.21.57-20.24.57-5.4 0-11.9 1.61-18 5.18-8.3 4.87-15.06 12.87-19.53 24.5a68.57 68.57 0 0 1-4.56 9.8c-3.6 6.2-6.92 8.99-13.38 12.18l-4.03 1.96a64.48 64.48 0 0 0-15.16 10.25c-8.2 7.33-13.72 16.63-22.54 35.6l-2.08 4.49c-7.3 15.7-11.5 23.3-17.35 29.87-7.7 8.66-20.25 14.42-40.31 20.08-4.37 1.23-19.04 5.08-19.24 5.13-6.92 1.87-11.68 3.34-15.63 4.92-10.55 4.22-18.71 10.52-36.38 26.52l-1.7 1.54c-8.58 7.76-13.41 11.9-18.81 15.88-3.95 2.9-8 5.67-12.97 8.91-2.06 1.34-10.3 6.6-12.33 7.94-11.52 7.5-18.53 13.04-24.62 20.08a62.01 62.01 0 0 0-6.44 8.85c-4.13 6.91-6.27 13.15-9.2 25.11l-1.54 6.26c-.6 2.45-1.15 4.54-1.72 6.58-2.97 10.7-6.9 17.36-14.78 26.91L69.6 491a148.51 148.51 0 0 0-4.19 5.3 23.9 23.9 0 0 0-3.44 6.28c-1.16 3.23-1.52 5.9-1.87 11.94-.58 10.05-1.42 15.04-4.63 22.67-1.57 3.72-5.66 14.02-6.41 15.8a73.46 73.46 0 0 1-3.57 7.4c-2.88 5.14-6.71 10.12-13.12 16.95-5.96 6.36-8.87 10.9-10.61 16a56.88 56.88 0 0 0-1.38 4.82l-.46 1.84h-1.03l.52-2.08c.52-2.09.92-3.49 1.4-4.9 1.8-5.25 4.78-9.9 10.84-16.36 6.35-6.78 10.13-11.7 12.97-16.77a72.5 72.5 0 0 0 3.52-7.29c.75-1.76 4.84-12.06 6.4-15.8 3.17-7.5 3.99-12.4 4.56-22.33.35-6.14.72-8.88 1.93-12.23a24.9 24.9 0 0 1 3.58-6.54c1.27-1.7 2.6-3.37 4.22-5.34l4.11-4.95c7.8-9.46 11.66-16 14.59-26.54.56-2.04 1.1-4.12 1.71-6.56l1.53-6.26c2.96-12.04 5.13-18.36 9.32-25.39 1.84-3.08 4-6.05 6.54-8.99 6.17-7.12 13.24-12.7 24.83-20.26 2.05-1.33 10.28-6.6 12.33-7.94 4.96-3.22 9-5.98 12.92-8.87 5.37-3.95 10.19-8.08 18.74-15.82l1.7-1.54c17.76-16.09 25.98-22.43 36.67-26.7 4-1.6 8.8-3.09 15.75-4.96.21-.06 14.87-3.9 19.22-5.13 19.9-5.61 32.32-11.31 39.85-19.78 5.76-6.48 9.93-14.02 17.18-29.64l2.09-4.5c8.87-19.07 14.44-28.46 22.77-35.9a65.48 65.48 0 0 1 15.38-10.4l4.04-1.97c6.3-3.1 9.47-5.77 12.96-11.77a67.6 67.6 0 0 0 4.48-9.67c4.56-11.84 11.47-20.02 19.97-25 6.25-3.66 12.93-5.32 18.5-5.32 7.01 0 12.65-.12 20.17-.57a245.3 245.3 0 0 0 32.47-3.96c5-.98 9.75-2.13 14.22-3.45 13.43-3.98 20.38-5.02 32.94-5.78l2.24-.14c5.76-.37 9.8-.9 14.85-2.09 5.31-1.25 10.79-1.35 22.6-.7 9.04.5 12.84.58 17.21.1 5.71-.62 9.94-2.26 12.95-5.26 6.44-6.45 15.3-20.37 24.35-36.72zm0 450.21c-1.28-4.6-2.2-10.55-3.33-20.25l-.24-2.04-.23-2.03c-1.82-15.7-3.07-21.98-5.55-24.47-2.46-2.46-3.04-5.03-2.52-8.64.1-.6.18-1.1.39-2.15.69-3.54.77-5.04.08-6.84-.91-2.38-3.31-4.41-7.79-6.26-5.08-2.09-6.52-4.84-4.89-8.44.66-1.45 1.79-3.02 3.52-5.01 1.04-1.2 5.48-5.96 5.08-5.53 6.15-6.7 8.98-11.34 8.98-16.48a15.2 15.2 0 0 1 6.5-12.89v1.26a14.17 14.17 0 0 0-5.5 11.63c0 5.47-2.93 10.29-9.24 17.16.38-.42-4.04 4.33-5.07 5.5-1.67 1.93-2.75 3.43-3.36 4.77-1.37 3.04-.23 5.22 4.36 7.1 4.71 1.95 7.32 4.16 8.34 6.83.78 2.04.7 3.67-.03 7.4-.2 1.03-.3 1.51-.38 2.09-.48 3.33.03 5.59 2.23 7.8 2.74 2.74 3.98 8.96 5.84 25.06l.24 2.03.23 2.04c.82 7.01 1.53 12.06 2.34 16.03v4.33zm0-62.16c-1.4-3.13-4.43-9.9-4.95-11.17-1.02-2.53-1.25-3.8-.91-5.18.2-.84 2.05-4.68 2.32-5.33a70.79 70.79 0 0 0 3.54-11.2v3.99a62.82 62.82 0 0 1-2.62 7.6c-.31.75-2.09 4.46-2.27 5.18-.28 1.12-.08 2.22.87 4.57.41 1.02 2.5 5.7 4.02 9.09v2.45zm0-85.09c-1.65 1.66-3.66 2.9-6.4 4.13-.25.1-13.97 5.47-20.4 8.43-9.35 4.32-16.7 5.9-23.03 5.25-5.08-.53-9.02-2.25-14.77-5.92l-3.2-2.07a77.4 77.4 0 0 0-5.44-3.27c-4.05-2.18-3.25-5.8 1.47-10.47 3.71-3.68 9.6-7.93 18.73-13.8l4.46-2.82c17.95-11.33 18.22-11.5 22.27-14.74 11.25-9 19.69-14.02 26.31-15.1v1.02c-6.37 1.1-14.62 6-25.69 14.86-4.1 3.28-4.34 3.44-22.36 14.8a652.4 652.4 0 0 0-4.45 2.83c-9.07 5.83-14.92 10.05-18.57 13.66-4.31 4.28-4.95 7.13-1.7 8.88 1.7.91 3.29 1.88 5.5 3.3l3.2 2.08c5.64 3.59 9.45 5.25 14.34 5.76 6.13.64 13.32-.9 22.52-5.15 6.46-2.98 20.18-8.35 20.4-8.44 3.04-1.37 5.1-2.71 6.81-4.69v1.47zm0-41.37v1c-6.56.26-12.11 3.13-19.71 9.08l-4.63 3.68a51.87 51.87 0 0 1-4.4 3.14c-.82.52-5.51 3.33-6.22 3.76-3.31 2-6.15 3.8-8.87 5.6a112.61 112.61 0 0 0-8.16 5.92c-4.61 3.72-7.4 6.9-7.97 9.35-.63 2.67 1.48 4.53 7.05 5.46 10.7 1.78 20.92-.05 30.45-4.65a61.96 61.96 0 0 0 17.1-12.2 41.8 41.8 0 0 0 5.36-7.42v1.92a38.94 38.94 0 0 1-4.64 6.19 62.95 62.95 0 0 1-17.39 12.41c-9.7 4.68-20.13 6.55-31.05 4.73-6.06-1-8.65-3.29-7.85-6.67.64-2.74 3.53-6.05 8.31-9.9 2.35-1.9 5.1-3.88 8.24-5.97 2.73-1.82 5.58-3.61 8.9-5.62.72-.44 5.4-3.24 6.22-3.75 1.26-.8 2.6-1.76 4.3-3.09.8-.62 3.9-3.1 4.63-3.67 7.77-6.1 13.49-9.04 20.33-9.3zm0-154.6v1c-1.75-.24-4.3.23-7.82 1.55-10.01 3.75-13.8 5.07-19.15 6.76-1.78.56-2.63.83-3.87 1.24-1.48.5-3.16.76-6.74 1.16a1550.34 1550.34 0 0 0-2.64.3c-7.8.94-11.28 2.47-11.28 6.07 0 4.45 2.89 13.18 7.96 25.81a57.34 57.34 0 0 1 2.33 7.6 258.32 258.32 0 0 1 .84 3.46c1.86 7.62 3.17 10.71 5.56 11.67 2.21.88 4.7.6 7.47-.72 3.48-1.69 7.22-4.94 11.2-9.47 1.52-1.7 2.97-3.49 4.59-5.57l3.16-4.1c2.59-3.23 6.07-12.21 8.39-20.23v3.45c-2.29 7.2-5.27 14.5-7.61 17.41-.44.55-2.67 3.46-3.15 4.09-1.63 2.1-3.1 3.9-4.62 5.62-4.08 4.61-7.9 7.94-11.53 9.7-2.99 1.44-5.77 1.75-8.28.74-2.84-1.13-4.2-4.34-6.15-12.35a2097.48 2097.48 0 0 1-.84-3.46c-.8-3.2-1.47-5.45-2.28-7.46-5.14-12.8-8.04-21.55-8.04-26.19 0-4.37 3.84-6.06 12.16-7.07a160.9 160.9 0 0 1 2.65-.3c3.5-.39 5.15-.64 6.53-1.1 1.26-.42 2.1-.7 3.88-1.26 5.34-1.68 9.11-3 19.1-6.74 3.53-1.32 6.22-1.84 8.18-1.61zM0 292c10.13-11.31 18.13-23.2 23.07-35.39 3.3-8.14 6.09-16.12 10.81-30.55l1.59-4.84c6.53-19.94 10.11-29.82 14.77-39.56 6.07-12.72 12.55-21.18 20.27-25.54 6.66-3.76 10.2-7.86 12.22-13.15a46.6 46.6 0 0 0 1.86-6.58c1.23-5.2 2.05-7.59 3.93-10.36 2.45-3.62 6.27-6.53 12.1-8.96 15.78-6.58 16.73-7.04 18.05-9.01.65-.98.83-2.15.74-4.51-.03-.73-.23-3.82-.24-4A93.8 93.8 0 0 1 119 94c0-10.04.18-11.37 2.37-13.15.52-.42 1.13-.8 2.07-1.3.27-.14 2.18-1.12 2.84-1.48a68.4 68.4 0 0 0 9.12-5.87c2.06-1.54 2.64-2.14 8.01-7.93 3.78-4.09 6.21-6.36 8.96-8.12 3.64-2.33 7.2-3.12 10.9-2.11 4.4 1.2 10.81 2 18.78 2.46 6.9.4 12.9.5 21.95.5 4.87 0 8.97.47 15.4 1.57 7.77 1.33 9.3 1.54 12.38 1.54 4.05 0 7.43-.88 10.68-2.95 5.06-3.22 8.11-4.67 11.2-5.2 3.62-.64 4.77-.46 16.55 2.06 17.26 3.7 30.85 1.36 41.06-9.7 5.1-5.53 5.48-8.9 3.48-14.8-.83-2.42-1.03-3.1-1.17-4.3-.29-2.52.5-4.71 2.71-6.93 2.65-2.65 4.72-9.17 6.22-18.29h2.03c-1.56 9.71-3.77 16.65-6.83 19.7-1.79 1.8-2.36 3.39-2.14 5.28.11 1 .3 1.63 1.07 3.9 2.22 6.53 1.76 10.66-3.9 16.8-10.77 11.66-25.07 14.13-42.95 10.3-11.42-2.45-12.55-2.62-15.78-2.06-2.77.48-5.62 1.84-10.47 4.92a20.93 20.93 0 0 1-11.76 3.27c-3.25 0-4.81-.22-12.73-1.57C212.74 59.46 208.73 59 204 59c-9.1 0-15.11-.1-22.07-.5-8.09-.47-14.62-1.29-19.2-2.54-5.62-1.53-10.17 1.38-17.85 9.66-5.5 5.94-6.08 6.53-8.28 8.18a70.38 70.38 0 0 1-9.38 6.03c-.68.37-2.58 1.35-2.84 1.49-.84.44-1.35.76-1.75 1.08C121.16 83.6 121 84.8 121 94c0 1.85.06 3.54.17 5.44 0 .17.2 3.28.24 4.03.1 2.75-.13 4.29-1.08 5.71-1.67 2.5-2.27 2.8-18.95 9.74-5.48 2.29-8.99 4.96-11.2 8.24-1.71 2.51-2.47 4.73-3.64 9.7-.83 3.5-1.21 4.92-1.94 6.83-2.18 5.73-6.05 10.19-13.1 14.18-7.3 4.12-13.55 12.28-19.46 24.66-4.6 9.64-8.17 19.46-14.67 39.32l-1.58 4.84c-4.75 14.47-7.54 22.48-10.86 30.69-5.28 13.01-13.95 25.65-24.93 37.6v-2.97zm0 78v-.5l1-.01c6.32 0 7.47 5.2 4.6 13.36a60.36 60.36 0 0 1-5.6 11.3v-1.92a57.76 57.76 0 0 0 4.65-9.72c2.69-7.6 1.71-12.02-3.65-12.02-.34 0-.67 0-1 .02v-46.59a340.96 340.96 0 0 0 13.71-8.34c13.66-9.46 29.79-37.6 29.79-53.59 0-18.1 21.57-72.64 32.23-79.42 12.71-8.09 32.24-27.96 35.8-37.75 1.93-5.3 5.5-7.27 14.42-9.37 6.15-1.44 8.64-2.42 10.67-4.79 1.5-1.74 2.72-4.79 4.33-10.3.23-.78 1.9-6.68 2.43-8.46 3.62-12.08 7.3-18.49 13.47-20.39 2.5-.76 3.03-.98 9.74-3.7 7.49-3.03 11.97-4.43 17.12-4.92 6.75-.65 13.13.75 19.55 4.67 5.43 3.32 12.19 4.72 20.17 4.56 6.03-.12 12.2-1.07 19.83-2.8 1.82-.4 7.38-1.74 8.26-1.94 2.69-.6 4.34-.89 5.48-.89 4.97 0 8.93-.05 14.2-.27 7.9-.32 15.56-.92 22.75-1.88 8.5-1.14 15.9-2.73 21.88-4.82 18.9-6.62 32.64-18.3 33.67-27.59.29-2.56.4-2.96 2.79-11.11 2.33-7.95 3.21-12.93 2.72-18.23-.2-2.24-.69-4.38-1.48-6.42-1.5-3.92-2.63-9.4-3.43-16.18h.9c.77 6.47 1.89 11.72 3.47 15.82a24.93 24.93 0 0 1 1.54 6.69c.5 5.46-.4 10.54-2.77 18.6-2.36 8.06-2.47 8.47-2.74 10.95-1.09 9.75-15.1 21.68-34.33 28.41-6.06 2.12-13.52 3.72-22.09 4.87-7.22.96-14.92 1.57-22.83 1.89-5.3.21-9.27.27-14.25.27-1.04 0-2.64.27-5.26.87-.87.2-6.43 1.53-8.26 1.94-7.68 1.73-13.92 2.7-20.03 2.82-8.15.17-15.1-1.27-20.71-4.7-6.23-3.81-12.4-5.16-18.93-4.54-5.04.48-9.44 1.86-16.84 4.86-6.75 2.74-7.29 2.95-9.82 3.73-5.73 1.76-9.28 7.96-12.81 19.72-.53 1.77-2.2 7.66-2.43 8.46-1.66 5.65-2.91 8.78-4.53 10.67-2.22 2.58-4.84 3.62-12.01 5.3-7.8 1.83-11.13 3.66-12.9 8.54-3.65 10.04-23.32 30.06-36.2 38.25C65.94 190 44.5 244.2 44.5 262c0 16.34-16.3 44.78-30.22 54.41-2.14 1.48-8.24 5.12-14.28 8.68v-1.16 46.09zm0-173.7v-1.11c7.42-3.82 14.55-10.23 21.84-18.98 3.8-4.56 14.21-18.78 15.79-20.55 1.8-2.04 4.06-3.96 7.42-6.45 1.08-.8 4.92-3.57 5.49-3.99 9.36-6.85 14-11.96 15.98-19.36.8-2.98 1.54-6.78 2.46-12.3.23-1.44 2-12.46 2.56-15.79 2.87-16.77 5.73-26.79 10.07-32.1C92.46 52.43 101.5 38.13 101.5 33c0-2.54.34-3.35 6.05-15.71.68-1.49 1.25-2.74 1.77-3.93 2.5-5.75 3.9-10.04 4.14-13.36h1c-.23 3.48-1.66 7.87-4.23 13.76-.52 1.2-1.09 2.45-1.78 3.95-5.54 12.01-5.95 12.99-5.95 15.29 0 5.47-9.09 19.84-20.11 33.31-4.2 5.12-7.03 15.06-9.86 31.64-.57 3.33-2.33 14.33-2.57 15.78-.92 5.56-1.67 9.38-2.48 12.4-2.05 7.68-6.82 12.93-16.35 19.91l-5.49 3.98c-3.3 2.45-5.51 4.34-7.27 6.31-1.53 1.73-11.94 15.93-15.76 20.53-7.52 9.02-14.88 15.6-22.61 19.46zm0 361.83v-4.33c.48 2.36 1 4.35 1.6 6.15 2 6.03 4.6 8.26 8.19 6.59C28.76 557.69 43.5 542.4 43.5 527c0-16.2 6.37-31.99 17.1-46.3 1.88-2.5 3.66-4.4 5.53-6 .73-.62 1.45-1.18 2.3-1.8l2-1.43c3.68-2.68 5.32-5.28 7.08-12.59.75-3.07 1.38-5.02 4.2-13.26l.63-1.88c3.24-9.58 4.56-14.97 4.17-18.65-.48-4.43-3.8-5.23-11.3-1.64a81.12 81.12 0 0 1-9.15 3.7c-13.89 4.67-26.96 5.8-42.66 5.42l-1.95-.05-1.45-.02a39.8 39.8 0 0 0-15.05 2.96A21.81 21.81 0 0 0 0 438.37v-1.26a23.55 23.55 0 0 1 4.55-2.57 40.77 40.77 0 0 1 16.92-3.02l1.95.05c15.6.38 28.57-.75 42.32-5.37a80.12 80.12 0 0 0 9.04-3.65c8.04-3.84 12.16-2.85 12.72 2.43.42 3.89-.92 9.34-4.21 19.08l-.64 1.88c-2.8 8.2-3.43 10.15-4.16 13.18-1.82 7.52-3.59 10.34-7.47 13.16l-2 1.43c-.84.6-1.54 1.15-2.25 1.75a35.45 35.45 0 0 0-5.37 5.84c-10.61 14.15-16.9 29.74-16.9 45.7 0 15.88-15 31.45-34.29 40.45-4.3 2.01-7.39-.66-9.56-7.18-.23-.68-.44-1.39-.65-2.13zm0-62.16v-2.45l1.46 3.27c2.1 4.8 3.46 10.33 4.26 16.77.66 5.3.84 9.3 1.04 18.5.2 9.32.5 12.75 1.63 15.05 1.28 2.6 3.67 2.35 8.29-1.5 17.14-14.3 21.82-22.9 21.82-38.62 0-7.17 1.1-12.39 3.7-17.68 2.27-4.67 3.65-6.62 13.4-19.62a69.8 69.8 0 0 1 7.6-8.79 44.76 44.76 0 0 1 3.54-3.06c.38-.3.64-.52.89-.74a10.47 10.47 0 0 0 2.63-3.32 35.78 35.78 0 0 0 2.26-5.94l.37-1.2.36-1.15c.29-.91.48-1.55.66-2.16.45-1.53.74-2.68.91-3.66.38-2.2.12-3.49-.85-4.15-2.35-1.61-9.28-.24-23.8 4.94-9.54 3.4-16.12 4.17-27.85 4.26-7.71.06-10.43.4-13.25 2.12-3.48 2.12-5.84 6.4-7.58 14.26-.5 2.2-.99 4.19-1.49 5.98v-3.98l.51-2.22c1.8-8.1 4.28-12.6 8.04-14.9 3.04-1.85 5.86-2.2 13.77-2.26 11.61-.09 18.1-.84 27.51-4.2 14.93-5.32 21.95-6.71 24.7-4.83 1.38.94 1.71 2.6 1.28 5.15a33.69 33.69 0 0 1-.94 3.78l-.66 2.17-.36 1.15-.37 1.2a36.64 36.64 0 0 1-2.33 6.1c-.8 1.53-1.61 2.52-2.86 3.61l-.92.77-1.02.83c-.9.74-1.65 1.4-2.47 2.18a68.84 68.84 0 0 0-7.48 8.66c-9.7 12.93-11.07 14.87-13.31 19.46-2.52 5.15-3.59 10.22-3.59 17.24 0 16.04-4.82 24.91-22.18 39.38-5.04 4.2-8.18 4.55-9.83 1.18-1.22-2.5-1.52-5.94-1.73-15.47-.2-9.16-.38-13.15-1.03-18.4-.79-6.34-2.12-11.8-4.19-16.49L0 495.98zM379.27 0h1.04l1.5 5.26c3.28 11.56 4.89 19.33 5.26 27.8.49 11.01-1.52 21.26-6.63 31.17-7.8 15.13-20.47 26.5-36.22 34.1-12.38 5.96-26.12 9.17-36.22 9.17-6.84 0-17.24 1.38-37.27 4.62l-2.27.37c-24.5 3.99-31.65 5-37.46 5-3.49 0-4.08-.08-19.54-2.8-3.56-.64-6.32-1.1-9-1.5-20.23-2.96-31-1.2-31.96 7.86-.1.85-.18 1.72-.29 2.81l-.27 2.73c-1.1 10.9-2.02 15.73-4.31 19.96-2.9 5.34-7.77 7.95-15.63 7.95-10.2 0-12.92.6-15.5 3.17.52-.51-5.03 5.85-8.16 8.7-2.75 2.5-14.32 12.55-15.77 13.83a341.27 341.27 0 0 0-6.54 5.92c-6.97 6.49-11.81 11.76-14.6 16.15-5.92 9.3-10.48 18.04-11.69 24.08-1.66 8.3 3.67 9.54 19.02 1.21a626.23 626.23 0 0 1 44.54-21.9c3.5-1.56 14.04-6.2 15.68-6.95 5.05-2.25 8.3-3.8 10.78-5.15l1.95-1.07 2.18-1.18c1.76-.94 3.38-1.76 5-2.55 18.1-8.72 34.48-10.46 50.33-1.2 22.89 13.34 38.28 37.02 38.28 56.44 0 19.12-.73 25.13-5.18 33.2a45.32 45.32 0 0 1-4.94 7.12c-6.47 7.77-11.81 16.2-12.76 21.27-1.2 6.34 4.69 7.03 20.17-.05 13.31-6.08 22.4-14.95 28.5-26.32a80.51 80.51 0 0 0 6.1-15.13c.9-2.98 3.17-11.65 3.41-12.48a29.02 29.02 0 0 1 1.75-4.83c7.47-14.93 21.09-30.5 36.25-37.24 7.61-3.38 13-9.65 19.4-20.79.84-1.48 4.26-7.64 5.14-9.17 3.52-6.1 6.22-9.7 9.37-11.98 10.15-7.4 28.7-11.1 50.29-11.1 7.52 0 16.54-1.24 27.51-3.58a420.1 420.1 0 0 0 14.96-3.52c-1.3.33 15.54-3.98 19.42-4.89 14.15-3.33 41.07-5.01 64.11-5.01 17.36 0 27.82-9.23 38.53-38.67 6.62-18.21 6.62-26.37 2.69-34.35l-1.18-2.37A13.36 13.36 0 0 1 587.5 58c0-4.03 0-4.01 2.5-24.56.46-3.73.8-6.74 1.12-9.64.9-8.45 1.38-15.2 1.38-20.8 0-.94-.02-1.94-.04-3h1c.03 1.06.04 2.06.04 3 0 5.65-.48 12.43-1.39 20.9-.3 2.91-.66 5.93-1.11 9.66-2.5 20.45-2.5 20.47-2.5 24.44 0 1.97.45 3.57 1.45 5.68.24.51 1.16 2.35 1.17 2.36 4.06 8.24 4.06 16.68-2.65 35.13-10.84 29.8-21.63 39.33-39.47 39.33-22.96 0-49.83 1.68-63.89 4.99-3.86.9-20.69 5.2-19.4 4.88a421.05 421.05 0 0 1-14.99 3.53c-11.04 2.35-20.11 3.6-27.72 3.6-21.4 0-39.76 3.67-49.7 10.9-3 2.19-5.64 5.7-9.1 11.68-.87 1.52-4.29 7.68-5.14 9.17-6.49 11.3-12 17.71-19.86 21.2-14.9 6.63-28.38 22.03-35.75 36.77a28.17 28.17 0 0 0-1.69 4.67c-.23.8-2.5 9.49-3.4 12.5a81.48 81.48 0 0 1-6.19 15.3c-6.2 11.56-15.44 20.58-28.96 26.76-16.1 7.36-23 6.55-21.58-1.04 1-5.29 6.4-13.83 12.99-21.73a44.33 44.33 0 0 0 4.82-6.96c4.35-7.88 5.06-13.77 5.06-32.72 0-19.04-15.19-42.4-37.72-55.55-15.57-9.08-31.62-7.38-49.45 1.21a132.9 132.9 0 0 0-7.14 3.71l-1.95 1.07a158.83 158.83 0 0 1-10.85 5.19c-1.65.74-12.18 5.38-15.69 6.95a625.25 625.25 0 0 0-44.46 21.86c-15.95 8.66-22.37 7.16-20.48-2.29 1.24-6.2 5.83-15.02 11.82-24.42 2.85-4.48 7.74-9.8 14.77-16.34 1.98-1.85 4.12-3.79 6.56-5.94 1.46-1.29 13.02-11.33 15.75-13.82 3.09-2.8 8.6-9.14 8.14-8.67 2.82-2.82 5.75-3.46 16.2-3.46 7.5 0 12.04-2.43 14.75-7.42 2.2-4.07 3.11-8.84 4.2-19.59l.26-2.73.3-2.81c.56-5.42 4.47-8.5 11.23-9.6 5.44-.88 12.51-.51 21.86.86 2.7.4 5.47.86 9.04 1.49 15.33 2.7 15.96 2.8 19.36 2.8 5.73 0 12.9-1.03 37.3-5l2.27-.36c20.1-3.26 30.52-4.64 37.43-4.64 9.95 0 23.54-3.18 35.78-9.08 15.57-7.5 28.09-18.73 35.78-33.65 5.02-9.75 7-19.82 6.51-30.67-.37-8.37-1.96-16.08-5.23-27.57L379.27 0zm13.68 0h1.02c.78 3.9 1.92 8.7 3.51 14.88 3.63 14.05 3.06 27.03-.75 38.77a61 61 0 0 1-11.35 20.68 138.36 138.36 0 0 1-19.32 18.77c-11.32 9.02-23.36 15.49-35.95 18.39a258.63 258.63 0 0 1-22.57 4.07c-3.17.44-6.36.85-10.3 1.32l-9.39 1.12c-11.53 1.41-17.45 2.55-21.64 4.46-9.28 4.21-28.35 6.04-49.21 6.04-1.37 0-2.8-.12-4.3-.35-2.62-.41-5-1.03-9.14-2.29-7.34-2.21-9.63-2.75-12.63-2.56-3.9.23-6.63 2.29-8.47 6.89-1.86 4.66-2.42 7.53-3.34 14.98-1.1 8.98-2.87 12.12-9.97 14.3a40.12 40.12 0 0 0-6.8 2.66c-.63.33-1.16.64-1.76 1.02l-1.34.86c-1.9 1.14-3.86 1.49-9.25 1.49-3.2 0-8.83-.55-9.51-.39-1.22.28-.75-.14-7.14 6.24-1.5 1.5-3.49 3.18-6.32 5.37-1.52 1.18-7.16 5.43-7.94 6.03-4.96 3.78-8.33 6.6-11.06 9.38-4.88 4.98-6.85 9.15-5.56 12.7 1.34 3.67 4.07 4.42 8.9 2.82a55.72 55.72 0 0 0 7.77-3.48c1.5-.77 7.78-4.13 9.37-4.96a116.8 116.8 0 0 1 12.31-5.68 162.2 162.2 0 0 0 11.04-4.84c2.04-.97 10.74-5.16 13-6.22 4.41-2.1 8.1-3.78 11.65-5.29 17.14-7.3 29.32-9.9 37.67-6.65l5.43 2.1c2.3.88 4.17 1.62 6.02 2.38a150.9 150.9 0 0 1 13.07 6c18.34 9.63 30.35 22.13 34.79 39.87 6.96 27.85 3.6 45.53-8.08 62.4-3.97 5.75-3.52 9.2.06 8.97 4.14-.28 10.21-4.95 15.11-12.52 3.1-4.8 5.1-10.45 8.05-21.53l1.69-6.35c.66-2.47 1.24-4.52 1.83-6.5 4.93-16.56 11-27.28 21.56-34.76 7.15-5.06 23.73-15.5 25.48-16.75 6.74-4.81 10.53-9.44 14.34-18 7.74-17.44 21.09-24.34 44.47-24.34 9.36 0 17.91-1.13 29.53-3.49a624.86 624.86 0 0 0 6.2-1.28c2.4-.5 4.07-.84 5.66-1.13 4.03-.74 7.04-1.1 9.61-1.1 4.44 0 9.39-1 31.39-5.99l2.95-.66c16.34-3.67 25.64-5.35 31.66-5.35 1.54 0 2.4.01 6.4.1 7.8.15 12.27.13 17.33-.2 16.41-1.06 26.73-5.36 29.8-14.56a87.1 87.1 0 0 1 3.55-8.83c-.15.31 2.29-4.96 2.9-6.38 5.38-12.3 5.57-21.92-1.44-39.44a86.4 86.4 0 0 1-5.26-20.72c-1.61-11.98-1.38-23.14.1-40.35l.2-2.12h1l-.2 2.2c-1.48 17.15-1.7 28.24-.11 40.14a85.4 85.4 0 0 0 5.2 20.47c7.1 17.78 6.91 27.67 1.43 40.22-.62 1.43-3.06 6.72-2.91 6.4a86.17 86.17 0 0 0-3.52 8.73c-3.23 9.72-13.9 14.15-30.68 15.24-5.1.33-9.58.35-17.42.2-3.98-.09-4.84-.1-6.37-.1-5.91 0-15.18 1.67-31.44 5.32l-2.95.67c-22.16 5.02-27.05 6.01-31.61 6.01-2.5 0-5.45.36-9.43 1.09-1.58.29-3.25.62-5.64 1.11a4894.21 4894.21 0 0 0-6.2 1.29c-11.68 2.37-20.3 3.51-29.73 3.51-23.02 0-36 6.71-43.53 23.66-3.9 8.8-7.82 13.58-14.7 18.5-1.78 1.27-18.36 11.7-25.48 16.75-10.34 7.32-16.3 17.87-21.19 34.23-.58 1.96-1.15 4-1.82 6.47l-1.69 6.35c-2.98 11.18-5 16.9-8.17 21.81-5.05 7.81-11.37 12.68-15.89 12.98-4.7.31-5.3-4.23-.94-10.53 11.52-16.64 14.82-34.03 7.92-61.6-4.35-17.42-16.16-29.72-34.27-39.22-4-2.1-8.2-4-12.99-5.97-1.84-.75-3.7-1.49-6-2.38l-5.43-2.08c-8.03-3.12-20.02-.58-36.92 6.63-3.52 1.5-7.21 3.19-11.61 5.27l-13 6.22c-4.71 2.22-8.16 3.75-11.11 4.88a115.87 115.87 0 0 0-12.21 5.63c-1.58.83-7.86 4.18-9.37 4.96a56.55 56.55 0 0 1-7.9 3.54c-5.3 1.75-8.62.85-10.17-3.43-1.46-4.02.66-8.5 5.8-13.74 2.75-2.82 6.16-5.66 11.15-9.48.79-.6 6.43-4.85 7.94-6.02a66.96 66.96 0 0 0 6.23-5.28c6.74-6.74 6.1-6.16 7.61-6.51.87-.2 6.69.36 9.74.36 5.22 0 7.03-.32 8.74-1.35l1.31-.84c.62-.4 1.18-.72 1.84-1.07a41.07 41.07 0 0 1 6.96-2.72c6.64-2.04 8.22-4.84 9.28-13.47.93-7.53 1.5-10.47 3.4-15.24 1.99-4.95 5.04-7.26 9.34-7.51 3.17-.2 5.5.35 12.97 2.6a63.54 63.54 0 0 0 9.02 2.26c1.45.22 2.83.34 4.14.34 20.71 0 39.7-1.82 48.8-5.96 4.32-1.96 10.29-3.1 21.93-4.53l9.4-1.12c3.92-.48 7.11-.88 10.27-1.32 8.16-1.14 15.4-2.43 22.49-4.06 12.42-2.86 24.33-9.26 35.55-18.2a137.4 137.4 0 0 0 19.18-18.64 60.02 60.02 0 0 0 11.15-20.32c3.76-11.57 4.32-24.36.75-38.23A284.86 284.86 0 0 1 392.95 0zM506.7 0h1.26c-.5.66-.9 1.18-1.17 1.51-3.95 4.96-6.9 7.92-9.82 9.57A10.02 10.02 0 0 1 492 12.5c-2.38 0-4.24.67-6.71 2.21l-2.65 1.71c-4.38 2.8-8.01 4.08-13.64 4.08-5.6 0-9.99-1.26-16.08-4.05a202.63 202.63 0 0 1-2.3-1.06l-2.18-.98c-1.6-.7-2.92-1.17-4.17-1.48a13.42 13.42 0 0 0-3.27-.43c-2.3 0-4.3-.68-11-3.37l-1.56-.62c-5-1.97-8.1-2.82-10.52-2.66-2.93.2-4.42 2.03-4.42 6.15 0 20.76-5.21 50.42-12.15 57.35-7.58 7.59-26.55 23.7-34.06 29.06-13.16 9.4-31.17 20.2-44.11 25.06a106.87 106.87 0 0 1-13.32 4.03c-3.28.78-6.6 1.43-11.25 2.24-.53.1-8.8 1.5-11.5 1.99-4.86.87-9.3 1.74-14 2.76-20.62 4.48-25.07 5.01-38.11 5.01-2.49 0-2.9-.07-14.05-2-2.42-.42-4.31-.73-6.15-1-8.11-1.19-13.83-1.36-17.64-.2-4.54 1.4-5.93 4.65-3.7 10.52 2.02 5.28 4.84 8.61 8.84 10.74 3.26 1.74 6.75 2.6 13.82 3.71 9.42 1.48 10.94 1.75 15.5 2.92a78.2 78.2 0 0 1 18.62 7.37c8.3 4.58 14.58 11.5 19.98 20.89 2.73 4.73 9.46 19.33 10.54 21.19 3.4 5.85 6.26 6.63 10.89 2 4.95-4.94 10.35-8.37 21.13-14.06.47-.25 2.06-1.1 2.12-1.12 7.98-4.21 11.92-6.51 15.87-9.54 5.11-3.9 8.66-8.1 10.77-13.11 8.52-20.24 20.75-33.31 32.46-33.31l5.5.03c10.53.08 17.35.02 24.9-.31 13.66-.62 23.78-2.09 29.39-4.67 5.85-2.7 13.42-5.49 24.18-9.02 3.46-1.14 6.29-2.05 12.7-4.1 7.7-2.45 11.08-3.54 15.17-4.9a1059.43 1059.43 0 0 1 11.33-3.72c3.67-1.2 5.96-2 8.03-2.78a59.88 59.88 0 0 0 6.66-2.94c1.87-.98 3.76-2.1 5.86-3.5 3.48-2.33 6.15-3.13 12.04-4.13l1.15-.2c5.71-1.01 9-2.3 12.76-5.63 7.82-6.96 8.58-23.18 3.84-44.52-1.7-7.67-2.1-19.28-1.57-35.47A837.22 837.22 0 0 1 546.76 0h1l-.15 3.06c-.32 6.42-.53 11.02-.68 15.62-.51 16.1-.12 27.65 1.56 35.21 4.82 21.68 4.04 38.2-4.16 45.48-3.91 3.48-7.37 4.84-13.24 5.87l-1.16.2c-5.76.99-8.32 1.75-11.65 3.98a63.73 63.73 0 0 1-5.96 3.56 60.86 60.86 0 0 1-6.77 2.99c-2.09.79-4.39 1.58-8.07 2.79a5398.31 5398.31 0 0 1-11.32 3.71c-4.1 1.37-7.48 2.46-15.18 4.92-6.42 2.04-9.24 2.95-12.7 4.08-10.73 3.53-18.27 6.3-24.07 8.98-5.76 2.66-15.97 4.14-29.77 4.77-7.56.33-14.4.39-24.95.31l-5.49-.03c-11.19 0-23.16 12.79-31.54 32.7-2.19 5.19-5.84 9.52-11.08 13.52-4.02 3.07-7.99 5.39-16.01 9.62l-2.12 1.12c-10.7 5.65-16.04 9.04-20.9 13.9-5.14 5.14-8.75 4.15-12.45-2.22-1.12-1.92-7.85-16.5-10.54-21.2-5.33-9.24-11.48-16.02-19.6-20.5a77.2 77.2 0 0 0-18.4-7.28c-4.5-1.17-6.02-1.43-15.4-2.9-7.17-1.12-10.74-2-14.13-3.81-4.22-2.25-7.2-5.77-9.3-11.27-2.43-6.39-.78-10.26 4.34-11.83 4-1.22 9.82-1.05 18.08.17 1.84.27 3.74.58 6.17 1 11.02 1.9 11.48 1.98 13.88 1.98 12.96 0 17.35-.52 37.9-4.99 4.71-1.02 9.16-1.9 14.03-2.77 2.71-.48 10.98-1.9 11.5-1.98 4.64-.81 7.95-1.46 11.2-2.23 4.55-1.07 8.76-2.34 13.2-4 12.83-4.81 30.79-15.59 43.88-24.94 7.47-5.33 26.4-21.4 33.94-28.94C407.3 61.98 412.5 32.49 412.5 12c0-4.61 1.86-6.9 5.35-7.15 2.63-.18 5.8.7 10.96 2.73l1.56.62c6.53 2.62 8.53 3.3 10.63 3.3 1.14 0 2.3.16 3.5.46 1.32.33 2.68.82 4.34 1.53a90.97 90.97 0 0 1 3.34 1.52l1.15.54c5.98 2.73 10.23 3.95 15.67 3.95 5.41 0 8.87-1.21 13.1-3.92.2-.13 2.1-1.38 2.66-1.72 2.62-1.63 4.64-2.36 7.24-2.36 1.47 0 2.94-.43 4.47-1.3 2.78-1.56 5.67-4.45 9.54-9.31l.7-.89zM324.54 600h-2.03c.49-2.96.91-6.2 1.28-9.66.44-4.1.76-8.25.98-12.21.08-1.39.14-2.65-.35-7.29-.47-1.94-.93-4.14-1.36-6.54-2.01-11.26-2.66-22.9-1.14-33.78a60.76 60.76 0 0 1 5.18-17.95 70.78 70.78 0 0 1 12.6-18.22c3.38-3.6 5.53-5.5 11.83-10.79 4.5-3.78 6.35-5.56 7.52-7.5.64-1.07.95-2.06.95-3.06 0-1.75 0-1.74-.75-9.23-.36-3.7-.57-6.3-.68-8.96-.5-12.1 1.62-19.6 8.11-21.76 15.9-5.3 25.89-12.1 33.45-25.54C409.6 390.65 425.85 376 436 376c12.36 0 20-1.96 29.41-8.8 6.76-4.92 9.5-6.6 12.47-7.46 2.22-.64 3.8-.74 9.12-.74 1.86 0 3.53-.83 5.57-2.62 1.08-.96 5.11-5.12 5.6-5.6 6.04-5.85 11.98-8.78 20.83-8.78 2.45 0 4.54.04 7.32.12 7.51.23 8.87.17 11.27-.7 3.03-1.1 5.53-3.03 14.75-11.17 8-7.06 10.72-8.92 22.87-16.47 1.44-.9 2.59-1.63 3.69-2.37a69.45 69.45 0 0 0 9.46-7.5c4.12-3.88 8.02-7.85 11.64-11.9v2.98a201.58 201.58 0 0 1-10.27 10.38c-3.18 3-6.2 5.35-9.72 7.7-1.12.76-2.28 1.5-3.75 2.4-12.05 7.5-14.71 9.32-22.6 16.28-9.46 8.35-12.01 10.32-15.39 11.55-2.74 1-4.19 1.06-12.01.82-2.76-.08-4.83-.12-7.26-.12-8.27 0-13.75 2.7-19.43 8.22-.44.43-4.52 4.64-5.68 5.66-2.37 2.09-4.46 3.12-6.89 3.12-5.1 0-6.6.1-8.56.66-2.67.78-5.29 2.37-11.85 7.15-9.8 7.13-17.85 9.19-30.59 9.19-9.22 0-24.96 14.2-34.13 30.49-7.84 13.94-18.24 21.02-34.55 26.46-5.31 1.77-7.21 8.51-6.75 19.78.1 2.6.31 5.19.68 8.84.75 7.62.75 7.58.75 9.43 0 1.38-.42 2.73-1.24 4.09-1.33 2.2-3.26 4.07-7.94 8-6.25 5.24-8.36 7.12-11.67 10.63a68.8 68.8 0 0 0-12.25 17.71 58.8 58.8 0 0 0-5 17.36c-1.49 10.66-.85 22.09 1.13 33.15.43 2.37.88 4.53 1.33 6.44.16.66.3 1.25.6 4.06a249.3 249.3 0 0 1-1.17 16.12c-.37 3.37-.78 6.53-1.25 9.44zm-13.4 0h-1.05l.12-.28c3.07-7.16 4.29-11.83 4.29-18.72 0-3.57-.07-4.93-.76-15.65-.77-12.04-1-19.64-.55-28.3.58-11.5 2.4-22.1 5.81-32.16 1.3-3.8 2.8-7.5 4.55-11.1 3.46-7.14 6.83-12.39 10.42-16.6a59.02 59.02 0 0 1 4.35-4.56c.43-.4 3-2.8 3.67-3.45 5.72-5.6 7.51-11.52 7.51-29.18 0-18.84 2.9-23.77 15.82-28.24 1.09-.37 1.92-.67 2.77-.98a51.3 51.3 0 0 0 6.1-2.7c4.95-2.6 9.64-6.22 14.44-11.42 25.5-27.63 37.15-35.16 56.37-35.16 8.28 0 14.54-1.95 22-6.3 1.78-1.03 13.82-8.82 18.16-11.27 2.83-1.59 5.66-3.03 8.63-4.39 7.92-3.6 13.97-4.45 26.6-4.8 7.53-.2 10.7-.49 14.26-1.58 4.55-1.4 8.06-4 10.93-8.43 2.2-3.41 6.85-7.08 14.66-12.06 1.61-1.03 3.27-2.05 5.65-3.5 9.53-5.85 11.56-7.13 14.81-9.57 5.34-4 9.3-8.37 13.68-14.77a204.2 204.2 0 0 0 5.62-8.75v1.9c-1.97 3.17-3.4 5.38-4.8 7.42-4.42 6.48-8.46 10.92-13.9 15-3.29 2.46-5.32 3.75-14.89 9.61a375.06 375.06 0 0 0-5.63 3.5c-7.7 4.9-12.26 8.52-14.36 11.76-3 4.63-6.7 7.39-11.48 8.85-3.68 1.12-6.9 1.42-14.53 1.63-12.5.34-18.44 1.18-26.2 4.7a111.08 111.08 0 0 0-8.56 4.35c-4.3 2.43-16.34 10.22-18.15 11.27-7.6 4.43-14.03 6.43-22.5 6.43-18.87 0-30.3 7.4-55.63 34.84-4.88 5.28-9.67 8.97-14.7 11.62-2 1.05-4 1.92-6.23 2.75-.86.32-1.7.62-5.37 1.87-5.08 1.76-7.44 3.25-9.28 6.37-2.23 3.78-3.29 9.94-3.29 20.05 0 17.9-1.87 24.07-7.8 29.89-.69.67-3.27 3.06-3.69 3.46a58.04 58.04 0 0 0-4.28 4.49c-3.53 4.14-6.86 9.32-10.28 16.38a95.19 95.19 0 0 0-4.5 10.99c-3.38 9.97-5.18 20.48-5.76 31.9-.44 8.6-.22 16.17.55 28.17.69 10.76.76 12.12.76 15.72 0 6.35-1.02 10.87-4.35 19zm25.08 0h-1c-.04-4.73.06-9.39.28-15.02.26-6.41-.4-11.79-2.53-24.37l-.31-1.86c-2.12-12.55-2.76-19.35-1.97-26.47 1.03-9.25 4.75-16.68 12-22.67 22.04-18.2 29.81-30.18 29.81-44.61 0-2.6-.3-4.81-.98-8.17-.97-4.79-1.1-5.68-.97-7.57.2-2.56 1.27-4.7 3.56-6.72 2.67-2.35 7.05-4.6 13.72-7.01 9.72-3.5 15.52-9.18 24.3-21.57l1.78-2.5c4.48-6.33 7.1-9.63 10.43-12.78 4.31-4.07 8.98-6.77 14.54-8.17 13.3-3.32 20.37-5.47 25.34-7.64a49.5 49.5 0 0 0 5.28-2.7c1.1-.65 1.75-1.04 4.24-2.6 2.7-1.68 5.22-2.08 11.38-2.28 5.44-.18 7.9-.43 10.97-1.41a21.47 21.47 0 0 0 9.54-6.22c4.87-5.3 10.03-7.61 17.79-8.9 1.07-.18 1.88-.3 3.86-.58 6.9-.97 9.94-1.69 13.48-3.62 4.5-2.45 6.79-4.44 23.46-19.68l3.14-2.85c9.65-8.71 16.12-13.83 21.42-16.48 4.25-2.12 7.6-4.69 11.22-8.6v1.45c-3.42 3.57-6.69 6-10.78 8.05-5.18 2.59-11.61 7.67-21.2 16.32l-3.12 2.85c-16.8 15.35-19.05 17.3-23.66 19.82-3.68 2-6.8 2.75-13.82 3.73-1.97.28-2.78.4-3.84.57-7.56 1.26-12.52 3.48-17.21 8.6a22.47 22.47 0 0 1-9.97 6.5c-3.2 1-5.72 1.27-11.25 1.45-5.98.2-8.39.57-10.89 2.13a144 144 0 0 1-4.25 2.61 50.48 50.48 0 0 1-5.39 2.75c-5.04 2.2-12.15 4.37-25.5 7.7-9.74 2.44-15.26 7.65-24.4 20.56l-1.77 2.5c-8.9 12.54-14.82 18.34-24.78 21.93-6.57 2.36-10.85 4.57-13.4 6.82-2.1 1.86-3.05 3.74-3.22 6.04-.13 1.76 0 2.63.95 7.3.7 3.42 1 5.7 1 8.37 0 14.79-7.93 27-30.18 45.39-7.03 5.8-10.64 13-11.64 22-.78 7-.14 13.73 1.96 26.2l.32 1.85c2.15 12.65 2.8 18.07 2.54 24.58-.22 5.57-.32 10.2-.28 14.98zM95.9 600h-2.04c.68-3.82 1.14-8.8 1.61-15.98.2-3.11.27-4.06.39-5.6 1.3-17.54 4.04-27.14 11.5-33.2 4.65-3.77 7.22-8.92 8.67-16 .51-2.52.7-3.87 1.33-9.17.66-5.5 1.16-8.06 2.24-10.36 1.45-3.09 3.82-4.69 7.39-4.69 14.28 0 38.48 9.12 53.6 20.2 8.66 6.35 21.26 13.32 31.74 17.11 13.03 4.71 21.89 4.41 24.75-1.73 1.7-3.64 1.92-4.11 2.65-5.77 2.93-6.67 4.69-12.2 5.25-17.5.23-2.17.24-4.23.02-6.2-.32-2.75-1.42-4.55-4.08-7.35l-1.32-1.37a30.59 30.59 0 0 1-2.41-2.79 30.37 30.37 0 0 1-2.5-4.07l-1.13-2.14c-1.62-3.1-2.68-4.6-4.12-5.56-5.26-3.5-14.8-5.5-28.55-6.83a272.42 272.42 0 0 0-9.04-.71l-2.18-.17c-9.57-.73-15.12-1.56-19.06-3.2C156.57 471.07 136 450.5 136 440c0-5.34 1.74-9.53 5.47-14.13 1.98-2.44 11.12-11.71 12.79-13.54 4.52-4.97 10.16-9.54 17.68-14.66 2.8-1.9 14.78-9.6 17.49-11.49a50.54 50.54 0 0 0 6.34-5.43c1.53-1.5 6.96-7.13 7.12-7.3 7.18-7.3 12.7-11.56 19.74-14.38 3.36-1.34 8.13-2.79 17.45-5.38a9577.18 9577.18 0 0 1 11.78-3.28 602.6 602.6 0 0 0 12.67-3.7c20.4-6.24 34-12.08 40.79-18.44 8.74-8.2 11.78-13.84 15.73-26.02 2.02-6.22 3.09-9.04 5.07-12.72 9.54-17.71 28.71-39.37 43.5-45.45C383.77 238.25 389 232.34 389 226c0-2.89 2.73-8.4 6.83-13.73 4.76-6.2 10.65-11.36 16.75-14.18 12.5-5.77 33.5-10.09 47.42-10.09 5.32 0 9.83-1.5 16.42-4.89 9.2-4.71 10.1-5.11 13.58-5.11 10.42 0 32.06-2.55 45.76-5.97l3.88-.98 3.47-.89c2.6-.66 4.33-1.08 5.93-1.43 3.9-.86 6.76-1.23 9.58-1.17 2.74.06 5.47.52 8.67 1.48 4.56 1.37 13.71-.9 22.87-5.68a68.07 68.07 0 0 0 9.84-6.2v2.4c-11.09 8.14-25.76 13.66-33.29 11.4a29.72 29.72 0 0 0-8.13-1.4c-2.63-.05-5.36.3-9.11 1.12a238 238 0 0 0-9.33 2.3l-3.9.99C522.38 177.43 500.58 180 490 180c-2.99 0-3.91.4-12.67 4.89-6.85 3.51-11.61 5.11-17.33 5.11-13.65 0-34.35 4.26-46.58 9.9-5.78 2.67-11.42 7.62-16 13.58-3.85 5.02-6.42 10.2-6.42 12.52 0 7.27-5.8 13.82-20.62 19.92-14.27 5.88-33.16 27.21-42.5 44.55-1.9 3.55-2.95 6.28-4.93 12.4-4.05 12.47-7.23 18.39-16.27 26.86-7.08 6.64-20.87 12.57-41.57 18.89a604.52 604.52 0 0 1-12.7 3.71 1495.1 1495.1 0 0 1-11.8 3.28c-9.24 2.58-13.97 4.01-17.24 5.32-6.73 2.69-12.05 6.8-19.05 13.92-.15.15-5.6 5.8-7.15 7.32a52.4 52.4 0 0 1-6.6 5.65c-2.74 1.92-14.75 9.63-17.5 11.5-7.4 5.04-12.94 9.52-17.33 14.35-1.72 1.9-10.8 11.11-12.71 13.46-3.47 4.26-5.03 8.03-5.03 12.87 0 9.5 20 29.5 33.38 35.08 3.67 1.53 9.1 2.34 18.45 3.05a586.23 586.23 0 0 0 4.34.32c3.24.23 5.07.37 6.93.55 14.08 1.37 23.82 3.4 29.45 7.17 1.82 1.2 3.02 2.91 4.8 6.29l1.11 2.13a28.55 28.55 0 0 0 2.34 3.81c.62.83 1.3 1.6 2.26 2.61.23.24 1.1 1.16 1.32 1.37 2.93 3.09 4.24 5.23 4.61 8.5.24 2.12.23 4.33-.01 6.64-.59 5.55-2.4 11.25-5.41 18.1-.74 1.67-.96 2.15-2.66 5.8-3.49 7.47-13.33 7.8-27.25 2.77-10.67-3.86-23.43-10.92-32.25-17.38C164.62 515.96 140.82 507 127 507c-5 0-6.4 3.02-7.64 13.29a99.03 99.03 0 0 1-1.36 9.33c-1.53 7.5-4.3 13.04-9.37 17.16-6.87 5.58-9.5 14.78-10.77 31.8-.11 1.52-.18 2.47-.38 5.57-.46 7.01-.91 11.99-1.57 15.85zm8.05 0h-1.02c.29-1.41.58-2.94.9-4.59l1.05-5.62c2.5-13.3 4.2-19.92 6.68-24.05 1.7-2.84 3.68-5.5 8.05-11.03 8.21-10.36 10.88-14.55 10.88-18.71l-.02-1.69c-.02-1.78-.02-2.7.02-3.77.21-5.05 1.47-8.2 4.64-9.4 3.92-1.5 10.39.44 20.12 6.43 9.56 5.88 17.53 10.7 25.91 15.66 1.31.78 14.27 8.41 17.67 10.45a714.21 714.21 0 0 1 6.42 3.9c13.82 8.5 38.94 5.05 46.3-7.83 3.6-6.28 4.54-8.52 7.78-17.32a82.3 82.3 0 0 1 1.18-3.07 42.27 42.27 0 0 1 4.06-7.64c9.33-13.98 14.92-26.1 14.92-36.72 0-3.66.75-6.62 3.36-14.85.52-1.64.83-2.66 1.15-3.73 3.64-12.23 3.04-19.12-4.29-24a23.1 23.1 0 0 0-9.98-3.78c-7.2-.93-14.49 1.17-23.91 5.88-1.55.78-6.64 3.44-7.6 3.93a62.6 62.6 0 0 0-4.14 2.3l-4.4 2.66c-11.62 6.92-20.4 9.18-32.81 6.08-3.32-.84-6.24-1.4-13.1-2.64-13.25-2.39-18.7-3.75-23.33-6.46-6.23-3.67-7.46-9.02-2.88-16.65A93.1 93.1 0 0 1 172 415.42a157 157 0 0 1 8.32-7.66c-.07.05 6.16-5.3 7.82-6.77a85.12 85.12 0 0 0 6.5-6.33c7.7-8.46 12.78-13.36 20.08-18.57 9.94-7.1 21.4-12.36 35.18-15.58 37.03-8.64 51-12.7 58.83-17.93 8.6-5.73 21.3-24.77 36.84-54.81 5.22-10.1 12.27-18.4 21.13-25.71 5.13-4.24 9.56-7.25 17.55-12.23 7.42-4.62 9.62-6.14 11.38-8.16a21.15 21.15 0 0 0 2.95-4.87c.61-1.3 2.87-6.47 3-6.77 1.36-3 2.56-5.4 3.95-7.73 6.53-10.97 16.03-18 31.4-20.8 12.73-2.3 19.85-2.7 29.68-2.3 3.25.13 4.13.16 5.6.14 5.15-.07 9.71-1.04 16.61-3.8 20.74-8.3 38.75-12.04 59.19-12.04 3.05 0 6.03.15 10.48.48l2.09.16c12.45.96 18.08.96 25.34-.63a49.65 49.65 0 0 0 14.09-5.45v1.15a50.52 50.52 0 0 1-13.88 5.28c-7.38 1.61-13.08 1.61-25.63.65l-2.08-.16c-4.43-.33-7.39-.48-10.41-.48-20.3 0-38.2 3.72-58.81 11.96-7.01 2.8-11.7 3.8-16.97 3.88-1.5.02-2.39-.01-5.66-.14-9.76-.4-16.8-.01-29.47 2.3-15.06 2.73-24.32 9.58-30.71 20.31a72.8 72.8 0 0 0-3.9 7.63c-.12.28-2.39 5.47-3.01 6.79a22 22 0 0 1-3.1 5.1c-1.86 2.13-4.07 3.66-11.6 8.35-7.95 4.96-12.35 7.95-17.44 12.15-8.76 7.23-15.73 15.43-20.89 25.4-15.61 30.2-28.36 49.32-37.16 55.19-7.98 5.32-21.97 9.39-59.17 18.07-13.65 3.18-24.98 8.39-34.82 15.42-7.22 5.16-12.27 10.01-19.92 18.43a86.07 86.07 0 0 1-6.57 6.4c-1.67 1.48-7.91 6.83-7.84 6.77-3.27 2.84-5.8 5.16-8.26 7.62a92.1 92.1 0 0 0-14.27 18.13c-4.3 7.16-3.22 11.89 2.53 15.26 4.47 2.63 9.88 3.99 23.24 6.39a185.7 185.7 0 0 1 12.92 2.6c12.11 3.03 20.64.84 32.06-5.96l4.4-2.65c1.66-1 2.96-1.73 4.2-2.35.95-.48 6.04-3.14 7.6-3.92 9.59-4.8 17.04-6.94 24.49-5.98a24.1 24.1 0 0 1 10.4 3.93c7.82 5.21 8.45 12.52 4.7 25.13-.32 1.07-.64 2.1-1.16 3.74-2.57 8.12-3.31 11.04-3.31 14.55 0 10.88-5.66 23.14-15.08 37.28a41.28 41.28 0 0 0-3.97 7.46c-.37.9-.73 1.82-1.18 3.04-3.25 8.85-4.21 11.13-7.84 17.47-7.67 13.42-33.43 16.95-47.7 8.18a578.4 578.4 0 0 0-6.4-3.89c-3.4-2.04-16.36-9.67-17.67-10.45-8.38-4.97-16.36-9.78-25.92-15.66-9.5-5.85-15.7-7.7-19.24-6.36-2.68 1.02-3.8 3.82-4 8.51a61.12 61.12 0 0 0-.02 3.72l.02 1.7c0 4.5-2.69 8.73-11.52 19.87-3.92 4.95-5.87 7.59-7.55 10.39-2.39 3.97-4.08 10.56-6.56 23.72l-1.05 5.62-.86 4.4zm10.5 0h-1c.03-.34.04-.68.04-1 0-12.39 8.48-33.57 19.16-43.37a26.18 26.18 0 0 0 3.67-4.17 35.8 35.8 0 0 0 2.88-4.9c.36-.72 1.75-3.66 2.1-4.36 3.22-6.29 6.84-6.54 16.97.39 1.34.9 6.07 4.16 6.4 4.38 2.62 1.8 4.67 3.2 6.7 4.56 5.03 3.39 9.37 6.2 13.51 8.7 14.33 8.67 25.49 13.27 34.11 13.27 16.86 0 32.71-5.95 39.6-14.8 1.59-2.04 3.2-5.17 5.06-9.63.8-1.92 1.64-4.06 2.67-6.8l2.74-7.33c4.66-12.44 7.76-19.06 11.56-23.27 7.9-8.79 14.87-36 14.87-52.67 0-1.9.17-3.11 1.02-8.27.37-2.2.58-3.6.74-5.07.63-5.51.21-9.46-1.68-12.39-4.6-7.1-19.7-9.23-38.46-4.78a100.57 100.57 0 0 0-18.94 6.3c-5.17 2.37-17.11 9.74-16.5 9.4-6.72 3.64-12.97 4.15-24.8 1.3-29.55-7.14-30.43-8.62-15.26-26.81 17.44-20.93 47.12-46.18 56.38-46.18 9.92 0 53.84-11.98 65.78-17.95 9.46-4.73 24.32-21.18 36.82-37.85.71-.95 13.5-21.6 19.2-29.6 9.35-13.13 18.22-22.55 26.95-27.53 7.29-4.17 13.16-10.28 18.8-18.73 1.93-2.9 10.52-17.65 12.73-20.41 1.54-1.93 3-3.21 4.52-3.89 14.07-6.25 24.22-9.04 39.2-9.04h29c4.05 0 7.36-.4 22.93-2.5l4.3-.57c9.92-1.3 16.57-1.93 21.77-1.93 1.66 0 2.95.01 6.03.04 18.61.19 28.55-.48 44.86-4.03 3.1-.67 6.13-1.78 9.11-3.31v1.12a37.96 37.96 0 0 1-8.9 3.17c-16.4 3.56-26.4 4.24-45.08 4.05-3.08-.03-4.36-.04-6.02-.04-5.15 0-11.76.63-21.64 1.92l-4.3.58c-15.64 2.11-18.94 2.5-23.06 2.5h-29c-14.81 0-24.84 2.75-38.8 8.96-1.34.6-2.69 1.78-4.14 3.6-2.16 2.68-10.72 17.39-12.68 20.33-5.72 8.57-11.7 14.8-19.13 19.04-8.57 4.9-17.36 14.23-26.63 27.24-5.68 7.97-18.47 28.64-19.22 29.63-12.6 16.8-27.52 33.32-37.18 38.15-12.06 6.03-56.14 18.05-66.22 18.05-8.82 0-38.39 25.15-55.62 45.82-14.6 17.52-14.19 18.21 14.74 25.2 11.6 2.8 17.6 2.3 24.09-1.2-.67.35 11.31-7.03 16.56-9.44 5.41-2.48 11.6-4.59 19.11-6.37 19.13-4.53 34.65-2.35 39.54 5.22 2.05 3.17 2.48 7.32 1.84 13.04a96.34 96.34 0 0 1-.75 5.13c-.84 5.08-1.01 6.29-1.01 8.1 0 16.9-7.03 44.33-15.13 53.33-3.68 4.09-6.76 10.65-11.37 22.96-.35.93-2.2 5.94-2.73 7.33-1.04 2.76-1.88 4.9-2.68 6.84-1.9 4.53-3.55 7.73-5.2 9.85-7.1 9.13-23.25 15.19-40.39 15.19-8.86 0-20.15-4.65-34.63-13.42-4.15-2.51-8.5-5.32-13.55-8.72a861.54 861.54 0 0 1-6.71-4.56l-6.4-4.39c-9.68-6.63-12.61-6.42-15.5-.75-.35.68-1.74 3.62-2.1 4.35a36.77 36.77 0 0 1-2.96 5.03c-1.12 1.57-2.37 3-3.81 4.33-10.47 9.6-18.84 30.51-18.84 42.63l-.03 1zm-29.65 0h-1.1c1.17-2.52 1.79-5.2 1.79-8 0-20 4.83-42.04 12.15-49.35 5.17-5.18 7.77-8.38 9.9-12.74 2.64-5.41 3.95-12 3.95-20.91 0-6.82 1.14-11.59 3.37-15.07 1.74-2.7 3.6-4.21 8.91-7.52a31.64 31.64 0 0 0 3.9-2.79c4.61-3.96 6.58-6.2 7.72-9.41 1.43-4.02.93-9.04-1.86-16.02a68.98 68.98 0 0 0-3.99-8.07l-.93-1.7a75.47 75.47 0 0 1-2.64-5c-5.16-10.71-3.77-18.9 7.68-29.78a204 204 0 0 1 26.81-21.55c3.96-2.69 16.8-10.8 19.24-12.5 1.99-1.4 4.33-3.3 7.77-6.3-.02 0 7.23-6.39 9.47-8.3 4.97-4.26 9.09-7.5 13.05-10.15 4.72-3.15 8.97-5.28 12.87-6.32 12.78-3.41 15.6-4.18 21.77-5.97 12.55-3.64 21.96-6.9 28.14-10a45.47 45.47 0 0 1 7.47-2.79c8.66-2.66 12.02-4.1 16.97-8.1 6.78-5.46 13.07-14.25 19.33-27.87 15.97-34.77 19.08-39.39 32.15-49.19 3.14-2.36 6.37-4.1 11.43-6.4l2.33-1.04c11.93-5.35 16.87-8.93 21.1-17.38 1.88-3.77 2.48-6.29 3.37-12.27.78-5.19 1.48-7.56 3.53-10.25 2.57-3.4 7.03-6.27 14.36-9.01 3.37-1.26 7.36-2.5 12.05-3.73 16.33-4.3 25.28-5.36 39.6-5.81 6.9-.22 9.5-.56 12.66-2 1.19-.54 2.36-1.23 3.58-2.11 3.7-2.7 8.14-4.54 13.24-5.67 5.71-1.27 10.69-1.54 18.7-1.45l2.35.02c2.82 0 6.8-1 19.7-4.69 10.83-3.08 15.95-4.31 19.3-4.31.82 0 1.9.13 3.55.41l5.01.9c9.82 1.68 17.44 1.89 25.15-.21 7.98-2.18 14.8-6.77 20.29-14.24V147c-5.47 7.04-12.21 11.42-20.03 13.55-7.88 2.15-15.63 1.94-25.58.23l-5-.9c-1.6-.26-2.64-.39-3.39-.39-3.2 0-8.32 1.22-19.74 4.48-12.35 3.53-16.3 4.52-19.26 4.52l-2.36-.02c-7.94-.1-12.85.17-18.47 1.42-4.97 1.11-9.3 2.9-12.88 5.5a21.4 21.4 0 0 1-3.75 2.22c-3.32 1.5-6 1.87-13.04 2.09-14.25.44-23.13 1.5-39.37 5.77a125.56 125.56 0 0 0-11.95 3.7c-7.17 2.7-11.49 5.46-13.93 8.68-1.9 2.52-2.58 4.76-3.33 9.8-.9 6.08-1.53 8.68-3.47 12.56a30.6 30.6 0 0 1-9.66 11.45c-3.12 2.26-5.95 3.73-11.93 6.4l-2.31 1.04c-5.01 2.27-8.18 3.99-11.25 6.29-12.9 9.68-15.93 14.17-31.85 48.8-6.31 13.76-12.7 22.68-19.6 28.25-5.08 4.1-8.53 5.57-17.3 8.27a44.64 44.64 0 0 0-7.33 2.73c-6.24 3.12-15.7 6.4-28.3 10.06a867.4 867.4 0 0 1-21.8 5.97c-3.77 1.01-7.93 3.1-12.56 6.19a137.35 137.35 0 0 0-12.95 10.07c-2.24 1.92-9.48 8.3-9.48 8.3a98.2 98.2 0 0 1-7.84 6.37c-2.46 1.72-15.32 9.83-19.26 12.5a203 203 0 0 0-26.69 21.45c-11.13 10.58-12.43 18.3-7.47 28.63a74.52 74.52 0 0 0 2.62 4.95l.94 1.7a69.84 69.84 0 0 1 4.03 8.17c2.88 7.2 3.4 12.46 1.89 16.73-1.22 3.43-3.28 5.77-8.02 9.84-1.14.97-2.32 1.8-5.3 3.67-3.92 2.45-5.69 3.89-7.31 6.42-2.13 3.3-3.22 7.89-3.22 14.53 0 9.05-1.34 15.79-4.05 21.34-2.19 4.49-4.85 7.77-10.1 13.01-7.07 7.07-11.85 28.9-11.85 48.65 0 2.8-.58 5.48-1.7 8zm282.54 0h-1.01l-1.1-5.8c-3.08-16.26-4.05-26.2-2.74-37.26.7-5.8.77-9.68.55-15.3-.18-4.45-.17-5.68.19-7.63.78-4.3 3.44-8.53 10.39-16.34 9.07-10.2 12.26-15.41 19.8-30.15 1.35-2.64 2.33-4.47 3.38-6.3.9-1.58 1.82-3.06 2.77-4.5 3.14-4.7 7.03-8.42 16.84-16.81 11.22-9.6 15.5-13.86 18.13-19.13.7-1.4 1.3-2.8 1.93-4.4a206 206 0 0 0 1.49-4.05c3.63-9.94 8.01-13.93 22.9-17.81 4.99-1.3 20.55-5.13 21.38-5.34 16.19-4.1 25.33-7.36 33.48-12.6 5.86-3.77 5.84-3.76 27.66-16.53l2.6-1.52c10.23-6 17.1-10.2 22.73-13.95a149.3 149.3 0 0 0 8.8-6.3 723.7 723.7 0 0 0 6.37-5.08A87.74 87.74 0 0 1 600 342.95v1.12a85.76 85.76 0 0 0-15.49 9.9c.18-.14-4.76 3.84-6.38 5.1a150.3 150.3 0 0 1-8.85 6.35c-5.65 3.76-12.53 7.96-22.78 13.97l-2.6 1.53c-21.8 12.75-21.78 12.74-27.63 16.5-8.27 5.32-17.49 8.61-33.78 12.73-.83.21-16.39 4.04-21.36 5.33-8.03 2.1-13.15 4.5-16.45 7.5-2.66 2.42-4 4.86-5.77 9.7l-1.5 4.07a51.12 51.12 0 0 1-1.96 4.47c-2.72 5.45-7.04 9.75-18.38 19.45-9.73 8.32-13.6 12.02-16.65 16.6a77.18 77.18 0 0 0-2.74 4.45c-1.05 1.81-2.01 3.63-3.35 6.25-7.58 14.81-10.82 20.08-19.96 30.36-6.83 7.7-9.4 11.78-10.15 15.86-.34 1.85-.34 3.04-.17 7.4.22 5.68.14 9.6-.55 15.47-1.3 10.92-.34 20.79 2.73 36.95l1.12 5.99zm-76.59 0h-2.1l1.39-4.3c1.04-3.3 1.93-6.78 2.68-10.4 2.65-12.73 3.27-23.63 3.27-41.3 0-5.71-1.86-9.75-4.13-9.75-2.94 0-6.96 5.61-10.93 17.08C271.14 579.68 258.3 593 238 593c-22.42 0-29.26-1.35-48.42-10.09a87.69 87.69 0 0 1-9.42-5.04c-2.95-1.8-12.78-8.57-14.84-9.72-4.2-2.36-7-2.71-9.72-.99-.63.4-1.26.91-1.9 1.55a57.69 57.69 0 0 1-4.31 3.86 147.88 147.88 0 0 1-3.06 2.44l-1 .8C137.01 582.43 134 587.18 134 597c0 1.02-.02 2.01-.07 3h-2c.05-.99.07-1.98.07-3 0-10.52 3.33-15.78 12.09-22.76a265.61 265.61 0 0 1 2-1.6c.83-.64 1.43-1.13 2.03-1.61a55.76 55.76 0 0 0 4.17-3.74c.74-.73 1.48-1.34 2.24-1.82 3.47-2.2 7-1.75 11.77.93 2.15 1.21 12.03 8 14.9 9.76a85.7 85.7 0 0 0 9.22 4.93C209.29 589.7 215.85 591 238 591c19.25 0 31.49-12.7 41.06-40.33 4.24-12.25 8.66-18.42 12.81-18.42 3.8 0 6.13 5.06 6.13 11.75 0 17.8-.63 28.8-3.3 41.7-.77 3.7-1.68 7.23-2.75 10.6-.4 1.3-.8 2.53-1.19 3.7zm-149.25 0l.5-.94a160.1 160.1 0 0 0 6.53-13.26c2.73-6.29 5.78-9.64 9.24-10.52 3.74-.95 7.15.74 12.56 5.13 5.43 4.4 6.07 4.86 7.73 5.1 1.6.22 4.28 1.14 8.86 2.95 1.3.5 10.78 4.35 13.85 5.55 3.07 1.2 5.85 2.25 8.49 3.18 3.1 1.1 5.98 2.04 8.65 2.81h-3.45c-1.76-.56-3.6-1.18-5.54-1.87a281.2 281.2 0 0 1-8.51-3.19c-3.08-1.2-12.57-5.04-13.86-5.55-4.5-1.78-7.15-2.68-8.63-2.9-1.94-.27-2.53-.7-8.22-5.3-5.17-4.2-8.36-5.78-11.69-4.94-3.1.78-5.94 3.92-8.56 9.95a161 161 0 0 1-6.82 13.8h-1.13zm112.89 0a30.34 30.34 0 0 0 11.27-6.27c1.55-1.36 3.32-3.46 5.34-6.29 1.05-1.46 2.15-3.1 3.41-5.04a349.73 349.73 0 0 0 2.5-3.9l.47-.75.93-1.47a89.17 89.17 0 0 1 3.25-4.86c1.05-1.43 1.82-2.23 2.44-2.46 1.02-.37 1.49.48 1.49 2.04l.01 2.11c.05 6.91-.08 11.32-.7 16.33a48.4 48.4 0 0 1-2.38 10.56h-1.07a46.47 46.47 0 0 0 2.45-10.68c.62-4.96.75-9.33.7-16.2l-.01-2.12c0-.97-.08-1.12-.15-1.1-.36.14-1.05.85-1.97 2.1a88.44 88.44 0 0 0-3.22 4.82l-.92 1.46-.48.75a1268.1 1268.1 0 0 1-2.5 3.92c-1.26 1.95-2.38 3.6-3.44 5.08-2.06 2.88-3.87 5.04-5.5 6.45a30.87 30.87 0 0 1-8.94 5.52h-2.98zm-183.72 0H69.3c3.37-3.43 5.19-8.33 5.19-15 0-18.6-.04-17.35 1.02-20.77.6-1.93 1.5-3.74 3.27-6.63.42-.7 4.92-7.8 6.78-10.86 3.04-4.97 11.04-16.5 12.21-18.56 3.48-6.08 4.72-12.06 4.72-24.18 0-7.85 2.5-14.2 8.1-23.44l2.84-4.63a72.67 72.67 0 0 0 2.49-4.4c1.62-3.15 2.48-5.78 2.62-8.28.2-3.78-1.3-7.29-4.9-10.9-5.13-5.12-8.6-5.43-11.2-1.85-2.12 2.92-3.48 7.74-5.06 16.47-.2 1.03-.82 4.6-.82 4.57-.83 4.67-1.4 7.33-2.1 9.6-1.35 4.42-3.7 7.61-8.36 12.26l-3.26 3.2c-6.38 6.39-9.68 11.51-11.36 19.5l-1.16 5.52c-.87 4.1-1.56 7.04-2.33 9.94-3.67 13.74-9.65 25.97-22.59 44.72-7.68 11.14-11.05 18.87-10.92 23.72h-1c-.12-5.16 3.35-13.05 11.1-24.28 12.87-18.67 18.8-30.8 22.44-44.42.77-2.88 1.45-5.8 2.32-9.89l1.16-5.51c1.73-8.22 5.13-13.5 11.64-20 .63-.64 2.84-2.8 3.25-3.21 4.57-4.54 6.82-7.62 8.12-11.84a81.58 81.58 0 0 0 2.07-9.48l.81-4.57c1.62-8.9 3-13.8 5.24-16.89 3-4.15 7.2-3.78 12.71 1.74 3.8 3.8 5.42 7.58 5.2 11.66-.15 2.66-1.05 5.41-2.73 8.68a73.6 73.6 0 0 1-2.52 4.46l-2.84 4.63c-5.52 9.1-7.96 15.3-7.96 22.92 0 12.28-1.28 18.43-4.85 24.68-1.2 2.1-9.21 13.65-12.22 18.58-1.87 3.06-6.37 10.18-6.78 10.86-1.73 2.82-2.6 4.57-3.17 6.4-1.02 3.28-.98 2.1-.98 20.48 0 6.52-1.7 11.44-4.82 15zM310.09 0h1.06c-.37.9-.77 1.83-1.2 2.82-3.9 9.06-5.45 15.15-5.45 25.18 0 7.64-2.1 11.6-6.64 13.05-3.46 1.1-5.72.98-17.57-.43-11.55-1.36-19.17-1.58-28.16-.14-6.24 2.49-25.91 7.02-32.13 7.02-11.15 0-36.76-2.88-54.12-7.01a22.08 22.08 0 0 0-16.95 2.48c-4.05 2.33-7.09 5.03-13.9 11.97-6.28 6.39-9.53 9.23-13.8 11.5-7.09 3.79-11.22 7.65-13.4 12.27-1.82 3.85-2.33 7.84-2.33 15.29 0 4.4-2.65 6.69-9.45 9.74.1-.05-2.97 1.31-3.84 1.71-8.78 4.06-12.71 8.29-12.71 16.55 0 12.52-4.86 19.22-17.34 27.96l-4.56 3.14c-1.9 1.3-3.3 2.3-4.67 3.3-.92.68-1.79 1.34-2.62 2-7.16 5.62-11 14.54-15.56 33.28-.63 2.57-3.3 14-4.07 17.14a350.44 350.44 0 0 1-5.2 19.33c-1.37 4.5-4.5 15.07-4.96 16.53-1.05 3.4-1.64 4.94-2.46 6.32-.82 1.4-6.85 9.08-12.64 18.27L0 277.98v-1.9l4.58-7.35a270.8 270.8 0 0 1 12.61-18.23c-.3.5 1.35-2.8 2.38-6.12.45-1.44 3.58-12.01 4.95-16.53 1.83-6.03 3.44-12.09 5.19-19.27.76-3.13 3.44-14.56 4.06-17.14 4.62-18.95 8.52-28.02 15.92-33.83.84-.67 1.72-1.33 2.65-2.01 1.38-1.02 2.8-2.01 4.7-3.32l4.54-3.14C73.83 140.57 78.5 134.13 78.5 122c0-8.74 4.2-13.26 13.29-17.45.88-.41 3.96-1.77 3.85-1.73 6.46-2.9 8.86-4.97 8.86-8.82 0-7.6.53-11.7 2.42-15.71 2.29-4.84 6.57-8.85 13.84-12.73 4.15-2.21 7.35-5 14.15-11.93 6.28-6.4 9.36-9.13 13.52-11.53a23.07 23.07 0 0 1 17.69-2.59c17.27 4.12 42.8 6.99 53.88 6.99 6.1 0 25.73-4.53 31.92-7 9.12-1.46 16.83-1.25 28.49.13 11.63 1.38 13.9 1.5 17.15.47 4.06-1.3 5.94-4.85 5.94-12.1 0-10.1 1.56-16.3 6.6-28zm25.12 0h1c.05 5.62.26 11.48.65 19.4.47 9.7.64 14.57.64 21.6 0 9.81-4.68 17.46-13.1 23.16-6.53 4.43-14.94 7.46-24.33 9.33-3.74.54-9.42.56-22.68.23-6.74-.17-9.35-.22-12.39-.22-2.77 0-4.97.43-7.63 1.36-.88.3-4.55 1.74-5.58 2.11-6.55 2.35-13.59 3.53-24.79 3.53-8.1 0-13.58-1.38-22.46-4.9l-3.18-1.25c-12.55-4.87-21.27-5.15-37.18 1.12-11.15 4.39-18.13 9.2-22.28 14.81-3.15 4.26-4.33 7.8-5.94 15.8-1.22 6.09-1.93 8.74-3.5 12.13-1.65 3.53-3.97 5.81-7.07 7.22-2.33 1.07-4.35 1.5-9.32 2.19-9.04 1.27-12.77 3.09-15.61 9.58-3.71 8.48-7.72 13.87-14.22 19.76-2.4 2.18-13.14 11.02-15.91 13.42-8.2 7.1-13.85 17.37-18.7 31.97a258.81 258.81 0 0 0-3.27 10.7c-.01.05-2.26 7.97-2.88 10.1-8.49 28.85-17.88 52.95-26.13 61.2-2.8 2.8-5.06 5.64-10.4 12.96-3.4 4.68-6.23 8.25-8.95 11.1v-1.55c2.74-2.98 5.73-6.82 9.48-11.97 4.03-5.52 6.32-8.4 9.17-11.24 8.07-8.08 17.44-32.14 25.87-60.8.62-2.1 2.86-10.03 2.88-10.08 1.21-4.24 2.21-7.53 3.28-10.74 4.9-14.75 10.63-25.16 19-32.4 2.78-2.42 13.5-11.25 15.89-13.4 6.4-5.8 10.32-11.09 13.97-19.43 1.68-3.83 4.05-6.31 7.2-7.86 2.4-1.17 4.64-1.67 9.53-2.36 4.54-.63 6.5-1.05 8.7-2.06 2.89-1.31 5.03-3.42 6.58-6.73 1.53-3.3 2.23-5.9 3.43-11.9 1.64-8.14 2.85-11.79 6.11-16.2 4.28-5.79 11.41-10.7 22.73-15.16 16.15-6.36 25.13-6.07 37.9-1.11l3.19 1.26c8.77 3.47 14.13 4.82 22.09 4.82 11.09 0 18.02-1.16 24.46-3.47 1-.36 4.68-1.8 5.58-2.11A22.5 22.5 0 0 1 265 72.5c3.05 0 5.67.05 14.07.26 11.53.29 17.2.27 20.83-.25 9.25-1.85 17.54-4.83 23.94-9.17C332 57.8 336.5 50.46 336.5 41c0-7-.17-11.86-.7-22.7-.35-7.26-.55-12.83-.59-18.3zM93.87 0h2.04c-.7 4-1.61 6.82-3.03 9.47-2.33 4.38-2.85 5.75-5.26 13.03a40.46 40.46 0 0 1-1.94 5.03c-2.24 4.66-5.92 8.8-13.07 14.26-8.01 6.13-14.27 16.55-20.03 31.55-2.4 6.23-8.75 25.63-9.64 28.01-2.69 7.16-6.56 12.7-15.63 23.68l-2.68 3.24c-6.02 7.34-9.35 12.07-11.72 17.15-2.3 4.94-7.12 9.9-12.91 14.15v-2.4c5.14-3.94 9.1-8.3 11.1-12.6 2.46-5.27 5.87-10.1 11.98-17.56l2.68-3.26c8.94-10.8 12.72-16.22 15.3-23.1.88-2.33 7.24-21.74 9.65-28.03 5.89-15.31 12.3-26 20.68-32.41 6.92-5.3 10.4-9.2 12.48-13.55.65-1.35 1.16-2.7 1.85-4.79 2.45-7.4 3-8.83 5.4-13.34A27.68 27.68 0 0 0 93.87 0zm9.07 0h1.02c-1.66 8.3-2.91 12.67-4.54 15.26a59.14 59.14 0 0 0-4.1 8.21c-1.27 3-2.44 6.2-3.5 9.4-.38 1.12-.7 2.16-2.41 5.39a251.48 251.48 0 0 0-12.81 13.3c-3.48 3.96-5.95 7.27-7.15 9.66-.95 1.9-2.06 5.99-3.61 12.97-.64 2.9-3.65 17.15-4.51 21.07-3.63 16.45-6.63 26.69-9.9 32-7.66 12.45-10.64 15.71-37.08 41.1A69.78 69.78 0 0 1 0 179.21v-1.15a69.39 69.39 0 0 0 13.65-10.42c26.4-25.33 29.32-28.55 36.92-40.9 3.2-5.18 6.18-15.37 9.78-31.7.86-3.91 3.87-18.16 4.51-21.06 1.57-7.09 2.7-11.2 3.7-13.2 1.24-2.5 3.76-5.86 7.29-9.89.9-1.03 1.86-2.1 2.86-3.18 2.4-2.6 4.96-5.22 7.53-7.76.9-.88 1.73-1.7 3.37-3.4a129.02 129.02 0 0 1 4.78-13.46 60.07 60.07 0 0 1 4.19-8.35c1.52-2.44 2.74-6.71 4.36-14.74zM83.71 0h1.1c-2.09 4.74-6.03 8.92-11.42 12.3-7.2 4.52-16.5 7.2-24.39 7.2-8.9 0-11.8 7-11.74 21.52 0 1.7.04 3.17.12 5.99.1 3.3.12 4.45.12 5.99 0 5.73-.76 11.3-2.01 16.5a66.67 66.67 0 0 1-2.15 6.97 2597.76 2597.76 0 0 1-7 15.86A4270.8 4270.8 0 0 1 6.44 136.2 54.64 54.64 0 0 1 0 147v-1.65a54.87 54.87 0 0 0 5.55-9.57A4269.82 4269.82 0 0 0 30.7 79.97c.53-1.2.99-2.23 2.44-5.9A69.23 69.23 0 0 0 36.5 53c0-1.52-.03-2.66-.12-5.95-.08-2.83-.12-4.31-.12-6.01-.03-6.79.53-11.62 2.07-15.34 1.94-4.68 5.39-7.19 10.67-7.19 7.7 0 16.81-2.63 23.86-7.05C77.93 8.27 81.66 4.38 83.7 0zm282.63 0h1.01c1.86 10.02 2.18 12.67 2.32 18.3a123.43 123.43 0 0 1 .37 27.83c-.96 8.78-3.1 16.01-6.63 21.15-11.34 16.5-39.8 29.22-66.41 29.22-5.09 0-10.47.28-16.31.83a413.8 413.8 0 0 0-24.37 3.16c-21.56 3.26-27.66 4.01-36.32 4.01-6.92 0-12.2-1.05-21.69-3.9l-2.78-.83c-1.39-.41-2.54-.74-3.65-1.02-8-2.05-14.22-2.04-21.7.72a16.32 16.32 0 0 0-9.17 8.18c-1.6 3.05-2.5 6.06-4.02 12.83-1.5 6.64-2.34 9.52-3.99 12.64a16.16 16.16 0 0 1-9.85 8.36 104.8 104.8 0 0 0-9.5 3.42c-6.55 2.8-10.1 5.57-13.8 10.47-1.33 1.75-1.03 1.3-5.43 7.9-1.98 2.97-4.66 5.8-8.48 9.14-2.01 1.76-10.71 8.83-12.88 10.7-7.37 6.35-12.58 12.14-16.63 19.14-4.22 7.3-7.8 18.3-11.28 33.26-.87 3.73-1.72 7.64-2.64 12.14l-1.18 5.8-1.09 5.45c-1.8 8.96-2.77 13.28-3.77 16.26-6.8 20.44-17.26 42.16-27.13 51.2-5.11 4.7-8.1 7.07-11.1 8.86-.9.54-1.84 1.04-2.92 1.57-.44.22-9.6 4.4-14.1 6.66l-1.22.62v-1.13l.78-.39c4.52-2.26 13.67-6.44 14.1-6.65a41.19 41.19 0 0 0 2.84-1.54c2.94-1.75 5.88-4.09 10.94-8.73 9.71-8.9 20.1-30.51 26.87-50.79.97-2.92 1.94-7.22 3.73-16.13l1.1-5.46a490.5 490.5 0 0 1 3.82-17.96c3.5-15.06 7.1-26.14 11.39-33.54 4.11-7.11 9.4-12.98 16.83-19.4 2.19-1.88 10.88-8.95 12.88-10.7 3.77-3.28 6.39-6.05 8.3-8.93 4.43-6.64 4.12-6.18 5.47-7.96 3.8-5.03 7.5-7.91 14.21-10.78 2.61-1.12 5.74-2.24 9.59-3.46a15.17 15.17 0 0 0 9.27-7.86c1.59-3.02 2.42-5.85 4.03-12.99 1.41-6.27 2.32-9.33 3.98-12.48a17.31 17.31 0 0 1 9.7-8.66c7.7-2.83 14.1-2.84 22.3-.75 1.12.29 2.28.61 3.68 1.03l3.73 1.11c8.47 2.54 13.66 3.58 20.46 3.58 8.59 0 14.67-.75 36.18-4a414.64 414.64 0 0 1 24.41-3.17c5.88-.54 11.29-.83 16.41-.83 26.3 0 54.45-12.58 65.59-28.78 3.42-4.98 5.5-12.06 6.46-20.7.84-7.74.73-16.02.02-23.9a136.2 136.2 0 0 0-.57-5.12c0-4.47-.3-6.94-2.16-17zM18.88 0h1.03C18 7.57 17.15 10.18 14.46 16.2c-1.95 4.37-2.67 9.19-2.42 14.89.2 4.33.71 7.7 2.28 16.13 1.09 5.88 1.57 8.77 1.94 12.2.96 8.9.24 16.08-2.8 22.79A463.4 463.4 0 0 1 0 109.43v-2.12a465 465 0 0 0 12.54-25.52c2.97-6.52 3.67-13.53 2.72-22.27-.36-3.4-.84-6.26-1.93-12.12-1.57-8.47-2.1-11.88-2.29-16.27-.26-5.84.48-10.81 2.5-15.33 2.64-5.9 3.48-8.47 5.34-15.8zm280.47 0a70.78 70.78 0 0 1-4.91 11.24c-2.56 4.7-4.01 8.45-4.86 11.98l-.4 1.8-.28 1.45a5.28 5.28 0 0 1-.74 2.07c-.74 1.03-1.93 1.28-5.13 1.25.92 0-9.85-.29-15.03-.29-10.2 0-18.45.82-29.46 2.56-16.87 2.66-17.73 2.77-23.66 2.52a42.57 42.57 0 0 1-8-1.09c-17.7-4.16-46.18-5.86-54.72-3.01-2.72.9-5.88 2.8-9.52 5.59a112.37 112.37 0 0 0-6.54 5.48c-1.4 1.25-9.17 8.5-10.78 9.84-1.45 1.2-8.18 7.42-8.85 8.02a114.65 114.65 0 0 1-4.55 3.9c-4.99 4.03-8.9 6.2-11.92 6.2-3.52.05-4.32 0-5.14-.4-1.13-.56-1.5-1.72-1.13-3.57.74-3.63 4.47-10.84 12.84-24.8 5.69-9.48 9.42-18 11.78-26.2 1.45-5.04 1.94-7.4 2.97-14.54h1.01c-1.05 7.3-1.54 9.7-3.01 14.82-2.39 8.28-6.16 16.89-11.9 26.44-8.3 13.84-12 21.01-12.7 24.48-.3 1.45-.08 2.14.59 2.47.6.3 1.35.35 3.48.3 3.92 0 7.69-2.1 12.5-5.98 1.4-1.13 2.87-2.39 4.51-3.86.66-.59 7.41-6.83 8.88-8.05 1.59-1.33 9.34-8.55 10.75-9.82 2.4-2.15 4.55-3.96 6.6-5.53 3.72-2.85 6.97-4.8 9.81-5.74 8.76-2.92 37.41-1.22 55.27 2.99 2.57.6 5.14.95 7.81 1.06 5.84.25 6.7.14 23.47-2.51 11.05-1.75 19.36-2.57 29.6-2.57 5.2 0 15.99.3 15.05.29 2.87.03 3.84-.17 4.3-.83.23-.32.4-.8.58-1.7l.28-1.43.4-1.85c.88-3.6 2.36-7.44 4.96-12.22 1.87-3.43 3.44-7 4.73-10.76h1.06zm-8.59 0c-5.91 17.94-9.55 22-19.76 22-4.5 0-10.22.32-28.69 1.5l-1.53.1c-15.6.99-23.47 1.4-28.78 1.4-5.35 0-13.24-.96-28.86-3.28l-1.54-.23C163.18 18.75 157.47 18 153 18c-4.45 0-7.3 1.01-10.96 3.34-.1.06-1.8 1.17-2.3 1.47-2.43 1.5-4.32 2.19-6.74 2.19-2.8 0-4.11-1.46-4.11-4.22 0-1.04.16-2.29.5-4.1.16-.82.9-4.4 1.07-5.32.8-4.11 1.3-7.68 1.47-11.36h2c-.17 3.82-.68 7.5-1.5 11.75-.19.94-.92 4.5-1.07 5.31a21.04 21.04 0 0 0-.47 3.72c0 1.7.46 2.22 2.11 2.22 1.99 0 3.55-.57 5.7-1.9.47-.28 2.15-1.37 2.26-1.44C144.92 17.14 148.12 16 153 16c4.62 0 10.3.74 28.9 3.51l1.53.23C198.93 22.04 206.8 23 212 23c5.25 0 13.11-.41 28.65-1.4l1.54-.1C260.73 20.32 266.43 20 271 20c8.95 0 12.15-3.4 17.66-20h2.1zM141.51 0h1.13c-2.06 3.86-2.63 5.1-2.77 6.19-.15 1.12.42 1.64 2.32 1.96 1.8.3 3.85.35 10.81.35 6.02 0 13 .56 21.35 1.62 3.95.5 8.03 1.1 13.13 1.89 24 3.7 22.5 3.49 26.83 3.49 24.02 0 51.83-2.24 60.45-6.94 2.88-1.57 5.05-4.49 6.6-8.56h1.07c-1.64 4.47-3.98 7.69-7.2 9.44-8.83 4.82-36.67 7.06-60.92 7.06-4.41 0-2.84.22-26.98-3.5-5.1-.8-9.17-1.38-13.1-1.88-8.31-1.06-15.26-1.62-21.23-1.62-7.04 0-9.1-.05-10.97-.37-2.38-.4-3.38-1.32-3.15-3.07.16-1.22.69-2.41 2.63-6.06zm76.4 0c5.69 1.64 10.37 2.5 14.09 2.5 9.59 0 16.7-.71 22.4-2.5h2.98C251.12 2.53 243.2 3.5 232 3.5c-4.5 0-10.32-1.21-17.53-3.5h3.45zM70.69 0c-2.87 3.27-6.95 5.39-12.02 6.53-3.98.89-7.5 1.08-12.92 1A97.24 97.24 0 0 0 44 7.5c-5.37 0-8.86-1.24-10.1-4.97A8.6 8.6 0 0 1 33.5 0h.99c.02.82.14 1.56.36 2.22C35.91 5.39 39.02 6.5 44 6.5l1.76.02c5.35.09 8.8-.1 12.69-.97C62.95 4.54 66.63 2.74 69.3 0h1.37zM0 207.87c7.31-.16 11.5 3.33 11.5 11.13 0 11.41-5.05 28.35-11.5 41.5v-2.3c5.93-12.72 10.5-28.47 10.5-39.2 0-7.18-3.7-10.3-10.5-10.13v-1zm0 7.05c1.23.14 2.18.58 2.87 1.31 1.4 1.48 1.6 3.72 1.16 7.58l-.16 1.3A28.93 28.93 0 0 0 3.5 229c0 3.2-1.48 9.52-3.5 15.9v-3.45c1.49-5.13 2.5-9.87 2.5-12.45 0-.98.08-1.75.37-4.02l.16-1.29c.42-3.56.24-5.59-.88-6.77-.5-.53-1.21-.87-2.15-1v-1zM0 410.9v-1.47a21.67 21.67 0 0 0 2.97-4.7c1.32-2.7 2.68-6.28 4.56-11.89 7.85-23.55 7.83-26.6.25-30.4-2.25-1.12-4.8-1.43-7.78-.91v-1.02a13.1 13.1 0 0 1 8.22 1.04c8.24 4.12 8.26 7.6.25 31.6-1.88 5.66-3.25 9.27-4.6 12.02A20.82 20.82 0 0 1 0 410.9zM33.64 452c1.68 0 3.04-.23 8.34-1.31l2.38-.47c8.26-1.57 12.72-1.3 14.53 2.33 1.38 2.75-.47 5.86-4.75 9.68a75.6 75.6 0 0 1-5.08 4.07c-.94.7-4.89 3.59-5.79 4.27-1.86 1.4-2.97 2.37-3.47 3.03a19.08 19.08 0 0 0-2.89 5.5c.07-.2-4.02 13.65-6.96 22.22-2.7 7.85-5.56 10.72-8.82 8.59-2.11-1.4-3.66-4.24-6.6-11.03-1.98-4.62-2.5-5.76-3.4-7.4-4.55-8.18-3.9-23.9-.05-32.87a9.6 9.6 0 0 1 6.98-5.96c2.59-.66 4.86-.75 11.78-.67l3.8.02zm0 2c-1.13 0-2.09 0-3.82-.02-12.07-.13-14.83.57-16.9 5.41-3.63 8.47-4.26 23.55-.05 31.12.96 1.73 1.48 2.88 3.5 7.58 2.72 6.3 4.24 9.08 5.86 10.14 1.64 1.08 3.5-.8 5.82-7.55a682.9 682.9 0 0 0 6.97-22.24 21.03 21.03 0 0 1 3.18-6.04c.65-.87 1.85-1.9 3.86-3.43.92-.7 4.87-3.57 5.8-4.27 2.02-1.5 3.6-2.77 4.95-3.97 3.63-3.23 5.09-5.7 4.3-7.28-1.21-2.42-5.07-2.65-12.38-1.27l-2.35.47c-5.49 1.11-6.86 1.35-8.74 1.35zm345.63 146c-3.45-12.26-3.77-14.13-3.77-19 0-3.33-.13-6.27-.43-11.34-.63-10.33-.65-13.5.26-17.07 1.21-4.74 4.21-7.1 9.67-7.1h26c4.08 0 5.19 1.85 5.93 7.11.1.79.13.97.19 1.32.84 5.35 2.8 7.58 8.88 7.58 3.64 0 5.54.4 6.43 1.37.76.83.76 1.44.36 3.93-.85 5.26.5 8.85 7.5 13.8 6.32 4.45 11.63 5.36 16.55 3.37 3.8-1.54 6.73-4.16 11.92-10l1.1-1.23 1.09-1.23a75.6 75.6 0 0 1 2.7-2.86 35.81 35.81 0 0 1 9.57-6.73c1.52-.76 1.72-.86 5.66-2.63 6.1-2.73 9.01-4.5 11.74-7.62 2.63-3 4.67-4.85 6.7-6.04 3.18-1.85 5.46-2.13 13.68-2.13 5.98 0 10.56-4.32 18-14.99l2.82-4.03c1.06-1.5 1.94-2.7 2.79-3.79 7.87-10.12 19.38-10.4 30.74.96 5.54 5.53 10.17 19.43 13.64 38.51 2.5 13.75 4.18 29.46 4.47 39.84h-1c-.3-10.32-1.96-25.97-4.45-39.66-3.43-18.87-8.02-32.65-13.36-37.99-10.95-10.95-21.76-10.68-29.26-1.04-.83 1.07-1.7 2.26-2.75 3.75l-2.81 4.02c-7.65 10.95-12.38 15.42-18.83 15.42-8.04 0-10.21.26-13.17 2-1.92 1.12-3.9 2.9-6.45 5.83-2.86 3.26-5.87 5.09-12.09 7.88a103.35 103.35 0 0 0-5.62 2.6 34.84 34.84 0 0 0-9.32 6.54 74.67 74.67 0 0 0-3.75 4.05l-1.1 1.24c-5.28 5.95-8.29 8.64-12.28 10.25-5.26 2.13-10.92 1.17-17.5-3.48-7.33-5.17-8.82-9.15-7.92-14.77.34-2.12.34-2.6-.1-3.1-.64-.69-2.34-1.04-5.7-1.04-6.63 0-8.96-2.63-9.87-8.42l-.2-1.34c-.67-4.82-1.53-6.24-4.93-6.24h-26c-5 0-7.6 2.04-8.7 6.34-.88 3.43-.85 6.57-.23 16.76a177 177 0 0 1 .43 11.4c0 4.78.32 6.63 3.81 19h-1.04zm13.68 0c-1.31-6.58-1.61-10.71-1.36-14.84.04-.7.1-1.44.18-2.38l.23-2.56c.34-3.81.5-6.97.5-11.22 0-4.94 1.46-7.76 4.21-8.42 2.38-.58 5.56.54 9.2 3 6.64 4.52 13.99 13.07 16.55 19.23 4.77 11.44 14.12 15.69 33.54 15.69 8.6 0 14.32-2.35 20.67-7.88 1.45-1.26 15.06-15 21-20 7.21-6.07 11.77-7.59 20.62-8.32 5.52-.45 7.98-.9 11.44-2.36 4.58-1.95 9.36-5.48 14.9-11.29 7.43-7.76 13.25-8.92 17.47-4.3 3.32 3.63 5.46 10.58 6.82 20.24.73 5.17.94 7.74 1.58 17.38.25 3.75.17 5.32-.92 18.03h-1c1.09-12.7 1.17-14.28.92-17.97-.64-9.6-.85-12.16-1.57-17.3-1.33-9.47-3.43-16.27-6.56-19.7-3.76-4.11-8.93-3.08-16 4.32-5.65 5.9-10.54 9.5-15.25 11.5-3.58 1.53-6.13 1.99-11.6 2.44-8.8.72-13.17 2.18-20.2 8.1-5.9 4.96-19.5 18.7-21 19.99-6.52 5.68-12.47 8.12-21.32 8.12-19.78 0-29.5-4.42-34.46-16.3-2.49-5.97-9.71-14.38-16.2-18.79-3.42-2.32-6.36-3.35-8.4-2.86-2.2.53-3.44 2.92-3.44 7.45 0 4.28-.16 7.47-.5 11.31l-.23 2.56c-.09.93-.14 1.65-.19 2.35-.24 4.08.06 8.18 1.39 14.78h-1.02zm113.75 0c2.52-3.26 8.93-11.79 10.9-14.3 5.48-6.98 13.05-12.38 19.4-13.94 7.01-1.71 11.5 1.45 11.5 9.24 0 4.02-.04 5.16-.74 19h-1c.7-13.85.74-15 .74-19 0-7.12-3.86-9.83-10.26-8.26-6.11 1.5-13.5 6.77-18.85 13.57-1.86 2.36-7.65 10.07-10.43 13.69h-1.26zm-9.86-338.96c3.44 2.71 7 5.1 11.44 7.75 1.06.64 8.42 4.9 10.35 6.1 11.27 7 15 13.35 12.35 25.33-1.45 6.52-4.53 11.1-9.39 14.44-3.83 2.63-8.07 4.26-16.08 6.56-11.97 3.45-13.68 3.99-18.82 6.28a60.18 60.18 0 0 0-7.81 4.18c-11.11 7.07-19.1 7.7-27.96 3.28-3.56-1.77-17.2-11-17.2-11.01a101.77 101.77 0 0 0-5.2-3.07c-16.04-8.83-34.27-24.16-34.52-31.85-.11-3.46 1.99-6.57 6.28-10.26 1.03-.9 2.18-1.81 3.68-2.95.72-.55 3.38-2.56 3.94-3 4.47-3.4 7.18-5.79 9.32-8.45 11.12-13.82 26.55-28.68 34.36-32.28 12.06-5.54 19.84-5.77 27.37.12 3.25 2.54 5.65 6.54 8.58 13.35.29.65 2.3 5.45 2.88 6.74 1.62 3.65 2.9 5.8 4.24 6.94.72.6 1.45 1.2 2.2 1.8zm-3.49-.28c-1.63-1.39-3.03-3.74-4.77-7.65-.58-1.3-2.6-6.12-2.88-6.76-2.81-6.5-5.08-10.3-7.98-12.56-6.83-5.35-13.85-5.15-25.3.12-7.45 3.42-22.7 18.12-33.64 31.72-2.27 2.82-5.08 5.3-9.67 8.79l-3.94 2.98a79.98 79.98 0 0 0-3.59 2.88c-3.87 3.33-5.67 6-5.58 8.69.21 6.64 18.14 21.72 33.48 30.15 1.76.97 3.5 2 5.3 3.13.12.08 13.61 9.22 17.03 10.92 8.22 4.1 15.46 3.52 26-3.18a62.17 62.17 0 0 1 8.07-4.31c5.25-2.35 7-2.9 19.08-6.38 7.8-2.24 11.9-3.82 15.5-6.3 4.44-3.04 7.23-7.18 8.56-13.22 2.44-11.02-.83-16.6-11.45-23.2-1.9-1.18-9.23-5.42-10.32-6.08-4.5-2.69-8.13-5.12-11.64-7.9-.77-.6-1.52-1.21-2.26-1.84zM87.72 241.6c4.3-2.98 7.88-5 12.14-6.95.84-.4 1.73-.78 2.78-1.24l4.37-1.88a164.3 164.3 0 0 0 17.74-8.96 320.67 320.67 0 0 1 27.87-14.5c4.22-1.95 21.89-9.84 21.17-9.52 19.17-8.62 28.1-6.93 49.5 8.05 7.91 5.54 13.24 13.25 16.45 22.66 3.02 8.83 3.76 16.51 3.76 27.75 0 8.32-.66 12.95-3.68 18.97-4.18 8.36-12.3 16.14-25.58 23.47-24.45 13.49-38.83 27.55-52.83 47.84-8.83 12.8-47.76 44.21-65.16 54.15C75.04 413.55 48.89 423.5 31 423.5c-10.05 0-14.67-4.78-14.76-13.37-.07-6.32 2.06-13.73 6.3-24.32 2.95-7.37 2.02-12.9-2.16-22.29-3.19-7.17-3.88-9.14-3.88-12.52 0-3.35 1.87-6.9 5.52-11.07 2.61-3 3.5-3.83 11.9-11.5 5.09-4.66 8.08-7.6 10.7-10.75 9.46-11.36 12.62-19.47 17.9-44.78 3.12-15.05 6.63-20.28 15.12-25.25.8-.47 3.95-2.25 4.7-2.68a76.66 76.66 0 0 0 5.38-3.38zm.56.82a77.63 77.63 0 0 1-5.44 3.43l-4.7 2.67c-8.23 4.82-11.57 9.81-14.65 24.6-5.3 25.45-8.51 33.7-18.1 45.21-2.66 3.19-5.68 6.16-10.8 10.84-8.36 7.64-9.24 8.48-11.82 11.42-3.5 4.01-5.27 7.36-5.27 10.42 0 3.18.68 5.1 3.8 12.12 4.27 9.6 5.24 15.37 2.16 23.07-4.18 10.47-6.29 17.78-6.22 23.93.08 8.06 4.26 12.38 13.76 12.38 17.67 0 43.68-9.9 64.75-21.93 17.28-9.88 56.1-41.2 64.84-53.85 14.08-20.42 28.57-34.59 53.17-48.16 13.12-7.23 21.09-14.87 25.17-23.03 2.92-5.86 3.57-10.35 3.57-18.53 0-11.13-.74-18.73-3.7-27.43-3.15-9.22-8.36-16.75-16.09-22.16-21.13-14.8-29.7-16.42-48.5-7.95.7-.32-16.96 7.56-21.17 9.5-1.7.8-3.3 1.55-4.86 2.3a319.68 319.68 0 0 0-22.93 12.17 165.3 165.3 0 0 1-17.85 9.01l-4.37 1.88c-1.04.45-1.92.84-2.76 1.23a74.56 74.56 0 0 0-11.99 6.86zm-7.6 12.2c7.7-6.25 12.3-8.17 23.68-11.27 6.12-1.67 9.12-2.95 12.31-5.72 3.8-3.3 7.47-4.52 15.86-6.1 2.75-.52 3.67-.7 5.06-1.02 5.48-1.24 9.48-2.93 13.1-5.89 10.42-8.53 25.4-14.11 36.31-14.11 5.33 0 16.77 7.58 25.74 17.16 10.73 11.46 15.96 23.27 12.73 32.5-3.18 9.1-11.39 18.57-23.03 27.86-8.44 6.73-18.36 13-25.22 16.43-3.72 1.86-6.59 4.88-9.77 9.99-.69 1.1-11.1 20.25-16.03 27.83-5.62 8.65-15.4 17.36-30.23 27.96a552.58 552.58 0 0 1-9.2 6.42c-.13.09-6.81 4.65-8.6 5.89-6.47 4.46-10.35 7.35-13.05 9.83-11.64 10.67-37.14 15.54-43.7 8.98-1.96-1.96-2.2-4.06-1.95-10.52.37-9.42-.5-14.5-4.95-20.51a34.09 34.09 0 0 0-7.04-6.92c-3.93-2.95-6.07-6.11-6.56-9.49-.97-6.61 3.87-13.06 14.17-21.69 1.58-1.32 6.67-5.44 7.09-5.78a48.03 48.03 0 0 0 5.23-4.77c4.1-4.63 5.85-9.55 7.8-20.07a501.52 501.52 0 0 0 .8-4.37c.33-1.87.6-3.3.88-4.73.74-3.78 1.5-7.18 2.4-10.63 1-3.78 1.38-5.5 2.36-10.37.6-3.02.93-4.21 1.56-5.47 1.22-2.45 1.27-2.5 12.25-11.42zm.64.78c-10.77 8.74-10.88 8.84-12 11.08-.58 1.16-.88 2.3-1.47 5.22-.98 4.89-1.36 6.63-2.37 10.44-.9 3.43-1.65 6.8-2.39 10.56a339.79 339.79 0 0 0-1.29 6.95l-.39 2.15c-1.98 10.68-3.77 15.74-8.04 20.54a48.77 48.77 0 0 1-5.34 4.88c-.42.34-5.5 4.47-7.07 5.78-10.04 8.4-14.72 14.65-13.83 20.78.45 3.1 2.44 6.03 6.17 8.83 3 2.25 5.39 4.62 7.24 7.12 4.63 6.24 5.52 11.52 5.15 21.15-.25 6.14-.01 8.1 1.66 9.78 6.1 6.1 31.02 1.33 42.31-9.02 2.75-2.52 6.66-5.43 13.16-9.92l8.6-5.89c3.63-2.48 6.45-4.44 9.19-6.4 14.73-10.54 24.44-19.18 29.97-27.7 4.9-7.54 15.31-26.68 16.02-27.8 3.27-5.26 6.26-8.41 10.18-10.37 6.79-3.4 16.65-9.63 25.03-16.32 11.52-9.18 19.61-18.53 22.72-27.4 3.07-8.78-2.02-20.27-12.52-31.49-8.8-9.4-20.04-16.84-25.01-16.84-10.67 0-25.43 5.5-35.68 13.89-3.76 3.07-7.9 4.81-13.5 6.09-1.41.32-2.35.5-5.11 1.02-8.21 1.55-11.76 2.73-15.38 5.88-3.34 2.9-6.45 4.22-12.7 5.92-11.26 3.07-15.75 4.94-23.31 11.09zM212 251.85c0 7.56-.6 10.92-2.6 14.3-1.1 1.84-7.66 10.05-8.6 11.3-5.96 7.94-9.33 10.28-17.26 13.76-1.34.58-2.2 1-3.03 1.5-.55.33-1.2.66-2 1.02-.71.33-4.46 1.9-5.52 2.39-6.05 2.78-8.99 5.8-8.99 10.73 0 10.97-18.95 36.12-34.51 44.87-8.18 4.6-21.3 9.36-32.78 11.86-13.33 2.9-22.49 2.48-24.62-2.32-1.32-2.97-4.4-4.26-11.98-5.81l-.6-.12c-4.84-.99-6.94-1.55-9.03-2.64-2.92-1.5-4.48-3.7-4.48-6.84 0-2.74 1.08-5.77 3.25-9.67.85-1.53 1.82-3.13 3.23-5.35-.16.25 2.83-4.4 3.67-5.76 6.69-10.7 9.85-18.5 9.85-27.22 0-18.41 11.22-33.37 27.5-42.86 5.22-3.05 9.23-3.31 15.2-2.12 5.04 1 6.05.9 7.43-1.52 4.5-7.85 7.04-9.5 15.87-9.5 3.93 0 6.97-.98 10.47-3.16 1.56-.97 8.67-6.17 10.99-7.68 9.2-5.98 11.34-7 25.2-11.95 6.95-2.48 15.18 1.28 22.33 9.12 6.55 7.19 11.01 16.61 11.01 23.67zm-2 0c0-6.5-4.25-15.48-10.49-22.32-6.67-7.32-14.16-10.74-20.17-8.59-13.73 4.9-15.73 5.85-24.8 11.75-2.24 1.46-9.37 6.68-11.01 7.7-3.8 2.36-7.2 3.46-11.53 3.46-8.08 0-9.98 1.23-14.13 8.5-1.1 1.91-2.51 2.88-4.35 3.09-1.3.14-1.9.05-5.22-.61-5.53-1.1-9.07-.88-13.8 1.88-15.72 9.17-26.5 23.55-26.5 41.14 0 9.2-3.28 17.29-10.15 28.28l-3.68 5.77c-1.39 2.19-2.35 3.77-3.17 5.25-2.02 3.63-3 6.38-3 8.7 0 4.19 2.87 5.67 11.9 7.52l.61.12c8.27 1.7 11.7 3.13 13.4 6.95 3.17 7.14 36 0 54.6-10.46 14.98-8.43 33.49-32.99 33.49-43.13 0-5.9 3.47-9.48 10.16-12.55 1.1-.5 4.85-2.08 5.52-2.38.74-.34 1.32-.64 1.8-.93.92-.55 1.85-1 3.25-1.62 7.65-3.35 10.75-5.5 16.47-13.12 1.02-1.36 7.47-9.42 8.47-11.11 1.79-3.01 2.33-6.06 2.33-13.3zm-37.18-22.4c.15-.1 2.4-1.51 2.95-1.84.96-.57 1.7-.94 2.43-1.17 2.57-.83 5.06-.1 11.04 3.12 14.86 8 19.43 22.87 9.18 38.71-4.04 6.24-9.37 9-18.72 11.11-.85.2-1.2.27-3.13.68-6.04 1.29-8.78 2.08-11.6 3.65-3.63 2.02-6.09 4.98-7.5 9.44-7.87 24.93-19.72 43.34-36.28 50.31-16.45 6.93-21.13 8.53-27.98 8.89-4.94.25-9.8-.65-15.4-2.89a44.45 44.45 0 0 1-5.64-2.6c-4.02-2.33-5.14-4.74-4.5-9.31.3-2.13 3.77-15.53 4.84-20.65.63-3.05 1.19-6.14 1.75-9.69a464.04 464.04 0 0 0 1.35-8.9c1.42-9.41 2.5-14.27 4.49-18.65 2.46-5.43 6.13-9.03 11.72-11.13 6.59-2.47 10.54-3.1 18.03-3.53 4.75-.27 6.68-.64 9-2.05.61-.37 1.22-.81 1.82-1.33a30.61 30.61 0 0 0 3.37-3.4c.59-.69 2.38-2.9 2.63-3.19 3.36-4 6.3-5.53 12.33-5.53 3.94 0 5.9-.92 8.18-3.36-.17.18 2.75-3.14 3.85-4.22a30.95 30.95 0 0 1 6.79-5c1.5-.83 3.15-1.62 4.99-2.38a64.92 64.92 0 0 0 10.01-5.1zm-14.52 8.34a29.95 29.95 0 0 0-6.57 4.84 116.68 116.68 0 0 0-3.82 4.2c-2.46 2.63-4.68 3.67-8.91 3.67-5.72 0-8.39 1.39-11.57 5.17-.23.28-2.03 2.5-2.63 3.2a31.6 31.6 0 0 1-3.47 3.51c-.65.55-1.3 1.03-1.96 1.43-2.5 1.51-4.55 1.9-9.47 2.19-7.39.42-11.25 1.04-17.72 3.47-5.34 2-8.82 5.4-11.17 10.6-1.93 4.27-3 9.07-4.41 18.39l-.65 4.34-.7 4.57c-.57 3.56-1.12 6.67-1.76 9.73-1.08 5.18-4.54 18.53-4.83 20.59-.59 4.17.35 6.18 4.01 8.3 1.35.77 3.1 1.58 5.52 2.55 5.46 2.18 10.18 3.05 14.97 2.8 6.69-.34 11.32-1.93 27.65-8.8 16.21-6.83 27.92-25.01 35.71-49.7 1.49-4.7 4.12-7.86 7.97-10 2.93-1.63 5.74-2.45 11.87-3.76 1.92-.4 2.28-.49 3.12-.68 9.12-2.06 14.24-4.7 18.1-10.67 9.92-15.34 5.55-29.55-8.82-37.29-5.75-3.1-8.03-3.76-10.25-3.05-.65.2-1.33.54-2.23 1.08-.55.32-2.77 1.72-2.93 1.82a65.91 65.91 0 0 1-10.16 5.17c-1.8.75-3.42 1.52-4.89 2.33zm-42.39 32.72c16.15-2.87 26.36-.97 32.47 6.16 5.08 5.93 1.13 21.42-5.93 35.55-4.79 9.58-10.6 16.21-23.16 25.19-14.15 10.1-35.5 12.2-40.71 3.85-1.86-2.97-2.1-8.14-1.06-15.73.78-5.68 1.86-10.71 4.73-22.98l.12-.51c1.59-6.8 2.37-10.31 3.14-14.14 1.45-7.25 3.74-11.47 7.26-13.74 2.81-1.8 5.53-2.28 12.33-2.62 5.33-.27 7.56-.46 10.81-1.03zm.18.98c-3.3.59-5.56.78-10.94 1.05-6.62.33-9.23.78-11.84 2.46-3.25 2.1-5.42 6.09-6.82 13.1-.77 3.84-1.56 7.35-3.15 14.17l-.12.5c-2.86 12.24-3.93 17.26-4.7 22.9-1.03 7.36-.79 12.36.9 15.07 4.82 7.7 25.54 5.67 39.29-4.15 12.43-8.88 18.13-15.39 22.84-24.81 6.86-13.72 10.75-29 6.07-34.45-5.84-6.81-15.7-8.65-31.53-5.84zM132 276.5c7.12 0 10.66 3.08 11.25 8.7.42 4.02-.43 8.14-2.77 15.94-2.56 8.52-18.36 25.38-27.2 31.28-7.01 4.67-20.02 5.67-26.57.99-3.99-2.85-3.53-12.08.02-26.46.68-2.75 1.47-5.65 2.37-8.76a412.6 412.6 0 0 1 3.05-10.14l.37-1.2c1.48-4.8 5.1-7.75 10.73-9.27 4.4-1.2 9.54-1.5 17.48-1.33l3.89.1c3.87.11 5.42.15 7.38.15zm0 1c-1.97 0-3.53-.04-7.41-.15l-3.88-.1c-7.85-.17-12.92.13-17.2 1.3-5.32 1.43-8.67 4.16-10.03 8.6a1277.83 1277.83 0 0 1-1.6 5.21c-.68 2.2-1.27 4.17-1.82 6.1-.9 3.1-1.68 5.99-2.36 8.73-3.43 13.88-3.87 22.93-.4 25.4 6.17 4.42 18.73 3.45 25.42-1 8.66-5.78 24.33-22.49 26.8-30.73 2.3-7.67 3.14-11.71 2.73-15.56-.53-5.1-3.64-7.8-10.25-7.8zm-17.79 7a31.3 31.3 0 0 1 8.57 1.4c5.42 1.78 8.72 5.03 8.72 10.1 0 9.59-9.51 17.2-22.34 21.47-9.82 3.28-13.62-1.79-11.66-16.54.84-6.28 3.82-10.67 8.24-13.46a20.38 20.38 0 0 1 8.47-2.97zm-.6 1.08a19.39 19.39 0 0 0-7.34 2.73c-4.18 2.64-6.98 6.78-7.77 12.76-1.89 14.11 1.36 18.45 10.34 15.46C121.3 312.37 130.5 305 130.5 296c0-4.56-2.98-7.5-8.03-9.15a28.05 28.05 0 0 0-8.2-1.35c-.13 0-.35.03-.66.08zm80.87-23.45c-2.72 9.8-14.93 9.86-26.72 3.3-10.17-5.64-13.8-17.98-5-22.87a66.53 66.53 0 0 0 4.48-2.7l2.03-1.3a50.15 50.15 0 0 1 3.92-2.3c4.73-2.43 8.82-2.8 14-.72 9.16 3.66 10.98 13.33 7.3 26.6zm-20.83-24.98a49.26 49.26 0 0 0-3.84 2.25l-2.03 1.3c-.84.53-1.5.95-2.16 1.35-.82.5-1.6.96-2.38 1.39-7.94 4.4-4.59 15.8 5 21.12 11.31 6.29 22.8 6.23 25.28-2.7 3.57-12.83 1.85-21.97-6.7-25.4-4.9-1.95-8.69-1.62-13.17.7zm17.85 12.15c0 5.7-2.44 9-6.64 9.96-3.3.76-7.56-.05-11.08-1.81l-1.89-.94c-.67-.34-1.18-.62-1.63-.88-4.07-2.38-4.13-4.97.34-10.93 6.8-9.06 20.9-7.16 20.9 4.6zm-1 0c0-5.3-2.87-8.55-7.32-9.16-4.23-.57-8.99 1.44-11.78 5.16-4.15 5.54-4.1 7.44-.64 9.47.44.25.93.51 1.59.85l1.87.93c3.34 1.67 7.36 2.44 10.42 1.74 3.73-.86 5.86-3.74 5.86-9zM387 530.3c0-12.8 2.44-16.74 18.48-29.77a56.8 56.8 0 0 1 7.61-5.2c2.6-1.5 5.33-2.82 8.5-4.18 1.24-.53 2.48-1.05 4.1-1.7l3.92-1.57c9.4-3.83 13.74-6.7 16.62-12.05 1.2-2.22 2.21-4.4 3.23-6.83a148.57 148.57 0 0 0 1.54-3.84l.3-.74.56-1.44c3.2-8.02 6.05-12.08 12.7-16.5a35.26 35.26 0 0 0 4.96-4 46.36 46.36 0 0 0 3.88-4.29c.27-.34 2.55-3.2 3.2-3.98 3.48-4.15 6.51-5.9 11.51-5.9 3.08 0 5.62-.63 9.57-2.1 5.42-2.02 6.53-2.34 8.96-2.2 2.53.13 4.85 1.26 7.18 3.59 1.3 1.3 5.55 5.83 6.52 6.78 5.06 5 9.44 6.92 17.77 6.92a197.5 197.5 0 0 1 12.08.45c15.93.87 21.94.57 25.28-2.21 6.91-5.77 11.64-2.73 11.64 7.76 0 10.73-8.6 20-19 20-4.8 0-8.32 1.43-9.34 3.67-1.12 2.48.68 6.15 5.98 10.57 13.6 11.33 11.24 20.76-7.64 20.76a21.91 21.91 0 0 0-14.6 5.24c-3.28 2.71-5.8 5.86-9.85 11.82l-1.52 2.25c-3.1 4.57-5.01 7.1-7.32 9.4-6.21 6.21-9.3 7.64-13.05 6.89l-1-.23a10.82 10.82 0 0 0-2.66-.37c-1.6 0-2.41.67-8.18 6.22-4.85 4.67-8.07 6.78-11.82 6.78-1.33 0-3.46 1.15-6.45 3.45-1.27.98-2.68 2.14-4.5 3.7l-4.92 4.29a181.11 181.11 0 0 1-4.54 3.82c-9.33 7.56-15.63 10.2-20.21 6.52-2.7-2.15-4.14-4.51-4.63-7.26-.37-2.04-.26-3.63.29-7.3.87-5.85.65-8.42-1.83-11.6-2.32-2.98-2.96-3.22-3.77-2.39-.25.26-1.35 1.63-1.61 1.94-2.21 2.5-4.85 3.57-9 2.82-4.6-.84-5.57-4.11-4.72-10.09l.24-1.56c.6-3.66.68-4.93.25-5.8-.44-.86-1.9-.94-5.23.4l-.74.29c-13.78 5.54-15.26 6.09-19.43 6.67-6.03.84-9.31-1.6-9.31-7.9zm2 0c0 5 2.14 6.6 7.04 5.92 3.91-.55 5.43-1.1 18.95-6.55l.75-.3c4.17-1.66 6.7-1.54 7.76.58.71 1.43.62 2.76-.06 7l-.24 1.53c-.72 5.04-.06 7.27 3.09 7.84 3.43.62 5.38-.17 7.15-2.18.2-.23 1.34-1.66 1.68-2 1.9-1.96 3.82-1.25 6.78 2.55 2.9 3.74 3.17 6.77 2.22 13.12-1 6.75-.52 9.4 3.62 12.71 3.49 2.8 9.1.45 17.7-6.51 1.35-1.1 2.75-2.28 4.49-3.78l4.93-4.3c1.84-1.58 3.27-2.76 4.58-3.77 3.34-2.56 5.74-3.86 7.67-3.86 3.04 0 5.95-1.9 10.43-6.22l2.46-2.39c.94-.89 1.67-1.56 2.37-2.13 1.81-1.49 3.3-2.26 4.74-2.26 1.03 0 1.81.13 3.1.42.7.16.71.17.96.21 2.96.6 5.45-.55 11.23-6.33 2.2-2.2 4.06-4.65 7.09-9.11l1.52-2.25c4.15-6.11 6.76-9.37 10.22-12.24a23.9 23.9 0 0 1 15.88-5.7c16.87 0 18.62-7.01 6.36-17.23-5.9-4.92-8.12-9.41-6.52-12.93 1.42-3.12 5.67-4.84 11.16-4.84 9.25 0 17-8.34 17-18 0-8.94-2.88-10.79-8.36-6.23-3.94 3.28-9.98 3.59-26.67 2.68l-1.02-.06c-5.09-.27-7.99-.39-10.95-.39-8.88 0-13.76-2.14-19.18-7.5-1-.98-5.26-5.53-6.53-6.79-1.99-1.99-3.86-2.9-5.87-3-2.03-.12-3.06.18-8.15 2.07-4.15 1.55-6.9 2.22-10.27 2.22-4.33 0-6.84 1.46-9.98 5.2-.63.74-2.89 3.6-3.18 3.95a48.29 48.29 0 0 1-4.04 4.46 37.26 37.26 0 0 1-5.24 4.23c-6.26 4.17-8.9 7.91-11.95 15.58l-.57 1.43-.28.74a531.5 531.5 0 0 1-1.56 3.88 77.49 77.49 0 0 1-3.32 7c-3.16 5.88-7.82 8.97-17.63 12.96l-3.92 1.58c-1.6.64-2.84 1.15-4.05 1.67a79.2 79.2 0 0 0-8.3 4.08 54.8 54.8 0 0 0-7.35 5.02C391.12 514.78 389 518.21 389 530.31zm133.22-79.76c3.06 1.53 6.54 2.02 10.68 1.7 2.53-.2 4.91-.62 8.8-1.49 5.36-1.19 6.33-1.38 8.33-1.54 2.78-.23 4.82.17 6.29 1.4 1.58 1.31 1.96 2.72 1.26 4.22-.66 1.38-1.05 1.74-5.05 5.07-3.53 2.93-5.03 4.83-5.03 7.09 0 7.3 1.29 10.02 7.83 15.62 3.86 3.3 5.93 6.84 5.28 9.62-.75 3.25-4.96 5.02-12.61 5.02-7.18 0-12.7 4.61-20.03 14.68-.5.7-3.96 5.57-4.94 6.87a38.89 38.89 0 0 1-4.72 5.5c-1.06.98-2.09 1.7-3.1 2.15-2.85 1.26-5.05 1.57-9.83 1.74-7.66.27-10.87 1.45-14.98 7.1-1.58 2.17-3.11 4-4.68 5.6a42.87 42.87 0 0 1-8.65 6.69c-.15.08-10.69 6.19-14.8 8.83-3.76 2.42-6.45 2.04-8.22-.77-1.28-2.03-1.9-4.54-2.87-10.35-.84-5.08-1.27-7.08-2.06-8.93-.97-2.3-2.21-3.24-4.02-2.88-6.2 1.24-8.95 1.39-10.98.2-2.37-1.4-3.13-4.62-2.62-10.73.16-1.96-1.04-2.87-3.76-3.04-2.24-.13-4.9.2-9.94 1.12l-.69.12c-7.97 1.45-10.72 1.72-12.72.73-2.91-1.43-1.6-5.27 4.23-12.21 5.48-6.53 10.6-10.81 15.76-13.53 3.74-1.97 5.94-2.65 12.16-4.1 7.29-1.72 10.4-3.51 14.04-9.31 2.96-4.75 10.74-18.62 12.14-20.84 3.59-5.67 6.8-9.1 11.05-11.34 2.6-1.38 4.72-2.82 9.17-6.07l1.38-1.01c7.85-5.72 12.3-7.98 17.68-7.98 4.22 0 6.49 1.36 9.13 4.77.34.43 1.67 2.22 2 2.67.85 1.09 1.6 1.98 2.45 2.83a24.29 24.29 0 0 0 6.64 4.78zm-.44.9c-2.8-1.4-5-3.03-6.92-4.97-.87-.9-1.65-1.81-2.51-2.93-.35-.46-1.68-2.25-2.01-2.67-2.47-3.18-4.46-4.38-8.34-4.38-5.09 0-9.4 2.2-17.09 7.78l-1.38 1.01c-4.49 3.29-6.63 4.74-9.3 6.15-4.06 2.15-7.16 5.45-10.66 11-1.39 2.19-9.16 16.05-12.15 20.82-3.79 6.07-7.13 7.98-14.66 9.75-6.13 1.45-8.27 2.1-11.92 4.02-5.04 2.66-10.05 6.86-15.46 13.3-5.43 6.46-6.53 9.69-4.55 10.66 1.7.84 4.48.57 12.1-.81l.7-.13c5.12-.93 7.82-1.27 10.17-1.12 3.21.2 4.92 1.48 4.7 4.11-.48 5.76.2 8.64 2.13 9.78 1.73 1.02 4.34.88 10.27-.31 2.35-.47 4 .78 5.14 3.47.83 1.95 1.27 4 2.07 8.8l.06.36c.94 5.65 1.55 8.11 2.72 9.98 1.46 2.3 3.52 2.6 6.84.46 4.14-2.66 14.69-8.77 14.81-8.85a41.9 41.9 0 0 0 8.46-6.54 47.89 47.89 0 0 0 4.6-5.48c4.32-5.95 7.81-7.23 15.74-7.5 4.66-.17 6.76-.47 9.46-1.67.9-.4 1.85-1.06 2.84-1.96a38.03 38.03 0 0 0 4.6-5.36c.96-1.3 4.4-6.16 4.93-6.87 7.5-10.31 13.22-15.09 20.83-15.09 7.24 0 11.02-1.6 11.64-4.24.54-2.32-1.36-5.55-4.97-8.64-6.75-5.79-8.17-8.79-8.17-16.38 0-2.67 1.64-4.74 5.39-7.86 3.8-3.17 4.23-3.56 4.78-4.73.5-1.06.25-1.99-.99-3.03-2.23-1.85-4.72-1.65-13.76.36-3.93.87-6.35 1.3-8.94 1.5-4.3.34-7.97-.18-11.2-1.8zm-28-3.9c5.65-2.82 8.96-2.2 12.9 1.37.56.5 2.6 2.47 3.02 2.87 4.2 3.89 8.07 5.71 14.3 5.71 11.37 0 14 1.41 16.1 8.09.26.83 1.35 4.6 1.66 5.62.8 2.63 1.64 5.03 2.7 7.6 2.13 5.17 2.64 8.32 1.72 10.24-.77 1.61-2.1 2.18-5.37 2.79-2.32.43-2.8.53-3.85.85-1.85.58-3.35 1.4-4.6 2.66-1 1-2.02 2.13-3.31 3.66-.6.71-2.91 3.5-3.46 4.14-7.2 8.54-12.43 12.35-19.59 12.35-3.76 0-6.95 1.28-10.59 4-1.84 1.37-11.62 10.31-15.22 13.06a73.09 73.09 0 0 1-8.95 5.88c-4.58 2.54-7.35 3.22-8.98 2.23-1.32-.8-1.65-2.07-1.94-5.5a52.53 52.53 0 0 0-.16-1.81c-.54-4.73-2.24-6.86-7.16-6.86-7.11 0-8.85-1.23-9.73-5.41-.96-4.61-2.1-6.7-6.55-9.67-3.97-2.65-4.31-5.42-1.52-8.22 2-2 4.63-3.5 11.35-6.87 6.61-3.3 9.2-4.8 11.1-6.68a39.09 39.09 0 0 0 5.3-6.48c.98-1.5 1.83-3.04 2.88-5.13l2.12-4.3c.91-1.83 1.72-3.37 2.61-4.98 5.74-10.32 10.37-14.78 23.22-21.2zm-22.34 21.7c-.89 1.59-1.69 3.12-2.6 4.94l-2.11 4.3a52.9 52.9 0 0 1-2.94 5.23 40.08 40.08 0 0 1-5.44 6.63c-2 2-4.62 3.51-11.35 6.87-6.6 3.3-9.2 4.8-11.1 6.69-2.33 2.34-2.08 4.37 1.38 6.67 4.7 3.14 5.96 5.46 6.97 10.3.78 3.7 2.09 4.62 8.75 4.62 5.5 0 7.57 2.57 8.15 7.75.06.5.09.82.17 1.84.25 3.06.55 4.17 1.46 4.72 1.2.74 3.69.13 7.98-2.25a72.09 72.09 0 0 0 8.82-5.8c3.55-2.7 13.34-11.65 15.24-13.07 3.79-2.83 7.18-4.19 11.18-4.19 6.77 0 11.8-3.67 18.83-12l3.45-4.13a60.07 60.07 0 0 1 3.37-3.72 11.72 11.72 0 0 1 5.01-2.91c1.1-.34 1.6-.45 3.97-.89 2.95-.55 4.07-1.02 4.65-2.23.76-1.59.28-4.5-1.74-9.43a84.46 84.46 0 0 1-2.74-7.69c-.31-1.03-1.4-4.8-1.66-5.61-1.95-6.2-4.16-7.39-15.14-7.39-6.5 0-10.61-1.93-14.98-5.98-.44-.4-2.46-2.37-3.01-2.86-3.65-3.3-6.52-3.85-11.79-1.21-12.67 6.33-17.15 10.65-22.78 20.8zm55.86 11.93c-2.98 6.45-16.78 15.26-26.74 15.26-5.33 0-7.56-2.98-7.11-7.86.32-3.48 2.1-7.91 3.93-10.61l1.52-2.32a44.95 44.95 0 0 1 1.88-2.7c3.66-4.8 7.85-7.45 13.62-7.45 9.06 0 15.75 9.52 12.9 15.68zm-.9-.42c2.52-5.47-3.65-14.26-12-14.26-5.4 0-9.33 2.48-12.82 7.06-.6.8-1.17 1.6-1.85 2.64 0 0-1.2 1.87-1.52 2.33-1.74 2.57-3.46 6.85-3.77 10.14-.4 4.33 1.43 6.77 6.12 6.77 9.57 0 23.02-8.58 25.83-14.68zm-69.67 20.74c2.08.18 4.44.81 5.88 1.8 2.12 1.47 2.2 3.6-.26 6.05-5.14 5.15-12.85 4.34-12.85-1.35 0-4.66 3.14-6.84 7.23-6.5zm-.09 1c-3.56-.3-6.14 1.5-6.14 5.5 0 4.58 6.53 5.26 11.15.65 2.03-2.04 1.98-3.43.4-4.52-1.27-.88-3.48-1.47-5.4-1.63zm29.59-225.95c4.64 2.35 17.27 8.24 19.39 9.43a24.14 24.14 0 0 1 7.05 5.64 45.03 45.03 0 0 1 3.75 5.2c2.4 3.78.04 7.66-6.2 11.63-4.97 3.16-12.18 6.3-21.95 9.82-4.84 1.74-19.63 6.68-21.1 7.2-6.59 2.33-14.85.1-25.14-5.86-3.93-2.27-8-5-12.94-8.54-2.23-1.61-9.5-6.99-10.7-7.85a81.21 81.21 0 0 0-8.63-5.7c-4.82-2.6-4.45-6.64.17-12.13 3.27-3.88 4.17-4.67 18.1-16.33a230.2 230.2 0 0 0 8.89-7.74 95.2 95.2 0 0 0 4.72-4.66c5.08-5.43 9.8-6.49 14.97-3.92 2.24 1.1 4.53 2.85 7.43 5.52 1.48 1.37 6.94 6.72 7.98 7.7 5.2 4.91 9.46 8.2 14.2 10.6zm-.46.9c-4.85-2.45-9.18-5.79-14.44-10.76-1.05-1-6.5-6.34-7.97-7.69-2.83-2.61-5.06-4.3-7.2-5.37-4.75-2.36-9-1.4-13.8 3.71a96.18 96.18 0 0 1-4.76 4.71c-2.48 2.3-5.16 4.62-8.92 7.77-13.86 11.6-14.77 12.4-17.98 16.21-4.28 5.08-4.58 8.4-.46 10.61 2.23 1.2 4.9 2.99 8.74 5.77 1.2.87 8.47 6.24 10.7 7.85a154.8 154.8 0 0 0 12.85 8.49c10.06 5.82 18.07 7.98 24.3 5.78 1.48-.52 16.27-5.47 21.1-7.2 9.7-3.5 16.86-6.61 21.75-9.72 5.84-3.71 7.9-7.1 5.9-10.26a44.09 44.09 0 0 0-3.67-5.08 23.16 23.16 0 0 0-6.78-5.42c-2.08-1.16-14.68-7.05-19.36-9.4zm-38.83 8.05c3.11-.37 5.7-.13 8.4.7 2.15.66 2.74.93 8.64 3.77 4.75 2.29 8.39 3.86 13.19 5.56 8.38 2.97 11.32 6.23 8.83 9.76-2.08 2.94-8.04 5.92-17.84 9.18-8.45 2.82-15.48 2.35-21.43-.9-4.65-2.55-8.33-6.5-12.15-12.3-2.9-4.41-2.73-8.2.16-11.06 2.48-2.45 6.87-4.07 12.2-4.7zm.12 1c-5.13.6-9.33 2.16-11.62 4.42-2.53 2.5-2.68 5.77-.02 9.8 3.73 5.68 7.3 9.51 11.8 11.97 5.7 3.11 12.43 3.57 20.62.84 9.59-3.2 15.44-6.12 17.34-8.82 1.94-2.75-.5-5.45-8.35-8.24-4.84-1.72-8.5-3.3-13.28-5.6-5.84-2.81-6.42-3.07-8.5-3.71a18.42 18.42 0 0 0-8-.66zM202.5 500.38c0 4.78-1.45 7.56-4.43 8.93-2.29 1.05-4.55 1.23-10.79 1.2l-1.78-.01c-9.19 0-17-7.65-17-15.5 0-7.59 10.6-10.51 19.74-5.44 2.78 1.55 4.21 1.94 8.57 2.75 4.44.83 5.69 2.27 5.69 8.07zm-1 0c0-5.3-.9-6.34-4.88-7.08-4.45-.83-5.96-1.25-8.86-2.86-8.57-4.76-18.26-2.1-18.26 4.56 0 7.3 7.36 14.5 16 14.5h1.79c6.06.04 8.26-.14 10.36-1.1 2.6-1.2 3.85-3.6 3.85-8.02zm33.33-117.85c3.71-1.31 8.7-2.7 16.1-4.55 2.58-.65 16.53-4.04 20.56-5.05 19.59-4.93 31.55-8.9 38.23-13.35 14.93-9.95 36.87-33.88 43.83-47.8 2.25-4.5 4.65-6.38 7.68-6.25 1.26.06 2.61.45 4.32 1.2a50.81 50.81 0 0 1 3.54 1.7l1.26.63c4.78 2.34 8.38 3.44 12.65 3.44 7.2 0 10.01 3.07 8.35 7.91-1.4 4.06-5.92 8.91-11.1 12.02-8.3 4.98-11.75 17.3-11.75 33.57 0 3.59-1.37 6.28-3.98 8.36-1.98 1.58-4.2 2.6-8.47 4.16l-1.02.37c-4.85 1.75-6.98 2.77-8.68 4.46-5.09 5.1-12.54 7.15-20.35 7.15-1.38 0-2.47.92-3.99 3.1-.29.41-1.32 1.95-1.47 2.18-2.68 3.92-4.93 5.72-8.54 5.72-7.84 0-10.74.93-21.76 6.94-5.18 2.82-8.8 3.58-14.66 3.68-.26 0-.47 0-.92.02-4.82.06-7.12.3-10.51 1.34a73.43 73.43 0 0 0-8.89 3.56c-2.17 1-10.53 5.01-10.23 4.87-7.79 3.7-13.32 5.98-18.9 7.57-12.41 3.55-18.58 2.24-27.42-4.07-2.58-1.85-2.72-4.43-.83-7.62 1.45-2.45 3.9-5.09 8.08-8.97l1.78-1.64c3.92-3.6 4.48-4.11 5.9-5.53 2.32-2.32 3.12-3.5 5.48-7.63 1.93-3.36 3.37-5.11 6.27-7.06 2.3-1.54 5.34-2.98 9.44-4.43zm.34.94c-4.03 1.42-7 2.83-9.22 4.32-2.75 1.85-4.1 3.49-5.96 6.73-2.4 4.2-3.24 5.44-5.64 7.83-1.43 1.44-2 1.96-5.94 5.57l-1.77 1.63c-4.1 3.82-6.52 6.41-7.9 8.75-1.65 2.79-1.54 4.8.55 6.3 8.6 6.14 14.46 7.38 26.57 3.92 5.5-1.57 11-3.84 18.74-7.51-.3.14 8.06-3.88 10.24-4.88a74.3 74.3 0 0 1 9.01-3.6c3.51-1.09 5.89-1.33 10.8-1.4h.91c5.72-.1 9.18-.83 14.2-3.57 11.16-6.08 14.2-7.06 22.24-7.06 3.19 0 5.2-1.6 7.71-5.28l1.48-2.2c1.7-2.43 3-3.52 4.81-3.52 7.57 0 14.78-2 19.65-6.85 1.83-1.84 4.04-2.9 9.04-4.7l1.02-.37c8.6-3.13 11.79-5.67 11.79-11.58 0-16.6 3.53-29.2 12.24-34.43 5-3 9.35-7.67 10.66-11.48 1.42-4.13-.83-6.59-7.4-6.59-4.45 0-8.19-1.14-13.09-3.54-7.52-3.67-6.78-3.34-8.72-3.43-2.58-.1-4.65 1.52-6.74 5.7-7.04 14.07-29.1 38.14-44.17 48.19-6.81 4.54-18.84 8.52-38.55 13.48-4.03 1.02-17.98 4.4-20.56 5.05-7.37 1.84-12.33 3.23-16 4.52zM252 387.5c2.08 0 4-.2 7.25-.69 5.22-.77 6.64-.9 8.46-.5 2.52.56 3.79 2.35 3.79 5.69 0 4.05-2.27 7.29-6.62 10.11-3.24 2.1-6.53 3.53-14.15 6.4l-.27.1-2.28.86c-3.04 1.16-5.27 2.52-9.33 5.43l-.8.57c-8.19 5.88-13.35 8.03-23.05 8.03-4.98 0-6.88-2.03-5.75-5.62.87-2.81 3.58-6.56 7.8-11.13 1.26-1.37 2.64-2.8 4.15-4.3 3.17-3.14 11.25-10.61 11.45-10.8.46-.47.93-.89 1.4-1.26 3.38-2.71 5.77-3.08 14.18-2.93 1.65.03 2.63.04 3.77.04zm0 1c-1.15 0-2.13-.01-3.79-.04-8.18-.14-10.4.2-13.54 2.71-.44.35-.88.74-1.32 1.18-.2.21-8.3 7.69-11.45 10.82a134.6 134.6 0 0 0-4.12 4.26c-4.12 4.47-6.76 8.12-7.58 10.75-.9 2.88.45 4.32 4.8 4.32 9.46 0 14.44-2.07 22.46-7.84l.8-.57c4.13-2.96 6.42-4.36 9.56-5.56l2.3-.86.25-.1c7.55-2.84 10.8-4.25 13.97-6.3 4.08-2.65 6.16-5.6 6.16-9.27 0-2.89-.97-4.26-3-4.7-1.65-.37-3.05-.25-8.1.5-3.3.5-5.26.7-7.4.7zm112.47-45.34c-1.88 5.44-1.98 6.76-.98 12.76 1.18 7.06-1.38 16.58-5.49 16.58a16.89 16.89 0 0 0-1.51.07l-.64.04c-2.86.18-4.83.17-6.94-.17-6.55-1.06-10.41-5.14-10.41-13.44 0-13.9 2.14-19.69 8.13-26.33a21.9 21.9 0 0 0 2.52-3.75c.59-1.03 2.78-5.13 2.72-5.01 4.44-8.14 7.71-11.53 12.25-10.4 1.17.3 2.2.77 3.58 1.59l1.39.84a20 20 0 0 0 3.1 1.6c.7.27 1.8.32 4.75.26l.72-.01c3.16-.05 4.78.08 5.83.66 1.61.89 1.2 2.56-1.14 4.9a215.9 215.9 0 0 1-3.86 3.76c-10.6 10.1-12.75 12.4-14.02 16.05zm-.94-.32c1.34-3.9 3.46-6.17 14.27-16.46 1.55-1.47 2.73-2.62 3.85-3.73 1.94-1.95 2.17-2.88 1.35-3.33-.82-.45-2.37-.58-5.32-.53l-.72.01c-3.14.06-4.26.02-5.14-.34-1.06-.41-1.97-.9-3.25-1.67l-1.38-.83a12.1 12.1 0 0 0-3.31-1.47c-3.88-.97-6.92 2.17-11.13 9.9.07-.13-2.14 3.98-2.73 5.02a22.71 22.71 0 0 1-2.65 3.92c-5.81 6.47-7.87 12-7.87 25.67 0 7.79 3.48 11.47 9.57 12.45 2.01.33 3.92.34 6.71.16a371.33 371.33 0 0 0 1.23-.07c.42-.03.73-.04.99-.04 3.2 0 5.6-8.9 4.5-15.42-1.02-6.16-.91-7.64 1.03-13.24zm-9.26 12.42c.58.52 2.5 1.9 2.55 1.93 1.96 1.57 2.04 3.31.01 6.36-3.74 5.64-8.83 3.09-8.83-4.55 0-3.81.51-5.67 2.07-6.02 1.18-.26 2 .3 4.2 2.28zm-1.34 1.48c-1.5-1.35-2.23-1.85-2.43-1.8-.17.03-.5 1.23-.5 4.06 0 5.87 2.67 7.21 5.17 3.45 1.5-2.26 1.47-2.84.4-3.7.03.03-1.95-1.4-2.64-2zm222.9-130.19c2.2-1.1 3.67-1.66 5.88-2.36l.28-.09a48.92 48.92 0 0 0 8.79-3.55c4.17-2.08 6.35-1.88 6.96.84.44 2 .2 4.01-1.25 12.7-2.27 13.62-9.16 26.14-21.17 36.3-4.3 3.63-7.41 4.39-9.75 2.44-1.88-1.57-3.1-4.57-4.61-10.48-.3-1.15-1.43-5.83-1.72-6.96a114.18 114.18 0 0 0-2.71-9.22c-2.4-6.82-3.03-10.78-2.1-12.94.77-1.83 2.08-2.24 5.6-2.45 1.49-.09 2.09-.14 2.97-.28l1.95-.33c.72-.12 1.22-.2 1.68-.29 1.1-.2 1.92-.38 2.71-.6 1.7-.49 3.42-1.2 6.49-2.73zm.44.9c-3.11 1.54-4.88 2.29-6.65 2.79-.84.23-1.69.42-2.81.63a108.77 108.77 0 0 1-3.81.63c-.77.13-1.39.19-2.92.28-3.13.18-4.17.51-4.74 1.85-.78 1.84-.2 5.62 2.13 12.2a115.12 115.12 0 0 1 2.74 9.31l1.72 6.96c1.46 5.7 2.62 8.58 4.28 9.96 1.87 1.56 4.49.93 8.47-2.44 11.82-10 18.6-22.3 20.83-35.7 1.4-8.45 1.65-10.51 1.25-12.31-.41-1.87-1.86-2-5.54-.16a49.87 49.87 0 0 1-8.93 3.6l-.28.1a35.4 35.4 0 0 0-5.74 2.3zm-4.5 6.58c1.37-.32 2.5-.75 3.9-1.42.35-.18 2.57-1.31 3.32-1.67 1.5-.71 2.97-1.31 4.7-1.89 2.7-.9 4.64-.77 5.88.4.98.94 1.34 2.26 1.41 4.18.02.4.02.7.02 1.37 0 5.63-4.63 16.88-11.34 22.75-4.34 3.8-7.31 4.67-9.92 2.52-2.06-1.7-3.5-4.65-6.67-12.91-1.86-4.83-2.05-8.1-.68-10.2 1.12-1.7 2.9-2.36 5.83-2.7l1.26-.12c1.19-.12 1.75-.19 2.3-.31zm-2.1 2.3l-1.22.12c-2.4.27-3.7.76-4.39 1.81-.93 1.43-.78 4.1.87 8.38 3.02 7.84 4.41 10.71 6.08 12.09 1.63 1.34 3.64.75 7.33-2.48C584.6 250.77 589 240.08 589 235c0-.64 0-.93-.02-1.29-.05-1.44-.3-2.33-.79-2.8-.6-.57-1.8-.65-3.87.04a37.95 37.95 0 0 0-4.47 1.8c-.72.34-2.93 1.47-3.32 1.66a19.54 19.54 0 0 1-4.3 1.56c-.66.16-1.28.24-2.56.36zm-227.73-88.98c-1.59 4.3-3.54 7.25-7.14 11.4l-2.6 2.97a67.02 67.02 0 0 0-2.63 3.23 46.4 46.4 0 0 0-4.68 7.5c-2.85 5.7-7.14 10.18-12.85 13.89-4.25 2.76-8.25 4.62-15.67 7.59-11.01 4.4-16.43 1.26-27.22-16.4-2.86-4.69-8.8-8.63-17.98-12.66-3-1.33-12.88-5.24-14.43-5.92-4.96-2.18-7.04-3.72-6.42-5.85.67-2.32 5.3-4.05 15.48-6.08 16.63-3.32 26.93-3.82 39.93-3.02 7.9.49 9.67.5 12.74-.26 1.99-.48 3.92-1.3 6-2.6l2.79-1.71c9.86-6.14 12.94-7.96 17.3-9.9 6.03-2.71 10.57-3.32 13.94-1.4 7.2 4.12 7.68 7.7 3.44 19.22zm-1.88-.7c3.95-10.7 3.6-13.26-2.56-16.78-2.66-1.52-6.62-.99-12.12 1.48-4.24 1.9-7.3 3.7-17.07 9.77l-2.79 1.73a22.6 22.6 0 0 1-6.57 2.84c-3.36.81-5.22.8-13.34.3-12.84-.78-22.97-.29-39.41 3-4.9.97-8.45 1.88-10.79 2.75-2.03.76-3.04 1.45-3.17 1.91-.16.57 1.48 1.79 5.3 3.46 1.5.67 11.39 4.58 14.44 5.93 9.52 4.19 15.74 8.3 18.87 13.44 10.35 16.93 14.87 19.56 24.78 15.6 7.3-2.93 11.21-4.75 15.33-7.42 5.42-3.53 9.47-7.75 12.15-13.1 1.44-2.9 3.02-5.4 4.86-7.82a68.95 68.95 0 0 1 2.72-3.33l2.6-2.97c3.46-3.99 5.28-6.75 6.77-10.79zm-6.64-.39c-7.94 12.8-18.53 21.75-33.3 25.23-7.82 1.83-12.47-.79-13.12-5.93-.55-4.45 2.29-9.06 6-9.06 3.02 0 5.6-1.68 15.38-9.16 1.47-1.12 2.57-1.96 3.66-2.74 4.4-3.2 7.77-5.17 10.82-6.08 5.57-1.67 9.33-2.15 11.35-1.22 2.5 1.14 2.22 4.13-.79 8.96zm-.84-.52c2.72-4.4 2.94-6.74 1.21-7.53-1.71-.79-5.32-.33-10.65 1.27-2.9.87-6.2 2.79-10.51 5.92-1.08.79-2.18 1.62-3.65 2.74-10.08 7.72-12.62 9.36-15.98 9.36-3.02 0-5.5 4.02-5 7.94.56 4.5 4.62 6.78 11.89 5.07 14.48-3.4 24.86-12.18 32.69-24.77zM461.17 33.53c13.88 4.96 20.75 4.96 31.62.01 3.02-1.37 5.47-2.94 11-6.82 5.57-3.92 8.05-5.51 11.14-6.92 4.14-1.88 7.78-2.38 11.22-1.28 3.92 1.26 6.2 12.3 6.78 28.45.5 14.2-.52 28.93-2.46 34.2-1.82 4.93-5.86 8.17-11.51 10.02A41.7 41.7 0 0 1 506 93.01c-5.79 0-9 2.4-12.2 7.64-.37.59-1.55 2.6-1.71 2.87-1.75 2.9-3.05 4.33-4.93 4.95-.94.32-2.07.83-3.87 1.74l-2.43 1.23c-1.03.53-1.87.94-2.7 1.34-6.43 3.1-11.73 4.72-17.16 4.72-5.71 0-10.04 2.09-14.02 5.92-1.16 1.11-4.2 4.53-4.63 4.94-2.54 2.44-5.93 4.24-10.85 6.1-1.4.52-5.98 2.13-6.25 2.22l-2.06.78c-.89.36-1.78.63-2.7.81-5.55 1.14-11.14-.54-17.98-4.42-1.27-.73-5.13-3.06-5.76-3.42-2.05-1.16-4.12-1.53-9.09-1.9l-1.73-.15c-4.78-.4-7.68-1.14-10.22-2.97-5-3.61-6.77-7.76-5.65-12.33 1.33-5.42 6.5-11.02 14.85-17.28a169.2 169.2 0 0 1 6.5-4.61c-.33.23 4.33-2.92 5.3-3.6 2.73-1.91 4.8-3.9 12.75-12.04l1.09-1.1c3.49-3.56 5.89-5.89 8.12-7.83 2.9-2.5 4.72-5.95 7.5-13.05l.63-1.61c2.7-6.92 4.28-10 6.87-12.33 1.42-1.28 6.68-6.54 7.93-7.5 3.98-3 8.01-2.73 19.57 1.4zm-.34.94c-11.26-4.02-15-4.28-18.62-1.53-1.19.9-6.4 6.11-7.88 7.43-2.42 2.18-3.96 5.19-6.6 11.95l-.63 1.61c-2.83 7.26-4.72 10.8-7.77 13.45a141.85 141.85 0 0 0-9.16 8.87c-8.02 8.2-10.08 10.2-12.88 12.16-.99.69-5.65 3.84-5.31 3.6-2.5 1.71-4.52 3.13-6.47 4.59-8.17 6.13-13.23 11.6-14.48 16.72-1.02 4.15.58 7.9 5.26 11.27 2.36 1.7 5.11 2.4 9.72 2.8l1.73.13c5.12.4 7.28.78 9.5 2.05.65.36 4.5 2.7 5.76 3.4 6.66 3.78 12.04 5.4 17.29 4.32.86-.17 1.7-.42 2.52-.75a67 67 0 0 1 2.1-.8c.28-.1 4.86-1.7 6.24-2.22 4.8-1.8 8.08-3.56 10.5-5.88.4-.38 3.44-3.8 4.63-4.94 4.16-4 8.72-6.2 14.72-6.2 5.25 0 10.42-1.59 16.73-4.62.82-.4 1.65-.8 2.68-1.33.12-.06 1.93-.99 2.43-1.23 1.84-.93 3-1.46 4-1.8 1.6-.52 2.76-1.82 4.39-4.52l1.7-2.88c3.39-5.5 6.87-8.11 13.07-8.11 4.45 0 8.73-.49 12.64-1.77 5.4-1.76 9.2-4.8 10.9-9.41 1.87-5.11 2.9-19.75 2.39-33.83-.56-15.53-2.81-26.48-6.08-27.52-3.18-1.02-6.57-.55-10.5 1.23-3.02 1.37-5.47 2.94-11 6.83-5.57 3.92-8.05 5.5-11.14 6.92-11.13 5.05-18.26 5.05-32.38.01zM475 55c5.38 0 7.55-.21 9.72-.96 1.26-.43 9.95-4.8 14.88-6.96 1.9-.82 3.56-2.44 6.6-6.04 2.56-3.04 3.19-3.75 4.4-4.84 3.7-3.35 7.07-3.28 10.22 1.23 6.23 8.9 5.61 15.94.07 27.02a71.26 71.26 0 0 0-2.5 5.48c-.32.8-1 2.7-1.09 2.9-.17.45-.34.81-.54 1.17-.63 1.14-1.56 2.21-4.05 4.7-2.4 2.4-5.16 3.27-11.68 4.33-1.81.3-2.2.36-3 .51-6.02 1.1-9.6 2.69-12.24 6.07-3.57 4.59-7.9 7.48-14.98 10.74-.55.24-1.1.5-1.8.8l-1.78.8a60.08 60.08 0 0 0-7.7 3.9c-2.57 1.6-4.79 2.35-9.42 3.46-8.58 2.06-12.28 3.76-17.37 9.36-5.12 5.64-10.17 7.64-16.63 6.7-5.36-.79-10.63-3.01-23.56-9.48-6.3-3.15-6.43-7.78-1.5-13.56 3.38-3.94 3.52-4.06 19.4-16.44 8.12-6.33 12.97-10.57 16.63-14.88 2.53-2.98 4.2-5.73 4.96-8.3 5.5-18.3 12.5-21.98 22.78-15.56 1.95 1.22 6.61 4.55 7.18 4.9 3.36 2.15 6.52 2.95 13 2.95zm0 2c-6.84 0-10.37-.89-14.08-3.26-.63-.4-5.27-3.71-7.16-4.9-9.05-5.65-14.66-2.7-19.8 14.45-.86 2.87-2.67 5.85-5.35 9.01-3.78 4.45-8.7 8.75-16.94 15.17-15.66 12.21-15.86 12.38-19.1 16.16-4.17 4.9-4.09 8 .88 10.48 12.71 6.35 17.89 8.54 22.94 9.28 5.78.84 10.18-.9 14.87-6.06 5.42-5.96 9.45-7.82 18.38-9.96 4.43-1.07 6.5-1.76 8.83-3.22a61.7 61.7 0 0 1 7.94-4.02l1.78-.8 1.78-.8c6.82-3.13 10.91-5.87 14.24-10.14 3-3.87 7-5.64 13.46-6.82.83-.15 1.21-.21 3.04-.51 6.1-1 8.6-1.78 10.58-3.77 2.36-2.36 3.21-3.34 3.72-4.26.15-.27.29-.56.44-.94.06-.15.75-2.06 1.09-2.9.64-1.6 1.45-3.4 2.57-5.64 5.24-10.49 5.8-16.8.07-24.98-2.4-3.44-4.37-3.48-7.24-.89-1.11 1-1.73 1.7-4.22 4.65-3.24 3.85-5.04 5.59-7.32 6.59-4.82 2.1-13.62 6.53-15.03 7.01-2.44.84-4.79 1.07-10.37 1.07zm-12.7 8.6c5.47 3.9 10.34 3.72 18.23.88 5.39-1.94 5.92-2.1 7.7-2.1 2.5-.01 4.21 1.36 5.24 4.46 1.66 4.98-2.32 8.52-12.3 12.68-2.7 1.13-16.25 6.18-20 7.73-7.86 3.24-13.93 6.42-18.87 10.15-13.02 9.84-18.36 11.93-23.71 9.68a24.67 24.67 0 0 1-3.62-1.98l-1.99-1.28a90.4 90.4 0 0 0-2.24-1.4c-3.33-2-2.82-4.28.85-7.34 1.35-1.13 10.66-7.61 13.53-9.91 7.1-5.69 11.91-11.47 14.41-18.34 3.07-8.45 4.89-12.1 6.8-13.39 1.73-1.16 3.36-.53 6.18 1.9.63.56 3.4 3.08 4.11 3.7 1.93 1.7 3.71 3.15 5.67 4.55zm-.6.8c-1.98-1.42-3.79-2.88-5.74-4.6-.73-.64-3.48-3.16-4.1-3.7-2.5-2.16-3.75-2.65-4.97-1.83-1.66 1.11-3.44 4.7-6.42 12.9-2.57 7.07-7.5 12.99-14.72 18.78-2.91 2.33-12.21 8.8-13.52 9.9-3.22 2.68-3.56 4.17-.97 5.72l2.26 1.4 1.99 1.28c1.47.93 2.48 1.5 3.47 1.91 4.9 2.07 9.96.07 22.72-9.56 5.02-3.79 11.15-7 19.1-10.28 3.76-1.55 17.3-6.6 20-7.72 9.5-3.97 13.14-7.2 11.73-11.44-.9-2.71-2.25-3.8-4.3-3.79-1.6 0-2.15.17-7.36 2.05-8.17 2.94-13.34 3.14-19.16-1.01z'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n@media print {\n  ._CSS-main {\n    background: white !important;\n  }\n}","controller":"class Controller {\n  async init() {\n    console.log('init')\n    \n    locals.theme = 'ae-light'\n    locals.ready = false\n    locals.latestObjectCreatedBeneathACompany = null\n\n    const appId = layout.a[1]\n\n    const preloadIds = [\n    ]\n\n    // preload app\n    const preloadLocations = [\n      `a:${appId}`,\n      'p:91f205bc-9989-4fbe-8966-bd4ba9777c26 f.id:control-form',\n      'p:controls-folder f.id:control-form',\n    ]\n\n    const [, ids] = await Promise.all([\n      Aeppic.find(preloadLocations.join(' OR '), { size: 9999 }),\n      Aeppic.getAll(preloadIds)\n    ])\n\n    if (Aeppic.Account && Aeppic.Account.data.name === 'service') {\n      console.log('preloaded these documents')\n\n      const loggingArray = ids.map(id => id ? [id.data.name, id.a.join(' > ')] : [])\n      loggingArray.push(['Aeppic.find( ... )', preloadLocations.join(' OR ')])\n      console.table(loggingArray)\n    }\n\n    locals.startup = Aeppic.Account && await Aeppic.findOne(`a:${Aeppic.Account.a[0]} a_forms:c69a0c1c-6c53-40c2-87e8-5ace866bf1df f.id:bd9bf8c0-f0d5-41ce-8fea-146471f824de`, { sort: { field: 'created.at', descending: true }})\n\n    locals.ready = true\n  }\n}"},"locks":[],"created":{"at":"2022-03-08T13:59:12+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2024-06-11T12:32:08+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1718109128574,"ct":1646747952249,"a_depth":3,"a":["apps","d4581623-f542-4ade-86be-8b3ecec56f0e","5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"e5ef33a8-2f47-44b0-8cda-6e12be801e28","v":"07dc5bdc9552201e","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"0089d022c95c78e9","text":"Layout"},"data":{"name":"WIP -- image-rotate","applies":"","packages":[{"id":"2016c395-bbf9-4a1d-8e6f-4e7f5a623e40","v":"ed9517aa77578311","text":"Exif Reader Package"}],"template":"<canvas ref=\"canvas\" v-show=\"false\"></canvas>","css":"","controller":"class Controller {\n  init() {\n    this.FORMS ={\n      Datei: '6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2'\n    }\n\n    this.FORMS_FILE_FIELDS = {\n      '6d3f6460-c6d2-4df1-8c05-e8bb66c5b8d2': 'datei'\n    }\n\n    Aeppic.watchMatchingDocuments(`f.id:${this.FORMS.Datei}`, (file, reason) => {\n      console.log('watch files', file)\n      if (!reason.updated) {\n        return\n      }\n\n      this.changeFilelToItsOrientation(file, this.FORMS_FILE_FIELDS[this.FORMS.Datei])\n    })\n  }\n\n  async changeFilelToItsOrientation(document, fieldName) {\n    const url = Aeppic.Content.getSrc(document, fieldName)\n    const response = await Aeppic.fetch(url)\n\n    console.log(response)\n\n    if (!response.ok) {\n      return\n    }\n\n    const buffer = await response.arrayBuffer()\n    const orientation = await this._getOrientation(buffer)\n    console.log(orientation)\n\n    switch (orientation) {\n      case 1:\n        break\n      case 2:\n        return // TODO:\n      case 3:\n        return this.rotate(document, fieldName, 180)\n      case 4:\n        return // TODO:\n      case 5:\n        return // TODO:\n      case 6:\n        return this.rotate(document, fieldName, 90)\n      case 7:\n        return // TODO:\n      case 8:\n        return this.rotate(document, fieldName, 270)\n    }\n  }\n\n  async rotate(document, fieldName, degrees = 90) {\n    const resizeHandler = () => {\n      console.log('resizeHandler')\n\n      const { height, width } = image\n      const canvas = $refs.canvas\n\n      canvas.height = width\n      canvas.width = height\n      canvas.style.height = width\n      canvas.style.width = height\n\n      const ctx = canvas.getContext('2d')\n\n      const radians = degrees * Math.PI / 180\n      ctx.rotate(radians)\n\n      ctx.translate(0, -height)\n\n      ctx.drawImage(image, 0, 0)\n\n      const field = document.data[fieldName]\n\n      // keep same dataType or filesize will increase dramatically\n      canvas.toBlob((blob) => {\n        console.log('out', blob)\n        // TODO: enable to save changes\n        // this._setDataUrl(document, fieldName, blob)\n      }, field.type || 'image/jpeg')\n    }\n\n    const image = new Image()\n\n    image.addEventListener('load', resizeHandler, { once: true })\n    image.src = Aeppic.Content.getSrc(document, fieldName)\n  }\n\n  async _setDataUrl(document, fieldName, dataUrl) {\n    const editable = await Aeppic.edit(document)\n\n    editable.setFile(fieldName, dataUrl)\n    Aeppic.commit(editable)\n\n    Aeppic.save(editable)\n  }\n\n  async _getOrientation(arrayBuffer) {\n    const ExifReader = packages.exifReader.ExifReader\n\n    if (!ExifReader) {\n      return\n    }\n\n    // const arrayBuffer = await new Response(fileBlob).arrayBuffer()\n\n    const result = ExifReader.load(arrayBuffer)\n\n    console.log(result, result.Orientation)\n\n    // Orientations of the letter F\n    //\n    //   1        2       3      4         5            6           7          8\n    //\n    // 888888  888888      88  88      8888888888  88                  88  8888888888\n    // 88          88      88  88      88  88      88  88          88  88      88  88\n    // 8888      8888    8888  8888    88          8888888888  8888888888          88\n    // 88          88      88  88\n    // 88          88  888888  888888\n    // \n    // 1\tTop\tLeft side\n    // 2*\tTop\tRight side\n    // 3\tBottom\tRight side\n    // 4*\tBottom\tLeft side\n    // 5*\tLeft side\tTop\n    // 6\tRight side\tTop\n    // 7*\tRight side\tBottom\n    // 8\tLeft side\tBottom\n    // Orientations with asterics mark are uncommon since they represent flipped orientations.\n\n    const orientation = result.Orientation\n    return orientation ? orientation.value : null\n  }\n\n  destroy() {\n    if (this.objectUrl) {\n      revokeObjectURL(this.objectUrl)\n    }\n  }\n}\n"},"locks":[],"created":{"at":"2020-05-08T09:00:46+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2021-05-19T12:48:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1621428481260,"ct":1621428481260,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[],"previous":{"v":"09eb74baae8f2968","f":{"id":"layout-form","v":"e5de73f465a52efb","text":"Layout"}}},{"id":"b9fda9fa-829a-4857-8292-ecfce4fe55c4","v":"cfd74e673ddb2bf0","previous":{"v":"ac360a4a9f163936"},"p":"7fd7c5cc-1eed-440b-8ce2-d6183cdb421b","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"wip-pane","applies":"","packages":[],"template":"<button @click.stop=\"controller.refresh()\">\n  <ae-icon class=\"fa fa-sync-alt\"></ae-icon>\n</button>\n\n<div v-for=\"documentId of locals.documents\">\n  <!-- {{documentId}} -->\n  <div style=\"flex;\">\n    <div style=\"display:inline\" @click.stop=\"controller.select(documentId)\">\n    <ae-design  name=\"title\" :document-id=\"documentId\" style=\"display:inline;margin: 10px 0; font-weight: bold;\"></ae-design>\n    </div>\n    <button @click.stop=\"Aeppic.Developer.navigateTo(documentId)\">\n      <ae-icon class=\"fa fa-caret-right\"></ae-icon>\n    </button>\n    <button @click.stop=\"controller.toggleWipForDocument(documentId)\">\n      <ae-icon class=\"fa fa-map-pin\"></ae-icon>\n    </button>\n  </div>\n\n  <ae-list  style=\"flex:1;overflow:auto;padding:4px\"\n          class=\"ae-col\"\n          @selected=\"id => controller.select(id)\"\n          list-id=\"tree-list\"\n          :param-root-id=\"documentId\"\n           :param-show-form-icons=\"true\"\n\n></ae-list>\n</div> \n            <!-- :param-selected=\"locals.selected\" -->\n            <!-- :param-show-forms=\"locals.showForms\"\n            :param-show-form-icons=\"locals.showFormIcons\"\n            :param-selected=\"locals.selected\"\n            :param-query-children-existence=\"locals.queryChildrenExistence\"\n            @toggle-show-forms=\"locals.showForms = !locals.showForms\"\n            @toggle-show-form-icons=\"locals.showFormIcons = !locals.showFormIcons\"\n            @toggle-query-children-existence=\"locals.queryChildrenExistence = !locals.queryChildrenExistence\" -->","css":"","controller":"class Controller {\n  init() {\n    locals.documents = []\n    locals.selected = null\n    this.refresh()\n\n    // this.select('root')\n  }\n\n  toggleWipForDocument(documentId) {\n    console.log(documentId)\n\n    const key = 'ae-developer_wip_documents'\n\n    const stored = Aeppic.LocalStorage.getValue(key) || []\n\n    const foundIndex = stored.findIndex(id => id === documentId)\n\n    if (foundIndex !== -1) {\n      stored.splice(foundIndex, 1)\n    } else {\n      stored.push(documentId)\n    }\n\n    Aeppic.LocalStorage.setValue(key, stored)\n\n    this.refresh()\n  }\n\n  refresh() {\n    const key = 'ae-developer_wip_documents'\n\n    locals.documents = Aeppic.LocalStorage.getValue(key) || []\n  }\n\n  async select(id) {\n    console.log(id)\n    locals.selectedId = id\n    locals.selected = await Aeppic.get(id)\n    $emit('selected', id)\n  }\n} "},"locks":[],"created":{"at":"2022-11-23T10:15:50+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-04-19T13:14:07+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1681910047011,"ct":1669198550692,"a_depth":5,"a":["apps","e4a62254-c6ab-4d0d-a9ae-81934093f6e2","0daea31b-a830-44bf-8844-b6001f852f00","427e6b73-968a-4747-be77-c6bb820a3190","7fd7c5cc-1eed-440b-8ce2-d6183cdb421b"],"a_forms":["folder","application-form","folder","folder","folder"],"inheritedLocks":[null,null,null,null,null,null],"stamps":[]},{"id":"ce114083-bcc7-488b-8bb0-3dde1b7d6213","v":"initial","p":"1e592f4f-8add-4625-b92c-47dc521fb3e3","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"},"data":{"name":"WIP: table cell","applies":"","packages":[],"template":"\n<template v-if=\"params.document\">\n  <template v-if=\"params.designName\">\n    <ae-design :name=\"params.designName\" :document=\"params.document\" :param-field-name=\"params.columnName.replace('data.', '')\"></ae-design>\n    <!-- <strong> {{ params.designName }} </strong> -->\n  </template>\n  <template v-else>\n    {{ params.document.data[params.columnName.replace('data.', '')] }}\n  </template>\n  <!-- {{params.columnName}} -->\n</template>\n","css":"._CSS {\n  overflow: hidden;\n  min-width: 0;\n}","controller":""},"locks":[],"created":{"at":"2021-06-23T14:08:48+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2021-06-23T14:08:48+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1624457328563,"ct":1624457328563,"a_depth":2,"a":["system","1e592f4f-8add-4625-b92c-47dc521fb3e3"],"a_forms":["system-folder-form","folder"],"inheritedLocks":[null,null,null],"stamps":[]},{"id":"582baf96-ad3a-4e6a-a77c-84509a6f4a0a","v":"e73be83ea1296335","previous":{"v":"initial"},"p":"3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e","f":{"id":"layout-form","v":"71dff5466dbeb907","text":"Layout"},"data":{"name":"Word Vorlagen Erklärungs-Text","applies":"","packages":[],"template":"<!-- NOTE: extrahiert und gekürzt aus dem Wissen's Management von Exapris -->\n\n<h1>Allgemeine Funktionsweise der Word Vorlagen</h1>\n<p></p>\n<ul>\n  <li>\n    <p>In einer normalen Word Datei (docx-Datei) können spezielle Wörter, sogenannte Tokens, geschrieben werden. Diese werden\n      an einer gewissen Stelle im Prozess von einem Service durch bereitgestellte Daten ersetzt.</p>\n  </li>\n  <li>\n    <p>Sind die Token falsch geschrieben oder es gibt keine bereitgestellte Daten für ein Token, dann wird dieser <strong><u>NICHT</u></strong>\t\t\t\tersetzt/entfernt.</p>\n  </li>\n</ul>\n<p>&nbsp;</p>\n<h1>Einbindung </h1>\n<p>Die Vorlagen werden bei der Nutzung der Projekt-Funktion <strong>Korrespondenz -&gt; Formulare versenden </strong>mit Daten\n  befüllt.</p>\n<p>Der Endnutzer kann die generierten Vorlagen dann (mit Hilfe des Converter Service) als PDF herunterladen.</p>\n<p>&nbsp;</p>\n<p>Vorlagen können als allgemeine Projekt-Vorlagen oder speziell für bestimmte Leistungen hinterlegt werden.</p>\n<p>Diese Daten-Documente sind verfügbar (Token | Beispiel):</p>\n<ul>\n  <li>\n    <p>Projekt</p>\n    <pre><code>$projekt_name$ | 2019_05_01-AmOberenBorn-Mainz-Hechthsheim \n$projekt_beschreibung$ | Dies ist eine Beschreibung &lt;br&gt; und dies Zeile 2 &lt;br&gt; und Zeile 3. \n$projekt_baustellenAdresse_street$ | Am Becherweg\n$projekt_baustellenAdresse_streetNumber$ | 10\n$projekt_baustellenAdresse_supplement$ | a\n$projekt_baustellenAdresse_postalCode$ | 55270\n$projekt_baustellenAdresse_city$ | Ober-Olm</code></pre>\n  </li>\n</ul>\n<ul>\n  <li>\n    <p>Kontakt: Entspricht dem Feld <strong>Empfänger</strong> in <strong>Zu versendene Formulare</strong></p>\n    <pre><code>$kontakt_name$ | Exapris GmbH\n$kontakt_ansprechpartner$ | Gerald Boller\n$kontakt_email$ | info@exapris.de\n$kontakt_festnetz$ | 0123festnetz\n$kontakt_mobil$ | 0123mobil\n$kontakt_adresse_street$ | Am Becherweg\n$kontakt_adresse_streetNumber$ | 10\n$kontakt_adresse_supplement$ | b\n$kontakt_adresse_postalCode$ | 55270\n$kontakt_adresse_city$ | Ober-Olm</code></pre>\n  </li>\n</ul>\n<p></p>\n","css":"","controller":""},"locks":[],"created":{"at":"2020-09-17T11:55:23+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2023-11-24T15:11:04+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1700838664768,"ct":1600343723948,"a_depth":3,"a":["apps","94a64d89-d204-4918-b147-d717914fb03e","3dd6a1fd-ed77-4a24-8e82-f1d74ee7a59e"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"a":["apps","144e85c0-d7f9-4b20-8928-be30f0c78bda","647b2571-aea1-4247-8adb-b43bb4c94afc"],"a_depth":3,"a_forms":["folder","application-form","folder"],"cloneOf":{"id":"2f55f820-a5fe-4b77-8808-5dcd57067416","text":"Tracked Time","v":"4f72e50990984339"},"created":{"at":"2022-03-17T13:19:49+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":""},"ct":1647523189692,"data":{"applies":"","controller":"class Controller {\n  async init() {\n    this.ACCOUNT_FORM = 'account'\n    this.DURATION_FORMAT = `hh'h' mm'm'`\n\n\n    locals.visible = false\n    locals.documents = []\n\n    const trackingIsEnabled =\n      !!Aeppic.LocalStorage.getValue('appLayoutId') &&\n      (await Aeppic.Preferences.getSettingForDocument('bizpin:timetracking:enableWorkingTime', params.document))\n    if (!trackingIsEnabled) {\n      return\n    }\n\n    locals.visible = await this._isTrackedTimeAdmin()\n\n    this.changeMonthBy = 0\n    locals.readableDate = ''\n\n    const accounts = await this._getProfileAccounts()\n\n    if (accounts.find((account) => account.id === Aeppic.Account.id)) {\n      locals.visible = true\n    }\n\n\n    Aeppic.subscribe(`a:${params.document.id} f.id:32db2e83-2e88-4162-b680-698423aef2c3`, async () => {\n      await this.updateDocuments()\n    })\n  }\n\n  async _isTrackedTimeAdmin() {\n    if (Aeppic.Account && Aeppic.Account.data.isAdmin) {\n      return true\n    }\n\n    const securityFolder = await this._getSecurityFolder()\n\n    const workingTimeGroup = await Aeppic.get(securityFolder.data.workingTimeGroup)\n\n    if (workingTimeGroup) {\n      return Aeppic.findOne(`id:${Aeppic.Account.id} data.groups.id:${workingTimeGroup.id}`)\n    }\n\n    return false\n  }\n\n  async _getSecurityFolder() {\n    if (!params.document || !params.document.a) {\n      return null\n    }\n\n    const securityFolder = await Aeppic.findOne(\n      `a:${params.document.a[0]} AND f.id:81939b86-a48e-480e-afd1-cb2907568550`\n    )\n    return securityFolder\n  }\n\n  async changeMonth(by) {\n    this.changeMonthBy = this.changeMonthBy + by\n    await this.updateDocuments()\n  }\n\n  async updateDocuments() {\n    const local = Aeppic.DateTime.local().plus({\n      months: this.changeMonthBy,\n    })\n\n    locals.readableDate = `${local.monthLong} ${local.year}`\n\n    const daysInMonth = local.daysInMonth\n    const month = `${local.month}`.padStart(2, '0')\n\n    const queryString = `a:${params.document.id} f.id:32db2e83-2e88-4162-b680-698423aef2c3`\n    console.log(queryString)\n    const findOptions = {\n      sort: [\n        {\n          field: 'data.datum',\n          descending: false,\n        },\n        {\n          field: 'created.at',\n        },\n      ],\n      size: 9999,\n    }\n\n    const intervalOptions = {\n      start: `${local.year}-${month}-01`,\n      end: `${local.year}-${month}-${daysInMonth}`,\n      fieldName: 'data.von',\n      fullDays: true,\n    }\n\n    const documents = await packages.SearchHelpers.findInterval(Aeppic, intervalOptions, queryString, findOptions)\n\n    locals.documents = documents\n\n    if (documents.length) {\n      locals.statistics = this.calculateStatistics(documents)\n    } else {\n      locals.statistics = null\n    }\n  }\n\n  calculateStatistics(trackings) {\n    const statistics = {\n      durationDateTime: {},\n      weeklyDurations: {},\n    }\n\n    for (const track of trackings) {\n      const durationToAdd = Aeppic.DateTimeDuration.fromObject(track.data.dauer)\n      statistics.durationDateTime = durationToAdd.plus(statistics.durationDateTime)\n      \n      // Calculate week number from the tracking date\n      const trackingDate = Aeppic.DateTime.fromISO(track.data.datum)\n      const weekNumber = trackingDate.weekNumber\n      \n      if (!statistics.weeklyDurations[weekNumber]) {\n        statistics.weeklyDurations[weekNumber] = Aeppic.DateTimeDuration.fromObject({})\n      }\n      \n      statistics.weeklyDurations[weekNumber] = durationToAdd.plus(statistics.weeklyDurations[weekNumber])\n    }\n\n    const result = {\n      duration: statistics.durationDateTime.toFormat(this.DURATION_FORMAT),\n      weeklyDurations: {},\n    }\n\n    // Format weekly durations\n    for (const [week, duration] of Object.entries(statistics.weeklyDurations)) {\n      result.weeklyDurations[week] = duration.toFormat(this.DURATION_FORMAT)\n    }\n\n    return result\n  }\n\n  async _getProfileAccounts() {\n    const accounts = (await Aeppic.find(`f.id:account p:${params.document.id}`)).filter((account) => {\n      return !account.data.profilePage.id || account.data.profilePage.id === params.document.id\n    })\n\n    return accounts\n  }\n}\n","css":"._CSS-controls {\n  display: flex;\n  align-items: center;\n}\n\n._CSS-controls__date {\n  width: 150px;\n  display: flex;\n  justify-content: center;\n}\n\n._CSS-project-durations {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-project-duration+._CSS-project-duration {\n  margin-top: var(--ae-size-2);\n}\n\n._CSS-project-duration {\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  background-color: var(--ae-ui-background);\n  border-radius: var(--ae-border-radius);\n\n  flex: 1;\n  padding: var(--ae-size-1) var(--ae-size-2) var(--ae-size-1) var(--ae-size-2);\n  display: grid;\n  grid-template-columns: auto 90px;\n}\n\n._CSS-project-duration__duration {\n  font-weight: bold;\n}\n\n._CSS-controls__CSV {\n  flex:1;\n  display: inline-flex;\n  justify-content: flex-end;\n}","name":"Working Time","packages":[{"id":"9fbc0645-b97a-4b98-8520-02670f21ac0b","text":"Aeppic Search Helpers","v":"ab6255cfc2e565e3"}],"template":"<template v-if=\"locals.visible\">\n  <div class=\"ae-control-container ae-form-cell\">\n    <div class=\"ae-form-cell__input\">\n      <div class=\"_CSS-controls\">\n        <button class=\"ae-button\" @click=\"controller.changeMonth(-1)\">\n          <ae-icon class=\"fa fa-arrow-left\"></ae-icon>\n        </button>\n        <div class=\"_CSS-controls__date\">{{locals.readableDate}}</div>\n        <button class=\"ae-button\" @click=\"controller.changeMonth(1)\">\n          <ae-icon class=\"fa fa-arrow-right\"></ae-icon>\n        </button>\n\n        <ae-layout\n          class=\"_CSS-controls__CSV\"\n          layout-id=\"a7c668bb-022c-4ffd-94bb-b3430fa73dbb\"\n          :params=\"{ documents: locals.documents, includeParentName: true }\"\n        ></ae-layout>\n      </div>\n\n      <div class=\"ae-form-cell__label\" style=\"margin-top: var(--ae-size-4)\">\n        Erfasste Arbeitszeiten\n        <template v-if=\"locals.statistics && locals.statistics.duration\">\n          (\n          <ae-icon class=\"fa fa-sigma\"></ae-icon>\n          {{ locals.statistics.duration }} )\n        </template>\n      </div>\n\n      <ae-list\n        list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n        :documents=\"locals.documents\"\n        param-design=\"line-item\"\n        :param-design-params=\"{ readonly: true }\"\n        param-empty-text=\"Keine Arbeitszeiten in diesem Zeitraum erfasst\"\n        @selected=\"Aeppic.drillInto($event)\"\n      ></ae-list>\n\n      <template v-if=\"locals.statistics && locals.statistics.weeklyDurations\">\n        <div class=\"ae-form-cell__label\">Erfasste Zeiten pro Woche</div>\n\n        <div class=\"_CSS-week-durations\">\n          <div class=\"_CSS-project-duration\" v-for=\"(duration, week) in locals.statistics.weeklyDurations\">\n            <div class=\"_CSS-project-duration__week\">KW {{ week }}</div>\n            <div class=\"_CSS-project-duration__duration\">{{ duration }}</div>\n          </div>\n        </div>\n      </template>\n    </div>\n  </div>\n</template>\n"},"f":{"id":"layout-form","text":"Layout","v":"dc3356051e0928cf"},"id":"1eeebe3f-56cb-4737-97e4-15adde3ab4f9","inheritedLocks":[null,null,null,null],"locks":[],"modified":{"at":"2025-12-15T15:42:09+00:00","backedBy":"","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","client":"server","from":"","impersonatedBy":""},"originalCloneOf":{"id":"2f55f820-a5fe-4b77-8808-5dcd57067416","text":"Tracked Time","v":"4f72e50990984339"},"p":"647b2571-aea1-4247-8adb-b43bb4c94afc","previous":{"v":"e836360e898355e1"},"stamps":[],"t":1765813329974,"v":"0d9bce8435024dda"},{"id":"5dd6b864-5a72-432e-abe4-4cb6f5d7f630","v":"initial","p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"x           Internal Model Application Dialog (for Company Users)","applies":"","packages":[],"template":"<ae-dialog ref=\"dialog\" :backdrop-close=\"false\">\n  <div slot=\"header\" class=\"_CSS-dialog__header\" slot-scope=\"scope\">\n    <div></div>\n    <ae-icon @click.native=\"scope.close()\" class=\"fa fa-window-close\"></ae-icon>\n  </div>\n  <ae-layout class=\"_CSS-dialog__body\"\n            slot=\"body\"\n            layout-id=\"2b26f9b3-b5be-41e0-86de-cc5d0ca28ab2\"\n            :param-page-document-id=\"params.pageDocumentId\"\n  ></ae-layout>\n</ae-dialog>\n","css":"._CSS-dialog__header {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  overflow: hidden;\n}\n\n\n._CSS-dialog__body {\n  flex: 1;\n}","controller":"class Controller {\n  init() {\n    $on('show', (event) => this.show(event))\n    $on('close', (event) => this.close(event))\n\n    this.show = (eventData) => {\n      $refs.dialog.show(eventData)\n    }\n    this.close = () => $refs.dialog.close()\n  }\n}"},"locks":[],"created":{"at":"2018-10-30T12:52:38+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2018-10-30T12:52:38+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1540903958778,"ct":1540903958778,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"b9a82d27-382e-4709-8a23-b1e2b67cd016","v":"2509fde3e1ca6f7e","p":"594e6b26-7310-4d00-aad9-2a577ccab542","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"xBizpin Root Layout: Fully Featured","applies":"","template":"<div v-if=\"locals.loading\" class=\"bg-slate-50\" style=\"height:100%; display:flex; justify-content:center; align-items:center;\">\n  <ae-icon class=\"fa fa-spinner-third fa-2x fa-spin text-theme-400\"></ae-icon>\n</div>\n\n\n<template v-else>\n\n<div   class=\"_CSS-root\"\n      tabindex=\"0\" \n      v-if=\"!controller.showPrintLayout\"\n      @drop.prevent\n      @dragover.prevent\n      @xae-drill-into.capture=\"controller.drillInto($event)\" \n      @xae-will-navigate.capture=\"controller.onAeWillNavigate($event)\"\n      :class=\"['ae-expand-region', 'ae-theme', locals.theme, { 'ae-phone': Aeppic.Device === 'Phone' }]\"\n    >\n  <ae-layout layout-id=\"b956d062-ba70-482d-b404-da5cec71afc6\"></ae-layout>\n  <ae-layout layout-id=\"8ad94a11-3afc-4eff-9d5c-99b7c69d4110\"></ae-layout>\n  <div ref=\"searchDialogAnchor\"></div>\n  \n  <!-- main page, no developer -->\n  <!-- <ae-layout\n    v-if=\"!locals.devMode\"\n    class=\"_CSS-app ae-dialog-region ae-stacking-context ae-app\"\n    :class=\"{ '_CSS-app--phone': Aeppic.Device === 'Phone' }\"\n    ref=\"app\"\n    tabindex=\"1\"\n    :layout-id=\"locals.layoutId\"\n    :param-page-document-id=\"params.pageDocumentId || Aeppic.HomePage.id\"\n    :param-query-params=\"params.queryParams\"\n    @toggle-developer=\"controller.toggleDeveloperMode($event)\"\n  ></ae-layout> -->\n \n<section class=\"_CSS-main\" v-if=\"Aeppic.Developer.remoteDeveloperMode !== 'Server'\">\n  <div class=\"_CSS-main  ae-dialog-region\"  v-if=\"locals.pageDocument\"\n    @xae-drill-into.capture=\"controller.drillInto($event)\" \n    @xae-will-navigate.capture=\"controller.onAeWillNavigate($event)\"\n    v-responsive=\"(className, size) => controller.onSizeChange(className, size)\"\n    v-on=\"locals.additionalLayoutListeners\"\n    xdrop.prevent=\"controller.drop($event)\"\n    xdragover.prevent=\"controller.dragover($event)\">\n\n    <ae-layout \n      class=\"_CSS-container bp-page ae-stacking-context _CSS-page-body\"\n      :layout-id=\"locals.layoutId\"\n      :param-page-document=\"locals.pageDocument\" \n        ref=\"body\"\n        :param-readonly=\"controller.isPageReadonly\"\n        :param-query-params=\"params.queryParams\"\n        :param-page-application-id=\"locals.pageApplicationId\"\n        @show-selection-handler=\"controller.showSelectionHandler()\"\n        @scroll.native=\"controller.onScroll($event)\"\n        :param-company-id=\"locals.companyIdOfAccount\"\n        @scroll-to=\"controller.scrollTo($event)\"\n        :param-document-changed-bus=\"locals.documentChangedBus\"\n    ></ae-layout>\n\n    <!-- <ae-design\n      v-if=\"!controller.showPrintLayout && Aeppic.Device !=='Phone' && Aeppic.Developer.remoteDeveloperMode !== 'Server'\"\n      class=\"_CSS-nav-panel bp-navigation-panel ae-light\"\n      :document-id=\"locals.companyIdOfAccount\"\n      name=\"navigation-vertical\"\n      :param-page-document=\"locals.pageDocument\" \n      ></ae-design> -->\n    <!-- <div v-show=\"!locals.drillActive\"  class=\"_CSS-container bp-page\" ref=\"container\">\n      <ae-layout\n        class=\"_CSS-header bp-page__header\"\n        :class=\"{ '_CSS-top-application-bar-overlay': locals.topbarAsOverlay }\"\n        layout-id=\"abaf389e-81ae-4a56-870c-f5c28fe7579f\"\n        @toggle-developer=\"$emit('toggle-developer', $event)\"\n        @show-sidebar=\"controller.showSidebar($event)\"\n        @hide-sidebar=\"controller.hideSidebar($event)\"\n        :param-navbar-open=\"locals.showNavbar\"\n        :param-page-document-id=\"locals.pageDocument.id\" \n        :param-show-print-layout=\"controller.showPrintLayout\"\n        :param-company-id=\"locals.companyIdOfAccount\"\n        :param-reload-notification-triggered=\"locals.reloadNoficationTriggered\"\n        :param-overlay=\"locals.topbarAsOverlay\"\n        ref=\"topApplicationBar\"\n        v-if=\"Aeppic.Developer.remoteDeveloperMode !== 'Server'\"\n      ></ae-layout>\n          <ae-design\n        v-if=\"!controller.showPrintLayout && !locals.hidePageToolbar && Aeppic.Developer.remoteDeveloperMode !== 'Server'\"\n        class=\"_CSS-page-toolbar bp-page__toolbar\"\n        :document=\"locals.pageDocument\"\n        name=\"page-toolbar\"\n        @toolbar=\"controller.dispatchEventChildren('body', 'toolbar', $event)\"\n        :param-page-application-id=\"locals.pageApplicationId\"\n        :param-document-changed-bus=\"locals.documentChangedBus\"\n        :param-readonly=\"controller.isPageReadonly\"\n        ></ae-design>\n\n        <div class=\"_CSS-page bp-page__body\" ref=\"mainPage\">\n          <div class=\"_CSS-loader\" :class=\"{ '_CSS-loader--hidden': !locals.spinner }\">\n            <div class=\"_CSS-loader__content\">\n            <ae-icon class=\"fa fa-spinner-third fa-5x fa-spin\"></ae-icon>\n            </div>\n\n          </div>\n\n          <ae-design  class=\"ae-stacking-context _CSS-page-body\"\n                      :document=\"locals.pageDocument\"\n                      name=\"page\"\n                      ref=\"body\"\n                      :param-readonly=\"controller.isPageReadonly\"\n                      :param-query-params=\"params.queryParams\"\n                      :param-page-application-id=\"locals.pageApplicationId\"\n                      @show-selection-handler=\"controller.showSelectionHandler()\"\n                      @scroll.native=\"controller.onScroll($event)\"\n                      :param-company-id=\"locals.companyIdOfAccount\"\n                      @scroll-to=\"controller.scrollTo($event)\"\n                      :param-document-changed-bus=\"locals.documentChangedBus\"\n          ></ae-design>\n        </div>\n      </div> -->\n\n          <!-- <ae-design\n      v-if=\"!controller.showPrintLayout\"\n      class=\"_CSS-sidebar\"\n      :document-id=\"locals.companyIdOfAccount\"\n      name=\"sidebar-vertical\"\n      :param-page-document=\"locals.pageDocument\"\n      :param-open=\"locals.showSidebar\"\n      :param-tab-id=\"locals.sidebarTabId\"\n      @hide-sidebar=\"controller.hideSidebar($event)\"\n      ></ae-design>\n    <ae-layout  v-if=\"locals.showNavbar\"  v-show=\"!locals.drillActive\" layout-id=\"4a2dc072-cd8a-43d6-8cce-d4b7b0992f80\" class=\"_CSS-navbar-panel\" :param-document-id=\"params.pageDocumentId\"></ae-layout> -->\n\n    </div>\n\n    <ae-layout  layout-id=\"564e7028-6b98-49b8-ac43-50f7873930a1\"\n              :class=\"{ '_CSS-drill-into-container': locals.showDialogActive }\"\n              @activate=\"locals.showDialogActive = true\"\n              @deactive=\"locals.showDialogActive = false\"\n              ref=\"showDocumentDialog\"\n              :param-document-changed-bus=\"locals.documentChangedBus\"\n    ></ae-layout>\n\n    <template v-if=\"locals.root && locals.root.data.globalLayouts\">\n    <ae-layout  v-for=\"(layout, index) of locals.root.data.globalLayouts\"\n                ref=\"globalLayouts\"\n                :layout-id=\"layout.id\"\n                :param-page-document-id=\"locals.pageDocument.id\"\n                :param-page-document=\"locals.pageDocument\"\n                :param-page-application-id=\"locals.pageApplicationId\"\n                @register-listener=\"controller.registerLayoutListener($event, index)\"\n    ></ae-layout>\n    </template>\n\n    <ae-layout  layout-id=\"e5accfd9-8d33-46e5-a4d7-69a91b5f8543\"\n              :param-document-changed-bus=\"locals.documentChangedBus\"\n    ></ae-layout>\n\n\n    \n  </section>\n\t<ae-splitter v-else class=\"_CSS-dev-mode\" :limit-expand=\"false\">\n    <!-- main page with developer -->\n    <ae-layout\n      slot=\"left-pane\"\n      tabindex=\"2\"\n      class=\"_CSS-app ae-dialog-region ae-stacking-context ae-app ae-expand-region\"\n      ref=\"app\"\n      :layout-id=\"locals.layoutId\"\n      :param-page-document-id=\"params.pageDocumentId || Aeppic.HomePage.id\"\n      :param-query-params=\"params.queryParams\"\n      @toggle-developer=\"controller.toggleDeveloperMode($event)\"\n    ></ae-layout>\n    <ae-design v-if=\"locals.newDeveloper\" slot=\"right-pane\" class=\"_CSS-dev-panel\" document-id=\"0b3240e3-b87f-4fe5-8851-6968ef35cf53\" name=\"page\" :watch-layout-revisions=\"false\" :param-info=\"locals.developerInfo\" @toggle-app-theme=\"controller.toggleTheme()\"></ae-design>\n\t\t<ae-layout v-else slot=\"right-pane\" class=\"_CSS-dev-panel\" layout-id=\"956d0d01-3f82-4f11-9569-3f292044da8e\" :watch-layout-revisions=\"false\"></ae-layout>\n\t</ae-splitter>\n</div>\n<div  class=\"ae-block-1-root\"\n      v-if=\"controller.showPrintLayout\"\n      :class=\"['ae-expand-region', 'ae-theme', locals.theme, { 'ae-phone': Aeppic.Device === 'Phone' }]\"\n      tabindex=\"0\">\n  <ae-layout  \n              :layout-id=\"controller.printLayoutId\"\n              :param-readonly=\"true\"\n              class=\"_CSS-app ae-dialog-region ae-stacking-context ae-app\"\n              :class=\"{ '_CSS-app--phone': Aeppic.Device === 'Phone' }\"\n              ref=\"app\"\n              tabindex=\"1\"\n              :param-page-document-id=\"params.pageDocumentId || Aeppic.HomePage.id\"\n              :param-query-params=\"params.queryParams\"\n  ></ae-layout>\n</div>\n\n<ae-popup ref=\"searchDialog\" popup-attachment=\"top center\" base-attachment=\"top center\" popup-class=\"_CSS-popup\">\n  <ae-layout\n    slot=\"popup\"\n    @keydown.esc.capture.native=\"$refs.searchDialog && $refs.searchDialog.close()\"\n    layout-id=\"9c604893-1a34-490a-b633-62b5064784cd\"\n    :params=\"{ positionSearchDialog: () => $refs.searchDialog.position() }\"\n    ></ae-layout>\n</ae-popup>\n\n</template>\n\n<ae-layout layout-id=\"de0e49dc-2e18-474a-b1cb-6aa548602d16\"></ae-layout>\n<ae-design name=\"title\" document-id=\"root\" style=\"display:none;\" ref=\"hiddenDomElement\"></ae-design>\n","css":"/* html {\n  font-size: 1.25rem;\n} */\n\npre {\n  white-space: pre-wrap;\n}\n\n/*\n@media all and (min-width: 50em) {\n  html {\n    font-size: 1rem;\n  }\n}*/\n\n._CSS {\n  width:100%;\n  height:100%;\n}\n\n._CSS-root {\n  background: var(--ae-background-100);\n  flex-direction:column;\n  width:100%;\n  height:100%;\n}\n \n._CSS-app {\n  width:100%;\n  height:100%;\n}\n\n\n._CSS-dev-mode {\n  width:100%;\n  height:100%;\n}\n\n._CSS-app-panel {\n  position:relative;\n}\n\n._CSS-dev-panel {\n  position:relative;\n  color:black;\n  background:white;\n  width:100%;\n  height:100%;\n  /*z-index:10001; */ /* just above the element-highlight */\n}\n\n\n\n/*\n* FROM BIZPIN APPLICATION LAYOUIT\n*/\n\n._CSS-main {\n  display: flex;\n  flex-direction: row;\n  position: relative;\n  flex:1;\n  align-items: stretch;\n  height:100%;\n  line-height: 1.4;\n  background: var(--ae-background-100);\n  color: var(--ae-background-900);\n}\n\n@media print {\n  ._CSS-main {\n    background: white !important;\n  }\n}\n \n._CSS-app-panel {\n  position:relative;\n}\n\n._CSS-container {\n  position: relative;\n  display: flex;\n  flex-direction:column;\n  width:100%;\n  height:100%;\n  flex:1;\n  overflow: hidden;\n}\n\n._CSS-page {\n  flex:1;\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: hidden;\n\n  display: flex;\n\n\n  /* display: grid; \n  grid-template-rows: min-content min-content 1fr;\n  grid-template-columns: auto 1fr;\n  grid-template-areas: \n    \"page-header page-header\"\n    \"toolbar toolbar\"\n    \"tree body\"; */\n}\n\n\n.ae-phone ._CSS-page {\n  grid-row: 2/3;\n}\n\n._CSS-navbar-panel {\n    grid-row: 1/3;\n}\n.ae-phone ._CSS-navbar-panel {\n  grid-row: 1/3;\n}\n\n._CSS-header {\n  height: 81px;\n}\n\n._CSS-page-toolbar {\n  xz-index: 1; // overlap page-body e.g. with menu popups\n  min-height: 0;\n  min-width: 0;\n}\n\n._CSS-page-body {\n  min-height: 0;\n  min-width: 0;\n\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n\n  /* display: flex; */\n  /* flex-flow: column;  */\n  height: 100%;\n  width: 100%;\n}\n\n._CSS-drill-into-container {\n  position: absolute;\n  width: 100%;\n  height:100%;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n\n  /* page-toolbar has z-index of 1 */\n  z-index: 1;\n\n  /* ae-dialog has z-index of 9998 */\n  /* z-index: 9999; */\n}\n\n._CSS-sidebar-panel {\n  max-width: 300px;\n}\n\n._CSS-top-application-bar-overlay {\n  position: absolute;\n  background: transparent !important;\n  left: 0;\n  right: 0;\n  z-index: 1;\n}\n\n._CSS-loader {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 10;\n\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  opacity: 1;\n\n  transition: opacity .2s 1s ease-in;\n}\n\n._CSS-loader:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: var(--ae-ui-background);\n\n  pointer-events: none;\n}\n\n\n._CSS-loader._CSS-loader--hidden {\n  opacity: 0;\n  pointer-events: none;\n}\n\n","controller":"class Controller {\n  async init() {\n    this.APPLICATION_LAYOUT_ID = '4a0f8d91-6a8c-44a3-9c95-26c45bb1d54a'\n    this.LOGIN_LAYOUT_ID = 'e4c9e20a-a42d-4951-9121-c9ee191f1882'\n    this.PASSWORD_RESET_ROOT_LAYOUT_ID = '242a2262-352e-4df1-a792-253ce8b11f22'\n    this.PASSWORD_RESET_LAYOUT_ID = '5cc2dfa4-9dbd-4b7a-a624-9b137eb22093'\n\n    locals.devMode = false\n    locals.newDeveloper = true\n    locals.sidebarOverride = false\n    locals.showSidebar = false\n    locals.theme = 'ae-light'\n    \n    locals.serviceWorker = true\n    locals.hideDevbar = await Aeppic.Preferences.getSetting('aeppic:developer:hideDevbarInPreview')\n\n\n    this.loadOrUnloadPrintStylesheet = () => {\n      if (locals.layoutId !== this.LOGIN_LAYOUT_ID && this.showPrintLayout) {\n        console.log('loading print stylesheet')\n        Aeppic.loadStylesheet('84f5c137-b17d-42ad-bb4f-2f4a8319ce80')\n      } else {\n        console.log('removing print stylesheet')\n        Aeppic.unloadStylesheet('84f5c137-b17d-42ad-bb4f-2f4a8319ce80')\n      }\n    }\n\n    this.refreshLogin = () => {\n      console.log('refreshing login')\n\n      if (params.layoutId === this.PASSWORD_RESET_ROOT_LAYOUT_ID) {\n        locals.layoutId = this.PASSWORD_RESET_LAYOUT_ID\n      } else if (Aeppic.Auth.loggedIn || Aeppic.Auth.groupAccountId) {\n        locals.layoutId =  params.layoutId || this.APPLICATION_LAYOUT_ID\n      } else {\n        locals.layoutId = this.LOGIN_LAYOUT_ID\n      }\n\n      this.loadOrUnloadPrintStylesheet()\n    }\n\n    this.refreshLogin()\n\n    Aeppic.on('login', this.refreshLogin)\n    Aeppic.on('logout', this.refreshLogin)\n\n    watchParam('params', () => this.loadOrUnloadPrintStylesheet(), { immediate: true })\n\n    this._setupKeydownListener()\n    if (this.tailwindSupported) {\n      this._configureTailwind()\n    }\n\n    // ==\n  \n    // NEW\n\n    this._setupNavigationListener()\n\n    locals.noNavigation = params.noNavigation ?? false\n    locals.loading = true\n\n    // ==\n\n    // FROM BIZPIN APPLICATION LAYOUT\n    this.FORMS_CACHE = new Map()\n\n    this._onScrollHandlerProcessing = false\n    this.animation = null\n    this.addToRecentsAction = null\n    this.listenersToLayoutRefs = {}\n\n    locals.root = null\n    locals.spinner = true\n    locals.additionalLayoutListeners = {}\n\n    locals.navbarOverride = false\n    locals.showNavbar = false\n    locals.showTitle = false\n    locals.drillActive = false\n    locals.reloadNoficationTriggered = false\n    locals.showDialogActive = false\n  \n    locals.pageDocumentForm = null\n    locals.topbarAsOverlay = false\n    locals.pageDocument = null\n    locals.canEditPageDocument = false\n    locals.pageDocumentIsPrototype = false\n\n    locals.documentChangedBus = new Vue({\n      data: function() {\n        return {\n          documentChanged: false,\n        }\n      },\n      methods: {\n        changed() {\n          console.debug('.changed')\n\n          if (this.documentChanged) {\n            console.debug('Already editing document')\n          }\n\n          this.documentChanged = true\n        },\n        reset() {\n          console.debug('.reset')\n          this.documentChanged = false\n\n          // this.$emit('reset')\n        }\n      }\n    })\n\n    locals.companyIdOfAccount = ''\n\n    watchParam('pageDocumentId', (docId) => this._announceNewPageDocumentId(docId))\n    // watchParam('queryParams', {\n    //   handler: () => this._announceNewPageDocumentId(params.pageDocumentId),\n    //   deep: true\n    // })\n\n\n    const COMPANY_FORM = 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df'\n    const homePage = await Aeppic.get(Aeppic.HomePage)\n\n    if (homePage) {\n      if (homePage.f.id === COMPANY_FORM) {\n        locals.companyIdOfAccount = homePage.id\n      } else {\n        if (homePage.a_forms !== null) {\n          const companyAncestorIndex = homePage.a_forms.findIndex(formId => formId === COMPANY_FORM)\n          locals.companyIdOfAccount = homePage.a[companyAncestorIndex]\n        }\n      }\n    } else if (Aeppic.Account && Aeppic.Account.data.isAdmin) {\n      const fallbackCompany = await Aeppic.findOne(`p:root f.id:${COMPANY_FORM}`)\n      locals.companyIdOfAccount = fallbackCompany && fallbackCompany.id\n    }\n \n    locals.root = await Aeppic.get('root')\n\n    await this.refreshPageFormInfo(params.pageDocumentId)\n    await this._announceNewPageDocumentId(params.pageDocumentId)\n\n    if (this.showPrintLayout) {\n      await Aeppic.nextRenderPass()\n      await Aeppic.nextRenderPass()\n\n      Aeppic.setTimeout(() => {\n        packages && packages.window && packages.window.print()\n      }, 5_000)\n    } \n\n    this._setupReloadNotification()\n\n    await this._initializeRecents()\n\n    locals.loading = false\n  }\n\n  get tailwindSupported() {\n    return (typeof tailwind !== 'unknown')\n  }\n\n  _configureTailwind() {\n    tailwind.config = {\n      darkMode: 'class',\n      theme: {\n        extend: {\n          colors: {\n            'action': '#929eb2',\n            'accent': '#63748e',\n            'theme': { /* copy of default slate */\n              50: '#f8fafc',\n              100: '#f1f5f9',\n              200: '#e2e8f0',\n              300: '#cbd5e1',\n              400: '#94a3b8',\n              500: '#64748b',\n              600: '#475569',\n              700: '#334155',\n              800: '#1e293b',\n              900: '#0f172a',\n            },\n            'error': '#f43f5e',\n            'success': '#4ade80',\n          },\n          textColor: {\n            'action': '#ffffff'\n          }\n        },\n      },\n    }\n  }\n\n  destroy() {\n    Aeppic.off('login', this.refreshLogin)\n    Aeppic.off('logout', this.refreshLogin)\n\n    this._teardownKeydownListener()\n    this._teardownNavigationListener()\n  }\n\n  _setupKeydownListener() {\n    if (packages.window) {\n      this._keydownHandler = (event) => {\n        if (event.ctrlKey && event.key) {\n          let handled = true\n \n          if (event.key === 'q') {\n            this.openSearch()\n          } else if (event.key === '2') {\n            this.toggleDeveloperMode()\n          } else if (event.key === '3') {\n            this.toggleDeveloperMode({oldMode:true})\n          } else if (event.key === '4') {\n            this.toggleDeveloperMode({client:true})\n          } else if (event.key === '5') {\n            this.toggleDeveloperMode({server:true})\n          } else if (event.key === 'p') {\n            this.openDeveloperSearch()\n          } else {\n            handled = false\n          }\n\n          if (handled) {\n            event.preventDefault()\n            event.stopPropagation()\n          }\n        }\n      }\n\n      packages.window.addEventListener('keydown', this._keydownHandler)\n    }\n  }\n\n  _setupNavigationListener() {\n    this.listenerAeWillNavigate = (...args) => this.onAeWillNavigate(...args)\n    this.listenerAeDrillInto = (...args) => this.drillInto(...args)\n\n    packages.window.addEventListener('ae-will-navigate', this.listenerAeWillNavigate)\n    packages.window.addEventListener('ae-drill-into', this.listenerAeDrillInto)\n  }\n\n  _teardownNavigationListener() {\n    packages.window.removeEventListener('ae-will-navigate', this.listenerAeWillNavigate)\n    packages.window.removeEventListener('ae-drill-into', this.listenerAeDrillInto)\n  }\n\n  _teardownKeydownListener() {\n    if (packages.window) {\n      packages.window.removeEventListener('keydown', this._keydownHandler)\n    } \n  }\n\n  toggleDeveloperMode(options) {\n    if (!Aeppic.Account || (!Aeppic.Account.data.allowDevMode && !Aeppic.Account.data.isAdmin)) {\n      return\n    }\n\n    if(options && options.client) {\n      if(Aeppic.Developer.remoteDeveloperMode === 'Client') {\n        this.endRemoteDeveloper()\n        return\n      }\n      console.log('starting remote developer client session...')\n      Aeppic.Developer.enableRemoteDeveloper(Aeppic.Account.id, 'Client')\n      locals.devMode = false\n    }\n    else if(options && options.server) {\n      if(Aeppic.Developer.remoteDeveloperMode === 'Server') {\n        this.endRemoteDeveloper()\n        Aeppic.navigateHome()\n        return\n      }\n      console.log('starting remote developer server session')\n      Aeppic.Developer.enableRemoteDeveloper(Aeppic.Account.id, 'Server')\n      locals.devMode = false\n      Aeppic.navigateTo('0b3240e3-b87f-4fe5-8851-6968ef35cf53')\n    }\n    else {\n    locals.devMode = !locals.devMode\n    locals.newDeveloper = !(options && options.oldMode)\n  }\n}\n\n  endRemoteDeveloper() {\n    Aeppic.Developer.disableRemoteDeveloper()\n  }\n\n  openDeveloperSearch() {\n    if (!$refs || !$refs.searchDialog || (!locals.devMode && Aeppic.Developer.remoteDeveloperMode === 'None')) {\n      return\n    }\n    $refs.searchDialog.show({ target: $refs.searchDialogAnchor })\n  }\n\n  closeDeveloperSearch() {\n    if (locals.devMode && $refs.searchDialog) {\n      $refs.searchDialog.close()\n    }\n  }\n\n  openSearch() {\n    if (!$refs.app) {\n      return\n    }\n\n    $refs.app.$emit('openSearch')\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) { \n    if (!$refs[refName] || !$refs[refName].$el) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n  onSizeChange() {\n    if ($refs.app) {\n      if ($refs.app.classList.contains('ae-large')) {\n        locals.showSidebar = true\n        locals.sidebarOverride = false\n      } else {\n        if (!locals.sidebarOverride) {\n          locals.showSidebar = false\n        }\n      }\n    }\n  }\n\n  get showPrintLayout() {\n    return params.queryParams && params.queryParams && 'print' in params.queryParams\n  }\n\n  get printLayoutId() {\n    if (params.queryParams && params.queryParams.printLayoutId) {\n      return params.queryParams.printLayoutId\n    }\n\n    return locals.layoutId\n  }\n\n  toggleTheme() {\n    locals.theme = (locals.theme === 'ae-light' ? 'ae-dark' : 'ae-light');\n  }\n\n  setupServiceWorker() {\n    locals.serviceWorker = true\n  }\n\n  navigateTo(event) {\n    console.log(packages.window.location)\n    console.log({event})\n  }\n\n\n\n  /**\n   * FROM BIZPIN APPLICATION LAYOUT\n   */\n\n\n\n   async _initializeRecents() {\n    const referenceDocument = (await Aeppic.get(Aeppic.HomePage)) || Aeppic.Account\n    this.addToRecentsAction = await Aeppic.Preferences.getSettingForDocument('bizpin:recently-visited:addDocumenTorRecentlyVisitied', referenceDocument)\n  }\n\n  get isPageReadonly() {\n    if (this.showPrintLayout) {\n      return true\n    }\n\n    return !locals.canEditPageDocument\n  }\n\n  async onScroll(event) {\n    if (this._onScrollHandlerProcessing) {\n      return\n    }\n\n    this._onScrollHandlerProcessing = true\n\n    await Aeppic.waitForNextAnimationFrame()\n\n    const y = event.target.scrollTop\n    const x = event.target.scrollLeft\n\n    this.persistScrollPosition(event)\n\n    this._onScrollHandlerProcessing = false\n  }\n\n async doubleRequestAnimationFrame() {\n    // Let browser re-render DOM by executing a doubleRequestAnimationFrame\n    // See: https://github.com/vuejs/vue/issues/9200\n    // See: https://bugs.chromium.org/p/chromium/issues/detail?id=675795\n\n    await Aeppic.waitForNextAnimationFrame()\n    await Aeppic.waitForNextAnimationFrame()\n  }\n\n  async _announceNewPageDocumentId(docId) {\n    console.log('_announceNewPageDocumentId')\n    await this.loadSpinner()\n\n    const targetDocument = this._getAllowedTargetDocument(await Aeppic.get(docId))\n\n    const [ canEditPageDocument, document ] = await Promise.all([\n      Aeppic.canEdit(targetDocument),\n      Aeppic.get(targetDocument)\n    ])\n\n    console.log('=> ',canEditPageDocument)\n\n    if (Aeppic.Account && Aeppic.Account.data.isGroupAccount === true) {\n      locals.canEditPageDocument = false\n    } else {\n      locals.canEditPageDocument = canEditPageDocument\n    }\n\n    if (!document) {\n      console.warn('404: could not get pageDocumentId to display. Redirecting to HomePage')\n      this._navigateTo(locals.companyIdOfAccount)\n      return\n    }\n\n    await this.refreshPageFormInfo(document)\n\n    locals.pageDocument = document\n    this._updateRecentDocuments(document) \n\n    if (locals.pageDocument && locals.pageDocument.data.name) {\n      $refs.hiddenDomElement.$el.ownerDocument.title = locals.pageDocument.data.name + ' | bizpin' || 'bizpin'\n    } else {\n      $refs.hiddenDomElement.$el.ownerDocument.title = 'bizpin'\n    }\n\n    this.unloadSpinner()\n    await this.restoreScrollposition(document)\n  }\n  \n  async loadSpinner(event) {\n    locals.spinner = true\n  }\n\n  async unloadSpinner() {\n    console.log('and off: starting')\n\n    await Aeppic.nextRenderPass()\n\n    locals.spinner = false\n  }\n\n  startAnimation() {\n    console.log(this.animation)\n    this.animation.play()\n  }\n\n  stopAnimation() {\n    this.animation.pause()\n  }\n \n  async setupAnimation() {\n    await Aeppic.nextRenderPass()\n\n    this.animation = Aeppic.Anime({\n      targets: [$refs.bizpinSignet],\n      opacity: [1, 0, 1],\n      duration: 1000,\n      easing: 'easeInSine',\n      loop: true,\n      autoplay: false,\n    })\n  }\n\n  _setupReloadNotification() {\n      Aeppic.on('server:changed', () => {\n        console.log('changes:server-changed')\n        this._showReloadNotification()\n      })\n\n      this.missedChangesTimeoutId = null\n\n      Aeppic.on('changes:missed', () => {\n        console.log('changes:missed')\n        if (this.missedChangesTimeoutId) {\n          clearTimeout(this.missedChangesTimeoutId)\n        }\n\n        this.missedChangesTimeoutId = setTimeout(() => {\n          this._showReloadNotification()\n        }, 5000)\n      })\n\n      Aeppic.on('changes:missed-found', () => {\n        console.log('changes:missed-found')\n        if (this.missedChangesTimeoutId) {\n          clearTimeout(this.missedChangesTimeoutId)\n        }\n      })\n  }\n\n  _showReloadNotification() {\n    console.log('showReloadNotifation')\n      locals.reloadNoficationTriggered = true\n  }\n\n  get showPrintLayout() {\n    return params.queryParams && params.queryParams && 'print' in params.queryParams\n  }\n\n  async dragover(event) {\n    event.dataTransfer.dropEffect = \"none\"\n  }\n\n  async drop(event) {\n  }\n\n   async refreshPageFormInfo(document) {\n    const pageDoc = (document && typeof document === 'string') ? await Aeppic.get(params.pageDocumentId) : document\n\n    if (pageDoc) {\n      const formId = pageDoc.f.id\n      if (this.FORMS_CACHE.has(formId)) {\n        locals.pageDocumentForm = this.FORMS_CACHE.get(formId)\n      } else {\n        const form = await Aeppic.getFormForDocument(pageDoc)\n        this.FORMS_CACHE.set(formId, form)\n        locals.pageDocumentForm = form\n      }\n      locals.pageApplicationId = this._getCurrentApplicationId(locals.pageDocumentForm)\n\n      if (Aeppic.Device === 'Desktop' && locals.pageDocumentForm.data.tags) {\n        locals.topbarAsOverlay = locals.pageDocumentForm.data.tags.includes('full-page')\n      } else {\n        locals.topbarAsOverlay = false\n      }\n\n      locals.pageDocumentIsPrototype = locals.pageDocumentForm.data.tags && locals.pageDocumentForm.data.tags.includes('prototype')\n    } else {\n      locals.pageApplicationId = null\n      locals.pageDocumentForm = null\n      locals.topbarAsOverlay = false\n      locals.pageDocumentIsPrototype = false\n    }\n  }\n  \n  async _getCurrentApplicationId(formDocument) {\n    if (!formDocument || !formDocument.document) {\n      return null\n    }\n\n    const appIndex = formDocument.document.a_forms.findIndex(a_form => a_form === 'application-form')\n    return formDocument.document.a[appIndex]\n  }\n\n  async drillInto(event) {\n    event.stopPropagation && event.stopPropagation()\n    event.preventDefault && event.preventDefault()\n\n    const document = await Aeppic.get(event.detail.targetDocument)\n\n    const isStructuralDocument = document.a_depth <= 1 || document.f.id === 'repository-folder-form' || document.f.id === 'folder'\n    const preferDialog = event.detail.mode === 'dialog'\n\n    if (!preferDialog && isStructuralDocument) {\n      this._navigateTo(document)\n      return\n    }\n\n    const formDocument = await Aeppic.get(document.f.id)\n    const applicationFormIndex = formDocument.a_forms.findIndex(a_form => a_form === 'application-form')\n    const application = await Aeppic.get(formDocument.a[applicationFormIndex])\n\n    let showInDialog = preferDialog\n\n    if (!showInDialog && application && application.f.id === 'application-form' && 'dialogForms' in application.data) {\n      showInDialog = !!application.data.dialogForms.find(ref => ref.id === formDocument.id)\n    }\n\n    if (showInDialog) {\n      const drillEventWithActualDocument = { ...event.detail, ... { targetDocument: document } }\n\n      $refs.showDocumentDialog.$emit('show', drillEventWithActualDocument)\n      return\n    }\n\n    this._navigateTo(document)\n  }\n\n  _getAllowedTargetDocument(targetDocument) {\n    const targetIsComment = targetDocument?.f.id === 'cf155969-ede1-43a4-9b10-3a697b19db91'\n\n    if (targetIsComment && !(Aeppic.Account?.id === targetDocument.created.by)) {\n      return targetDocument.p\n    }\n\n    return targetDocument\n  }\n\n  onAeWillNavigate(event) {\n    if (locals.noNavigation) {\n      event.stopPropagation && event.stopPropagation()\n      event.preventDefault && event.preventDefault()\n\n      this._navigateTo(event.detail.documentId)\n    }\n  }\n\n  _navigateTo(documentOrDocumentId) {\n    if (locals.noNavigation) {\n      this._announceNewPageDocumentId(documentOrDocumentId)\n    } else {\n      Aeppic.navigateTo(documentOrDocumentId)\n    }\n  }\n    \n\n  checkDrillIntoFirst(event) {\n    if (!Aeppic.Account || (Aeppic.Account && Aeppic.Account.id !== '870fac1f-b0d7-4925-b191-a43166960419')) {\n      return\n    }\n\n    event.stopPropagation && event.stopPropagation()\n    event.preventDefault && event.preventDefault()\n\n    $refs.drillIntoManager.$emit('will-navigate', event)\n  }\n\n\n  openSearchDialog() {\n    if (!$refs || !$refs.searchDialog) {\n      return\n    }\n    $refs.searchDialog.open({ target: 'body' })\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) { \n    if (!$refs[refName] || !$refs[refName].$el || !$refs[refName].$el.children) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n  onSizeChange(className, size) {\n    /* if (className === 'ae-large') {\n      locals.showNavbar = true\n      locals.navbarOverride = false\n    } else if (!locals.navbarOverride) {\n      locals.showNavbar = false\n    }*/\n    if (!locals.navbarOverride) {\n      locals.showNavbar = false\n    } else {\n      locals.showNavbar = true\n    }\n  }\n\n  toggleNavbar() {\n    if (!$refs.container.classList.contains('ae-large')) {    \n      locals.navbarOverride = true\n      locals.showNavbar = !locals.showNavbar\n    }\n  }\n\n  showSelectionHandler() {\n    if (!Aeppic.Account || Aeppic.Account.data.isGroupAccount) {\n      return\n    }\n\n    $refs.selectionHandler.$emit('show')\n  }\n\n  async _updateRecentDocuments(document) {\n    if (!this.addToRecentsAction) {\n      return\n    }\n\n    try {\n      const addToRecents = (await Aeppic.Actions.run([this.addToRecentsAction], { document }))[0].value\n      console.log('!!!', addToRecents)\n      if (!addToRecents) {\n        return\n      }\n\n      const LsKey = 'bizpin:recently-visited'\n      \n      let recents = JSON.parse(Aeppic.LocalStorage.getItem(LsKey)) || []\n      const existingIndex = recents.findIndex(doc => doc.id === document.id)\n      if (existingIndex !== -1) {\n        recents.splice(existingIndex, 1)\n      }\n      recents.push({ id: document.id, v: document.v, text: document.data.name })\n      if (recents.length > 9) {\n        recents = recents.slice(-10)\n      }\n      Aeppic.LocalStorage.setItem(LsKey, JSON.stringify(recents))\n\n      // Because LocalStorage cannot be watched, emit an event instead\n      $refs.hiddenDomElement.$root.$el.dispatchEvent(new CustomEvent(`local-storage:${LsKey}`))\n    } catch (e) {\n      console.error('Could not add to recently-visited', e)\n    }  \n  }\n\n  persistScrollPosition(event) {\n    if (!event || !event.target || !locals.pageDocument) {\n      return\n    }\n\n    const y = event.target.scrollTop\n    const x = event.target.scrollLeft\n\n    Aeppic.SessionStorage.setValue(this._generateScrollpositionStoragePrefix(locals.pageDocument), { x, y })\n  }\n\n  async restoreScrollposition(document) {\n    const isHistoricNavigation = Aeppic.Root.params && Aeppic.Root.params.history && Aeppic.Root.params.history.historic\n\n    if (!isHistoricNavigation) {\n      return\n    }\n\n    const oldScrollPosition = Aeppic.SessionStorage.getValue(this._generateScrollpositionStoragePrefix(document))\n\n    if (!oldScrollPosition) {\n      return\n    }\n\n    // FIXME: this will break once some designs take longer to render\n    // render fields with additional designs\n    for (let i = 0; i < 25; i += 1) {\n      await Aeppic.nextRenderPass() \n    }\n\n    if (!$refs.body || !$refs.body.$el) {\n      return\n    }\n\n    const { x, y } = oldScrollPosition\n\n\n    if (typeof $refs.body.$el.scrollTo !== 'function') {\n      return\n    }\n\n    // FIXME: don't do this! \n    $refs.body.$el.scrollTo(x, y)\n  }\n\n  scrollTo(scrollToOptions) {\n    if (!scrollToOptions) {\n      return\n    }\n\n    if (typeof $refs.body.$el.scrollTo !== 'function') {\n      return\n    }\n\n    // FIXME: don't do this! \n    $refs.body.$el.scrollTo(scrollToOptions)\n  }\n\n  _generateScrollpositionStoragePrefix(document) {\n    const timestamp = Aeppic.Root.params.history.timestamp\n\n    return `bp-pref__scrollPosition@document=${document.id}@form=${document.f.id}@time=${timestamp}`\n  }\n\n  registerLayoutListener(eventName, refIndex) {\n    if (!this.listenersToLayoutRefs[eventName]) {\n      this.listenersToLayoutRefs[eventName] = []\n    }\n\n    if (!this.listenersToLayoutRefs[eventName].find(existingIndex => existingIndex === refIndex)) {\n      this.listenersToLayoutRefs[eventName].push(refIndex)\n    }\n\n    if (!locals.additionalLayoutListeners[eventName]) {\n      locals.additionalLayoutListeners[eventName] = (event) => this.notifyLayoutListeners(eventName, event)\n    }\n  }\n\n  notifyLayoutListeners(eventName, nativeCustomEvent) {\n    for(const refIndex of this.listenersToLayoutRefs[eventName]) {\n      $refs.globalLayouts && $refs.globalLayouts[refIndex] && $refs.globalLayouts[refIndex].$emit(eventName, nativeCustomEvent.detail)\n    }\n  }\n\n  showSidebar(tabId) {\n    if ($refs.container.classList.contains('ae-large')) {    \n      return\n    }\n\n    locals.sidebarTabId = tabId\n    locals.showSidebar = true\n  }\n\n  hideSidebar(tabId) {\n      locals.showSidebar = false\n      locals.sidebarTabId = ''\n  }\n}\n ","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"d4ce6dec568c3dc1","text":"Window"}]},"locks":[],"created":{"at":"2025-08-06T15:38:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2025-08-06T15:38:21+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1754494711131,"ct":1754494711131,"a_depth":3,"a":["apps","af6c380d-2ab5-409a-802f-46dba2b426e3","594e6b26-7310-4d00-aad9-2a577ccab542"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[],"previous":{"v":"initial","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"}},"meta":{"modified":{"at":"2025-08-06T15:38:31+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"id":"bc1fe187-57f5-457d-9a7c-6f4b6b0d2ad5","v":"7474763a4853ff2a","previous":{"v":"c4ed8a806754d506"},"p":"5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5","f":{"id":"layout-form","v":"0996ce30f860e850","text":"Layout"},"data":{"name":"xBizpin Root Layout: Fully Featured","applies":"","packages":[{"id":"10843fbf-4f0c-416b-be7d-42d6bbd0ae68","v":"d4ce6dec568c3dc1","text":"Window"}],"template":"<div v-if=\"locals.loading\" class=\"bg-slate-50\" style=\"height:100%; display:flex; justify-content:center; align-items:center;\">\n  <ae-icon class=\"fa fa-spinner-third fa-2x fa-spin text-theme-400\"></ae-icon>\n</div>\n\n\n<template v-else>\n\n<div   class=\"_CSS-root\"\n      tabindex=\"0\" \n      v-if=\"!controller.showPrintLayout\"\n      @drop.prevent\n      @dragover.prevent\n      @xae-drill-into.capture=\"controller.drillInto($event)\" \n      @xae-will-navigate.capture=\"controller.onAeWillNavigate($event)\"\n      :class=\"['ae-expand-region', 'ae-theme', locals.theme, { 'ae-phone': Aeppic.Device === 'Phone' }]\"\n    >\n  <ae-layout layout-id=\"b956d062-ba70-482d-b404-da5cec71afc6\"></ae-layout>\n  <ae-layout layout-id=\"8ad94a11-3afc-4eff-9d5c-99b7c69d4110\"></ae-layout>\n  <div ref=\"searchDialogAnchor\"></div>\n  \n  <!-- main page, no developer -->\n  <!-- <ae-layout\n    v-if=\"!locals.devMode\"\n    class=\"_CSS-app ae-dialog-region ae-stacking-context ae-app\"\n    :class=\"{ '_CSS-app--phone': Aeppic.Device === 'Phone' }\"\n    ref=\"app\"\n    tabindex=\"1\"\n    :layout-id=\"locals.layoutId\"\n    :param-page-document-id=\"params.pageDocumentId || Aeppic.HomePage.id\"\n    :param-query-params=\"params.queryParams\"\n    @toggle-developer=\"controller.toggleDeveloperMode($event)\"\n  ></ae-layout> -->\n \n<section class=\"_CSS-main\" v-if=\"Aeppic.Developer.remoteDeveloperMode !== 'Server'\">\n  <div class=\"_CSS-main  ae-dialog-region\"  v-if=\"locals.pageDocument\"\n    @xae-drill-into.capture=\"controller.drillInto($event)\" \n    @xae-will-navigate.capture=\"controller.onAeWillNavigate($event)\"\n    v-responsive=\"(className, size) => controller.onSizeChange(className, size)\"\n    v-on=\"locals.additionalLayoutListeners\"\n    xdrop.prevent=\"controller.drop($event)\"\n    xdragover.prevent=\"controller.dragover($event)\">\n\n    <ae-layout \n      class=\"_CSS-container bp-page ae-stacking-context _CSS-page-body\"\n      :layout-id=\"locals.layoutId\"\n      :param-page-document=\"locals.pageDocument\" \n        ref=\"body\"\n        :param-readonly=\"controller.isPageReadonly\"\n        :param-query-params=\"params.queryParams\"\n        :param-page-application-id=\"locals.pageApplicationId\"\n        @show-selection-handler=\"controller.showSelectionHandler()\"\n        @scroll.native=\"controller.onScroll($event)\"\n        :param-company-id=\"locals.companyIdOfAccount\"\n        @scroll-to=\"controller.scrollTo($event)\"\n        :param-document-changed-bus=\"locals.documentChangedBus\"\n    ></ae-layout>\n\n    <!-- <ae-design\n      v-if=\"!controller.showPrintLayout && Aeppic.Device !=='Phone' && Aeppic.Developer.remoteDeveloperMode !== 'Server'\"\n      class=\"_CSS-nav-panel bp-navigation-panel ae-light\"\n      :document-id=\"locals.companyIdOfAccount\"\n      name=\"navigation-vertical\"\n      :param-page-document=\"locals.pageDocument\" \n      ></ae-design> -->\n    <!-- <div v-show=\"!locals.drillActive\"  class=\"_CSS-container bp-page\" ref=\"container\">\n      <ae-layout\n        class=\"_CSS-header bp-page__header\"\n        :class=\"{ '_CSS-top-application-bar-overlay': locals.topbarAsOverlay }\"\n        layout-id=\"abaf389e-81ae-4a56-870c-f5c28fe7579f\"\n        @toggle-developer=\"$emit('toggle-developer', $event)\"\n        @show-sidebar=\"controller.showSidebar($event)\"\n        @hide-sidebar=\"controller.hideSidebar($event)\"\n        :param-navbar-open=\"locals.showNavbar\"\n        :param-page-document-id=\"locals.pageDocument.id\" \n        :param-show-print-layout=\"controller.showPrintLayout\"\n        :param-company-id=\"locals.companyIdOfAccount\"\n        :param-reload-notification-triggered=\"locals.reloadNoficationTriggered\"\n        :param-overlay=\"locals.topbarAsOverlay\"\n        ref=\"topApplicationBar\"\n        v-if=\"Aeppic.Developer.remoteDeveloperMode !== 'Server'\"\n      ></ae-layout>\n          <ae-design\n        v-if=\"!controller.showPrintLayout && !locals.hidePageToolbar && Aeppic.Developer.remoteDeveloperMode !== 'Server'\"\n        class=\"_CSS-page-toolbar bp-page__toolbar\"\n        :document=\"locals.pageDocument\"\n        name=\"page-toolbar\"\n        @toolbar=\"controller.dispatchEventChildren('body', 'toolbar', $event)\"\n        :param-page-application-id=\"locals.pageApplicationId\"\n        :param-document-changed-bus=\"locals.documentChangedBus\"\n        :param-readonly=\"controller.isPageReadonly\"\n        ></ae-design>\n\n        <div class=\"_CSS-page bp-page__body\" ref=\"mainPage\">\n          <div class=\"_CSS-loader\" :class=\"{ '_CSS-loader--hidden': !locals.spinner }\">\n            <div class=\"_CSS-loader__content\">\n            <ae-icon class=\"fa fa-spinner-third fa-5x fa-spin\"></ae-icon>\n            </div>\n\n          </div>\n\n          <ae-design  class=\"ae-stacking-context _CSS-page-body\"\n                      :document=\"locals.pageDocument\"\n                      name=\"page\"\n                      ref=\"body\"\n                      :param-readonly=\"controller.isPageReadonly\"\n                      :param-query-params=\"params.queryParams\"\n                      :param-page-application-id=\"locals.pageApplicationId\"\n                      @show-selection-handler=\"controller.showSelectionHandler()\"\n                      @scroll.native=\"controller.onScroll($event)\"\n                      :param-company-id=\"locals.companyIdOfAccount\"\n                      @scroll-to=\"controller.scrollTo($event)\"\n                      :param-document-changed-bus=\"locals.documentChangedBus\"\n          ></ae-design>\n        </div>\n      </div> -->\n\n          <!-- <ae-design\n      v-if=\"!controller.showPrintLayout\"\n      class=\"_CSS-sidebar\"\n      :document-id=\"locals.companyIdOfAccount\"\n      name=\"sidebar-vertical\"\n      :param-page-document=\"locals.pageDocument\"\n      :param-open=\"locals.showSidebar\"\n      :param-tab-id=\"locals.sidebarTabId\"\n      @hide-sidebar=\"controller.hideSidebar($event)\"\n      ></ae-design>\n    <ae-layout  v-if=\"locals.showNavbar\"  v-show=\"!locals.drillActive\" layout-id=\"4a2dc072-cd8a-43d6-8cce-d4b7b0992f80\" class=\"_CSS-navbar-panel\" :param-document-id=\"params.pageDocumentId\"></ae-layout> -->\n\n    </div>\n\n    <ae-layout  layout-id=\"564e7028-6b98-49b8-ac43-50f7873930a1\"\n              :class=\"{ '_CSS-drill-into-container': locals.showDialogActive }\"\n              @activate=\"locals.showDialogActive = true\"\n              @deactive=\"locals.showDialogActive = false\"\n              ref=\"showDocumentDialog\"\n              :param-document-changed-bus=\"locals.documentChangedBus\"\n    ></ae-layout>\n\n    <template v-if=\"locals.root && locals.root.data.globalLayouts\">\n    <ae-layout  v-for=\"(layout, index) of locals.root.data.globalLayouts\"\n                ref=\"globalLayouts\"\n                :layout-id=\"layout.id\"\n                :param-page-document-id=\"locals.pageDocument.id\"\n                :param-page-document=\"locals.pageDocument\"\n                :param-page-application-id=\"locals.pageApplicationId\"\n                @register-listener=\"controller.registerLayoutListener($event, index)\"\n    ></ae-layout>\n    </template>\n\n    <ae-layout  layout-id=\"e5accfd9-8d33-46e5-a4d7-69a91b5f8543\"\n              :param-document-changed-bus=\"locals.documentChangedBus\"\n    ></ae-layout>\n\n\n    \n  </section>\n\t<ae-splitter v-else class=\"_CSS-dev-mode\" :limit-expand=\"false\">\n    <!-- main page with developer -->\n    <ae-layout\n      slot=\"left-pane\"\n      tabindex=\"2\"\n      class=\"_CSS-app ae-dialog-region ae-stacking-context ae-app ae-expand-region\"\n      ref=\"app\"\n      :layout-id=\"locals.layoutId\"\n      :param-page-document-id=\"params.pageDocumentId || Aeppic.HomePage.id\"\n      :param-query-params=\"params.queryParams\"\n      @toggle-developer=\"controller.toggleDeveloperMode($event)\"\n    ></ae-layout>\n    <ae-design v-if=\"locals.newDeveloper\" slot=\"right-pane\" class=\"_CSS-dev-panel\" document-id=\"0b3240e3-b87f-4fe5-8851-6968ef35cf53\" name=\"page\" :watch-layout-revisions=\"false\" :param-info=\"locals.developerInfo\" @toggle-app-theme=\"controller.toggleTheme()\"></ae-design>\n\t\t<ae-layout v-else slot=\"right-pane\" class=\"_CSS-dev-panel\" layout-id=\"956d0d01-3f82-4f11-9569-3f292044da8e\" :watch-layout-revisions=\"false\"></ae-layout>\n\t</ae-splitter>\n</div>\n<div  class=\"ae-block-1-root\"\n      v-if=\"controller.showPrintLayout\"\n      :class=\"['ae-expand-region', 'ae-theme', locals.theme, { 'ae-phone': Aeppic.Device === 'Phone' }]\"\n      tabindex=\"0\">\n  <ae-layout  \n              :layout-id=\"controller.printLayoutId\"\n              :param-readonly=\"true\"\n              class=\"_CSS-app ae-dialog-region ae-stacking-context ae-app\"\n              :class=\"{ '_CSS-app--phone': Aeppic.Device === 'Phone' }\"\n              ref=\"app\"\n              tabindex=\"1\"\n              :param-page-document-id=\"params.pageDocumentId || Aeppic.HomePage.id\"\n              :param-query-params=\"params.queryParams\"\n  ></ae-layout>\n</div>\n\n<ae-popup ref=\"searchDialog\" popup-attachment=\"top center\" base-attachment=\"top center\" popup-class=\"_CSS-popup\">\n  <ae-layout\n    slot=\"popup\"\n    @keydown.esc.capture.native=\"$refs.searchDialog && $refs.searchDialog.close()\"\n    layout-id=\"9c604893-1a34-490a-b633-62b5064784cd\"\n    :params=\"{ positionSearchDialog: () => $refs.searchDialog.position() }\"\n    ></ae-layout>\n</ae-popup>\n\n</template>\n\n<ae-layout layout-id=\"de0e49dc-2e18-474a-b1cb-6aa548602d16\"></ae-layout>\n<ae-design name=\"title\" document-id=\"root\" style=\"display:none;\" ref=\"hiddenDomElement\"></ae-design>\n","css":"/* html {\n  font-size: 1.25rem;\n} */\n\npre {\n  white-space: pre-wrap;\n}\n\n/*\n@media all and (min-width: 50em) {\n  html {\n    font-size: 1rem;\n  }\n}*/\n\n._CSS {\n  width:100%;\n  height:100%;\n}\n\n._CSS-root {\n  background: var(--ae-background-100);\n  flex-direction:column;\n  width:100%;\n  height:100%;\n}\n \n._CSS-app {\n  width:100%;\n  height:100%;\n}\n\n\n._CSS-dev-mode {\n  width:100%;\n  height:100%;\n}\n\n._CSS-app-panel {\n  position:relative;\n}\n\n._CSS-dev-panel {\n  position:relative;\n  color:black;\n  background:white;\n  width:100%;\n  height:100%;\n  /*z-index:10001; */ /* just above the element-highlight */\n}\n\n\n\n/*\n* FROM BIZPIN APPLICATION LAYOUIT\n*/\n\n._CSS-main {\n  display: flex;\n  flex-direction: row;\n  position: relative;\n  flex:1;\n  align-items: stretch;\n  height:100%;\n  line-height: 1.4;\n  background: var(--ae-background-100);\n  color: var(--ae-background-900);\n}\n\n@media print {\n  ._CSS-main {\n    background: white !important;\n  }\n}\n \n._CSS-app-panel {\n  position:relative;\n}\n\n._CSS-container {\n  position: relative;\n  display: flex;\n  flex-direction:column;\n  width:100%;\n  height:100%;\n  flex:1;\n  overflow: hidden;\n}\n\n._CSS-page {\n  flex:1;\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: hidden;\n\n  display: flex;\n\n\n  /* display: grid; \n  grid-template-rows: min-content min-content 1fr;\n  grid-template-columns: auto 1fr;\n  grid-template-areas: \n    \"page-header page-header\"\n    \"toolbar toolbar\"\n    \"tree body\"; */\n}\n\n\n.ae-phone ._CSS-page {\n  grid-row: 2/3;\n}\n\n._CSS-navbar-panel {\n    grid-row: 1/3;\n}\n.ae-phone ._CSS-navbar-panel {\n  grid-row: 1/3;\n}\n\n._CSS-header {\n  height: 81px;\n}\n\n._CSS-page-toolbar {\n  xz-index: 1; // overlap page-body e.g. with menu popups\n  min-height: 0;\n  min-width: 0;\n}\n\n._CSS-page-body {\n  min-height: 0;\n  min-width: 0;\n\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n\n  /* display: flex; */\n  /* flex-flow: column;  */\n  height: 100%;\n  width: 100%;\n}\n\n._CSS-drill-into-container {\n  position: absolute;\n  width: 100%;\n  height:100%;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n\n  /* page-toolbar has z-index of 1 */\n  z-index: 1;\n\n  /* ae-dialog has z-index of 9998 */\n  /* z-index: 9999; */\n}\n\n._CSS-sidebar-panel {\n  max-width: 300px;\n}\n\n._CSS-top-application-bar-overlay {\n  position: absolute;\n  background: transparent !important;\n  left: 0;\n  right: 0;\n  z-index: 1;\n}\n\n._CSS-loader {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 10;\n\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  opacity: 1;\n\n  transition: opacity .2s 1s ease-in;\n}\n\n._CSS-loader:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  background: var(--ae-ui-background);\n\n  pointer-events: none;\n}\n\n\n._CSS-loader._CSS-loader--hidden {\n  opacity: 0;\n  pointer-events: none;\n}\n\n","controller":"class Controller {\n  async init() {\n    this.APPLICATION_LAYOUT_ID = '4a0f8d91-6a8c-44a3-9c95-26c45bb1d54a'\n    this.LOGIN_LAYOUT_ID = 'e4c9e20a-a42d-4951-9121-c9ee191f1882'\n    this.PASSWORD_RESET_ROOT_LAYOUT_ID = '242a2262-352e-4df1-a792-253ce8b11f22'\n    this.PASSWORD_RESET_LAYOUT_ID = '5cc2dfa4-9dbd-4b7a-a624-9b137eb22093'\n\n    locals.devMode = false\n    locals.newDeveloper = true\n    locals.sidebarOverride = false\n    locals.showSidebar = false\n    locals.theme = 'ae-light'\n    \n    locals.serviceWorker = true\n    locals.hideDevbar = await Aeppic.Preferences.getSetting('aeppic:developer:hideDevbarInPreview')\n\n\n    this.loadOrUnloadPrintStylesheet = () => {\n      if (locals.layoutId !== this.LOGIN_LAYOUT_ID && this.showPrintLayout) {\n        console.log('loading print stylesheet')\n        Aeppic.loadStylesheet('84f5c137-b17d-42ad-bb4f-2f4a8319ce80')\n      } else {\n        console.log('removing print stylesheet')\n        Aeppic.unloadStylesheet('84f5c137-b17d-42ad-bb4f-2f4a8319ce80')\n      }\n    }\n\n    this.refreshLogin = () => {\n      console.log('refreshing login')\n\n      if (params.layoutId === this.PASSWORD_RESET_ROOT_LAYOUT_ID) {\n        locals.layoutId = this.PASSWORD_RESET_LAYOUT_ID\n      } else if (Aeppic.Auth.loggedIn || Aeppic.Auth.groupAccountId) {\n        locals.layoutId =  params.layoutId || this.APPLICATION_LAYOUT_ID\n      } else {\n        locals.layoutId = this.LOGIN_LAYOUT_ID\n      }\n\n      this.loadOrUnloadPrintStylesheet()\n    }\n\n    this.refreshLogin()\n\n    Aeppic.on('login', this.refreshLogin)\n    Aeppic.on('logout', this.refreshLogin)\n\n    watchParam('params', () => this.loadOrUnloadPrintStylesheet(), { immediate: true })\n\n    this._setupKeydownListener()\n    if (this.tailwindSupported) {\n      this._configureTailwind()\n    }\n\n    // ==\n  \n    // NEW\n\n    this._setupNavigationListener()\n\n    locals.noNavigation = params.noNavigation ?? false\n    locals.loading = true\n\n    // ==\n\n    // FROM BIZPIN APPLICATION LAYOUT\n    this.FORMS_CACHE = new Map()\n\n    this._onScrollHandlerProcessing = false\n    this.animation = null\n    this.addToRecentsAction = null\n    this.listenersToLayoutRefs = {}\n\n    locals.root = null\n    locals.spinner = true\n    locals.additionalLayoutListeners = {}\n\n    locals.navbarOverride = false\n    locals.showNavbar = false\n    locals.showTitle = false\n    locals.drillActive = false\n    locals.reloadNoficationTriggered = false\n    locals.showDialogActive = false\n  \n    locals.pageDocumentForm = null\n    locals.topbarAsOverlay = false\n    locals.pageDocument = null\n    locals.canEditPageDocument = false\n    locals.pageDocumentIsPrototype = false\n\n    locals.documentChangedBus = new Vue({\n      data: function() {\n        return {\n          documentChanged: false,\n        }\n      },\n      methods: {\n        changed() {\n          console.debug('.changed')\n\n          if (this.documentChanged) {\n            console.debug('Already editing document')\n          }\n\n          this.documentChanged = true\n        },\n        reset() {\n          console.debug('.reset')\n          this.documentChanged = false\n\n          // this.$emit('reset')\n        }\n      }\n    })\n\n    locals.companyIdOfAccount = ''\n\n    watchParam('pageDocumentId', (docId) => this._announceNewPageDocumentId(docId))\n    // watchParam('queryParams', {\n    //   handler: () => this._announceNewPageDocumentId(params.pageDocumentId),\n    //   deep: true\n    // })\n\n\n    const COMPANY_FORM = 'c69a0c1c-6c53-40c2-87e8-5ace866bf1df'\n    const homePage = await Aeppic.get(Aeppic.HomePage)\n\n    if (homePage) {\n      if (homePage.f.id === COMPANY_FORM) {\n        locals.companyIdOfAccount = homePage.id\n      } else {\n        if (homePage.a_forms !== null) {\n          const companyAncestorIndex = homePage.a_forms.findIndex(formId => formId === COMPANY_FORM)\n          locals.companyIdOfAccount = homePage.a[companyAncestorIndex]\n        }\n      }\n    } else if (Aeppic.Account && Aeppic.Account.data.isAdmin) {\n      const fallbackCompany = await Aeppic.findOne(`p:root f.id:${COMPANY_FORM}`)\n      locals.companyIdOfAccount = fallbackCompany && fallbackCompany.id\n    }\n \n    locals.root = await Aeppic.get('root')\n\n    await this.refreshPageFormInfo(params.pageDocumentId)\n    await this._announceNewPageDocumentId(params.pageDocumentId)\n\n    if (this.showPrintLayout) {\n      await Aeppic.nextRenderPass()\n      await Aeppic.nextRenderPass()\n\n      Aeppic.setTimeout(() => {\n        packages && packages.window && packages.window.print()\n      }, 5_000)\n    } \n\n    this._setupReloadNotification()\n\n    await this._initializeRecents()\n\n    locals.loading = false\n  }\n\n  get tailwindSupported() {\n    return (typeof tailwind !== 'unknown')\n  }\n\n  _configureTailwind() {\n    tailwind.config = {\n      darkMode: 'class',\n      theme: {\n        extend: {\n          colors: {\n            'action': '#929eb2',\n            'accent': '#63748e',\n            'theme': { /* copy of default slate */\n              50: '#f8fafc',\n              100: '#f1f5f9',\n              200: '#e2e8f0',\n              300: '#cbd5e1',\n              400: '#94a3b8',\n              500: '#64748b',\n              600: '#475569',\n              700: '#334155',\n              800: '#1e293b',\n              900: '#0f172a',\n            },\n            'error': '#f43f5e',\n            'success': '#4ade80',\n          },\n          textColor: {\n            'action': '#ffffff'\n          }\n        },\n      },\n    }\n  }\n\n  destroy() {\n    Aeppic.off('login', this.refreshLogin)\n    Aeppic.off('logout', this.refreshLogin)\n\n    this._teardownKeydownListener()\n    this._teardownNavigationListener()\n  }\n\n  _setupKeydownListener() {\n    if (packages.window) {\n      this._keydownHandler = (event) => {\n        if (event.ctrlKey && event.key) {\n          let handled = true\n \n          if (event.key === 'q') {\n            this.openSearch()\n          } else if (event.key === '2') {\n            this.toggleDeveloperMode()\n          } else if (event.key === '3') {\n            this.toggleDeveloperMode({oldMode:true})\n          } else if (event.key === '4') {\n            this.toggleDeveloperMode({client:true})\n          } else if (event.key === '5') {\n            this.toggleDeveloperMode({server:true})\n          } else if (event.key === 'p') {\n            this.openDeveloperSearch()\n          } else {\n            handled = false\n          }\n\n          if (handled) {\n            event.preventDefault()\n            event.stopPropagation()\n          }\n        }\n      }\n\n      packages.window.addEventListener('keydown', this._keydownHandler)\n    }\n  }\n\n  _setupNavigationListener() {\n    this.listenerAeWillNavigate = (...args) => this.onAeWillNavigate(...args)\n    this.listenerAeDrillInto = (...args) => this.drillInto(...args)\n\n    packages.window.addEventListener('ae-will-navigate', this.listenerAeWillNavigate)\n    packages.window.addEventListener('ae-drill-into', this.listenerAeDrillInto)\n  }\n\n  _teardownNavigationListener() {\n    packages.window.removeEventListener('ae-will-navigate', this.listenerAeWillNavigate)\n    packages.window.removeEventListener('ae-drill-into', this.listenerAeDrillInto)\n  }\n\n  _teardownKeydownListener() {\n    if (packages.window) {\n      packages.window.removeEventListener('keydown', this._keydownHandler)\n    } \n  }\n\n  toggleDeveloperMode(options) {\n    if (!Aeppic.Account || (!Aeppic.Account.data.allowDevMode && !Aeppic.Account.data.isAdmin)) {\n      return\n    }\n\n    if(options && options.client) {\n      if(Aeppic.Developer.remoteDeveloperMode === 'Client') {\n        this.endRemoteDeveloper()\n        return\n      }\n      console.log('starting remote developer client session...')\n      Aeppic.Developer.enableRemoteDeveloper(Aeppic.Account.id, 'Client')\n      locals.devMode = false\n    }\n    else if(options && options.server) {\n      if(Aeppic.Developer.remoteDeveloperMode === 'Server') {\n        this.endRemoteDeveloper()\n        Aeppic.navigateHome()\n        return\n      }\n      console.log('starting remote developer server session')\n      Aeppic.Developer.enableRemoteDeveloper(Aeppic.Account.id, 'Server')\n      locals.devMode = false\n      Aeppic.navigateTo('0b3240e3-b87f-4fe5-8851-6968ef35cf53')\n    }\n    else {\n    locals.devMode = !locals.devMode\n    locals.newDeveloper = !(options && options.oldMode)\n  }\n}\n\n  endRemoteDeveloper() {\n    Aeppic.Developer.disableRemoteDeveloper()\n  }\n\n  openDeveloperSearch() {\n    if (!$refs || !$refs.searchDialog || (!locals.devMode && Aeppic.Developer.remoteDeveloperMode === 'None')) {\n      return\n    }\n    $refs.searchDialog.show({ target: $refs.searchDialogAnchor })\n  }\n\n  closeDeveloperSearch() {\n    if (locals.devMode && $refs.searchDialog) {\n      $refs.searchDialog.close()\n    }\n  }\n\n  openSearch() {\n    if (!$refs.app) {\n      return\n    }\n\n    $refs.app.$emit('openSearch')\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) { \n    if (!$refs[refName] || !$refs[refName].$el) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n  onSizeChange() {\n    if ($refs.app) {\n      if ($refs.app.classList.contains('ae-large')) {\n        locals.showSidebar = true\n        locals.sidebarOverride = false\n      } else {\n        if (!locals.sidebarOverride) {\n          locals.showSidebar = false\n        }\n      }\n    }\n  }\n\n  get showPrintLayout() {\n    return params.queryParams && params.queryParams && 'print' in params.queryParams\n  }\n\n  get printLayoutId() {\n    if (params.queryParams && params.queryParams.printLayoutId) {\n      return params.queryParams.printLayoutId\n    }\n\n    return locals.layoutId\n  }\n\n  toggleTheme() {\n    locals.theme = (locals.theme === 'ae-light' ? 'ae-dark' : 'ae-light');\n  }\n\n  setupServiceWorker() {\n    locals.serviceWorker = true\n  }\n\n  navigateTo(event) {\n    console.log(packages.window.location)\n    console.log({event})\n  }\n\n\n\n  /**\n   * FROM BIZPIN APPLICATION LAYOUT\n   */\n\n\n\n   async _initializeRecents() {\n    const referenceDocument = (await Aeppic.get(Aeppic.HomePage)) || Aeppic.Account\n    this.addToRecentsAction = await Aeppic.Preferences.getSettingForDocument('bizpin:recently-visited:addDocumenTorRecentlyVisitied', referenceDocument)\n  }\n\n  get isPageReadonly() {\n    if (this.showPrintLayout) {\n      return true\n    }\n\n    return !locals.canEditPageDocument\n  }\n\n  async onScroll(event) {\n    if (this._onScrollHandlerProcessing) {\n      return\n    }\n\n    this._onScrollHandlerProcessing = true\n\n    await Aeppic.waitForNextAnimationFrame()\n\n    const y = event.target.scrollTop\n    const x = event.target.scrollLeft\n\n    this.persistScrollPosition(event)\n\n    this._onScrollHandlerProcessing = false\n  }\n\n async doubleRequestAnimationFrame() {\n    // Let browser re-render DOM by executing a doubleRequestAnimationFrame\n    // See: https://github.com/vuejs/vue/issues/9200\n    // See: https://bugs.chromium.org/p/chromium/issues/detail?id=675795\n\n    await Aeppic.waitForNextAnimationFrame()\n    await Aeppic.waitForNextAnimationFrame()\n  }\n\n  async _announceNewPageDocumentId(docId) {\n    console.log('_announceNewPageDocumentId')\n    await this.loadSpinner()\n\n    const targetDocument = this._getAllowedTargetDocument(await Aeppic.get(docId))\n\n    const [ canEditPageDocument, document ] = await Promise.all([\n      Aeppic.canEdit(targetDocument),\n      Aeppic.get(targetDocument)\n    ])\n\n    console.log('=> ',canEditPageDocument)\n\n    if (Aeppic.Account && Aeppic.Account.data.isGroupAccount === true) {\n      locals.canEditPageDocument = false\n    } else {\n      locals.canEditPageDocument = canEditPageDocument\n    }\n\n    if (!document) {\n      console.warn('404: could not get pageDocumentId to display. Redirecting to HomePage')\n      this._navigateTo(locals.companyIdOfAccount)\n      return\n    }\n\n    await this.refreshPageFormInfo(document)\n\n    locals.pageDocument = document\n    this._updateRecentDocuments(document) \n\n    if (locals.pageDocument && locals.pageDocument.data.name) {\n      $refs.hiddenDomElement.$el.ownerDocument.title = locals.pageDocument.data.name + ' | bizpin' || 'bizpin'\n    } else {\n      $refs.hiddenDomElement.$el.ownerDocument.title = 'bizpin'\n    }\n\n    this.unloadSpinner()\n    await this.restoreScrollposition(document)\n  }\n  \n  async loadSpinner(event) {\n    locals.spinner = true\n  }\n\n  async unloadSpinner() {\n    console.log('and off: starting')\n\n    await Aeppic.nextRenderPass()\n\n    locals.spinner = false\n  }\n\n  startAnimation() {\n    console.log(this.animation)\n    this.animation.play()\n  }\n\n  stopAnimation() {\n    this.animation.pause()\n  }\n \n  async setupAnimation() {\n    await Aeppic.nextRenderPass()\n\n    this.animation = Aeppic.Anime({\n      targets: [$refs.bizpinSignet],\n      opacity: [1, 0, 1],\n      duration: 1000,\n      easing: 'easeInSine',\n      loop: true,\n      autoplay: false,\n    })\n  }\n\n  _setupReloadNotification() {\n      Aeppic.on('server:changed', () => {\n        console.log('changes:server-changed')\n        this._showReloadNotification()\n      })\n\n      this.missedChangesTimeoutId = null\n\n      Aeppic.on('changes:missed', () => {\n        console.log('changes:missed')\n        if (this.missedChangesTimeoutId) {\n          clearTimeout(this.missedChangesTimeoutId)\n        }\n\n        this.missedChangesTimeoutId = setTimeout(() => {\n          this._showReloadNotification()\n        }, 5000)\n      })\n\n      Aeppic.on('changes:missed-found', () => {\n        console.log('changes:missed-found')\n        if (this.missedChangesTimeoutId) {\n          clearTimeout(this.missedChangesTimeoutId)\n        }\n      })\n  }\n\n  _showReloadNotification() {\n    console.log('showReloadNotifation')\n      locals.reloadNoficationTriggered = true\n  }\n\n  get showPrintLayout() {\n    return params.queryParams && params.queryParams && 'print' in params.queryParams\n  }\n\n  async dragover(event) {\n    event.dataTransfer.dropEffect = \"none\"\n  }\n\n  async drop(event) {\n  }\n\n   async refreshPageFormInfo(document) {\n    const pageDoc = (document && typeof document === 'string') ? await Aeppic.get(params.pageDocumentId) : document\n\n    if (pageDoc) {\n      const formId = pageDoc.f.id\n      if (this.FORMS_CACHE.has(formId)) {\n        locals.pageDocumentForm = this.FORMS_CACHE.get(formId)\n      } else {\n        const form = await Aeppic.getFormForDocument(pageDoc)\n        this.FORMS_CACHE.set(formId, form)\n        locals.pageDocumentForm = form\n      }\n      locals.pageApplicationId = this._getCurrentApplicationId(locals.pageDocumentForm)\n\n      if (Aeppic.Device === 'Desktop' && locals.pageDocumentForm.data.tags) {\n        locals.topbarAsOverlay = locals.pageDocumentForm.data.tags.includes('full-page')\n      } else {\n        locals.topbarAsOverlay = false\n      }\n\n      locals.pageDocumentIsPrototype = locals.pageDocumentForm.data.tags && locals.pageDocumentForm.data.tags.includes('prototype')\n    } else {\n      locals.pageApplicationId = null\n      locals.pageDocumentForm = null\n      locals.topbarAsOverlay = false\n      locals.pageDocumentIsPrototype = false\n    }\n  }\n  \n  async _getCurrentApplicationId(formDocument) {\n    if (!formDocument || !formDocument.document) {\n      return null\n    }\n\n    const appIndex = formDocument.document.a_forms.findIndex(a_form => a_form === 'application-form')\n    return formDocument.document.a[appIndex]\n  }\n\n  async drillInto(event) {\n    event.stopPropagation && event.stopPropagation()\n    event.preventDefault && event.preventDefault()\n\n    const document = await Aeppic.get(event.detail.targetDocument)\n\n    const isStructuralDocument = document.a_depth <= 1 || document.f.id === 'repository-folder-form' || document.f.id === 'folder'\n    const preferDialog = event.detail.mode === 'dialog'\n\n    if (!preferDialog && isStructuralDocument) {\n      this._navigateTo(document)\n      return\n    }\n\n    const formDocument = await Aeppic.get(document.f.id)\n    const applicationFormIndex = formDocument.a_forms.findIndex(a_form => a_form === 'application-form')\n    const application = await Aeppic.get(formDocument.a[applicationFormIndex])\n\n    let showInDialog = preferDialog\n\n    if (!showInDialog && application && application.f.id === 'application-form' && 'dialogForms' in application.data) {\n      showInDialog = !!application.data.dialogForms.find(ref => ref.id === formDocument.id)\n    }\n\n    if (showInDialog) {\n      const drillEventWithActualDocument = { ...event.detail, ... { targetDocument: document } }\n\n      $refs.showDocumentDialog.$emit('show', drillEventWithActualDocument)\n      return\n    }\n\n    this._navigateTo(document)\n  }\n\n  _getAllowedTargetDocument(targetDocument) {\n    const targetIsComment = targetDocument?.f.id === 'cf155969-ede1-43a4-9b10-3a697b19db91'\n\n    if (targetIsComment && !(Aeppic.Account?.id === targetDocument.created.by)) {\n      return targetDocument.p\n    }\n\n    return targetDocument\n  }\n\n  onAeWillNavigate(event) {\n    if (locals.noNavigation) {\n      event.stopPropagation && event.stopPropagation()\n      event.preventDefault && event.preventDefault()\n\n      this._navigateTo(event.detail.documentId)\n    }\n  }\n\n  _navigateTo(documentOrDocumentId) {\n    if (locals.noNavigation) {\n      this._announceNewPageDocumentId(documentOrDocumentId)\n    } else {\n      Aeppic.navigateTo(documentOrDocumentId)\n    }\n  }\n    \n\n  checkDrillIntoFirst(event) {\n    if (!Aeppic.Account || (Aeppic.Account && Aeppic.Account.id !== '870fac1f-b0d7-4925-b191-a43166960419')) {\n      return\n    }\n\n    event.stopPropagation && event.stopPropagation()\n    event.preventDefault && event.preventDefault()\n\n    $refs.drillIntoManager.$emit('will-navigate', event)\n  }\n\n\n  openSearchDialog() {\n    if (!$refs || !$refs.searchDialog) {\n      return\n    }\n    $refs.searchDialog.open({ target: 'body' })\n  }\n\n  dispatchEventChildren(refName, eventName, eventValue) { \n    if (!$refs[refName] || !$refs[refName].$el || !$refs[refName].$el.children) {\n      return\n    }\n    const children = $refs[refName].$el.children\n    for (let i = 0; i < children.length; i++) {\n      children[i].dispatchEvent(new CustomEvent(eventName, {\n        detail: eventValue\n      }))\n    }\n    $refs[refName].$emit(eventName, eventValue)\n  }\n\n  onSizeChange(className, size) {\n    /* if (className === 'ae-large') {\n      locals.showNavbar = true\n      locals.navbarOverride = false\n    } else if (!locals.navbarOverride) {\n      locals.showNavbar = false\n    }*/\n    if (!locals.navbarOverride) {\n      locals.showNavbar = false\n    } else {\n      locals.showNavbar = true\n    }\n  }\n\n  toggleNavbar() {\n    if (!$refs.container.classList.contains('ae-large')) {    \n      locals.navbarOverride = true\n      locals.showNavbar = !locals.showNavbar\n    }\n  }\n\n  showSelectionHandler() {\n    if (!Aeppic.Account || Aeppic.Account.data.isGroupAccount) {\n      return\n    }\n\n    $refs.selectionHandler.$emit('show')\n  }\n\n  async _updateRecentDocuments(document) {\n    if (!this.addToRecentsAction) {\n      return\n    }\n\n    try {\n      const addToRecents = (await Aeppic.Actions.run([this.addToRecentsAction], { document }))[0].value\n      console.log('!!!', addToRecents)\n      if (!addToRecents) {\n        return\n      }\n\n      const LsKey = 'bizpin:recently-visited'\n      \n      let recents = JSON.parse(Aeppic.LocalStorage.getItem(LsKey)) || []\n      const existingIndex = recents.findIndex(doc => doc.id === document.id)\n      if (existingIndex !== -1) {\n        recents.splice(existingIndex, 1)\n      }\n      recents.push({ id: document.id, v: document.v, text: document.data.name })\n      if (recents.length > 9) {\n        recents = recents.slice(-10)\n      }\n      Aeppic.LocalStorage.setItem(LsKey, JSON.stringify(recents))\n\n      // Because LocalStorage cannot be watched, emit an event instead\n      $refs.hiddenDomElement.$root.$el.dispatchEvent(new CustomEvent(`local-storage:${LsKey}`))\n    } catch (e) {\n      console.error('Could not add to recently-visited', e)\n    }  \n  }\n\n  persistScrollPosition(event) {\n    if (!event || !event.target || !locals.pageDocument) {\n      return\n    }\n\n    const y = event.target.scrollTop\n    const x = event.target.scrollLeft\n\n    Aeppic.SessionStorage.setValue(this._generateScrollpositionStoragePrefix(locals.pageDocument), { x, y })\n  }\n\n  async restoreScrollposition(document) {\n    const isHistoricNavigation = Aeppic.Root.params && Aeppic.Root.params.history && Aeppic.Root.params.history.historic\n\n    if (!isHistoricNavigation) {\n      return\n    }\n\n    const oldScrollPosition = Aeppic.SessionStorage.getValue(this._generateScrollpositionStoragePrefix(document))\n\n    if (!oldScrollPosition) {\n      return\n    }\n\n    // FIXME: this will break once some designs take longer to render\n    // render fields with additional designs\n    for (let i = 0; i < 25; i += 1) {\n      await Aeppic.nextRenderPass() \n    }\n\n    if (!$refs.body || !$refs.body.$el) {\n      return\n    }\n\n    const { x, y } = oldScrollPosition\n\n\n    if (typeof $refs.body.$el.scrollTo !== 'function') {\n      return\n    }\n\n    // FIXME: don't do this! \n    $refs.body.$el.scrollTo(x, y)\n  }\n\n  scrollTo(scrollToOptions) {\n    if (!scrollToOptions) {\n      return\n    }\n\n    if (typeof $refs.body.$el.scrollTo !== 'function') {\n      return\n    }\n\n    // FIXME: don't do this! \n    $refs.body.$el.scrollTo(scrollToOptions)\n  }\n\n  _generateScrollpositionStoragePrefix(document) {\n    const timestamp = Aeppic.Root.params.history.timestamp\n\n    return `bp-pref__scrollPosition@document=${document.id}@form=${document.f.id}@time=${timestamp}`\n  }\n\n  registerLayoutListener(eventName, refIndex) {\n    if (!this.listenersToLayoutRefs[eventName]) {\n      this.listenersToLayoutRefs[eventName] = []\n    }\n\n    if (!this.listenersToLayoutRefs[eventName].find(existingIndex => existingIndex === refIndex)) {\n      this.listenersToLayoutRefs[eventName].push(refIndex)\n    }\n\n    if (!locals.additionalLayoutListeners[eventName]) {\n      locals.additionalLayoutListeners[eventName] = (event) => this.notifyLayoutListeners(eventName, event)\n    }\n  }\n\n  notifyLayoutListeners(eventName, nativeCustomEvent) {\n    for(const refIndex of this.listenersToLayoutRefs[eventName]) {\n      $refs.globalLayouts && $refs.globalLayouts[refIndex] && $refs.globalLayouts[refIndex].$emit(eventName, nativeCustomEvent.detail)\n    }\n  }\n\n  showSidebar(tabId) {\n    if ($refs.container.classList.contains('ae-large')) {    \n      return\n    }\n\n    locals.sidebarTabId = tabId\n    locals.showSidebar = true\n  }\n\n  hideSidebar(tabId) {\n      locals.showSidebar = false\n      locals.sidebarTabId = ''\n  }\n}\n "},"locks":[],"created":{"at":"2022-03-08T15:01:26+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","from":"","client":"server"},"modified":{"at":"2022-03-29T12:25:01+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1648556701664,"ct":1646751686852,"a_depth":3,"a":["apps","d4581623-f542-4ade-86be-8b3ecec56f0e","5a75e3b6-c6e5-46bd-9cec-b5ed1db9eba5"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"87758e5c-8503-47e5-b66d-7b33ad3b6062","v":"8d7232dff4e74352","p":"dashboard-form","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"xdefault","applies":"","template":"\r\n<div>\r\n  <page-title-bar document=\"document\" background-color=\"#6AB3D4\" invert=\"true\"></page-title-bar>\r\n  <div class=\"row padded-content\">\r\n    <div class=\"col-md-12\">\r\n        <document-design document=\"document\" design=\"page\"></document-design>\r\n    </div>\r\n  </div>\r\n</div>","css":"","controller":"","packages":[]},"locks":[],"created":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"modified":{"at":"2017-08-23T08:24:50+02:00","by":"","from":"","client":"import"},"t":1719473826922,"ct":1719473826922,"a_depth":3,"a":["system","system-forms","dashboard-form"],"a_forms":["system-folder-form","repository-folder-form","form"],"inheritedLocks":[null,null,null,null],"stamps":[],"previous":{"v":"9772675581098314","f":{"id":"layout-form","v":"aaea751834cd046f","text":"Layout"}},"meta":{"modified":{"at":"2024-06-27T07:37:06+00:00","by":"ee99a373-33b1-4c97-8d61-e4a8f53200ba","backedBy":null,"impersonatedBy":null,"from":"","client":"server"}}},{"id":"577df08b-b48f-4f37-9e50-9e567536f538","v":"87973d206a3bfeb0","previous":{"v":"b5da8bf398a9d2cc"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"xFragebogen Layout","applies":"","packages":[],"template":"<div class=\"dbps-body-with-actions\">\n  <div class=\"_CSS-actions\">\n    <ae-control title=\"Fragebogen erstellen\" v-if=\"!params.readonly\" name=\"children\" :param-only-add=\"true\" :document=\"locals.questionnaireFolder\" :auto-save=\"true\" :readonly=\"params.readonly\" field-name=\"questionnaires\" param-layout-id-add=\"5a1a3596-acd5-4446-a105-5d6ce02d9b71\"></ae-control>\n    <ae-layout title=\"Aktuellen Fragebogen löschen\" v-if=\"locals.questionnaires && !params.readonly\" layout-id=\"0ded34c5-1221-4511-af93-d897a79f1369\" param-button-layout-id=\"dac8948f-67d5-4b88-87ef-8dab40d869cd\" :param-document=\"locals.questionnaires[locals.currentQuestionnaireIndex]\" :param-no-navigate=\"true\" param-remove-reference-from-parent-field=\"questionnaires\"></ae-layout>\n\n\n  </div>\n\n  <section>\n    <div class=\"dbps-tabs\">\n      <div  class=\"_CSS-language dbps-tab\"\n            :class=\"{ 'dbps-tab--active': locals.currentQuestionnaireIndex === index }\"\n            v-for=\"(questionnaire, index) in locals.questionnaires\"\n            @click=\"locals.currentQuestionnaireIndex = index\">\n        <ae-design name=\"language-flag\" :document=\"questionnaire\"></ae-design>\n        <!-- FIXME: do not abuse icon for fixing font height  -->\n          <span  style=\"visibility: hidden;\">&nbsp;</span>\n      </div>\n\n    </div>\n    <div class=\"_CSS-questions dbps-tab__content\">\n        <div v-for=\"(questionnaire, index) in locals.questionnaires\" class=\"_CSS-commands-bar\" v-show=\"index === locals.currentQuestionnaireIndex\">\n          <ae-form :document=\"questionnaire\" :auto-save=\"true\" :readonly=\"params.readonly\"></ae-form>\n        </div>\n    </div>\n  </section>\n</div>\n","css":"\n._CSS-language {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n._CSS-actions {\n  font-size: 2rem;\n}","controller":"class Controller {\n  async init() {\n    locals.currentQuestionnaireIndex = 0\n    locals.questionnaires = null\n    locals.questionnaireFolder = null\n\n    this.watchQuestionnaireFolder()\n  }\n\n  // async onUpdate() {\n  //   locals.questionnaireFolder = await this.getQuestionnaireFolder()\n  //   locals.questionnaires = await this.getQuestionnaires()\n  // }\n\n  async watchQuestionnaireFolder() {\n    if (!params.document) {\n      return\n    }\n \n    const questionnaireFolderQuery = `p:${params.document.id} f.id:a3c6fe06-ee26-47f8-9d28-5e5a31bd2b8f`\n    const questionnaireFolderResults = await Aeppic.find(questionnaireFolderQuery)\n\n    if (!questionnaireFolderResults || !questionnaireFolderResults[0]) {\n      return\n    }\n\n    Aeppic.watch(questionnaireFolderResults[0], async (qFolder) => {\n      console.log('watch q folder', qFolder, qFolder.data.questionnaires)\n\n      locals.questionnaireFolder = await Aeppic.edit(qFolder)\n\n      locals.questionnaires = await this.getQuestionnaires()\n    })\n  } \n\n  async getQuestionnaires() {\n    const questionnaires = await Aeppic.find(`p:${locals.questionnaireFolder.id} f.id:f5463bba-ca34-45a9-992a-73297b1f529d`)\n    return Aeppic.editAll(questionnaires)\n  }\n\n  async newLanguage() {\n    let language\n\n    if (locals.questionnaires.length) {\n      const cloneResult = await Aeppic.cloneDeep(locals.questionnaires[locals.questionnaires.length - 1], locals.questionnaireFolder.id, { save: true })\n      language = cloneResult.root\n    } else {\n      language = await Aeppic.new('f5463bba-ca34-45a9-992a-73297b1f529d', locals.questionnaireFolder.id)\n    }\n\n    language.data.language = `copy of ${language.data.language}`\n\n    Aeppic.save(language)\n\n    Aeppic.navigateTo(language.id)\n  }\n\n  async resetEdits(index) {\n    locals.documentChanged = false\n\n    const all = await this.getQuestionnaires()\n    locals.questionnaires.splice(index, 1, all[index])\n  }\n\n  saveQuestionnaire(index) {\n    Aeppic.save(locals.questionnaires[index])\n  }\n\n  get currentQuestionnaire() {\n    if (locals.currentQuestionnaireIndex == null || locals.questionnaires == null) {\n      return null\n    }\n\n    return locals.questionnaires[locals.currentQuestionnaireIndex]\n  }\n} \n\n"},"locks":[],"created":{"at":"2018-05-24T16:34:35+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2018-07-06T12:15:46+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1530879346230,"ct":1527172475732,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"875c3458-5ba6-4a56-a4c4-c6ac0658e341","v":"initial","p":"c3df0a76-ded1-4a65-92f0-8f78ecbde232","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"xKürzlich geöffnet","applies":"","packages":[],"template":"<div class=\"_CSS-card\" v-if=\"!controller.isGroupAccount\">\n\n  <div class=\"_CSS-header\">\n    Kürzlich geöffnet\n  </div>\n\n  <ae-list  :documents=\"locals.recentDocuments.slice(0,5)\"\n              class=\"_CSS-list\"\n            list-id=\"2e798091-303f-406b-a42a-93aa1cd8425c\"\n\n            param-design=\"search-card\"\n            @selected=\"Aeppic.navigateTo($event)\"\n  ></ae-list>\n\n</div>","css":"._CSS {\n  padding: var(--bp-page-content-padding);\n  width: 400px;\n}\n\n._CSS-card {\n  background: var(--ae-ui-card-background);\n  border: var(--ae-border-width) solid var(--ae-border-color);\n  border-radius: var(--ae-border-radius);\n}\n\n._CSS-header {\n  padding: 10px;\n  font-size: 1.2em;\n}\n\n._CSS-list {\n  padding: 10px;\n  background: var(--ae-background-100);\n  border-radius: 0 0 var(--ae-border-radius) var(--ae-border-radius);\n}","controller":"class Controller {\n  async init() {\n    locals.recentDocuments = []\n\n    Aeppic.subscribe(`p:${params.userId} f.id:0a8dbc2a-384e-457b-ab48-57013109ba44`, (documents) => {\n      this.watcher && this.watcher.stop()\n\n      if (!documents[0]) {\n        locals.recentDocuments = []\n        return\n      }\n\n      this.watcher = Aeppic.watch(documents[0], (recentDocumentsDocument) => {\n        locals.recentDocuments = recentDocumentsDocument.data.documents\n      })\n    })\n  }\n\n  get isGroupAccount() {\n    return Aeppic.Account && Aeppic.Account.data.isGroupAccount === true\n  }\n}\n\n"},"locks":[],"created":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"modified":{"at":"2019-09-20T08:59:31+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1568969971677,"ct":1568969971677,"a_depth":3,"a":["apps","8fa52498-fa07-4bad-87b3-5c8df671aca4","c3df0a76-ded1-4a65-92f0-8f78ecbde232"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"95e11a76-7a7f-43e2-821f-46c6ef17f90f","v":"633a1af2ad58aa66","previous":{"v":"22eb4f95201e14a4"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"xLayout with replaced translation-control.OLD","applies":"","packages":[],"template":"<div class=\"_CSS-labels\">\n  <div v-if=\"locals.hasOwnParagraphs && controller.subsections.length\" class=\"_CSS-tab-label\" :class=\"{ '_CSS-tab-label--active': locals.showOwnParagraphs }\" @click=\"locals.showOwnParagraphs = true\">\n    {{params.form.name}}\n  </div>\n\n  <template v-if=\"controller.subsections && controller.subsections.length\">\n      <div class=\"_CSS-tab-label\" :class=\"{ '_CSS-tab-label--active': !locals.showOwnParagraphs && locals.tabIndex === sectionIndex }\" v-for=\"(subSection, sectionIndex) in controller.subsections\"\n      @click=\"controller.setTabIndex(sectionIndex)\">\n        {{subSection.title}}\n      </div>\n  </template>\n</div>\n\n<div class=\"_CSS-tab-content\">\n  <div v-if=\"locals.hasOwnParagraphs\" class=\"_CSS-own-paragraphs\">\n    <div v-show=\"locals.showOwnParagraphs\" v-for=\"paragraph in params.form._info.sections[0].paragraphs\">\n      <div v-for=\"placeholder in paragraph.placeholders\" v-show=\"!controller.placeholderIsHidden(placeholder)\">\n        <!-- {{controller.placerholderFieldChanged(placeholder) }} -->\n        <!-- {{placeholder.field.defaultValue}}        -->\n        <span class=\"ae-form-cell__label\">{{ placeholder.label }}</span>\n        <ae-control\n          class=\"ae-form-cell\"\n          :name=\"controller.controlNameForPlaceholder(placeholder)\"\n          :params=\"params.form.getFieldControlParams(placeholder.field.name)\"\n          :label=\"placeholder.label\"\n          :document=\"params.document\"\n          :field-name=\"placeholder.field.name\"\n          :key=\"placeholder.field.name\"\n          :readonly=\"params.readonly\"\n          ></ae-control>\n      </div>\n    </div>\n  </div>\n  <template v-if=\"controller.subsections && controller.subsections.length\">\n\t\t<div class=\"_CSS-subsection\" v-for=\"(placeholder, index) of controller.sectionsOfSubsection\" v-if=\"placeholder.field\" v-show=\"!locals.showOwnParagraphs && !controller.placeholderIsHidden(placeholder)\">\n\t\t\t\t<span class=\"ae-form-cell__label\">{{ placeholder.label }}</span>\n\t\t\t\t<ae-control\n          class=\"ae-form-cell\"\n          :name=\"controller.controlNameForPlaceholder(placeholder)\"\n          :label=\"placeholder.label\"\n          :params=\"params.form.getFieldControlParams(placeholder.field.name)\"\n          :document=\"params.document\"\n          :field-name=\"placeholder.field.name\"\n          :key=\"placeholder.field.name\"\n          :readonly=\"params.readonly\"\n        ></ae-control>\n\t\t</div>\n\n\t\t<div class=\"_CSS-direct-subsection\" v-for=\"subsection in controller.displayedDirectSubsection.directSubsections\">\n\t\t\t<ae-form-section :render-title=\"false\" :form=\"params.form\" :document=\"params.document\" :section=\"subsection\" :readonly=\"params.readonly\" :include-subsections=\"true\" :field-conditions=\"params.fieldConditions\"></ae-form-section>\n\t\t</div>\n  </template>\n</div>\n\n\n\n\n\n","css":"._CSS {\n  display: flex;\n  flex-flow: column;\n}\n\n._CSS-labels {\n  flex: 1;\n  display: flex;\n  flex-flow: row;\n  justify-content: space-between;\n  background: var(--ae-theme-primary);\n  color: var(--ae-theme-text-primary-on-primary);\n  overflow-x: auto;\n}\n\n._CSS-tab-label {\n  flex: 1;\n  padding: 1rem;\n  text-align: center;\n}\n\n._CSS-tab-label--active {\n  /* background-color: rgba(0,0,0,0.2); */\n  border-bottom: 5px solid var(--ae-theme-secondary);\n}\n\n._CSS-tab-content {\n  padding: var(--bp-page-content-padding);\n}\n\n._CSS-tab-content > * {\n  padding: 0 0 1rem;\n}","controller":"class Controller {\n  async init () {\n    locals.hasOwnParagraphs = this._hasOwnParagraphs()\n    locals.showOwnParagraphs = locals.hasOwnParagraphs\n    locals.tabIndex = 0\n  }\n\n  _hasOwnParagraphs() {\n    const ownParagraphs = params.form.info.sections[0].paragraphs\n    if (!ownParagraphs || !ownParagraphs.length) {\n      return false\n    }\n    return ownParagraphs.some((paragraph) => {\n      return paragraph.placeholders.some((placeholder) => {\n        return !(placeholder.style && placeholder.style.hidden && placeholder.style.hidden.value === 'true')\n      })\n    })\n  }\n\n  async setTabIndex(toIndex) {\n    locals.showOwnParagraphs = false\n    locals.tabIndex = toIndex\n  }\n\n  get subsections() {\n    if (params.form && params.form.info && params.form.info.sections && params.form.info.sections[0]) {\n      return params.form.info.sections[0].directSubsections\n    }\n    return []\n  }\n\n  get displayedDirectSubsection() {\n    return this.subsections[locals.tabIndex]\n  }\n\n  controlNameForPlaceholder(placeholder) {\n    if (!placeholder || !placeholder.control) {\n      return ''\n    }\n\n    const hasName = !!placeholder.control.name\n\n    if (placeholder.control && placeholder.control.namespace && hasName) {\n      return placeholder.control.namespace + ':' + placeholder.control.name\n    }\n\n    if (hasName) {\n      if (placeholder.control.name === 'content-translation') {\n        const controlParams = params.form.getPlaceholderControlParams(placeholder.field.name)\n\n        return controlParams.controlName\n      }\n\n      return placeholder.control.name\n    }\n\n    return ''\n  }\n\n  get sectionsOfSubsection() {\n    return this.displayedDirectSubsection.placeholders.map((placeholder) => {\n      return placeholder\n    })\n  }\n\n  placeholderIsHidden(placeholder) {\n    if (params.hideEmpty) {\n      if (!this.placerholderFieldChanged(placeholder)) {\n        return true\n      }\n    }\n\n    const hiddenStyle = placeholder.style.hidden\n    if (!hiddenStyle) {\n      return false\n    }\n\n    if (hiddenStyle.condition) {\n      return params.fieldConditions[hiddenStyle.condition.id]\n    }\n\n    return hiddenStyle.value === 'true'\n    \n  }\n\n  placerholderFieldChanged(placeholder) {\n    const fieldInfo = placeholder.field\n    return params.form.hasFieldChanged(placeholder.field, params.document.data[placeholder.field.name], placeholder.field.defaultValue)\n  }\n\n  _placeholderReferenceInfo(sectionPlaceholder) {\n    const fieldName = sectionPlaceholder.field && sectionPlaceholder.field.name\n    if (!fieldName) {\n      return {\n        isRef: false\n      }\n    }\n    const field = params.document.data[fieldName]\n    if (!field || typeof field !== 'object') {\n      return {\n        isRef: false\n      }\n    }\n    if (Array.isArray(field)) {\n      return {\n        cardinality: true,\n        isRef: true\n      }\n    }\n\n    return {\n      cardinality: false,\n      isRef: 'text' in field && 'id' in field && 'v' in field && 'client' in field\n    }\n  }\n}"},"locks":[],"created":{"at":"2018-07-06T12:15:41+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","from":"","client":"server"},"modified":{"at":"2020-10-13T10:11:34+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1602583894053,"ct":1530879341051,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"7e66f403-aca9-436e-939f-a16059e43bde","v":"4048b5a9e7d14e08","previous":{"v":"fa59dcba50e0de1e"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"xModel Application: Personal","applies":"","packages":[],"template":"<div class=\"_CSS-login\" v-if=\"!locals.accountSelected\">\n  <div>Hast du bereits einen Account?</div>\n  <button @click=\"controller.login()\"> Login</button>\n</div>\n<div>\n  <div>Du bewirbst dich für den Film <ae-design name=\"title\" :document=\"controller.movie\"></ae-design></div>\n\n  <template v-if=\"locals.applicationRequest\">\n    <ae-form :document=\"locals.applicationRequest\"></ae-form>\n\n    <div>\n      <input type=\"checkbox\" :id=\"id()\" v-model=\"locals.termsOfUse\">\n      <label :for=\"id()\">Ich stimme den Datenschutz- und Nutzungsbestimmungen zu</label>\n    </div>\n\n    <button @click=\"controller.save()\">Bewerbung speichern und Dateien hochladen</button>\n  </template>\n</div>\n","css":"","controller":"class Controller {\n  async init() {    \n    locals.termsOfUse = false\n\n    this.alreadyHasAccount = false\n    this.modelInCoreData = null\n    locals.applicationRequest = null\n\n    locals.accountSelected = null\n\n    await this.createNewUser()\n  }\n\n  get movie() {\n    return params.movie || null\n  }\n\n  async save() {\n    if (!this._requiredRequestFieldsFilledOut()) {\n      console.log('not all fields filled out')\n      return \n    }\n\n    const changeToModelInCoreData = Aeppic.Model.mergeFields(this.modelInCoreData, locals.applicationRequest, this.modelInCoreData)\n\n    if (changeToModelInCoreData) {\n      this.modelInCoreData.data = changeToModelInCoreData.data\n      Aeppic.save(this.modelInCoreData)\n      Aeppic.save(locals.applicationRequest)\n    } else {\n      console.warn('could not save any changes from application to modelInCoreData')\n    }\n\n    const applicationFolder = await this._getApplicationFolder()\n    const application = await this._createApplication(applicationFolder)\n\n    const changesToApplication = Aeppic.Model.mergeFields(locals.applicationRequest, application, locals.applicationRequest)\n\n    if (changesToApplication) {\n      application.data = changesToApplication.data\n    } else {\n      console.warn('could not save application request data to actual application')\n    }\n\n    application.addReference('requestApplication', locals.applicationRequest)\n\n    Aeppic.save(application)\n    \n    $emit('nextPage', this.modelInCoreData.id)\n  }\n\n  _requiredRequestFieldsFilledOut() {\n    const requestToValidate = locals.applicationRequest\n    const requestForm = Aeppic.getDocumentForm(requestToValidate)\n    const validationErrors = requestForm.validateDocumentData(requestToValidate.data)\n\n    return validationErrors === null && locals.termsOfUse\n  }\n\n\n  async login() {\n    // TODO:\n    const account = await this._login()\n    await this._createFilloutDocuments(account)\n\n    locals.accountSelected = true\n  }\n\n  async createNewUser() {\n    await this._createFilloutDocuments()\n  }\n\n  async _login() {\n    this.alreadyHasAccount = true\n    return {}\n  }\n\n  async _createFilloutDocuments() {\n    if (this.alreadyHasAccount) {\n      // TODO: use account to find model in core data\n      this.modelInCoreData = await Aeppic.edit('bdacd014-5532-42c9-9a21-8c1c388b9beb')\n    } else {\n      this.modelInCoreData = await this._createModelInCoreData()\n    }\n \n    const applicationRequest = await this._createModelApplicationRequest(this.modelInCoreData.id)\n\n    if (this.alreadyHasAccount) {\n      const changes = Aeppic.Model.mergeFields(this.modelInCoreData, applicationRequest, this.modelInCoreData)\n      if (changes) {\n        applicationRequest.data = changes.data\n      }\n    }\n\n    applicationRequest.addReference('model', this.modelInCoreData)\n\n    locals.applicationRequest = applicationRequest\n  }\n\n  async _getApplicationFolder() {\n    const applicationFolderResults = await Aeppic.find(`a:${this.movie.id} f.id:9c63f632-9e40-4abb-aa1a-f4a02110a97f`)\n    return applicationFolderResults[0]\n  }\n\n  async _createModelInCoreData() {\n    const model = await Aeppic.new('44e0edf9-6515-4e4b-ad48-98a04d28df11', 'c9a08844-ee22-4c17-8419-02a081719533')\n    Aeppic.commit(model)\n    return model\n  }\n\n  async _createApplication(applicationFolder) {\n    return await Aeppic.new('275b807f-7dbb-4351-b731-669e275fa97d', applicationFolder.id)\n  }\n\n  async _createModelApplicationRequest(modelInCoreDataId) {\n    return await Aeppic.new('459069ef-d793-4f8c-967b-a49d150c6176', modelInCoreDataId)\n  }\n}\n\n"},"locks":[],"created":{"at":"2018-05-24T16:34:35+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2018-06-14T12:06:02+00:00","by":"01a6953d-621e-47d0-a1c8-d89a5afd69b8","backedBy":null,"from":"","client":"server"},"t":1528977962338,"ct":1527172475773,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"e0d0d3ff-59cc-4ccc-b037-2d4ac0a7f858","v":"48a6393f182f55c1","previous":{"v":"003728cb8ea24335"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"xModel Application: Uploads","applies":"","packages":[],"template":"<div>\n  <div>\n    Dateien hochladen\n  </div>\n  <ae-control   :key=\"locals.newFile && locals.newFile.id\"\n                name=\"file\"\n                field-name=\"datei\"\n                :document=\"locals.newFile\"\n                param-file-name-to-field=\"[name]\"\n                @selected.native.stop=\"controller.onFileAdded($event)\">\n  </ae-control>\n</div>\n\n\n\n<label>Hochgeladene Dateien</label>\n\n<ae-list  list-id=\"2dab232c-2c8a-4aa4-b3f9-6023a7116161\"\n          v-if=\"locals.application\"\n          :documents=\"locals.application.data.files\"\n          param-design=\"ref-card,card\"\n></ae-list>\n\n<button @click=\"Aeppic.navigateTo(Aeppic.ProfilePage)\">Bewerbung abschließen</button>","css":"","controller":"class Controller {\n  async init () {\n    locals.modelInCoreData = null\n    \n    this.modelInCoreData = await Aeppic.edit(params.coreDataModelId || 'bdacd014-5532-42c9-9a21-8c1c388b9beb')\n\n    locals.application = await this._getApplication()\n\n    locals.newFile = await this._newFileDocument(locals.application.id)\n  }\n\n  async _getApplication() {\n    // TODO: use account to find model in core data\n    const searchString = `a:${params.movie.id} f.id:275b807f-7dbb-4351-b731-669e275fa97d data.model.id:${this.modelInCoreData.id}`\n    console.log(searchString)\n    const applications = await Aeppic.find(searchString)\n    \n    console.log(applications)\n\n    for(const application of applications) {\n      if (application['a_forms'].includes('9c63f632-9e40-4abb-aa1a-f4a02110a97f')) {\n        return await Aeppic.edit(application)\n      }\n    }\n    console.warn('[WARN]: uploads -> no application found')\n  }\n\n  async _newFileDocument(applicationId) {\n    return await Aeppic.new('aabed4ee-20ca-4df4-9a78-75a05e97dce9', applicationId)\n  }\n\n  async onFileAdded(e) {\n    const file = locals.newFile\n    locals.newFile = null\n\n    Aeppic.save(file)\n    locals.application.addReference('files', file)\n    Aeppic.save(locals.application)\n\n    const clone = await Aeppic.clone(file, this.modelInCoreData.id)\n    Aeppic.save(clone)\n\n    this.modelInCoreData.addReference('files', clone)\n    Aeppic.save(this.modelInCoreData)\n\n    locals.newFile = await this._newFileDocument(locals.application.id)\n  }\n}\n"},"locks":[],"created":{"at":"2018-05-24T16:34:35+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2018-06-14T12:05:59+00:00","by":"01a6953d-621e-47d0-a1c8-d89a5afd69b8","backedBy":null,"from":"","client":"server"},"t":1528977959498,"ct":1527172475784,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"9779e773-12d0-4e36-a63a-e3f9c6dc7b3a","v":"3e0a01cb49eda053","previous":{"v":"05b6e204a3378320"},"p":"5053ff01-1177-4488-940f-218cea4bf3cb","f":{"id":"layout-form","v":"dc3356051e0928cf","text":"Layout"},"data":{"name":"xShared Casting Welcome","applies":"","packages":[],"template":"<div v-if=\"locals.pageIndex === 0\">\n  <ae-design  :document-id=\"params.casting\" name=\"page--invitation,page\"></ae-design>\n  <!-- <ae-layout  layout-id=\"03125275-666b-46a8-97ac-b0f0ff6c1fb4\"\n              :param-project=\"locals.project\"\n              @selected-movie=\"locals.selectedMovie = $event;controller.nextPage()\"              \n  ></ae-layout> -->\n</div>\n\n<div v-if=\"locals.pageIndex === 1\">\n    <ae-layout  layout-id=\"7e66f403-aca9-436e-939f-a16059e43bde\"\n                :param-project=\"locals.project\"\n                :param-movie=\"locals.selectedMovie\"\n                @nextPage=\"locals.coreDataModelId = $event; controller.nextPage()\"\n    ></ae-layout>\n</div>\n\n<div v-if=\"locals.pageIndex === 2\">\n  <ae-layout  layout-id=\"e0d0d3ff-59cc-4ccc-b037-2d4ac0a7f858\"\n              :param-project=\"locals.project\"\n              :param-movie=\"locals.selectedMovie\"\n              :param-core-data-model-id=\"locals.coreDataModelId\"\n              @nextPage=\"controller.nextPage()\"\n  ></ae-layout>\n</div>","css":"","controller":"class Controller {\n  async init() {\n    // REMOVE:\n    locals.coreDataModelId = null\n\n    // this.pages = ['welcome', 'personal', 'upload']\n    locals.pageIndex = 0\n    locals.selectedMovie = null\n\n    locals.project = await Aeppic.get('facd729c-7eaf-47ec-87f6-09fc220057f5')\n  }\n\n  nextPage() {\n    locals.pageIndex += 1\n  }\n\n  previousPage() {\n    locals.pageIndex -= 1\n  }\n}\n"},"locks":[],"created":{"at":"2018-05-24T16:34:35+02:00","by":"8b6a59dd-6a77-47af-a0e5-8c725dc92fa1","from":"","client":"server"},"modified":{"at":"2018-06-14T11:27:17+00:00","by":"870fac1f-b0d7-4925-b191-a43166960419","backedBy":null,"from":"","client":"server"},"t":1528975637481,"ct":1527172475810,"a_depth":3,"a":["apps","b090141a-949d-4b35-a5c2-d8f1dd937dcf","5053ff01-1177-4488-940f-218cea4bf3cb"],"a_forms":["folder","application-form","folder"],"inheritedLocks":[null,null,null,null],"stamps":[]},{"id":"98a921fa-b755-4701-b61d-9c5f1c27999d","v":"7210aeb3d51b3f69","previous":{"v":"6cf317c34e11008c"},"p":"0142060c-ac17-4d96-b418-24afa702fbd5","f":{"id":"layout-form","v":"239129c22623e2fc","text":"Layout"},"data":{"name":"Zeiten Filter","applies":"","template":"<div class=\"_CSS-container\" :class=\"{ '_CSS-container--inactive': controller.isInactive }\">\n  <div style=\"margin-right: var(--ae-space-2);\">\n    <ae-icon class=\"fa fa-calendar\"></ae-icon>           \n    <select :value=\"locals.mode\" @change=\"controller.updateMode($event.target.value)\">\n      <option value=\"all\">Alle</option>\n      <option value=\"month\">Monat</option>\n      <option value=\"year\">Jahr</option>\n    </select>\n  </div>\n\n  <div v-if=\"locals.mode === 'month'\" class=\"_CSS-month\">\n    <button :disabled=\"controller.isInactive\" class=\"ae-button\" @click.stop=\"controller.minus({ month: 1 })\">\n      <ae-icon class=\"fa fa-arrow-left\"></ae-icon>\n    </button>\n    <div style=\"justify-self:center\">\n    {{ locals.date.toFormat('LLLL yyyy') }}\n    </div>\n    <button :disabled=\"controller.isInactive\" class=\"ae-button\" @click.stop=\"controller.plus({ month: 1 })\">\n      <ae-icon class=\"fa fa-arrow-right\"></ae-icon>\n    </button>\n  </div>\n\n  <div v-if=\"locals.mode === 'year'\" class=\"_CSS-year\">\n    <button :disabled=\"controller.isInactive\" class=\"ae-button\" @click.stop=\"controller.minus({ year: 1 })\">\n      <ae-icon class=\"fa fa-arrow-left\"></ae-icon>\n    </button>\n    <div style=\"justify-self:center\">\n    {{ locals.date.toFormat('yyyy') }}\n    </div>\n    <button :disabled=\"controller.isInactive\" class=\"ae-button\" @click.stop=\"controller.plus({ year: 1 })\">\n      <ae-icon class=\"fa fa-arrow-right\"></ae-icon>\n    </button>\n  </div>\n  <div v-if=\"locals.mode !== 'all'\" class=\"_CSS-forms\">\n    <button class=\"ae-button\" :class=\"{ 'ae-button--primary': locals.forms.vertrag }\" @click.stop=\"controller.toggleModeVertrag()\">\n      Vertrag\n    </button>\n    <button class=\"ae-button\" :class=\"{ 'ae-button--primary': locals.forms.stunden }\" @click.stop=\"controller.toggleModeZeiten()\">\n      Arbeitszeit\n    </button>\n  </div>\n</div>\n\n","css":"._CSS-container {\n  display: flex;\n  align-items: center;\n  min-height: 3em;\n}\n\n._CSS-container--inactive {\n  opacity: 0.7;\n}\n\n._CSS-year,\n._CSS-month {\n  display: grid;\n  grid-template-columns: auto 80px auto;\n  align-items: center;\n  justify-content: center;\n}","controller":"class Controller {\n  init() {\n    locals.forms = {\n      vertrag: true,\n      stunden: true\n    }\n\n    locals.mode = 'all'\n    locals.date = Aeppic.DateTime.local()\n  }\n\n  get isInactive() {\n    return !locals.forms.vertrag && !locals.forms.stunden\n  }\n\n\n  updateMode(mode) {\n    locals.date = Aeppic.DateTime.local()\n    locals.mode = mode\n\n    if (mode === 'all') {\n      locals.forms = {\n        vertrag: true,\n        stunden: true\n      }\n\n      // $emit('reset')\n      this.updateTableDates('', '')\n      return\n    }\n\n    this.update()\n  }\n\n  update() {\n    if (locals.mode === 'year') {\n      const datePart = locals.date.toFormat('yyyy-01-01')\n\n      const stundenFields = ['data.stundenProjektleiterNachJahr', 'data.stundenAndereNachJahr']\n      const vertragsFields = ['data.vertragSummeOffenNachJahr', 'data.vertragSummeAuftragNachJahr', 'vertragSummeAbgerechnetNachJahr']\n\n      const dateFields = []\n      \n      if (locals.forms.stunden) {\n        dateFields.push(...stundenFields)\n      }\n\n      if (locals.forms.vertrag) {\n        dateFields.push(...vertragsFields)\n      }\n\n      this.updateTableDates(`year.${datePart}`, dateFields.join(','))\n\n\n    } else if (locals.mode === 'month') {\n      const datePart = locals.date.toFormat('yyyy-LL-01')\n\n      const stundenFields = ['data.stundenProjektleiterNachMonat', 'data.stundenAndereNachMonat']\n      const vertragsFields = ['data.vertragSummeAuftragNachMonat', 'data.vertragSummeOffenNachMonat', 'vertragSummeAbgerechnetNachMonat']\n\n      const dateFields = []\n      \n      if (locals.forms.stunden) {\n        dateFields.push(...stundenFields)\n      }\n\n      if (locals.forms.vertrag) {\n        dateFields.push(...vertragsFields)\n      }\n\n      this.updateTableDates(`month.${datePart}`, dateFields.join(','))\n\n    }\n\n  }\n\n  plus(value) {\n    locals.date = locals.date.plus(value)\n\n    this.update()\n  }\n\n  minus(value) {\n    locals.date = locals.date.minus(value)\n\n    this.update()\n  }\n\n  toggleModeVertrag() { \n    locals.forms.vertrag = !locals.forms.vertrag\n    this.update() \n  }\n  \n  toggleModeZeiten() { \n    locals.forms.stunden = !locals.forms.stunden\n    this.update() \n  }\n\n  async updateTableDates(dateColumns, dateFields) {\n    const editable = await Aeppic.edit(params.document)\n    editable.data.dateColumns = dateColumns\n    editable.data.dateFields = dateFields\n    Aeppic.save(editable)\n  }\n}\n ","packages":[]},"locks":[],"created":{"at":"2021-04-09T10:07:22+00:00","by":"47325375-27fb-4303-8bf5-9438a0524219","from":"","client":"server"},"modified":{"at":"2023-11-06T12:12:15+00:00","by":"02409da3-1795-4f78-a2df-be417ea3d6c0","backedBy":null,"impersonatedBy":null,"from":"","client":"server"},"t":1699272735956,"ct":1699272192824,"a_depth":4,"a":["apps","bfeee3b0-ad25-4bba-a51c-01584d72c45a","add15d6c-c7b4-4cfb-8da7-d7f38c610cfc","0142060c-ac17-4d96-b418-24afa702fbd5"],"a_forms":["folder","application-form","application-form","form"],"inheritedLocks":[null,null,null,null,null],"stamps":[]}]}