@trintel/zooy 1.0.1-beta.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +284 -339
- package/dist/chunks/{16-ChlL35BX.js → 16-BXti8Tu-.js} +6 -6
- package/dist/chunks/16-CMCRqVYz.js +1 -0
- package/dist/chunks/{20-CZPIOG-A.js → 20-CQLnFcRb.js} +9 -9
- package/dist/chunks/20-Df0dXwyx.js +1 -0
- package/dist/chunks/button-B1jzfT-Z.js +272 -0
- package/dist/chunks/button-C-oX8EmF.js +66 -0
- package/dist/chunks/button-skeleton-CK3BHdja.js +21 -0
- package/dist/chunks/{button-skeleton-COf2kCDL.js → button-skeleton-DoCp6sBb.js} +10 -9
- package/dist/chunks/checkbox-CgFjYxQ_.js +201 -0
- package/dist/chunks/checkbox-t3G-H1NN.js +40 -0
- package/dist/chunks/{class-map-BfNAkUL_.js → class-map-D6tjF27Y.js} +2 -2
- package/dist/chunks/{class-map-DEHG4tmw.js → class-map-FWQBIzSx.js} +1 -1
- package/dist/chunks/collection-helpers-Bk68Vaau.js +7 -0
- package/dist/chunks/collection-helpers-afBvMQaC.js +1 -0
- package/dist/chunks/content-switcher-item-CedjjtvP.js +351 -0
- package/dist/chunks/content-switcher-item-c4WBWz31.js +27 -0
- package/dist/chunks/defs-C88lSWuJ.js +1 -0
- package/dist/chunks/defs-Do0OvCKd.js +1165 -0
- package/dist/chunks/dropdown-item-C0SHr4st.js +69 -0
- package/dist/chunks/dropdown-item-Dh5IEXDr.js +621 -0
- package/dist/chunks/{focus-rQSNiwy7.js → focus-B3iymVyL.js} +1 -1
- package/dist/chunks/{focus-B9JYe97T.js → focus-WnKGH_xB.js} +1 -1
- package/dist/chunks/{icon-loader-Dk_AU26w.js → icon-loader-CJxyg-lp.js} +1 -1
- package/dist/chunks/{icon-loader-o_JYDmJX.js → icon-loader-ChKeNR4s.js} +1 -1
- package/dist/chunks/{icon-loader-utils-BEOGXn0q.js → icon-loader-utils-BwViqIXz.js} +23 -23
- package/dist/chunks/icon-loader-utils-DK8DViXt.js +5 -0
- package/dist/chunks/if-defined-DYWhlnlE.js +5 -0
- package/dist/chunks/{if-defined-C0yJsxi2.js → if-defined-eJcDYClo.js} +1 -1
- package/dist/chunks/{if-non-empty-DTGflHtA.js → if-non-empty-COTeEFkK.js} +1 -1
- package/dist/chunks/if-non-empty-CxMysAQW.js +1 -0
- package/dist/chunks/index-0AElqkkj.js +12 -0
- package/dist/chunks/{index-B3mXrMt1.js → index-4WNeLsiw.js} +4 -3
- package/dist/chunks/{index-BXczHDk-.js → index-4XJJobHw.js} +12 -11
- package/dist/chunks/index-7cXLLw89.js +881 -0
- package/dist/chunks/index-9fmHblh5.js +121 -0
- package/dist/chunks/{index-BwIoRMDI.js → index-B0nToMRj.js} +7 -6
- package/dist/chunks/index-B4SxU_Hu.js +87 -0
- package/dist/chunks/index-B5DpS-cb.js +2 -0
- package/dist/chunks/{index-CzTjJ8lP.js → index-B5GB0rQW.js} +47 -37
- package/dist/chunks/index-B8Ze9ISK.js +17 -0
- package/dist/chunks/index-BAAA4wkE.js +45 -0
- package/dist/chunks/index-BBWp83R-.js +160 -0
- package/dist/chunks/index-BBap1uCI.js +1 -0
- package/dist/chunks/index-BGGDxbLL.js +368 -0
- package/dist/chunks/index-BMquNDkd.js +381 -0
- package/dist/chunks/index-BQnyeVHX.js +1 -0
- package/dist/chunks/index-BRnzFxjk.js +25 -0
- package/dist/chunks/index-BbJQIwkY.js +452 -0
- package/dist/chunks/{index-hLI0Bnyb.js → index-Bb_1S0pr.js} +7 -6
- package/dist/chunks/index-BeMnerDj.js +111 -0
- package/dist/chunks/index-Bff6B9vY.js +254 -0
- package/dist/chunks/index-Bi9WliCA.js +683 -0
- package/dist/chunks/{index-D0xRAPD5.js → index-Bls8zdHV.js} +6 -5
- package/dist/chunks/index-Bo2QmpPO.js +1 -0
- package/dist/chunks/index-BseD7Jzt.js +75 -0
- package/dist/chunks/index-Bt7v-zqV.js +77 -0
- package/dist/chunks/index-Bunat0DP.js +337 -0
- package/dist/chunks/index-BvdNKhJw.js +19 -0
- package/dist/chunks/index-BwFE4R87.js +30 -0
- package/dist/chunks/index-BwRxBdeg.js +158 -0
- package/dist/chunks/index-Bymsj9gH.js +1 -0
- package/dist/chunks/index-C-pfDP7B.js +1 -0
- package/dist/chunks/index-C2oV5vU3.js +4 -0
- package/dist/chunks/index-C3n83pM3.js +103 -0
- package/dist/chunks/index-C572_UKV.js +22 -0
- package/dist/chunks/index-C6bOvXSf.js +129 -0
- package/dist/chunks/{index-CByffhPq.js → index-CBICHiFD.js} +147 -134
- package/dist/chunks/index-CEy6bu7P.js +79 -0
- package/dist/chunks/index-CFqKkC5Z.js +36 -0
- package/dist/chunks/index-CIZ3Gnmm.js +8 -0
- package/dist/chunks/index-CIiIAqrQ.js +414 -0
- package/dist/chunks/index-CJdEJ8pY.js +15 -0
- package/dist/chunks/index-CKYRBtLC.js +79 -0
- package/dist/chunks/index-CQl4NaPS.js +65 -0
- package/dist/chunks/index-CR3DrmQi.js +235 -0
- package/dist/chunks/index-CTsGb3mD.js +364 -0
- package/dist/chunks/{index-rwBsdvh6.js → index-CV7TVQ4T.js} +9 -8
- package/dist/chunks/index-CWlg_Hu2.js +150 -0
- package/dist/chunks/{index-Bwix1iwB.js → index-CYIcfuAW.js} +6 -5
- package/dist/chunks/{index-WNXgzThF.js → index-CkxGsCJy.js} +181 -181
- package/dist/chunks/index-ClE0uX_c.js +27 -0
- package/dist/chunks/index-Cnsy7Qk3.js +511 -0
- package/dist/chunks/index-CoAT1iC6.js +12 -0
- package/dist/chunks/index-Cp3P3KaW.js +45 -0
- package/dist/chunks/index-CqQZpHti.js +3 -0
- package/dist/chunks/index-CsjJntyD.js +23 -0
- package/dist/chunks/{index-BIaF1Dfx.js → index-Ctna95NT.js} +5 -4
- package/dist/chunks/index-Cu1u3Mjn.js +150 -0
- package/dist/chunks/index-Cv6qE9qP.js +22 -0
- package/dist/chunks/index-Cwb1pbm9.js +252 -0
- package/dist/chunks/{index-BSgHSOVT.js → index-CzAwJhyQ.js} +4 -3
- package/dist/chunks/index-D8LE8G2j.js +81 -0
- package/dist/chunks/{index-C_K070Kn.js → index-D9sRIKMQ.js} +9 -8
- package/dist/chunks/index-DBsASlZI.js +15 -0
- package/dist/chunks/{index-DurPWBYc.js → index-DGw1TVFB.js} +3 -2
- package/dist/chunks/index-DIsXKJDH.js +4 -0
- package/dist/chunks/{index-CT43RMOu.js → index-DNWjc2SJ.js} +3 -2
- package/dist/chunks/index-DSOPjl5x.js +563 -0
- package/dist/chunks/index-DUtoSCTU.js +455 -0
- package/dist/chunks/index-DWjrCygZ.js +49 -0
- package/dist/chunks/index-DYvD9xjl.js +4 -0
- package/dist/chunks/index-DZabSr3s.js +36 -0
- package/dist/chunks/index-DbAeG1nY.js +1 -0
- package/dist/chunks/index-Dc51G1mo.js +26 -0
- package/dist/chunks/index-Dd9iSSXa.js +260 -0
- package/dist/chunks/{index-C8LyfVmf.js → index-DfFx1Jz3.js} +6 -5
- package/dist/chunks/index-Dh4LYLg5.js +1604 -0
- package/dist/chunks/index-Dk3tlz8Q.js +15 -0
- package/dist/chunks/index-Do1DszoZ.js +1 -0
- package/dist/chunks/index-DrDKdYFJ.js +58 -0
- package/dist/chunks/index-DyO3Wdy_.js +37 -0
- package/dist/chunks/index-DyyLrVDY.js +188 -0
- package/dist/chunks/{index-45EApaFs.js → index-GDVDUQtg.js} +14 -13
- package/dist/chunks/index-GbWz6fuF.js +243 -0
- package/dist/chunks/index-JWULDURW.js +89 -0
- package/dist/chunks/index-MgWriQfr.js +35 -0
- package/dist/chunks/index-OgL1A9Rm.js +42 -0
- package/dist/chunks/{index-DdNZTQw1.js → index-QzojJs5M.js} +3 -2
- package/dist/chunks/index-TJL02uup.js +291 -0
- package/dist/chunks/index-Z4ar01y-.js +259 -0
- package/dist/chunks/{index-BSh7UYcP.js → index-_xRytR0j.js} +3 -3
- package/dist/chunks/index-cuMoh7qn.js +1 -0
- package/dist/chunks/index-du3RQU31.js +62 -0
- package/dist/chunks/{index-DFA4_spk.js → index-hH_m653R.js} +9 -8
- package/dist/chunks/index-hn76Yo-L.js +1 -0
- package/dist/chunks/index-i4heE-wx.js +71 -0
- package/dist/chunks/index-i9jyrFc9.js +19 -0
- package/dist/chunks/index-lFqOe0IJ.js +46 -0
- package/dist/chunks/index-pS6-humH.js +74 -0
- package/dist/chunks/index-pc36PiDY.js +57 -0
- package/dist/chunks/index-qgl9W8eF.js +52 -0
- package/dist/chunks/{index-BUxB7aWd.js → index-uwN33H1P.js} +9 -8
- package/dist/chunks/index-uxZPrL2m.js +406 -0
- package/dist/chunks/index-yzFU-E6F.js +22 -0
- package/dist/chunks/{loading-icon-DhJR6LyV.js → loading-icon-CPvmJvpZ.js} +2 -2
- package/dist/chunks/loading-icon-DdwpAk8-.js +24 -0
- package/dist/chunks/main-BGOPab-5.js +4041 -0
- package/dist/chunks/main-Bx21zlkN.js +65 -0
- package/dist/chunks/{property-pT1z5CCa.js → property-BkjBVRuu.js} +1 -1
- package/dist/chunks/property-DAFv3PCb.js +5 -0
- package/dist/chunks/register-BCEOkbXG.js +1583 -0
- package/dist/chunks/{register-BK21_Wkj.js → register-Bkr1UKav.js} +1 -1
- package/dist/chunks/{register-BMNs2hNG.js → register-DTXmg-gw.js} +1 -1
- package/dist/chunks/register-D_CXtGy1.js +1 -0
- package/dist/chunks/search-DDFN8-Mz.js +30 -0
- package/dist/chunks/search-npG8ywjx.js +240 -0
- package/dist/chunks/select-CFy3MvH6.js +76 -0
- package/dist/chunks/select-DkCpQORs.js +357 -0
- package/dist/chunks/settings-Bgpv8zuU.js +62 -0
- package/dist/chunks/settings-jvP7vP60.js +66 -0
- package/dist/chunks/{state-FnSmMH94.js → state-BdgD82MZ.js} +1 -1
- package/dist/chunks/{state-Bpmgn27B.js → state-uF7CZaP5.js} +1 -1
- package/dist/chunks/text-input-BUdM-ojg.js +68 -0
- package/dist/chunks/text-input-DVdkm07X.js +372 -0
- package/dist/chunks/tooltip-content-BXcBmMsV.js +3 -0
- package/dist/chunks/tooltip-content-CWRE_NqH.js +135 -0
- package/dist/chunks/{unsafe-html-D49sIpJ5.js → unsafe-html-Bg0eM3hS.js} +5 -5
- package/dist/chunks/{unsafe-html-C_MKAcuC.js → unsafe-html-CpAqmPyx.js} +1 -1
- package/dist/zooy.cjs.js +1 -1
- package/dist/zooy.es.js +20 -2
- package/package.json +3 -4
- package/src/sass/carbon.scss +117 -0
- package/src/sass/main.scss +1 -1
- package/src/sass/panels.scss +268 -359
- package/src/sass/split.scss +1 -0
- package/dist/chunks/16-41wFkj7S.js +0 -1
- package/dist/chunks/20-gmyNFvDv.js +0 -1
- package/dist/chunks/button-DdJepOoE.js +0 -271
- package/dist/chunks/button-skeleton-rf3WDPTZ.js +0 -21
- package/dist/chunks/button-zHEPxpXa.js +0 -66
- package/dist/chunks/checkbox-B5mHvx0J.js +0 -200
- package/dist/chunks/checkbox-BRPCg-DN.js +0 -40
- package/dist/chunks/collection-helpers-BwUB2CEz.js +0 -8
- package/dist/chunks/collection-helpers-CYLIiyii.js +0 -1
- package/dist/chunks/content-switcher-item-DeGjVRQY.js +0 -350
- package/dist/chunks/content-switcher-item-DucclV1b.js +0 -27
- package/dist/chunks/defs-DMmigODC.js +0 -1077
- package/dist/chunks/defs-DPD20sPK.js +0 -1
- package/dist/chunks/dropdown-item-BgLQ1VLo.js +0 -69
- package/dist/chunks/dropdown-item-DPdwOION.js +0 -620
- package/dist/chunks/icon-loader-utils-BBjK16O-.js +0 -5
- package/dist/chunks/if-defined-BdZRLDJ6.js +0 -5
- package/dist/chunks/if-non-empty-CEHK-hqx.js +0 -1
- package/dist/chunks/index-16wphaSo.js +0 -4
- package/dist/chunks/index-27oFQaOS.js +0 -37
- package/dist/chunks/index-5jmZyISW.js +0 -1
- package/dist/chunks/index-B1vQ44Hl.js +0 -363
- package/dist/chunks/index-B3CDjjXh.js +0 -214
- package/dist/chunks/index-B7mGUQhz.js +0 -79
- package/dist/chunks/index-BBNaYDog.js +0 -22
- package/dist/chunks/index-BBt9OmO5.js +0 -12
- package/dist/chunks/index-BJAuRs3y.js +0 -75
- package/dist/chunks/index-BJKftWYn.js +0 -89
- package/dist/chunks/index-BLjNrhkN.js +0 -4
- package/dist/chunks/index-BOTu9u-3.js +0 -86
- package/dist/chunks/index-BPVpH8ll.js +0 -160
- package/dist/chunks/index-BRuvyoCz.js +0 -15
- package/dist/chunks/index-BXIxcS00.js +0 -22
- package/dist/chunks/index-BaVyBv2V.js +0 -25
- package/dist/chunks/index-BgbqX0uv.js +0 -234
- package/dist/chunks/index-BjQlt8g2.js +0 -451
- package/dist/chunks/index-BoNLj7PW.js +0 -44
- package/dist/chunks/index-BxVW3p3I.js +0 -258
- package/dist/chunks/index-ByKyGGzb.js +0 -3
- package/dist/chunks/index-ByTSSU1x.js +0 -1
- package/dist/chunks/index-CBbsFlsv.js +0 -290
- package/dist/chunks/index-CIbRjtWm.js +0 -32
- package/dist/chunks/index-CIzeMGQv.js +0 -81
- package/dist/chunks/index-CLGxSjLW.js +0 -62
- package/dist/chunks/index-CMF5Cawn.js +0 -70
- package/dist/chunks/index-CO-A2KY9.js +0 -562
- package/dist/chunks/index-CONgwvp0.js +0 -12
- package/dist/chunks/index-CUgiXqyk.js +0 -4
- package/dist/chunks/index-C_ttE2g9.js +0 -16
- package/dist/chunks/index-CcgnA1uu.js +0 -29
- package/dist/chunks/index-Cd7aoWrX.js +0 -336
- package/dist/chunks/index-Ce-pMzBC.js +0 -19
- package/dist/chunks/index-CgYZ66P_.js +0 -187
- package/dist/chunks/index-ChcHMeAS.js +0 -35
- package/dist/chunks/index-Cixdzvwd.js +0 -682
- package/dist/chunks/index-Clq0Fl19.js +0 -15
- package/dist/chunks/index-CtxTJnIm.js +0 -58
- package/dist/chunks/index-Cv1hWa_y.js +0 -242
- package/dist/chunks/index-D25buhRm.js +0 -79
- package/dist/chunks/index-D4DqJG5_.js +0 -16
- package/dist/chunks/index-D5GGFPcS.js +0 -251
- package/dist/chunks/index-D5kiHJpX.js +0 -413
- package/dist/chunks/index-DEjRiv5B.js +0 -1
- package/dist/chunks/index-DFZsXFsx.js +0 -19
- package/dist/chunks/index-DGauWNwV.js +0 -156
- package/dist/chunks/index-DIR0jr3f.js +0 -127
- package/dist/chunks/index-DNeagy5a.js +0 -65
- package/dist/chunks/index-DO0fmDR9.js +0 -2
- package/dist/chunks/index-DSitHBEh.js +0 -36
- package/dist/chunks/index-DW7ST0tB.js +0 -1
- package/dist/chunks/index-DWfFgEXE.js +0 -110
- package/dist/chunks/index-DX6WAtmo.js +0 -874
- package/dist/chunks/index-DaPfSuLu.js +0 -393
- package/dist/chunks/index-DbKlVm7y.js +0 -74
- package/dist/chunks/index-Dgi-m1K-.js +0 -1
- package/dist/chunks/index-Dh4uigJs.js +0 -454
- package/dist/chunks/index-DnYNK1mz.js +0 -8
- package/dist/chunks/index-DnierBep.js +0 -510
- package/dist/chunks/index-DnpSGM23.js +0 -213
- package/dist/chunks/index-DntY4deR.js +0 -41
- package/dist/chunks/index-Dp4A8k6C.js +0 -103
- package/dist/chunks/index-Dphpk5r2.js +0 -1
- package/dist/chunks/index-DrBrgF-v.js +0 -49
- package/dist/chunks/index-Dr_cqQ-_.js +0 -77
- package/dist/chunks/index-Dt-nBtrQ.js +0 -26
- package/dist/chunks/index-DwTj7cFr.js +0 -57
- package/dist/chunks/index-DyZVAYLv.js +0 -52
- package/dist/chunks/index-Hh597Yu6.js +0 -121
- package/dist/chunks/index-LxkAuMAA.js +0 -1
- package/dist/chunks/index-OaQhvPR1.js +0 -46
- package/dist/chunks/index-UPr2EvBX.js +0 -149
- package/dist/chunks/index-WvrCPen2.js +0 -367
- package/dist/chunks/index-cTXIVcWI.js +0 -45
- package/dist/chunks/index-caLn8cu1.js +0 -1603
- package/dist/chunks/index-jBse-XgU.js +0 -35
- package/dist/chunks/index-oTjafsfN.js +0 -25
- package/dist/chunks/index-qNmuI3RB.js +0 -149
- package/dist/chunks/index-qiqzy9MI.js +0 -23
- package/dist/chunks/index-siqJUhKa.js +0 -1
- package/dist/chunks/index-w-G9CFId.js +0 -1
- package/dist/chunks/index-x6SeA7x7.js +0 -405
- package/dist/chunks/loading-icon-DJQIjg97.js +0 -23
- package/dist/chunks/main-DUusfqrI.js +0 -18
- package/dist/chunks/main-Dp7wHHgP.js +0 -2882
- package/dist/chunks/property-DCYiZTFF.js +0 -5
- package/dist/chunks/register-Cc9zkA5F.js +0 -1
- package/dist/chunks/register-JwwMwdRf.js +0 -1273
- package/dist/chunks/search-C3raqgOD.js +0 -30
- package/dist/chunks/search-CIhxkVjj.js +0 -239
- package/dist/chunks/select-item-4aISXm0r.js +0 -76
- package/dist/chunks/select-item-DjoxYopL.js +0 -356
- package/dist/chunks/settings-BPOpwVkr.js +0 -594
- package/dist/chunks/settings-CK2vhfPu.js +0 -78
- package/dist/chunks/text-input-BygzMjjc.js +0 -371
- package/dist/chunks/text-input-cjcnMXO-.js +0 -68
- package/dist/chunks/tooltip-content-BjdZJ_Ui.js +0 -134
- package/dist/chunks/tooltip-content-DHyDYyOH.js +0 -3
- package/src/sass/carbon-icons.scss +0 -46
package/README.md
CHANGED
|
@@ -1,332 +1,250 @@
|
|
|
1
1
|
# Zooy
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Event-driven JavaScript UI framework for building complex web applications.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Installation
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- **zoo-ui** → The UI library for managing things
|
|
11
|
-
- **zoo-youeye** → Phonetic play on pronunciation
|
|
12
|
-
- **zooy** → Final form
|
|
13
|
-
|
|
14
|
-
The name reflects the framework's core purpose: orchestrating diverse UI components (panels, views, splits) and managing different component libraries (MDC, Carbon, custom) — just as a zoo manages diverse creatures.
|
|
15
|
-
|
|
16
|
-
## Overview
|
|
17
|
-
|
|
18
|
-
Zooy is a UI framework that emphasizes:
|
|
19
|
-
- **Component lifecycle management** - Automatic cleanup of event listeners and resources
|
|
20
|
-
- **Event-driven architecture** - Components communicate through a standardized event system
|
|
21
|
-
- **Declarative UI patterns** - HTML-driven component initialization and interaction
|
|
22
|
-
- **Progressive enhancement** - Works with server-rendered HTML
|
|
23
|
-
- **Pluggable component libraries** - Support for multiple UI libraries (MDC, Carbon Design System, custom components)
|
|
24
|
-
- **Lazy loading** - Dynamic imports reduce initial bundle size
|
|
25
|
-
|
|
26
|
-
## Architecture
|
|
7
|
+
```bash
|
|
8
|
+
npm install @trintel/zooy
|
|
9
|
+
```
|
|
27
10
|
|
|
28
|
-
|
|
11
|
+
## Core Architecture
|
|
29
12
|
|
|
30
13
|
```
|
|
31
|
-
|
|
14
|
+
Evt (Event Target)
|
|
32
15
|
└─ Component
|
|
33
16
|
├─ Panel
|
|
34
17
|
│ └─ FormPanel
|
|
35
18
|
├─ Dragger
|
|
36
19
|
└─ Split
|
|
37
20
|
|
|
38
|
-
|
|
21
|
+
Evt
|
|
39
22
|
├─ View
|
|
40
23
|
└─ Conductor
|
|
41
24
|
|
|
42
25
|
ComponentLibraryRegistry (Static)
|
|
43
|
-
├─ MDC Library
|
|
44
|
-
└─ Carbon Library
|
|
26
|
+
├─ MDC Library
|
|
27
|
+
└─ Carbon Library
|
|
45
28
|
```
|
|
46
29
|
|
|
47
|
-
|
|
30
|
+
## Core Concepts
|
|
31
|
+
|
|
32
|
+
### Evt
|
|
33
|
+
|
|
34
|
+
Base class extending `EventTarget` with lifecycle-aware listener management.
|
|
48
35
|
|
|
49
|
-
|
|
50
|
-
Base class that extends `EventTarget` with enhanced listener management:
|
|
36
|
+
**Features:**
|
|
51
37
|
- Automatic listener cleanup on disposal
|
|
52
|
-
- Observer pattern for
|
|
38
|
+
- Observer pattern for component relationships
|
|
53
39
|
- Interval tracking with automatic cleanup
|
|
54
|
-
- Debug mode for development
|
|
55
|
-
|
|
56
|
-
#### **Component** - UI Building Block
|
|
57
|
-
Base class for all visual components:
|
|
58
|
-
- DOM lifecycle management (create, render, enter/exit document)
|
|
59
|
-
- Parent-child component hierarchy
|
|
60
|
-
- Target-based rendering (components can render into any container)
|
|
61
|
-
- Model binding for data association
|
|
62
|
-
- Placeholder DOM for async loading states
|
|
63
|
-
- Out-of-tree element management (for portals/hoisted elements)
|
|
64
|
-
|
|
65
|
-
#### **Panel** - Content Container
|
|
66
|
-
Specialized component for dynamic content:
|
|
67
|
-
- URI-based content fetching and rendering
|
|
68
|
-
- Query parameter management
|
|
69
|
-
- Server-side HTML template rendering
|
|
70
|
-
- Script and module evaluation
|
|
71
|
-
- Form interception and AJAX submission
|
|
72
|
-
- Component library auto-initialization (pluggable)
|
|
73
|
-
- Async content population with intervals
|
|
74
|
-
- Partial DOM replacement for live updates
|
|
75
|
-
|
|
76
|
-
#### **ComponentLibraryRegistry** - Pluggable UI Libraries
|
|
77
|
-
Central registry system for component libraries:
|
|
78
|
-
- Register multiple UI libraries (MDC, Carbon, custom)
|
|
79
|
-
- Lazy-load libraries via dynamic imports
|
|
80
|
-
- Automatic component initialization when panels render
|
|
81
|
-
- Import caching for performance
|
|
82
|
-
- Library-specific lifecycle hooks (render, dispose)
|
|
83
|
-
- No library lock-in - use what fits your needs
|
|
84
|
-
|
|
85
|
-
#### **FormPanel** - Form Management
|
|
86
|
-
Enhanced panel for form handling:
|
|
87
|
-
- HTML5 constraint validation
|
|
88
|
-
- Field-level error display
|
|
89
|
-
- Submit interception for AJAX posting
|
|
90
|
-
- Server response processing
|
|
91
|
-
- Form refresh and replacement
|
|
92
|
-
- Success/error callback handling
|
|
93
40
|
|
|
94
|
-
|
|
95
|
-
Manages multiple panels as a cohesive screen:
|
|
96
|
-
- Panel lifecycle management
|
|
97
|
-
- Event routing between panels
|
|
98
|
-
- Split component integration for layouts
|
|
99
|
-
- User context injection
|
|
100
|
-
- Browser history recording
|
|
101
|
-
- View switching coordination
|
|
102
|
-
- Data broadcasting to all panels
|
|
103
|
-
- Metadata storage for view state
|
|
104
|
-
|
|
105
|
-
#### **Conductor** - Application Controller
|
|
106
|
-
Top-level orchestrator for the entire application:
|
|
107
|
-
- View lifecycle management (one active view at a time)
|
|
108
|
-
- Browser history integration (back/forward navigation)
|
|
109
|
-
- View constructor registration
|
|
110
|
-
- Navigation routing
|
|
111
|
-
- User session management
|
|
112
|
-
- View transition coordination
|
|
41
|
+
### Component
|
|
113
42
|
|
|
114
|
-
|
|
115
|
-
Sophisticated layout component for dividing space:
|
|
116
|
-
- Horizontal (EW) and vertical (NS) orientations
|
|
117
|
-
- Nested splitting (recursive division)
|
|
118
|
-
- Draggable dividers with Dragger components
|
|
119
|
-
- Programmatic nest control (open, close, lock, unlock)
|
|
120
|
-
- Animated transitions
|
|
121
|
-
- State management for each nest
|
|
122
|
-
- Event dispatching for layout changes
|
|
43
|
+
Base class for UI components with DOM lifecycle management.
|
|
123
44
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
- Lock/unlock state management
|
|
130
|
-
- Customizable drag handles
|
|
45
|
+
**Features:**
|
|
46
|
+
- Parent-child hierarchy
|
|
47
|
+
- Target-based rendering
|
|
48
|
+
- Model binding
|
|
49
|
+
- Placeholder support for async loading
|
|
131
50
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
### 1. Component Lifecycle
|
|
135
|
-
Components follow a predictable lifecycle:
|
|
51
|
+
**Lifecycle:**
|
|
136
52
|
```javascript
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
//
|
|
141
|
-
panel.dispose(); // Exits document → Cleans up listeners → Removes DOM
|
|
53
|
+
const component = new Component();
|
|
54
|
+
component.target = document.getElementById('container');
|
|
55
|
+
component.render(); // Creates DOM → Enters document → Fires READY event
|
|
56
|
+
component.dispose(); // Exits document → Cleans up → Removes DOM
|
|
142
57
|
```
|
|
143
58
|
|
|
144
|
-
###
|
|
145
|
-
Components communicate through standardized events:
|
|
146
|
-
```javascript
|
|
147
|
-
// Panel dispatches event
|
|
148
|
-
panel.dispatchPanelEvent('custom_action', { data: 'value' });
|
|
59
|
+
### Panel
|
|
149
60
|
|
|
150
|
-
|
|
151
|
-
view.mapPanEv('custom_action', (eventData, panel) => {
|
|
152
|
-
console.log('Panel action:', eventData.data);
|
|
153
|
-
});
|
|
154
|
-
```
|
|
61
|
+
Component for dynamic, URI-based content.
|
|
155
62
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
<input name="q" />
|
|
165
|
-
</form>
|
|
166
|
-
|
|
167
|
-
<!-- Async content loading -->
|
|
168
|
-
<div class="zoo_async_html" data-href="/api/widget"></div>
|
|
169
|
-
|
|
170
|
-
<!-- Toggle class interaction -->
|
|
171
|
-
<button class="zoo__toggle_class_driver"
|
|
172
|
-
data-toggle_class_target_id="menu"
|
|
173
|
-
data-toggle_class="open">
|
|
174
|
-
Toggle Menu
|
|
175
|
-
</button>
|
|
176
|
-
```
|
|
63
|
+
**Features:**
|
|
64
|
+
- URI-based content fetching
|
|
65
|
+
- Query parameter management
|
|
66
|
+
- Server-side HTML rendering
|
|
67
|
+
- Script evaluation
|
|
68
|
+
- Form interception
|
|
69
|
+
- Component library auto-initialization
|
|
70
|
+
- Partial DOM updates
|
|
177
71
|
|
|
178
|
-
|
|
179
|
-
Panels can load content from URIs with query parameter management:
|
|
72
|
+
**Usage:**
|
|
180
73
|
```javascript
|
|
181
|
-
const panel = new Panel('/api/
|
|
74
|
+
const panel = new Panel('/api/content');
|
|
182
75
|
panel.addToQParams('filter', 'active');
|
|
183
|
-
panel.
|
|
76
|
+
panel.render();
|
|
184
77
|
```
|
|
185
78
|
|
|
186
|
-
###
|
|
187
|
-
|
|
79
|
+
### FormPanel
|
|
80
|
+
|
|
81
|
+
Enhanced panel for form handling.
|
|
82
|
+
|
|
83
|
+
**Features:**
|
|
84
|
+
- HTML5 validation
|
|
85
|
+
- Field-level error display
|
|
86
|
+
- AJAX submission
|
|
87
|
+
- Server response processing
|
|
88
|
+
|
|
89
|
+
**Usage:**
|
|
188
90
|
```javascript
|
|
189
91
|
const form = new FormPanel('/api/form');
|
|
190
92
|
form.onSubmitSuccess((panel, response) => {
|
|
191
|
-
console.log('
|
|
93
|
+
console.log('Submitted:', response);
|
|
192
94
|
});
|
|
193
95
|
form.render();
|
|
194
96
|
```
|
|
195
97
|
|
|
196
|
-
###
|
|
197
|
-
Split component creates complex, resizable layouts:
|
|
198
|
-
```javascript
|
|
199
|
-
const split = new Split();
|
|
200
|
-
split.render(document.getElementById('app'));
|
|
98
|
+
### View
|
|
201
99
|
|
|
202
|
-
|
|
203
|
-
split.addSplit(undefined, 'EW', 200, 200);
|
|
100
|
+
Orchestrator for multiple panels.
|
|
204
101
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
102
|
+
**Features:**
|
|
103
|
+
- Panel lifecycle management
|
|
104
|
+
- Event routing between panels
|
|
105
|
+
- Split layout integration
|
|
106
|
+
- Browser history recording
|
|
210
107
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
108
|
+
**Usage:**
|
|
109
|
+
```javascript
|
|
110
|
+
class DashboardView extends View {
|
|
111
|
+
constructor() {
|
|
112
|
+
super();
|
|
113
|
+
this.addPanel('main', new Panel('/dashboard'));
|
|
114
|
+
this.mapPanEv('custom_action', this.handleAction);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
handleAction(eventData, panel) {
|
|
118
|
+
// Handle panel events
|
|
119
|
+
}
|
|
120
|
+
}
|
|
215
121
|
```
|
|
216
122
|
|
|
217
|
-
###
|
|
218
|
-
|
|
123
|
+
### Conductor
|
|
124
|
+
|
|
125
|
+
Top-level application controller.
|
|
126
|
+
|
|
127
|
+
**Features:**
|
|
128
|
+
- View lifecycle management
|
|
129
|
+
- Browser history integration
|
|
130
|
+
- Navigation routing
|
|
131
|
+
- User session management
|
|
132
|
+
|
|
133
|
+
**Usage:**
|
|
219
134
|
```javascript
|
|
220
135
|
const conductor = new Conductor();
|
|
136
|
+
conductor.registerViewConstructor('dashboard', (pk) => new DashboardView(pk));
|
|
137
|
+
conductor.switchView(new DashboardView());
|
|
138
|
+
```
|
|
221
139
|
|
|
222
|
-
|
|
223
|
-
conductor.registerViewConstructor('dashboard', (pk, data) => {
|
|
224
|
-
return new DashboardView(pk, data);
|
|
225
|
-
});
|
|
140
|
+
### Split
|
|
226
141
|
|
|
227
|
-
|
|
228
|
-
conductor.switchView(new DashboardView());
|
|
142
|
+
Resizable layout component.
|
|
229
143
|
|
|
230
|
-
|
|
144
|
+
**Features:**
|
|
145
|
+
- Horizontal (EW) and vertical (NS) orientations
|
|
146
|
+
- Nested splitting
|
|
147
|
+
- Draggable dividers
|
|
148
|
+
- Programmatic control
|
|
149
|
+
- Animated transitions
|
|
150
|
+
|
|
151
|
+
**Usage:**
|
|
152
|
+
```javascript
|
|
153
|
+
const split = new Split();
|
|
154
|
+
split.render(document.getElementById('app'));
|
|
155
|
+
split.addSplit(undefined, 'EW', 200, 200); // [A | B | C]
|
|
156
|
+
split.addSplit(split.getNest('A'), 'NS', 100, 100); // Split A vertically
|
|
231
157
|
```
|
|
232
158
|
|
|
233
|
-
###
|
|
234
|
-
|
|
159
|
+
### Dragger
|
|
160
|
+
|
|
161
|
+
Component for draggable elements.
|
|
162
|
+
|
|
163
|
+
**Features:**
|
|
164
|
+
- Constrained movement (X, Y, or both)
|
|
165
|
+
- Touch and mouse support
|
|
166
|
+
- Drag events with delta tracking
|
|
167
|
+
|
|
168
|
+
## Component Libraries
|
|
169
|
+
|
|
170
|
+
### Registration
|
|
171
|
+
|
|
172
|
+
Register component libraries at application startup:
|
|
173
|
+
|
|
235
174
|
```javascript
|
|
236
|
-
import
|
|
175
|
+
import { registerMdcLibrary, registerCarbonLibrary } from '@trintel/zooy';
|
|
237
176
|
|
|
238
|
-
const
|
|
239
|
-
//
|
|
240
|
-
await
|
|
241
|
-
await zooy.registerCarbonLibrary(); // IBM Carbon Design System
|
|
177
|
+
const init = async () => {
|
|
178
|
+
await registerMdcLibrary(); // Material Design Components
|
|
179
|
+
await registerCarbonLibrary(); // IBM Carbon Design System
|
|
242
180
|
|
|
243
|
-
//
|
|
181
|
+
// Render application
|
|
244
182
|
const view = new MyView();
|
|
245
183
|
view.render();
|
|
246
184
|
};
|
|
247
185
|
```
|
|
248
186
|
|
|
249
|
-
###
|
|
250
|
-
MDC components automatically initialize when panels render:
|
|
251
|
-
```html
|
|
252
|
-
<button class="mdc-button">
|
|
253
|
-
<span class="mdc-button__label">Click Me</span>
|
|
254
|
-
</button>
|
|
255
|
-
|
|
256
|
-
<ul class="mdc-list mdc-tree">
|
|
257
|
-
<li class="mdc-list-item">Tree Item 1</li>
|
|
258
|
-
<li class="mdc-list-item">Tree Item 2</li>
|
|
259
|
-
</ul>
|
|
260
|
-
<!-- Panel.parseContent() automatically initializes all MDC components -->
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
### 10. Carbon Design System
|
|
264
|
-
Carbon Web Components load dynamically as needed:
|
|
265
|
-
```html
|
|
266
|
-
<!-- Use data-carbon-component to specify which component to load -->
|
|
267
|
-
<div data-carbon-component="button">
|
|
268
|
-
<cds-button>Click Me</cds-button>
|
|
269
|
-
</div>
|
|
270
|
-
|
|
271
|
-
<div data-carbon-component="accordion">
|
|
272
|
-
<cds-accordion>
|
|
273
|
-
<cds-accordion-item title="Section 1">
|
|
274
|
-
Content here
|
|
275
|
-
</cds-accordion-item>
|
|
276
|
-
</cds-accordion>
|
|
277
|
-
</div>
|
|
278
|
-
<!-- Components are imported dynamically and cached for performance -->
|
|
279
|
-
```
|
|
187
|
+
### ComponentLibraryRegistry
|
|
280
188
|
|
|
281
|
-
|
|
189
|
+
Central registry for UI libraries.
|
|
282
190
|
|
|
283
|
-
|
|
191
|
+
**Features:**
|
|
192
|
+
- Multiple library support
|
|
193
|
+
- Lazy loading via dynamic imports
|
|
194
|
+
- Import caching
|
|
195
|
+
- Library-specific lifecycle hooks
|
|
284
196
|
|
|
285
|
-
|
|
286
|
-
|
|
197
|
+
**Benefits:**
|
|
198
|
+
- No library lock-in
|
|
199
|
+
- Smaller initial bundles
|
|
200
|
+
- Gradual migration support
|
|
201
|
+
- Framework evolution flexibility
|
|
287
202
|
|
|
288
|
-
|
|
289
|
-
Component libraries load on-demand via dynamic imports:
|
|
203
|
+
**Bundle Sizes:**
|
|
290
204
|
- Core framework: ~101KB (~27KB gzipped)
|
|
291
205
|
- MDC library: +463KB (~62KB gzipped, only if registered)
|
|
292
206
|
- Carbon library: +34KB (~7KB gzipped, only if registered)
|
|
293
|
-
- Individual Carbon components: Loaded as panels use them
|
|
294
207
|
|
|
295
|
-
###
|
|
296
|
-
Migrate from one component library to another incrementally:
|
|
297
|
-
1. Register both libraries
|
|
298
|
-
2. Existing panels continue using MDC
|
|
299
|
-
3. New panels use Carbon
|
|
300
|
-
4. Replace components one-by-one
|
|
301
|
-
5. Eventually remove MDC registration
|
|
208
|
+
### Material Design Components
|
|
302
209
|
|
|
303
|
-
|
|
304
|
-
As component libraries evolve (MDC → Material Web Components), zooy's architecture remains stable. Just swap the registration module.
|
|
210
|
+
MDC components auto-initialize when panels render:
|
|
305
211
|
|
|
306
|
-
|
|
307
|
-
-
|
|
308
|
-
-
|
|
309
|
-
|
|
212
|
+
```html
|
|
213
|
+
<button class="mdc-button">
|
|
214
|
+
<span class="mdc-button__label">Click Me</span>
|
|
215
|
+
</button>
|
|
310
216
|
|
|
311
|
-
|
|
217
|
+
<ul class="mdc-list mdc-tree">
|
|
218
|
+
<li class="mdc-list-item">Item 1</li>
|
|
219
|
+
</ul>
|
|
220
|
+
```
|
|
312
221
|
|
|
313
|
-
### Carbon Design System
|
|
222
|
+
### Carbon Design System
|
|
314
223
|
|
|
315
|
-
|
|
224
|
+
Carbon Web Components load dynamically:
|
|
316
225
|
|
|
317
|
-
|
|
226
|
+
```html
|
|
227
|
+
<cds-button>Click Me</cds-button>
|
|
228
|
+
|
|
229
|
+
<cds-accordion>
|
|
230
|
+
<cds-accordion-item title="Section 1">
|
|
231
|
+
Content
|
|
232
|
+
</cds-accordion-item>
|
|
233
|
+
</cds-accordion>
|
|
234
|
+
```
|
|
318
235
|
|
|
319
|
-
**
|
|
236
|
+
**Carbon Theming:**
|
|
237
|
+
|
|
238
|
+
If importing `@carbon/styles` for theming, configure font paths:
|
|
320
239
|
|
|
321
240
|
```scss
|
|
322
|
-
//
|
|
241
|
+
// Your application's theme file
|
|
323
242
|
@use '@carbon/styles' as * with (
|
|
324
243
|
$font-path: '../path/to/node_modules/@ibm/plex'
|
|
325
244
|
);
|
|
326
245
|
```
|
|
327
246
|
|
|
328
|
-
**Required
|
|
329
|
-
|
|
247
|
+
**Required dependencies:**
|
|
330
248
|
```json
|
|
331
249
|
{
|
|
332
250
|
"dependencies": {
|
|
@@ -336,72 +254,62 @@ If your application imports `@carbon/styles` for theming (e.g., to customize Car
|
|
|
336
254
|
}
|
|
337
255
|
```
|
|
338
256
|
|
|
339
|
-
**
|
|
340
|
-
- CSS output: `/static/css/theme.css`
|
|
341
|
-
- Font files: `/static/js/node_modules/@ibm/plex/...`
|
|
342
|
-
- Correct path: `../js/node_modules/@ibm/plex`
|
|
343
|
-
|
|
344
|
-
**Note**: Zooy itself only imports Carbon Web Components (JavaScript), not the Carbon styles (CSS). CSS theming is the responsibility of the implementing application, allowing full control over design tokens, typography, and component styling.
|
|
257
|
+
**Note:** Zooy imports Carbon Web Components (JavaScript only). CSS theming is the application's responsibility.
|
|
345
258
|
|
|
346
|
-
###
|
|
259
|
+
### Zoo Components
|
|
347
260
|
|
|
348
|
-
|
|
261
|
+
Native zooy components styled via CSS custom properties.
|
|
349
262
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
263
|
+
**Usage:**
|
|
264
|
+
```html
|
|
265
|
+
<zoo-tag token="52">Activated</zoo-tag>
|
|
266
|
+
```
|
|
353
267
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
{
|
|
357
|
-
|
|
268
|
+
**Styling:**
|
|
269
|
+
```scss
|
|
270
|
+
:root {
|
|
271
|
+
--zoo-tag-52-bg: #4fb50b;
|
|
272
|
+
--zoo-tag-52-fg: #ffffff;
|
|
273
|
+
}
|
|
358
274
|
```
|
|
359
275
|
|
|
360
|
-
|
|
361
|
-
- ✅ No JavaScript required
|
|
362
|
-
- ✅ No network requests
|
|
363
|
-
- ✅ No placeholders or flicker
|
|
364
|
-
- ✅ Works without JS (progressive enhancement)
|
|
365
|
-
- ✅ Instant rendering
|
|
276
|
+
## Event-Driven Architecture
|
|
366
277
|
|
|
367
|
-
|
|
278
|
+
Components communicate through standardized events:
|
|
368
279
|
|
|
369
280
|
```javascript
|
|
370
|
-
|
|
281
|
+
// Panel dispatches event
|
|
282
|
+
panel.dispatchPanelEvent('custom_action', { data: 'value' });
|
|
371
283
|
|
|
372
|
-
//
|
|
373
|
-
|
|
374
|
-
|
|
284
|
+
// View listens and handles
|
|
285
|
+
view.mapPanEv('custom_action', (eventData, panel) => {
|
|
286
|
+
console.log('Panel action:', eventData.data);
|
|
287
|
+
});
|
|
375
288
|
```
|
|
376
289
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
## Development
|
|
290
|
+
## Declarative HTML Patterns
|
|
380
291
|
|
|
381
|
-
|
|
382
|
-
- Node.js and npm
|
|
383
|
-
- Modern browser with ES6+ support
|
|
292
|
+
Zooy enhances HTML with data attributes:
|
|
384
293
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
### Linting
|
|
391
|
-
```bash
|
|
392
|
-
npm run lint # Check for issues
|
|
393
|
-
npm run lint:fix # Auto-fix issues
|
|
394
|
-
```
|
|
294
|
+
```html
|
|
295
|
+
<!-- Button with custom event -->
|
|
296
|
+
<button class="zoo__button" data-zv="save" data-pk="123">Save</button>
|
|
395
297
|
|
|
396
|
-
|
|
397
|
-
|
|
298
|
+
<!-- Form interception -->
|
|
299
|
+
<form class="intercept_submit" data-zv="search" data-href="/api/search">
|
|
300
|
+
<input name="q" />
|
|
301
|
+
</form>
|
|
398
302
|
|
|
399
|
-
|
|
303
|
+
<!-- Async content -->
|
|
304
|
+
<div class="zoo_async_html" data-href="/api/widget"></div>
|
|
400
305
|
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
-
|
|
404
|
-
-
|
|
306
|
+
<!-- Toggle class -->
|
|
307
|
+
<button class="zoo__toggle_class_driver"
|
|
308
|
+
data-toggle_class_target_id="menu"
|
|
309
|
+
data-toggle_class="open">
|
|
310
|
+
Toggle Menu
|
|
311
|
+
</button>
|
|
312
|
+
```
|
|
405
313
|
|
|
406
314
|
## Project Structure
|
|
407
315
|
|
|
@@ -409,63 +317,100 @@ Husky is configured to run linting before each commit, ensuring code quality.
|
|
|
409
317
|
zooy/
|
|
410
318
|
├── src/
|
|
411
319
|
│ ├── ui/ # Core UI components
|
|
412
|
-
│ │ ├── evt.js # Event system base
|
|
413
|
-
│ │ ├── component.js # Component base
|
|
414
|
-
│ │ ├── panel.js # Content panel
|
|
415
|
-
│ │ ├── form.js # Form panel
|
|
320
|
+
│ │ ├── evt.js # Event system base
|
|
321
|
+
│ │ ├── component.js # Component base
|
|
322
|
+
│ │ ├── panel.js # Content panel
|
|
323
|
+
│ │ ├── form.js # Form panel
|
|
416
324
|
│ │ ├── view.js # Panel orchestrator
|
|
417
325
|
│ │ ├── conductor.js # Application controller
|
|
418
326
|
│ │ ├── split.js # Resizable layouts
|
|
419
327
|
│ │ ├── dragger.js # Drag functionality
|
|
420
|
-
│ │ ├── component-library-registry.js
|
|
421
|
-
│ │ ├── handlers/ # Event
|
|
422
|
-
│ │ ├── mdc/ #
|
|
423
|
-
│ │ │ ├── register.js
|
|
424
|
-
│ │ │ └── tree-utils.js
|
|
425
|
-
│ │ ├── carbon/ #
|
|
426
|
-
│ │ │ ├── register.js
|
|
427
|
-
│ │ │ ├── renderers.js
|
|
428
|
-
│ │ │ └──
|
|
429
|
-
│ │ └── zoo/ #
|
|
328
|
+
│ │ ├── component-library-registry.js
|
|
329
|
+
│ │ ├── handlers/ # Event handlers
|
|
330
|
+
│ │ ├── mdc/ # MDC integration
|
|
331
|
+
│ │ │ ├── register.js
|
|
332
|
+
│ │ │ └── tree-utils.js
|
|
333
|
+
│ │ ├── carbon/ # Carbon integration
|
|
334
|
+
│ │ │ ├── register.js
|
|
335
|
+
│ │ │ ├── renderers.js
|
|
336
|
+
│ │ │ └── components/
|
|
337
|
+
│ │ └── zoo/ # Native components
|
|
338
|
+
│ │ ├── attributes.js
|
|
339
|
+
│ │ └── components/
|
|
430
340
|
│ ├── dom/ # DOM utilities
|
|
431
|
-
│ ├── events/ # Event types
|
|
432
|
-
│ ├── uri/ # URI
|
|
341
|
+
│ ├── events/ # Event types
|
|
342
|
+
│ ├── uri/ # URI utilities
|
|
433
343
|
│ └── user/ # User management
|
|
434
|
-
├── dist/ # Build output
|
|
435
|
-
│ ├── zooy.es.js
|
|
436
|
-
│ ├── zooy.cjs.js
|
|
437
|
-
│ └── chunks/
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
344
|
+
├── dist/ # Build output
|
|
345
|
+
│ ├── zooy.es.js
|
|
346
|
+
│ ├── zooy.cjs.js
|
|
347
|
+
│ └── chunks/
|
|
348
|
+
└── sass/ # SASS source files
|
|
349
|
+
├── main.scss
|
|
350
|
+
├── split.scss
|
|
351
|
+
└── carbon.scss
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## Exports
|
|
355
|
+
|
|
356
|
+
```javascript
|
|
357
|
+
import zooy from '@trintel/zooy';
|
|
358
|
+
|
|
359
|
+
// Main exports
|
|
360
|
+
zooy.Evt
|
|
361
|
+
zooy.Component
|
|
362
|
+
zooy.Panel
|
|
363
|
+
zooy.FormPanel
|
|
364
|
+
zooy.View
|
|
365
|
+
zooy.Conductor
|
|
366
|
+
zooy.Split
|
|
367
|
+
zooy.Dragger
|
|
368
|
+
zooy.UserManager
|
|
369
|
+
zooy.DataBinder
|
|
370
|
+
zooy.ComponentLibraryRegistry
|
|
371
|
+
zooy.registerCarbonLibrary
|
|
372
|
+
zooy.registerMdcLibrary
|
|
373
|
+
zooy.domUtils
|
|
374
|
+
zooy.uriUtils
|
|
375
|
+
zooy.handlers
|
|
376
|
+
zooy.zoo
|
|
377
|
+
|
|
378
|
+
// SASS exports
|
|
379
|
+
import '@trintel/zooy/sass'; // Main SASS entry point
|
|
448
380
|
```
|
|
449
381
|
|
|
450
|
-
##
|
|
382
|
+
## Development
|
|
451
383
|
|
|
452
|
-
###
|
|
453
|
-
- Use single quotes for strings
|
|
454
|
-
- 2-space indentation
|
|
455
|
-
- Semicolons required
|
|
456
|
-
- Strict equality (===) required
|
|
457
|
-
- JSDoc for all public APIs
|
|
384
|
+
### Setup
|
|
458
385
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
386
|
+
```bash
|
|
387
|
+
npm install
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Build
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
npm run build
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### Linting
|
|
397
|
+
|
|
398
|
+
```bash
|
|
399
|
+
npm run lint # Check
|
|
400
|
+
npm run lint:fix # Auto-fix
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### Pre-commit Hooks
|
|
404
|
+
|
|
405
|
+
Husky runs linting before commits.
|
|
406
|
+
|
|
407
|
+
## Code Quality
|
|
464
408
|
|
|
465
|
-
|
|
466
|
-
-
|
|
467
|
-
-
|
|
409
|
+
- ESLint with flat config
|
|
410
|
+
- JSDoc documentation
|
|
411
|
+
- Type annotations for IDE support
|
|
412
|
+
- Pre-commit hooks
|
|
468
413
|
|
|
469
414
|
## License
|
|
470
415
|
|
|
471
|
-
|
|
416
|
+
Apache-2.0
|