@hjmds/react 1.7.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/THIRD_PARTY_NOTICES.md +57 -0
- package/dist/advanced-display.d.ts +3 -1
- package/dist/advanced-display.d.ts.map +1 -1
- package/dist/advanced-display.js +2 -2
- package/dist/advanced-display.js.map +1 -1
- package/dist/affix.d.ts +10 -0
- package/dist/affix.d.ts.map +1 -0
- package/dist/affix.js +51 -0
- package/dist/affix.js.map +1 -0
- package/dist/carousel-motion.d.ts +13 -0
- package/dist/carousel-motion.d.ts.map +1 -0
- package/dist/carousel-motion.js +35 -0
- package/dist/carousel-motion.js.map +1 -0
- package/dist/celebration.d.ts +8 -0
- package/dist/celebration.d.ts.map +1 -0
- package/dist/celebration.js +51 -0
- package/dist/celebration.js.map +1 -0
- package/dist/color-picker.d.ts +18 -0
- package/dist/color-picker.d.ts.map +1 -0
- package/dist/color-picker.js +40 -0
- package/dist/color-picker.js.map +1 -0
- package/dist/content-transition.d.ts +18 -0
- package/dist/content-transition.d.ts.map +1 -0
- package/dist/content-transition.js +33 -0
- package/dist/content-transition.js.map +1 -0
- package/dist/context-menu.d.ts.map +1 -1
- package/dist/context-menu.js +36 -9
- package/dist/context-menu.js.map +1 -1
- package/dist/date-picker.d.ts.map +1 -1
- package/dist/date-picker.js +39 -1
- package/dist/date-picker.js.map +1 -1
- package/dist/evidence.d.ts +106 -2
- package/dist/evidence.d.ts.map +1 -1
- package/dist/evidence.js +136 -64
- package/dist/evidence.js.map +1 -1
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +3 -2
- package/dist/layout.js.map +1 -1
- package/dist/masonry.d.ts +14 -0
- package/dist/masonry.d.ts.map +1 -0
- package/dist/masonry.js +13 -0
- package/dist/masonry.js.map +1 -0
- package/dist/menu-morph.d.ts +12 -0
- package/dist/menu-morph.d.ts.map +1 -0
- package/dist/menu-morph.js +80 -0
- package/dist/menu-morph.js.map +1 -0
- package/dist/menubar.d.ts.map +1 -1
- package/dist/menubar.js +24 -15
- package/dist/menubar.js.map +1 -1
- package/dist/modal.d.ts +1 -0
- package/dist/modal.d.ts.map +1 -1
- package/dist/modal.js.map +1 -1
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +13 -1
- package/dist/navigation.js.map +1 -1
- package/dist/overlays.d.ts.map +1 -1
- package/dist/overlays.js +33 -2
- package/dist/overlays.js.map +1 -1
- package/dist/qr-code.d.ts +11 -0
- package/dist/qr-code.d.ts.map +1 -0
- package/dist/qr-code.js +14 -0
- package/dist/qr-code.js.map +1 -0
- package/dist/sortable.d.ts +14 -0
- package/dist/sortable.d.ts.map +1 -0
- package/dist/sortable.js +87 -0
- package/dist/sortable.js.map +1 -0
- package/dist/statistic-motion.d.ts +12 -0
- package/dist/statistic-motion.d.ts.map +1 -0
- package/dist/statistic-motion.js +23 -0
- package/dist/statistic-motion.js.map +1 -0
- package/dist/styles.css +166 -134
- package/dist/styles.layered.css +166 -134
- package/dist/swipe-actions.d.ts +13 -0
- package/dist/swipe-actions.d.ts.map +1 -0
- package/dist/swipe-actions.js +25 -0
- package/dist/swipe-actions.js.map +1 -0
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +2 -1
- package/dist/theme.js.map +1 -1
- package/dist/thinking-orb.d.ts +9 -0
- package/dist/thinking-orb.d.ts.map +1 -0
- package/dist/thinking-orb.js +86 -0
- package/dist/thinking-orb.js.map +1 -0
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +14 -3
- package/dist/tree.js.map +1 -1
- package/dist/virtual-list.d.ts +14 -0
- package/dist/virtual-list.d.ts.map +1 -0
- package/dist/virtual-list.js +48 -0
- package/dist/virtual-list.js.map +1 -0
- package/dist/watermark.d.ts +12 -0
- package/dist/watermark.d.ts.map +1 -0
- package/dist/watermark.js +10 -0
- package/dist/watermark.js.map +1 -0
- package/package.json +122 -5
package/dist/overlays.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlays.js","sourceRoot":"","sources":["../src/overlays.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,GAK3B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,GAKtB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GAIxB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACL,YAAY,EACZ,UAAU,EACV,WAAW,GAKZ,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,oBAAoB,GAGrB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,aAAa,EACb,aAAa,EACb,YAAY,GAIb,MAAM,YAAY,CAAC;AAoCpB,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAA8B,SAAS,MAAM,CAC3E,EACE,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,EACjC,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,EAC/C,IAAI,GAAG,KAAK,EACZ,UAAU,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,aAAa,GAAG,CAAC,EACjB,eAAe,EACf,IAAI,EAAE,QAAQ,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EACD,YAAY;IAEZ,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC;QACtC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACrD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;KACxD,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC/D,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,CAAC;IACjC,MAAM,OAAO,GAAG,GAAG,EAAE,QAAQ,CAAC;IAC9B,MAAM,aAAa,GAAG,GAAG,EAAE,cAAc,CAAC;IAE1C,MAAM,gBAAgB,GAAG,MAAM,CAAiC,SAAS,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC9C,WAAW,CAAC,OAAO,GAAG,iBAAiB,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IACvB,MAAM,YAAY,GAAG,CAAC,MAAkD,EAAE,EAAE;QAC1E,IAAI,CAAC,WAAW,IAAI,IAAI;YAAE,OAAO;QACjC,gBAAgB,CAAC,OAAO,GAAG,MAAM,CAAC;QAClC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,IAAI,cAAc,CAAC;QAC1D,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC;QACrC,0EAA0E;QAC1E,uEAAuE;QACvE,cAAc,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,EAAE,CAAC;YAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;YAAC,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC;YAAC,OAAO;QAAC,CAAC;QACtF,IAAI,CAAC,UAAU,CAAC,OAAO;YAAE,OAAO;QAChC,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;QAC3B,MAAM,EAAE,CAAC;IACX,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACX,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;QACnC,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,OAAO,GAAG,EAAE;YACV,cAAc,CAAC,GAAG,EAAE;gBAClB,sEAAsE;gBACtE,sEAAsE;gBACtE,wBAAwB;gBACxB,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO;oBAAE,OAAO;gBAClF,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;gBAC3B,MAAM,EAAE,CAAC;YACX,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,aAAa,CAAC;QACZ,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,aAAa;QACvB,UAAU;QACV,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;QAC7D,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;QAC3D,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;QACnE,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;KACvC,CAAC,CAAC;IAEH,OAAO,CACL,8BACG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAC3C,OAAO,EACP,UAAU,EACV,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAC9C,EACA,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,SAAS,OAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,YAClF,cACE,SAAS,EAAC,aAAa,eACb,QAAQ,yBACG,aAAa,gBACvB,MAAM,EACjB,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAC7B,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;wBACrB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa;4BAAE,YAAY,CAAC,SAAS,CAAC,CAAC;oBACpE,CAAC,YAED,eACE,GAAG,EAAE,gBAAgB,EACrB,EAAE,EAAE,SAAS,EACb,IAAI,EAAC,QAAQ,gBACF,MAAM,qBACA,OAAO,sBACN,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,eAC9C,IAAI,IAAI,SAAS,EAC5B,QAAQ,EAAE,CAAC,CAAC,EACZ,SAAS,EAAE,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC,4BACvB,EAAE,eACd,IAAI,gBACH,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,aAElC,kBAAQ,SAAS,EAAC,oBAAoB,aACpC,aAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,mBAAmB,YAAE,KAAK,GAAM,EAC1D,WAAW,CAAC,CAAC,CAAC,CACb,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mBAAmB,gBACjB,UAAU,EACtB,QAAQ,EAAE,IAAI,EACd,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,uBAGpC,CACV,CAAC,CAAC,CAAC,IAAI,IACD,EACR,WAAW,CAAC,CAAC,CAAC,YAAG,EAAE,EAAE,aAAa,EAAE,SAAS,EAAC,yBAAyB,YAAE,WAAW,GAAK,CAAC,CAAC,CAAC,IAAI,EAChG,QAAQ,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,kBAAkB,YAAE,QAAQ,GAAO,CAAC,CAAC,CAAC,IAAI,EACpE,MAAM,CAAC,CAAC,CAAC,iBAAQ,SAAS,EAAC,oBAAoB,YAAE,MAAM,GAAU,CAAC,CAAC,CAAC,IAAI,IACrE,GACF,GACI,CACb,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC;AACJ,CAAC,CAAC,CAAC;AAgBH,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CACnC,SAAS,WAAW,CAClB,EACE,OAAO,EACP,OAAO,EACP,IAAI,EACJ,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,EACjC,cAAc,EACd,aAAa,GAAG,CAAC,EACjB,eAAe,EACf,IAAI,EAAE,QAAQ,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EACD,YAAY;IAEZ,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAChD,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC;QACtC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACrD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;KACxD,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,MAAM,CAA4B,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9D,IAAI,IAAI,IAAI,UAAU,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACxC,UAAU,CAAC,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,CAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,oBAAoB,CAChC,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAC1E,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,YAAY,CAAC,OAAO,EAC/D,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAC3B,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;IACxE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,UAAU,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ;QAC3E,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,UAAU,CAAC;IACf,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,GAAG,EAAE,eAAe,CAAC;IACvC,MAAM,OAAO,GAAG,GAAG,EAAE,QAAQ,CAAC;IAC9B,MAAM,aAAa,GAAG,GAAG,EAAE,cAAc,CAAC;IAC1C,MAAM,OAAO,GAAG,GAAG,EAAE,QAAQ,CAAC;IAE9B,MAAM,YAAY,GAAG,GAAuB,EAAE;QAC5C,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAClD,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAC7B,oBAAoB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,MAAkC,EAAE,EAAE;QACpD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO;QACrC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,aAAa,CAAC;QACZ,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,aAAa;QACvB,UAAU;QACV,eAAe;QACf,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;QAC3D,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;QACnE,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;KACjC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;YAAE,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI;YAAE,OAAO;QACjB,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9D,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,YAAY,EAAE,CAAC;aAClE,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,CAAC,SAAS,EAAE,CAAC;QACxE,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;IAC5B,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC9B,SAAS,CACP,GAAG,EAAE,CAAC,GAAG,EAAE;QACT,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAClC,CAAC,EACD,EAAE,CACH,CAAC;IACF,MAAM,IAAI,GAAoB,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IAE1D,OAAO,CACL,8BACG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAC3C,OAAO,EACP,UAAU,EACV,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,GAAG,EAAE;gBACH,YAAY,EAAE,CAAC;gBACf,UAAU,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1C,CAAC,CACF,EACA,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,SAAS,OAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,YAClF,cACE,SAAS,EAAC,aAAa,eACb,cAAc,yBACH,aAAa,gBACvB,MAAM,EACjB,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,YAE7B,eACE,GAAG,EAAE,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,EAC1C,EAAE,EAAE,SAAS,EACb,IAAI,EAAC,aAAa,gBACP,MAAM,qBACA,OAAO,sBACN,GAAG,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,eACtD,IAAI,IAAI,SAAS,EAC5B,QAAQ,EAAE,CAAC,CAAC,EACZ,SAAS,EAAE,UAAU,CAAC,kBAAkB,EAAE,SAAS,CAAC,4BAC7B,EAAE,eACd,IAAI,eACJ,IAAI,gBACH,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,aAEnD,IAAI,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,wBAAwB,iBAAa,MAAM,YAAE,IAAI,GAAO,CAAC,CAAC,CAAC,IAAI,EACtF,aAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,yBAAyB,YAAE,OAAO,CAAC,KAAK,GAAM,EACzE,YAAG,EAAE,EAAE,aAAa,EAAE,SAAS,EAAC,+BAA+B,YAAE,OAAO,CAAC,WAAW,GAAK,EACxF,KAAK,CAAC,CAAC,CAAC,YAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAC,OAAO,YAAE,KAAK,GAAK,CAAC,CAAC,CAAC,IAAI,EAC5F,eAAK,SAAS,EAAC,2BAA2B,aACvC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAC5B,KAAC,MAAM,IACL,GAAG,EAAE,SAAS,EACd,IAAI,EAAC,WAAW,EAChB,QAAQ,EAAE,IAAI,IAAI,OAAO,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,YAErC,OAAO,CAAC,WAAW,GACb,CACV,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,MAAM,IACL,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAC9C,OAAO,EAAE,IAAI,EACb,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,YAE5B,OAAO,CAAC,YAAY,GACd,IACL,IACF,GACF,GACI,CACb,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC;AACJ,CAAC,CACF,CAAC;AA4CF,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAA6B,SAAS,KAAK,CACxE,EACE,OAAO,EACP,KAAK,EACL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,SAAS,EAC1C,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAChC,OAAO,EACP,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,IAAI,GAAG,KAAK,EACZ,aAAa,EACb,UAAU,EACV,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,aAAa,GAAG,CAAC,EACjB,eAAe,EACf,IAAI,EAAE,QAAQ,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EACD,YAAY;IAEZ,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC;QACtC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACrD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;KACxD,CAAC,CAAC;IACH,MAAM,MAAM,GAAuB,EAAE,GAAG,qBAAqB,EAAE,GAAG,aAAa,EAAE,CAAC;IAClF,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,MAAM,gBAAgB,GAAG,MAAM,CAAiC,SAAS,CAAC,CAAC;IAC3E,MAAM,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrD,kBAAkB,CAAC,OAAO,GAAG,iBAAiB,CAAC;IAC/C,MAAM,gBAAgB,GAAG,MAAM,CAAuC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACvF,gBAAgB,CAAC,OAAO,GAAG,CAAC,MAAM,EAAE,EAAE;QACpC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC;YACrC,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;YAChC,kBAAkB,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,GAAG,EAAE,QAAQ,CAAC;IAChC,MAAM,OAAO,GAAG,GAAG,EAAE,QAAQ,CAAC;IAC9B,MAAM,aAAa,GAAG,GAAG,EAAE,cAAc,CAAC;IAC1C,MAAM,YAAY,GAAG,CAAC,MAA0B,EAAE,EAAE;QAClD,IAAI,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAC5D,gBAAgB,CAAC,OAAO,GAAG,MAAM,CAAC;YAClC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,EAAE,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5B,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;YAC/B,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,OAAO;YAAE,OAAO;QACrC,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC;IACvE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACX,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAChC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,GAAG,CAAC,CAAC;QACxC,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,cAAc,CAAC,GAAG,EAAE;gBAClB,oEAAoE;gBACpE,kEAAkE;gBAClE,2DAA2D;gBAC3D,IAAI,aAAa,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO;oBAAE,OAAO;gBACvE,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC;YACvE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,aAAa,CAAC;QACZ,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,aAAa;QACvB,UAAU;QACV,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;QAC7D,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;QAC3D,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;QACnE,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;KACvC,CAAC,CAAC;IAEH,OAAO,CACL,8BACG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAC3C,OAAO,EACP,UAAU,EACV,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAC9C,EACA,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,SAAS,OAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,YAClF,cACE,SAAS,EAAC,kCAAkC,eAClC,OAAO,yBACI,aAAa,oBAClB,SAAS,gBACd,MAAM,EACjB,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAC7B,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;wBACrB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa;4BAAE,YAAY,CAAC,SAAS,CAAC,CAAC;oBACpE,CAAC,YAED,eACE,GAAG,EAAE,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC,EAC1C,EAAE,EAAE,SAAS,EACb,IAAI,EAAC,QAAQ,gBACF,MAAM,qBACA,OAAO,sBACN,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,eAC9C,IAAI,IAAI,SAAS,EAC5B,QAAQ,EAAE,CAAC,CAAC,EACZ,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,4BACtB,EAAE,oBACT,SAAS,iBACZ,YAAY,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,qBAChD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,gBAC9B,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,aAOjC,OAAO,IAAI,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,CACzC,cAAK,SAAS,EAAC,uBAAuB,YACpC,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mBAAmB,gBAE3B,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,KAAK,IAAI;wCAC9D,CAAC,CAAC,YAAY,CAAC,QAAQ;wCACvB,CAAC,CAAC,YAAY,CAAC,MAAM,EAEzB,OAAO,EAAE,GAAG,EAAE;wCACZ,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;wCACvE,MAAM,IAAI,GAAG,MAAM,IAAI,sBAAsB,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;wCACjF,IAAI,IAAI,KAAK,IAAI;4CAAE,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC;oCAC5C,CAAC,YAED,8BAAkB,MAAM,EAAC,SAAS,EAAC,uBAAuB,GAAG,GACtD,GACL,CACP,CAAC,CAAC,CAAC,IAAI,EACR,kBAAQ,SAAS,EAAC,mBAAmB,aACnC,0BACE,aAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,kBAAkB,YAAE,KAAK,GAAM,EACzD,WAAW,CAAC,CAAC,CAAC,YAAG,EAAE,EAAE,aAAa,EAAE,SAAS,EAAC,wBAAwB,YAAE,WAAW,GAAK,CAAC,CAAC,CAAC,IAAI,IAC5F,EACL,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CACpB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mBAAmB,gBACjB,UAAU,EACtB,QAAQ,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAC1C,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,uBAGpC,CACV,CAAC,CAAC,CAAC,IAAI,IACD,EACR,QAAQ,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,iBAAiB,YAAE,QAAQ,GAAO,CAAC,CAAC,CAAC,IAAI,EACnE,MAAM,CAAC,CAAC,CAAC,iBAAQ,SAAS,EAAC,mBAAmB,YAAE,MAAM,GAAU,CAAC,CAAC,CAAC,IAAI,IACpE,GACF,GACI,CACb,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAC;AACJ,CAAC,CAAC,CAAC;AAcH,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAgC,SAAS,OAAO,CAC/E,EACE,OAAO,EACP,OAAO,EACP,SAAS,EACT,KAAK,EACL,kBAAkB,GAAG,uBAAuB,CAAC,kBAAkB,EAC/D,gBAAgB,GAAG,uBAAuB,CAAC,gBAAgB,EAC3D,eAAe,EACf,IAAI,EAAE,QAAQ,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,EACD,GAAG;IAEH,MAAM,UAAU,GAAG,wBAAwB,CAAC;QAC1C,OAAO;QACP,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;KAC1C,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC;QACtC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACrD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;KACxD,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,CAA4C,SAAS,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAyB,IAAI,CAAC,CAAC;IAC7E,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC;IACpD,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAC;IAC5C,MAAM,eAAe,GAAG,WAAW,EAAE,QAAQ,IAAI,IAAI,CAAC;IACtD,MAAM,eAAe,GAAG,WAAW,EAAE,QAAQ,CAAC;IAC9C,MAAM,iBAAiB,GAAG,WAAW,EAAE,UAAU,CAAC;IAClD,MAAM,sBAAsB,GAAG,WAAW,EAAE,eAAe,CAAC;IAC5D,MAAM,OAAO,GAAG,IAAI;QAClB,CAAC,WAAW,KAAK,IAAI;YACnB,eAAe,KAAK,IAAI;YACxB,eAAe,KAAK,EAAE,CAAC,CAAC;IAC5B,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS;YAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC;IAC/B,CAAC,CAAC;IACF,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,CACf,QAAiB,EACjB,KAAa,EACb,MAAgC,EAChC,EAAE;QACF,UAAU,EAAE,CAAC;QACb,IAAI,QAAQ,IAAI,aAAa,CAAC,OAAO;YAAE,OAAO;QAC9C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,IAAI,QAAQ;gBAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;YACpC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACjC,IAAI,QAAQ;gBAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;YACpC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI;YAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;;YAC3B,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,eAAe,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IACnD,SAAS,CAAC,GAAG,EAAE;QACb,IACE,IAAI;YACJ,eAAe,KAAK,IAAI;YACxB,eAAe,KAAK,EAAE,EACtB,CAAC;YACD,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5C,SAAS,CACP,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,EACnC,CAAC,iBAAiB,EAAE,EAAE,CAAC,CACxB,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;IACnC,MAAM,WAAW,GAAG,OAAO;QACzB,CAAC,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAClE,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;IACrC,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,EAAE;QAC5C,GAAG,EAAE,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC;QAC9C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,YAAY,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO;gBAAE,OAAO;YAC1C,QAAQ,CACN,IAAI,EACJ,sBAAsB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,EACnD,EAAE,MAAM,EAAE,SAAS,EAAE,CACtB,CAAC;QACJ,CAAC;QACD,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,YAAY,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO;gBAAE,OAAO;YAC1C,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;YAC9B,IAAI,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1D,UAAU,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,YAAY,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YAC9B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,YAAY,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;YAC7B,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;YAC9B,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,YAAY,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC;gBACtC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,UAAU,EAAE,CAAC;gBACb,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC7B,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,YAAY,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBACvC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,EAAE,WAAW,EAAE;QAC9D,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,IAA4B,EAAE,EAAE;QACjE,cAAc,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,gBACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,oBAC/B,UAAU,CAAC,SAAS,gBACxB,UAAU,CAAC,KAAK,gBAChB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EACvC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO;gBAAE,UAAU,EAAE,CAAC;QAClD,CAAC,EACD,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO;gBAAE,OAAO;YAC1C,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;YAC9B,IAAI,mBAAmB,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1D,UAAU,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;QAClD,CAAC,aAEA,eAAe,EACf,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,cAAc,IACb,SAAS,EAAE,UAAU,EACrB,WAAW,EAAC,QAAQ,KAChB,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,YAEzE,eACE,GAAG,EAAE,aAAa,EAClB,EAAE,EAAE,EAAE,EACN,IAAI,EAAC,SAAS,EACd,SAAS,EAAC,sBAAsB,oBAChB,aAAa,CAAC,SAAS,gBAC3B,aAAa,CAAC,KAAK,EAC/B,KAAK,EAAE,aAAa,CAAC,KAAK,EAC1B,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;wBACxB,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO;4BAAE,UAAU,EAAE,CAAC;oBAClD,CAAC,EACD,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;wBACxB,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO;4BAAE,OAAO;wBAC1C,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;wBAC9B,IAAI,mBAAmB,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;4BACjE,UAAU,EAAE,CAAC;4BACb,OAAO;wBACT,CAAC;wBACD,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;oBAClD,CAAC,YAEA,UAAU,CAAC,OAAO,GACd,GACQ,CAClB,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC;AACJ,CAAC,CAAC,CAAC;AAiGH,SAAS,aAAa,CAAC,IAAc;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1F,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,SAAS,CAAC,aAAa,IAAI,CAAC,EAAE,gCAAgC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,iBAAiB,CACxB,KAA0B,EAC1B,QAA4C,EAC5C,UAA0B;IAE1B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC,MAAM,KAAK,aAAa,CAAC,EAAE,CAAC;QAChG,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;QACvF,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,2BAA2B,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAChF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,aAAa,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAC;YAC7F,IAAI,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,8BAA8B,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;YAChG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,gBAAgB,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAC;YACpG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;gBAC3C,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,SAAS,CAAC,gBAAgB,OAAO,CAAC,EAAE,sCAAsC,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;IACH,CAAC;IACD,IACE,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC,MAAM,KAAK,aAAa,CAAC;QACrE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EACrC,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAA4B,SAAS,IAAI,CAAC,KAAK,EAAE,GAAG;IAChF,uEAAuE;IACvE,MAAM,cAAc,GAAG,oBAAoB,CAAC;QAC1C,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,OAAO;QACxC,OAAO,EAAE,SAAS;KACnB,CAAC,CAAC;IACH,MAAM,EACJ,OAAO,EACP,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,KAAK,GAAG,OAAO,EACf,QAAQ,GAAG,KAAK,EAChB,UAAU,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EAC/B,QAAQ,EACR,oBAAoB,EACpB,eAAe,EACf,IAAI,EAAE,QAAQ,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,GAAG,KAAK,CAAC;IACV,MAAM,OAAO,GAAG,WAAW,IAAI,cAAc,CAAC;IAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,MAAM,KAAK,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;IACnF,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,QAAQ,CAAC;IACtD,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC;QACtC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACrD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;KACxD,CAAC,CAAC;IACH,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAChD,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC1C,CAAC;IACF,MAAM,eAAe,GAAG,aAAa,KAAK,QAAQ;QAChD,CAAC,CAAE,KAA6B;QAChC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,iBAAiB,GAAG,aAAa,KAAK,UAAU;QACpD,CAAC,CAAE,KAA+B;QAClC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,oBAAoB,CAAgB;QACxE,GAAG,CAAC,eAAe,EAAE,KAAK,KAAK,SAAS;YACtC,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,EAAE;YAClC,CAAC,CAAC,EAAE,CAAC;QACP,YAAY,EAAE,eAAe,EAAE,YAAY,IAAI,IAAI;QACnD,GAAG,CAAC,eAAe,EAAE,aAAa,KAAK,SAAS;YAC9C,CAAC,CAAC;gBACE,QAAQ,EAAE,CAAC,IAAmB,EAAE,EAAE;oBAChC,IAAI,IAAI,KAAK,IAAI;wBAAE,eAAe,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC3D,CAAC;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,oBAAoB,CAAsB;QAClF,GAAG,CAAC,iBAAiB,EAAE,KAAK,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,KAAK,EAAE;YACpC,CAAC,CAAC,EAAE,CAAC;QACP,YAAY,EAAE,iBAAiB,EAAE,YAAY,IAAI,IAAI,GAAG,EAAU;QAClE,GAAG,CAAC,iBAAiB,EAAE,aAAa,KAAK,SAAS;YAChD,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,aAAa,EAAE;YAC/C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,IAAI,aAAa,KAAK,QAAQ,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,UAAU,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,aAAa,KAAK,UAAU,EAAE,CAAC;QACjC,KAAK,MAAM,UAAU,IAAI,aAAa,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,GAAG,EAA6B,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAC;IAC5E,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,iBAAiB,GAAG,MAAM,CAAqB,SAAS,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC;IACjD,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACxF,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,IAA2B,EAAE,EAAE;QACpE,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,OAAO,GAAG,KAAK,UAAU;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC;aACpC,IAAI,GAAG;YAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;IACnC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC5B,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;gBAChC,cAAc,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC;YAC9C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,iBAAiB,CAAC,OAAO,GAAG,SAAS,CAAC;gBACtC,cAAc,CAAC,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;;YACpC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC;IAE1D,MAAM,cAAc,GAAG,CAAC,IAAc,EAAE,EAAE,CACxC,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1D,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC;gBAAE,OAAO,KAAK,CAAC;QACnE,CAAC;QACD,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,EAAE;QAChC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,cAAc,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE;QACjC,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACxE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,EAAE,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,MAA4B,EAAE,OAAgB,EAAE,EAAE;QAC/D,IAAI,OAAO;YAAE,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5C,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,QAA0B,OAAO,EAAE,EAAE;QACrD,IAAI,QAAQ;YAAE,OAAO;QACrB,MAAM,KAAK,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACjE,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,UAAU,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAE,CAClC,aAAa,KAAK,QAAQ;QACxB,CAAC,CAAC,WAAW,KAAK,EAAE;QACpB,CAAC,CAAC,aAAa,KAAK,UAAU;YAC5B,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,CAAC,CAAC,KAAK,CAAC;IAEd,MAAM,YAAY,GAAG,CAAC,IAAc,EAAE,KAAa,EAAE,EAAE;QACrD,IAAI,cAAc,CAAC,IAAI,CAAC;YAAE,OAAO;QACjC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClB,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,aAAa,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;gBACvC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvB,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QACD,IAAI,aAAa,KAAK,QAAQ;YAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG;YAC5D,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK;YAC5B,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,QAAQ,GAAG,GAAG,QAAQ,GAAG,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACjF,YAAY,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAC9D,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,CAAC,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YAClE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,IACE,IAAI;gBACJ,CAAC,cAAc,CAAC,IAAI,CAAC;gBACrB,aAAa,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAC1D,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,CAAC;gBACf,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,iBAAiB,GAAG,CAAC,KAAmB,EAAE,EAAE;YAChD,IACE,KAAK,CAAC,MAAM,YAAY,IAAI;gBAC5B,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;gBAC3C,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAC3C,CAAC;gBACD,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAC5D,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;IACnC,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,EAAE;QAC5C,GAAG,EAAE,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC;QAC9C,eAAe,EAAE,EAAE;QACnB,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,MAAM;QACvB,eAAe,EAAE,QAAQ,IAAI,SAAS;QACtC,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAI,QAAQ;QAC3C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,YAAY,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,KAAK,CAAC,gBAAgB,IAAI,YAAY,CAAC,QAAQ,IAAI,QAAQ;gBAAE,OAAO;YACxE,IAAI,IAAI;gBAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;;gBAC7B,QAAQ,EAAE,CAAC;QAClB,CAAC;QACD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,YAAY,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,gBAAgB;gBAAE,OAAO;YACnC,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC5E,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;iBAAM,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBACnC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,CAAC,KAAyC,EAAE,EAAE;QACtE,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,SAAS,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACnC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;YAChC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YAC/B,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtB,CAAC;aAAM,IACL,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;YACtB,KAAK,CAAC,GAAG,KAAK,GAAG;YACjB,CAAC,KAAK,CAAC,MAAM;YACb,CAAC,KAAK,CAAC,OAAO;YACd,CAAC,KAAK,CAAC,OAAO,EACd,CAAC;YACD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,KAAK,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,CAAC;IAEjF,OAAO,CACL,gBAAM,GAAG,EAAE,UAAU,EAAE,SAAS,EAAC,UAAU,gBAAa,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,aAC7E,eAAe,EACf,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,cAAc,IACb,SAAS,EAAE,UAAU,EACrB,WAAW,EAAC,QAAQ,KAChB,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,YAEzE,eACE,GAAG,EAAE,iBAAiB,EACtB,EAAE,EAAE,EAAE,EACN,IAAI,EAAC,MAAM,gBACC,KAAK,EACjB,SAAS,EAAE,UAAU,CAAC,mBAAmB,EAAE,SAAS,CAAC,kBACvC,OAAO,sBACH,UAAU,CAAC,MAAM,oBACnB,aAAa,CAAC,SAAS,gBAC3B,aAAa,CAAC,KAAK,eAE7B,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,KAAK,aAAa,IAAI,SAAS,EAErF,KAAK,EAAE,aAAa,CAAC,KAAK,EAC1B,QAAQ,EAAE,CAAC,CAAC,EACZ,SAAS,EAAE,iBAAiB,aAE3B,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAC9B,cACE,SAAS,EAAC,yBAAyB,EACnC,IAAI,EAAE,UAAU,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,YAEvD,UAAU,CAAC,OAAO,GACf,CACP,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;4BAC/D,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BACvC,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;4BAC1C,MAAM,IAAI,GAAG,aAAa,KAAK,QAAQ;gCACrC,CAAC,CAAC,eAAe;gCACjB,CAAC,CAAC,aAAa,KAAK,UAAU;oCAC5B,CAAC,CAAC,kBAAkB;oCACpB,CAAC,CAAC,UAAU,CAAC;4BACjB,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;wBACnE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE;4BAC1C,MAAM,cAAc,GAAG,GAAG,EAAE,YAAY,YAAY,EAAE,CAAC;4BACvD,MAAM,UAAU,GAAG,QAAQ;iCACxB,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;iCACtB,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;4BAC/D,OAAO,CACL,eAAsB,SAAS,EAAC,4BAA4B,aACzD,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,cAAK,IAAI,EAAC,WAAW,EAAC,SAAS,EAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,IAAI,EACnF,eACE,IAAI,EAAC,OAAO,qBACK,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,gBAC/C,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAClE,SAAS,EAAC,mBAAmB,aAE5B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CACf,cAAK,EAAE,EAAE,cAAc,EAAE,SAAS,EAAC,yBAAyB,YACzD,OAAO,CAAC,KAAK,GACV,CACP,CAAC,CAAC,CAAC,IAAI,EACP,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;gDACrC,MAAM,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;gDACrC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gDACvC,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;gDAC1C,MAAM,IAAI,GAAG,aAAa,KAAK,QAAQ;oDACrC,CAAC,CAAC,eAAe;oDACjB,CAAC,CAAC,aAAa,KAAK,UAAU;wDAC5B,CAAC,CAAC,kBAAkB;wDACpB,CAAC,CAAC,UAAU,CAAC;gDACjB,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;4CACnE,CAAC,CAAC,IACE,KAxBE,OAAO,CAAC,EAAE,CAyBd,CACP,CAAC;wBACJ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IACN,GACS,CAClB,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC;IAEF,SAAS,cAAc,CACrB,IAAc,EACd,KAAa,EACb,IAAuD,EACvD,QAAiB,EACjB,YAAqB;QAErB,OAAO,CACL,kBAEE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;gBACZ,IAAI,IAAI,EAAE,CAAC;oBACT,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAClC,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;wBAClD,cAAc,CAAC,GAAG,EAAE;4BAClB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;gCAAE,IAAI,CAAC,KAAK,EAAE,CAAC;wBAC7C,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;;oBAAM,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC,EACD,IAAI,EAAC,QAAQ,EACb,IAAI,EAAE,IAAI,kBACI,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAC/D,SAAS,EAAC,gBAAgB,eACf,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,gBACxC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,gBAC1D,KAAK,KAAK,UAAU,IAAI,SAAS,EAC7C,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,CAAC,YAAY,IAAI,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACxD,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,aAEvC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CACxB,eAAM,SAAS,EAAC,4BAA4B,iBAAa,MAAM,kBAAS,CACzE,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,mBAAmB,iBAAa,MAAM,YAAE,IAAI,CAAC,OAAO,GAAQ,CAAC,CAAC,CAAC,IAAI,EACnG,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,yBAAO,IAAI,CAAC,KAAK,GAAQ,EACxB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,uBAAuB,YAAE,IAAI,CAAC,WAAW,GAAQ,CAAC,CAAC,CAAC,IAAI,IACvF,EACN,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,oBAAoB,YAAE,IAAI,CAAC,QAAQ,GAAQ,CAAC,CAAC,CAAC,IAAI,KA9B9E,IAAI,CAAC,EAAE,CA+BL,CACV,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC","sourcesContent":["import {\n createAlertDialogSession,\n getAlertDialogInitialFocus,\n validateAlertDialogRequest,\n type AlertDialogPhase,\n type AlertDialogOpenChangeReason,\n type AlertDialogRequest,\n type AlertDialogSession,\n} from \"@hjmds/design-contracts/components/alert-dialog\";\nimport {\n createSheetLifecycle,\n resolveNextSheetDetent,\n sheetBehaviorDefaults,\n type SheetDetent,\n type SheetDismissPolicy,\n type SheetDismissReason,\n type SheetOpenChangeDetails,\n} from \"@hjmds/design-contracts/components/sheet\";\nimport {\n resolveTooltipDescriptor,\n tooltipBehaviorDefaults,\n type TooltipAlign,\n type TooltipOpenChangeDetails,\n type TooltipPlacement,\n} from \"@hjmds/design-contracts/components/tooltip\";\nimport {\n dialogRecipe,\n menuRecipe,\n sheetRecipe,\n type AlertDialogTone,\n type DialogSize,\n type MenuDensity,\n type MenuItemTone,\n} from \"@hjmds/design-contracts/recipes\";\nimport type { MenuSectionDescriptor } from \"@hjmds/design-contracts/behaviors\";\nimport {\n cloneElement,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n useSyncExternalStore,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"./actions.js\";\nimport { classNames, composeRefs, useControllableState } from \"./internal.js\";\nimport { AnchoredPortal, useAnchoredPopup } from \"./portal.js\";\nimport { useHjmDensityDefault, useTooltipCoordinator } from \"./provider.js\";\nimport {\n containsEventTarget,\n getModalLayer,\n HjmPortal,\n renderTrigger,\n useModalFocus,\n useOpenState,\n type ModalOpenState,\n type OpenState,\n type OverlayTrigger,\n} from \"./modal.js\";\n\nexport type { OverlayTrigger } from \"./modal.js\";\n\nexport type DialogOpenChangeReason =\n | \"trigger\"\n | \"close-action\"\n | \"escape\"\n | \"outside\";\n\nexport type DialogProps = ModalOpenState<Readonly<{ reason: DialogOpenChangeReason }>> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n size?: DialogSize;\n dismissible?: boolean;\n busy?: boolean;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /**\n * Fires once per visible cycle, after the portal is gone and focus has been\n * restored — the signal a product needs before opening the next overlay.\n * Sheet already owns this split; Dialog kept only the request side, which is\n * why products reached for a 0ms timer to guess when cleanup had finished.\n */\n onDismissComplete?: (detail: Readonly<{ reason: Exclude<DialogOpenChangeReason, \"trigger\"> | \"programmatic\" }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(function Dialog(\n {\n trigger,\n title,\n description,\n children,\n footer,\n size = dialogRecipe.defaults.size,\n dismissible = dialogRecipe.defaults.dismissible,\n busy = false,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const modalLayer = getModalLayer(modalPriority);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const mergedContentRef = composeRefs(contentRef, forwardedRef);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-dialog`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n type DialogSettleReason = Exclude<DialogOpenChangeReason, \"trigger\"> | \"programmatic\";\n const dismissReasonRef = useRef<DialogSettleReason | undefined>(undefined);\n const wasOpenRef = useRef(open);\n const completeRef = useRef(onDismissComplete);\n completeRef.current = onDismissComplete;\n const openRef = useRef(open);\n openRef.current = open;\n const requestClose = (reason: Exclude<DialogOpenChangeReason, \"trigger\">) => {\n if (!dismissible || busy) return;\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n };\n const settle = () => {\n const reason = dismissReasonRef.current ?? \"programmatic\";\n dismissReasonRef.current = undefined;\n // After the portal is unmounted and `useModalFocus` has restored focus in\n // its own microtask, so the next overlay can open without a 0ms guess.\n queueMicrotask(() => queueMicrotask(() => completeRef.current?.({ reason })));\n };\n useEffect(() => {\n if (open) { wasOpenRef.current = true; dismissReasonRef.current = undefined; return; }\n if (!wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n }, [open]);\n const epochRef = useRef(0);\n useEffect(() => {\n const epoch = epochRef.current + 1;\n epochRef.current = epoch;\n return () => {\n queueMicrotask(() => {\n // StrictMode re-runs setup right after its probe cleanup; only a real\n // unmount has no later epoch. An open Dialog torn down that way still\n // settles exactly once.\n if (epochRef.current !== epoch || !openRef.current || !wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n });\n };\n }, []);\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay\"\n data-kind=\"dialog\"\n data-modal-priority={modalPriority}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) requestClose(\"outside\");\n }}\n >\n <div\n ref={mergedContentRef}\n id={contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-dialog\", className)}\n data-hjm-modal-content=\"\"\n data-size={size}\n data-state={busy ? \"busy\" : \"idle\"}\n >\n <header className=\"hjm-dialog__header\">\n <h2 id={titleId} className=\"hjm-dialog__title\">{title}</h2>\n {dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {description ? <p id={descriptionId} className=\"hjm-dialog__description\">{description}</p> : null}\n {children ? <div className=\"hjm-dialog__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-dialog__footer\">{footer}</footer> : null}\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n});\n\nexport type AlertDialogProps = ModalOpenState<\n Readonly<{ reason: AlertDialogOpenChangeReason }>\n> &\n Readonly<{\n request: AlertDialogRequest;\n icon?: ReactNode;\n size?: DialogSize;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const AlertDialog = forwardRef<HTMLDivElement, AlertDialogProps>(\n function AlertDialog(\n {\n trigger,\n request,\n icon,\n size = dialogRecipe.defaults.size,\n returnFocusRef,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n ) {\n const modalLayer = getModalLayer(modalPriority);\n validateAlertDialogRequest(request);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const sessionRef = useRef<AlertDialogSession | null>(null);\n const [sessionGeneration, setSessionGeneration] = useState(0);\n if (open && sessionRef.current === null) {\n sessionRef.current = createAlertDialogSession(request);\n }\n const idleSnapshot = useRef<AlertDialogPhase>({ status: \"idle\" });\n const phase = useSyncExternalStore(\n (listener) => sessionRef.current?.subscribe(listener) ?? (() => undefined),\n () => sessionRef.current?.getSnapshot() ?? idleSnapshot.current,\n () => idleSnapshot.current,\n );\n const busy = phase.status === \"busy\";\n const closing = phase.status === \"closing\" || phase.status === \"closed\";\n const error = phase.status === \"error\" ? phase.message : undefined;\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const cancelRef = useRef<HTMLButtonElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n const initialFocusRef = getAlertDialogInitialFocus(request.mode) === \"cancel\"\n ? cancelRef\n : confirmRef;\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-alert-dialog`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const errorId = `${id}-error`;\n\n const startSession = (): AlertDialogSession => {\n sessionRef.current?.interrupt();\n const session = createAlertDialogSession(request);\n sessionRef.current = session;\n setSessionGeneration((current) => current + 1);\n return session;\n };\n const cancel = (reason: \"cancel-action\" | \"escape\") => {\n const session = sessionRef.current;\n if (!session?.cancel(reason)) return;\n changeOpen(false, { reason });\n };\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n initialFocusRef,\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => cancel(\"escape\"),\n });\n\n const confirm = async () => {\n const session = sessionRef.current;\n if (!session) return;\n if (await session.confirm()) changeOpen(false, { reason: \"confirm\" });\n };\n useEffect(() => {\n if (open) return;\n const session = sessionRef.current;\n if (!session) return;\n const snapshot = session.getSnapshot();\n if (snapshot.status === \"idle\" || snapshot.status === \"error\") {\n session.cancel(\"programmatic\");\n }\n if (session.getSnapshot().status === \"closing\") session.completeExit();\n else if (session.getSnapshot().status !== \"closed\") session.interrupt();\n sessionRef.current = null;\n }, [open, sessionGeneration]);\n useEffect(\n () => () => {\n sessionRef.current?.interrupt();\n },\n [],\n );\n const tone: AlertDialogTone = request.tone ?? \"attention\";\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => {\n startSession();\n changeOpen(true, { reason: \"trigger\" });\n },\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay\"\n data-kind=\"alert-dialog\"\n data-modal-priority={modalPriority}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n >\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n role=\"alertdialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={`${descriptionId}${error ? ` ${errorId}` : \"\"}`}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-alert-dialog\", className)}\n data-hjm-modal-content=\"\"\n data-size={size}\n data-tone={tone}\n data-state={busy ? \"busy\" : error ? \"error\" : \"idle\"}\n >\n {icon ? <div className=\"hjm-alert-dialog__icon\" aria-hidden=\"true\">{icon}</div> : null}\n <h2 id={titleId} className=\"hjm-alert-dialog__title\">{request.title}</h2>\n <p id={descriptionId} className=\"hjm-alert-dialog__description\">{request.description}</p>\n {error ? <p id={errorId} className=\"hjm-alert-dialog__error\" role=\"alert\">{error}</p> : null}\n <div className=\"hjm-alert-dialog__actions\">\n {request.mode === \"confirm\" ? (\n <Button\n ref={cancelRef}\n tone=\"secondary\"\n disabled={busy || closing}\n onClick={() => cancel(\"cancel-action\")}\n >\n {request.cancelLabel}\n </Button>\n ) : null}\n <Button\n ref={confirmRef}\n tone={tone === \"danger\" ? \"danger\" : \"primary\"}\n loading={busy}\n disabled={closing}\n onClick={() => void confirm()}\n >\n {request.confirmLabel}\n </Button>\n </div>\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n },\n);\n\nexport type SheetPlacement = \"bottom\" | \"start\" | \"end\";\n\nexport type SheetSize = keyof typeof sheetRecipe.sizes;\n\nexport type SheetProps = ModalOpenState<SheetOpenChangeDetails> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n placement?: SheetPlacement;\n /**\n * Height the product opens the sheet at (`sheetRecipe.sizes`); `auto` keeps\n * the content height capped by the recipe. Native has had this since 1.3;\n * Web only had user-adjustable `detents` until 1.5.0. `activeDetent` wins\n * when both are given.\n */\n size?: SheetSize;\n /**\n * Heights the user may step between while the sheet is open, smallest\n * first. `sheetRecipe.sizes` is what the *product* opens at; this is what\n * the *user* can change afterwards.\n */\n detents?: readonly SheetDetent[];\n activeDetent?: SheetDetent;\n onDetentChange?: (detent: SheetDetent) => void;\n /** Localized names for the handle in each direction; required with detents. */\n detentLabels?: Readonly<{ expand: string; collapse: string }>;\n busy?: boolean;\n dismissPolicy?: Partial<SheetDismissPolicy>;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Fires once per visible cycle, after the Sheet portal has been removed. */\n onDismissComplete?: (detail: Readonly<{ reason: SheetDismissReason }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Sheet = forwardRef<HTMLDivElement, SheetProps>(function Sheet(\n {\n trigger,\n title,\n description,\n children,\n footer,\n placement = sheetRecipe.defaults.placement,\n size = sheetRecipe.defaults.size,\n detents,\n activeDetent,\n onDetentChange,\n detentLabels,\n busy = false,\n dismissPolicy,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const modalLayer = getModalLayer(modalPriority);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const policy: SheetDismissPolicy = { ...sheetBehaviorDefaults, ...dismissPolicy };\n const lifecycleRef = useRef(createSheetLifecycle(open));\n const previousOpenRef = useRef(open);\n const currentOpenRef = useRef(open);\n currentOpenRef.current = open;\n const dismissReasonRef = useRef<SheetDismissReason | undefined>(undefined);\n const dismissCompleteRef = useRef(onDismissComplete);\n dismissCompleteRef.current = onDismissComplete;\n const settleDismissRef = useRef<(reason: SheetDismissReason) => void>(() => undefined);\n settleDismissRef.current = (reason) => {\n const cycle = lifecycleRef.current.beginDismiss();\n if (cycle !== null && lifecycleRef.current.completeDismiss(cycle)) {\n dismissReasonRef.current = undefined;\n previousOpenRef.current = false;\n dismissCompleteRef.current?.({ reason });\n }\n };\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-sheet`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const requestClose = (reason: SheetDismissReason) => {\n if (lifecycleRef.current.requestClose(reason, busy, policy)) {\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n }\n };\n useEffect(() => {\n if (open) {\n lifecycleRef.current.open();\n previousOpenRef.current = true;\n dismissReasonRef.current = undefined;\n return;\n }\n if (!previousOpenRef.current) return;\n settleDismissRef.current(dismissReasonRef.current ?? \"programmatic\");\n }, [open]);\n const mountEpochRef = useRef(0);\n useEffect(() => {\n const epoch = mountEpochRef.current + 1;\n mountEpochRef.current = epoch;\n return () => {\n queueMicrotask(() => {\n // React StrictMode immediately runs the setup again after its probe\n // cleanup. A real unmount has no later epoch and is settled here,\n // after the portal and focus-lock cleanups have completed.\n if (mountEpochRef.current !== epoch || !currentOpenRef.current) return;\n settleDismissRef.current(dismissReasonRef.current ?? \"programmatic\");\n });\n };\n }, []);\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay hjm-sheet-positioner\"\n data-kind=\"sheet\"\n data-modal-priority={modalPriority}\n data-placement={placement}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) requestClose(\"outside\");\n }}\n >\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-sheet\", className)}\n data-hjm-modal-content=\"\"\n data-placement={placement}\n data-detent={activeDetent ?? (size === \"auto\" ? undefined : size)}\n data-has-footer={footer ? true : undefined}\n data-state={busy ? \"busy\" : \"idle\"}\n >\n {/*\n The handle is a real control, not a drag-only affordance: a\n keyboard or switch user must be able to change the height too.\n Gesture physics stay with the product and report the same way.\n */}\n {detents && detentLabels && activeDetent ? (\n <div className=\"hjm-sheet__handle-row\">\n <button\n type=\"button\"\n className=\"hjm-sheet__handle\"\n aria-label={\n resolveNextSheetDetent(detents, activeDetent, \"expand\") === null\n ? detentLabels.collapse\n : detentLabels.expand\n }\n onClick={() => {\n const expand = resolveNextSheetDetent(detents, activeDetent, \"expand\");\n const next = expand ?? resolveNextSheetDetent(detents, activeDetent, \"collapse\");\n if (next !== null) onDetentChange?.(next);\n }}\n >\n <span aria-hidden=\"true\" className=\"hjm-sheet__handle-bar\" />\n </button>\n </div>\n ) : null}\n <header className=\"hjm-sheet__header\">\n <div>\n <h2 id={titleId} className=\"hjm-sheet__title\">{title}</h2>\n {description ? <p id={descriptionId} className=\"hjm-sheet__description\">{description}</p> : null}\n </div>\n {policy.dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy && !policy.dismissWhileBusy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {children ? <div className=\"hjm-sheet__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-sheet__footer\">{footer}</footer> : null}\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n});\n\nexport type TooltipProps = OpenState<TooltipOpenChangeDetails> &\n Readonly<{\n trigger: OverlayTrigger;\n content: string;\n placement?: TooltipPlacement;\n align?: TooltipAlign;\n pointerOpenDelayMs?: number;\n focusOpenDelayMs?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Tooltip = forwardRef<HTMLSpanElement, TooltipProps>(function Tooltip(\n {\n trigger,\n content,\n placement,\n align,\n pointerOpenDelayMs = tooltipBehaviorDefaults.pointerOpenDelayMs,\n focusOpenDelayMs = tooltipBehaviorDefaults.focusOpenDelayMs,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n ref,\n) {\n const descriptor = resolveTooltipDescriptor({\n content,\n ...(placement === undefined ? {} : { placement }),\n ...(align === undefined ? {} : { align }),\n });\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const suppressedRef = useRef(false);\n const triggerRef = useRef<HTMLElement>(null);\n const [tooltipNode, setTooltipNode] = useState<HTMLSpanElement | null>(null);\n const id = `${useId().replaceAll(\":\", \"\")}-tooltip`;\n const coordinator = useTooltipCoordinator();\n const activeTooltipId = coordinator?.activeId ?? null;\n const activateTooltip = coordinator?.activate;\n const deactivateTooltip = coordinator?.deactivate;\n const shouldSkipTooltipDelay = coordinator?.shouldSkipDelay;\n const visible = open &&\n (coordinator === null ||\n activeTooltipId === null ||\n activeTooltipId === id);\n const clearTimer = () => {\n if (timerRef.current !== undefined) clearTimeout(timerRef.current);\n timerRef.current = undefined;\n };\n useEffect(() => clearTimer, []);\n const schedule = (\n nextOpen: boolean,\n delay: number,\n detail: TooltipOpenChangeDetails,\n ) => {\n clearTimer();\n if (nextOpen && suppressedRef.current) return;\n if (delay <= 0) {\n if (nextOpen) activateTooltip?.(id);\n changeOpen(nextOpen, detail);\n return;\n }\n timerRef.current = setTimeout(() => {\n if (nextOpen) activateTooltip?.(id);\n changeOpen(nextOpen, detail);\n }, delay);\n };\n useEffect(() => {\n if (open) activateTooltip?.(id);\n else deactivateTooltip?.(id);\n }, [activateTooltip, deactivateTooltip, id, open]);\n useEffect(() => {\n if (\n open &&\n activeTooltipId !== null &&\n activeTooltipId !== id\n ) {\n clearTimer();\n changeOpen(false, { reason: \"another-tooltip\" });\n }\n }, [activeTooltipId, changeOpen, id, open]);\n useEffect(\n () => () => deactivateTooltip?.(id),\n [deactivateTooltip, id],\n );\n const triggerProps = trigger.props;\n const describedBy = visible\n ? [triggerProps[\"aria-describedby\"], id].filter(Boolean).join(\" \")\n : triggerProps[\"aria-describedby\"];\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef),\n ...(describedBy ? { \"aria-describedby\": describedBy } : {}),\n onPointerEnter: (event) => {\n triggerProps.onPointerEnter?.(event);\n if (event.pointerType === \"touch\") return;\n schedule(\n true,\n shouldSkipTooltipDelay?.() ? 0 : pointerOpenDelayMs,\n { reason: \"pointer\" },\n );\n },\n onPointerLeave: (event) => {\n triggerProps.onPointerLeave?.(event);\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(tooltipNode, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n },\n onFocus: (event) => {\n triggerProps.onFocus?.(event);\n schedule(true, focusOpenDelayMs, { reason: \"focus\" });\n },\n onBlur: (event) => {\n triggerProps.onBlur?.(event);\n suppressedRef.current = false;\n schedule(false, 0, { reason: \"blur\" });\n },\n onKeyDown: (event) => {\n triggerProps.onKeyDown?.(event);\n if (event.key === \"Escape\" && visible) {\n event.preventDefault();\n clearTimer();\n suppressedRef.current = true;\n changeOpen(false, { reason: \"escape\" });\n }\n },\n onClick: (event) => {\n triggerProps.onClick?.(event);\n if (visible && !event.defaultPrevented) {\n changeOpen(false, { reason: \"trigger-activation\" });\n }\n },\n });\n const popupPosition = useAnchoredPopup(triggerRef, tooltipNode, {\n align: descriptor.align,\n placement: descriptor.placement,\n zIndex: 1100,\n });\n const setTooltipRef = useCallback((node: HTMLSpanElement | null) => {\n setTooltipNode(node);\n }, []);\n\n return (\n <span\n ref={ref}\n className={classNames(\"hjm-tooltip\", className)}\n data-placement={descriptor.placement}\n data-align={descriptor.align}\n data-state={visible ? \"open\" : \"closed\"}\n onPointerEnter={(event) => {\n if (event.pointerType !== \"touch\") clearTimer();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(tooltipNode, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n }}\n >\n {renderedTrigger}\n {visible ? (\n <AnchoredPortal\n anchorRef={triggerRef}\n ssrFallback=\"inline\"\n {...(portalContainer === undefined ? {} : { container: portalContainer })}\n >\n <span\n ref={setTooltipRef}\n id={id}\n role=\"tooltip\"\n className=\"hjm-tooltip__content\"\n data-placement={popupPosition.placement}\n data-align={popupPosition.align}\n style={popupPosition.style}\n onPointerEnter={(event) => {\n if (event.pointerType !== \"touch\") clearTimer();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(triggerRef.current, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n }}\n >\n {descriptor.content}\n </span>\n </AnchoredPortal>\n ) : null}\n </span>\n );\n});\n\nexport type MenuItem = Readonly<{\n id: string;\n label: ReactNode;\n /** Required for typeahead when label is not plain text. */\n textValue?: string;\n description?: ReactNode;\n leading?: ReactNode;\n trailing?: ReactNode;\n tone?: MenuItemTone;\n disabled?: boolean;\n /** Backward-compatible item-local action; Menu onAction receives every activation. */\n onSelect?: () => void;\n}>;\n\nexport type MenuSection = Omit<MenuSectionDescriptor<string, string>, \"items\"> &\n Readonly<{ items: readonly MenuItem[] }>;\n\nexport type MenuOpenChangeReason =\n | \"trigger\"\n | \"selection\"\n | \"escape\"\n | \"outside\"\n | \"tab\";\n\nexport type MenuAsyncState =\n | Readonly<{ status: \"idle\" }>\n | Readonly<{\n status: \"loading\" | \"loadingMore\" | \"empty\" | \"error\";\n message: ReactNode;\n }>;\n\ntype MenuActionSelection = Readonly<{\n selectionMode?: \"action\";\n value?: never;\n defaultValue?: never;\n onValueChange?: never;\n}>;\n\ntype MenuSingleSelection =\n | Readonly<{\n selectionMode: \"single\";\n value: string | null;\n defaultValue?: never;\n onValueChange(value: string): void;\n }>\n | Readonly<{\n selectionMode: \"single\";\n value?: never;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n }>;\n\ntype MenuMultipleSelection =\n | Readonly<{\n selectionMode: \"multiple\";\n value: ReadonlySet<string>;\n defaultValue?: never;\n onValueChange(value: ReadonlySet<string>): void;\n }>\n | Readonly<{\n selectionMode: \"multiple\";\n value?: never;\n defaultValue?: ReadonlySet<string>;\n onValueChange?: (value: ReadonlySet<string>) => void;\n }>;\n\ntype MenuSourceProps =\n | Readonly<{\n items: readonly MenuItem[];\n sections?: never;\n }>\n | Readonly<{\n items?: never;\n sections: readonly MenuSection[];\n }>;\n\ntype MenuBaseProps = Readonly<{\n trigger: OverlayTrigger;\n label: string;\n density?: MenuDensity;\n /** Logical alignment against the trigger; automatically mirrors in RTL. */\n align?: \"start\" | \"end\";\n disabled?: boolean;\n asyncState?: MenuAsyncState;\n onAction?: (id: string) => void;\n /** Runs only once the owner actually closes the menu. */\n onActionAfterDismiss?: (id: string) => void;\n portalContainer?: HTMLElement;\n className?: string;\n}> & MenuSourceProps;\n\nexport type MenuProps = OpenState<Readonly<{ reason: MenuOpenChangeReason }>> &\n MenuBaseProps &\n (MenuActionSelection | MenuSingleSelection | MenuMultipleSelection);\n\nfunction menuTextValue(item: MenuItem): string {\n const value = item.textValue ?? (typeof item.label === \"string\" ? item.label : undefined);\n if (value === undefined || value.trim().length === 0) {\n throw new TypeError(`Menu item ${item.id} needs textValue for typeahead`);\n }\n return value.trim();\n}\n\nfunction validateMenuItems(\n items: readonly MenuItem[],\n sections: readonly MenuSection[] | undefined,\n asyncState: MenuAsyncState,\n): void {\n if (items.length === 0 && (asyncState.status === \"idle\" || asyncState.status === \"loadingMore\")) {\n throw new TypeError(\"Menu requires at least one item\");\n }\n const ids = new Set<string>();\n for (const item of items) {\n if (item.id.trim().length === 0) throw new TypeError(\"Menu item id must not be empty\");\n if (ids.has(item.id)) throw new TypeError(`Duplicate Menu item id: ${item.id}`);\n ids.add(item.id);\n menuTextValue(item);\n }\n if (sections !== undefined) {\n const sectionIds = new Set<string>();\n for (const section of sections) {\n if (section.id.trim().length === 0) throw new TypeError(\"Menu section id must not be empty\");\n if (sectionIds.has(section.id)) throw new TypeError(`Duplicate Menu section id: ${section.id}`);\n sectionIds.add(section.id);\n if (section.items.length === 0) throw new TypeError(`Menu section ${section.id} must not be empty`);\n if ((section.label?.trim().length ?? 0) === 0 &&\n (section.accessibilityLabel?.trim().length ?? 0) === 0) {\n throw new TypeError(`Menu section ${section.id} needs a label or accessibilityLabel`);\n }\n }\n }\n if (\n (asyncState.status === \"idle\" || asyncState.status === \"loadingMore\") &&\n !items.some((item) => !item.disabled)\n ) {\n throw new TypeError(\"Menu requires at least one enabled item\");\n }\n}\n\nexport const Menu = forwardRef<HTMLDivElement, MenuProps>(function Menu(props, ref) {\n // Unconditional: `??` on the hook call would break the rules of hooks.\n const densityDefault = useHjmDensityDefault({\n comfortable: menuRecipe.defaults.density,\n compact: \"compact\",\n });\n const {\n trigger,\n label,\n density: densityProp,\n align = \"start\",\n disabled = false,\n asyncState = { status: \"idle\" },\n onAction,\n onActionAfterDismiss,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n } = props;\n const density = densityProp ?? densityDefault;\n const sections = props.sections;\n const items = sections === undefined ? props.items : sections.flatMap((section) => section.items);\n if (label.trim().length === 0) throw new TypeError(\"Menu label must not be empty\");\n validateMenuItems(items, sections, asyncState);\n const selectionMode = props.selectionMode ?? \"action\";\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const [focusIndex, setFocusIndex] = useState(() =>\n items.findIndex((item) => !item.disabled),\n );\n const singleSelection = selectionMode === \"single\"\n ? (props as MenuSingleSelection)\n : undefined;\n const multipleSelection = selectionMode === \"multiple\"\n ? (props as MenuMultipleSelection)\n : undefined;\n const [singleValue, setSingleValue] = useControllableState<string | null>({\n ...(singleSelection?.value !== undefined\n ? { value: singleSelection.value }\n : {}),\n defaultValue: singleSelection?.defaultValue ?? null,\n ...(singleSelection?.onValueChange !== undefined\n ? {\n onChange: (next: string | null) => {\n if (next !== null) singleSelection.onValueChange?.(next);\n },\n }\n : {}),\n });\n const [multipleValue, setMultipleValue] = useControllableState<ReadonlySet<string>>({\n ...(multipleSelection?.value !== undefined\n ? { value: multipleSelection.value }\n : {}),\n defaultValue: multipleSelection?.defaultValue ?? new Set<string>(),\n ...(multipleSelection?.onValueChange !== undefined\n ? { onChange: multipleSelection.onValueChange }\n : {}),\n });\n const knownIds = new Set(items.map((item) => item.id));\n if (selectionMode === \"single\" && singleValue !== null && !knownIds.has(singleValue)) {\n throw new RangeError(`Unknown Menu single value: ${singleValue}`);\n }\n if (selectionMode === \"multiple\") {\n for (const selectedId of multipleValue) {\n if (!knownIds.has(selectedId)) throw new RangeError(`Unknown Menu multiple value: ${selectedId}`);\n }\n }\n const triggerRef = useRef<HTMLElement>(null);\n const itemRefs = useRef(new Map<number, HTMLButtonElement>());\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentNode, setContentNode] = useState<HTMLDivElement | null>(null);\n const restoreFocusRef = useRef(false);\n const afterDismissIdRef = useRef<string | undefined>(undefined);\n const typeaheadRef = useRef({ value: \"\", time: 0 });\n const id = `${useId().replaceAll(\":\", \"\")}-menu`;\n const popupPosition = useAnchoredPopup(triggerRef, contentNode, { align, zIndex: 900 });\n const setMenuContentRef = useCallback((node: HTMLDivElement | null) => {\n contentRef.current = node;\n setContentNode(node);\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }, [ref]);\n\n useEffect(() => {\n if (!open) {\n if (restoreFocusRef.current) {\n restoreFocusRef.current = false;\n queueMicrotask(() => triggerRef.current?.focus());\n }\n const completedId = afterDismissIdRef.current;\n if (completedId !== undefined) {\n afterDismissIdRef.current = undefined;\n queueMicrotask(() => onActionAfterDismiss?.(completedId));\n }\n return;\n }\n const item = itemRefs.current.get(focusIndex);\n if (item && !item.disabled) item.focus();\n else contentRef.current?.focus();\n }, [contentNode, focusIndex, onActionAfterDismiss, open]);\n\n const itemIsDisabled = (item: MenuItem) =>\n disabled || asyncState.status === \"loading\" || Boolean(item.disabled);\n const firstEnabled = () => items.findIndex((item) => !itemIsDisabled(item));\n const lastEnabled = () => {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n if (items[index] && !itemIsDisabled(items[index]!)) return index;\n }\n return firstEnabled();\n };\n const focusAt = (index: number) => {\n setFocusIndex(index);\n queueMicrotask(() => itemRefs.current.get(index)?.focus());\n };\n const moveFocus = (step: 1 | -1) => {\n for (let offset = 1; offset <= items.length; offset += 1) {\n const next = (focusIndex + step * offset + items.length) % items.length;\n if (items[next] && !itemIsDisabled(items[next]!)) {\n focusAt(next);\n return;\n }\n }\n };\n const close = (reason: MenuOpenChangeReason, restore: boolean) => {\n if (restore) restoreFocusRef.current = true;\n changeOpen(false, { reason });\n };\n const openMenu = (focus: \"first\" | \"last\" = \"first\") => {\n if (disabled) return;\n const index = focus === \"first\" ? firstEnabled() : lastEnabled();\n setFocusIndex(index);\n changeOpen(true, { reason: \"trigger\" });\n };\n\n const itemSelected = (id: string) =>\n selectionMode === \"single\"\n ? singleValue === id\n : selectionMode === \"multiple\"\n ? multipleValue.has(id)\n : false;\n\n const activateItem = (item: MenuItem, index: number) => {\n if (itemIsDisabled(item)) return;\n item.onSelect?.();\n onAction?.(item.id);\n if (selectionMode === \"multiple\") {\n const next = new Set(multipleValue);\n if (next.has(item.id)) next.delete(item.id);\n else next.add(item.id);\n setMultipleValue(next);\n focusAt(index);\n return;\n }\n if (selectionMode === \"single\") setSingleValue(item.id);\n afterDismissIdRef.current = item.id;\n close(\"selection\", true);\n };\n\n const runTypeahead = (key: string) => {\n const currentTime = Date.now();\n const previous = currentTime - typeaheadRef.current.time < 500\n ? typeaheadRef.current.value\n : \"\";\n const combined = `${previous}${key}`.toLocaleLowerCase();\n const search = new Set(combined).size === 1 ? key.toLocaleLowerCase() : combined;\n typeaheadRef.current = { value: combined, time: currentTime };\n for (let offset = 1; offset <= items.length; offset += 1) {\n const index = (focusIndex + offset + items.length) % items.length;\n const item = items[index];\n if (\n item &&\n !itemIsDisabled(item) &&\n menuTextValue(item).toLocaleLowerCase().startsWith(search)\n ) {\n focusAt(index);\n return;\n }\n }\n };\n\n useEffect(() => {\n if (!open) return;\n const handlePointerDown = (event: PointerEvent) => {\n if (\n event.target instanceof Node &&\n !wrapperRef.current?.contains(event.target) &&\n !contentRef.current?.contains(event.target)\n ) {\n close(\"outside\", false);\n }\n };\n document.addEventListener(\"pointerdown\", handlePointerDown);\n return () => document.removeEventListener(\"pointerdown\", handlePointerDown);\n });\n\n const triggerProps = trigger.props;\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef),\n \"aria-controls\": id,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"aria-disabled\": disabled || undefined,\n disabled: triggerProps.disabled || disabled,\n onClick: (event) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented || triggerProps.disabled || disabled) return;\n if (open) close(\"trigger\", false);\n else openMenu();\n },\n onKeyDown: (event) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key === \"ArrowDown\" || event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openMenu(\"first\");\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n openMenu(\"last\");\n }\n },\n });\n\n const handleMenuKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(1);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(-1);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n focusAt(firstEnabled());\n } else if (event.key === \"End\") {\n event.preventDefault();\n focusAt(lastEnabled());\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n close(\"escape\", true);\n } else if (event.key === \"Tab\") {\n close(\"tab\", false);\n } else if (\n event.key.length === 1 &&\n event.key !== \" \" &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n runTypeahead(event.key);\n }\n };\n\n const showItems = asyncState.status !== \"empty\" && asyncState.status !== \"error\";\n\n return (\n <span ref={wrapperRef} className=\"hjm-menu\" data-state={open ? \"open\" : \"closed\"}>\n {renderedTrigger}\n {open ? (\n <AnchoredPortal\n anchorRef={triggerRef}\n ssrFallback=\"inline\"\n {...(portalContainer === undefined ? {} : { container: portalContainer })}\n >\n <div\n ref={setMenuContentRef}\n id={id}\n role=\"menu\"\n aria-label={label}\n className={classNames(\"hjm-menu__content\", className)}\n data-density={density}\n data-async-state={asyncState.status}\n data-placement={popupPosition.placement}\n data-align={popupPosition.align}\n aria-busy={\n asyncState.status === \"loading\" || asyncState.status === \"loadingMore\" || undefined\n }\n style={popupPosition.style}\n tabIndex={-1}\n onKeyDown={handleMenuKeyDown}\n >\n {asyncState.status !== \"idle\" ? (\n <div\n className=\"hjm-menu__state-message\"\n role={asyncState.status === \"error\" ? \"alert\" : \"status\"}\n >\n {asyncState.message}\n </div>\n ) : null}\n {showItems ? (sections === undefined ? items.map((item, index) => {\n const selected = itemSelected(item.id);\n const itemDisabled = itemIsDisabled(item);\n const role = selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n return renderMenuItem(item, index, role, selected, itemDisabled);\n }) : sections.map((section, sectionIndex) => {\n const sectionLabelId = `${id}-section-${sectionIndex}`;\n const firstIndex = sections\n .slice(0, sectionIndex)\n .reduce((total, current) => total + current.items.length, 0);\n return (\n <div key={section.id} className=\"hjm-menu__section-boundary\">\n {sectionIndex > 0 ? <div role=\"separator\" className=\"hjm-menu__separator\" /> : null}\n <div\n role=\"group\"\n aria-labelledby={section.label ? sectionLabelId : undefined}\n aria-label={section.label ? undefined : section.accessibilityLabel}\n className=\"hjm-menu__section\"\n >\n {section.label ? (\n <div id={sectionLabelId} className=\"hjm-menu__section-label\">\n {section.label}\n </div>\n ) : null}\n {section.items.map((item, itemIndex) => {\n const index = firstIndex + itemIndex;\n const selected = itemSelected(item.id);\n const itemDisabled = itemIsDisabled(item);\n const role = selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n return renderMenuItem(item, index, role, selected, itemDisabled);\n })}\n </div>\n </div>\n );\n })) : null}\n </div>\n </AnchoredPortal>\n ) : null}\n </span>\n );\n\n function renderMenuItem(\n item: MenuItem,\n index: number,\n role: \"menuitem\" | \"menuitemradio\" | \"menuitemcheckbox\",\n selected: boolean,\n itemDisabled: boolean,\n ) {\n return (\n <button\n key={item.id}\n ref={(node) => {\n if (node) {\n itemRefs.current.set(index, node);\n if (open && !itemDisabled && index === focusIndex) {\n queueMicrotask(() => {\n if (node.isConnected && open) node.focus();\n });\n }\n } else itemRefs.current.delete(index);\n }}\n type=\"button\"\n role={role}\n aria-checked={selectionMode === \"action\" ? undefined : selected}\n className=\"hjm-menu__item\"\n data-tone={item.tone ?? menuRecipe.defaults.itemTone}\n data-state={itemDisabled ? \"disabled\" : selected ? \"selected\" : \"idle\"}\n data-focus={index === focusIndex || undefined}\n disabled={itemDisabled}\n tabIndex={!itemDisabled && index === focusIndex ? 0 : -1}\n onClick={() => activateItem(item, index)}\n >\n {item.tone === \"danger\" ? (\n <span className=\"hjm-menu__danger-indicator\" aria-hidden=\"true\">!</span>\n ) : null}\n {item.leading ? <span className=\"hjm-menu__leading\" aria-hidden=\"true\">{item.leading}</span> : null}\n <span className=\"hjm-menu__copy\">\n <span>{item.label}</span>\n {item.description ? <span className=\"hjm-menu__description\">{item.description}</span> : null}\n </span>\n {item.trailing ? <span className=\"hjm-menu__trailing\">{item.trailing}</span> : null}\n </button>\n );\n }\n});\n"]}
|
|
1
|
+
{"version":3,"file":"overlays.js","sourceRoot":"","sources":["../src/overlays.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createAlertDialogSession,\n getAlertDialogInitialFocus,\n validateAlertDialogRequest,\n type AlertDialogPhase,\n type AlertDialogOpenChangeReason,\n type AlertDialogRequest,\n type AlertDialogSession,\n} from \"@hjmds/design-contracts/components/alert-dialog\";\nimport {\n createSheetLifecycle,\n resolveNextSheetDetent,\n sheetBehaviorDefaults,\n type SheetDetent,\n type SheetDismissPolicy,\n type SheetDismissReason,\n type SheetOpenChangeDetails,\n} from \"@hjmds/design-contracts/components/sheet\";\nimport {\n resolveTooltipDescriptor,\n tooltipBehaviorDefaults,\n type TooltipAlign,\n type TooltipOpenChangeDetails,\n type TooltipPlacement,\n} from \"@hjmds/design-contracts/components/tooltip\";\nimport {\n dialogRecipe,\n menuRecipe,\n sheetRecipe,\n type AlertDialogTone,\n type DialogSize,\n type MenuDensity,\n type MenuItemTone,\n} from \"@hjmds/design-contracts/recipes\";\nimport type { MenuSectionDescriptor } from \"@hjmds/design-contracts/behaviors\";\nimport {\n cloneElement,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n useSyncExternalStore,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"./actions.js\";\nimport { classNames, composeRefs, useControllableState } from \"./internal.js\";\nimport { AnchoredPortal, useAnchoredPopup } from \"./portal.js\";\nimport { useHjmDensityDefault, useTooltipCoordinator } from \"./provider.js\";\nimport {\n containsEventTarget,\n getModalLayer,\n HjmPortal,\n renderTrigger,\n useModalFocus,\n useOpenState,\n type ModalOpenState,\n type OpenState,\n type OverlayTrigger,\n} from \"./modal.js\";\n\nexport type { OverlayTrigger } from \"./modal.js\";\n\nexport type DialogOpenChangeReason =\n | \"trigger\"\n | \"close-action\"\n | \"escape\"\n | \"outside\";\n\nexport type DialogProps = ModalOpenState<Readonly<{ reason: DialogOpenChangeReason }>> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n size?: DialogSize;\n dismissible?: boolean;\n busy?: boolean;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /**\n * Fires once per visible cycle, after the portal is gone and focus has been\n * restored — the signal a product needs before opening the next overlay.\n * Sheet already owns this split; Dialog kept only the request side, which is\n * why products reached for a 0ms timer to guess when cleanup had finished.\n */\n onDismissComplete?: (detail: Readonly<{ reason: Exclude<DialogOpenChangeReason, \"trigger\"> | \"programmatic\" }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(function Dialog(\n {\n trigger,\n title,\n description,\n children,\n footer,\n size = dialogRecipe.defaults.size,\n dismissible = dialogRecipe.defaults.dismissible,\n busy = false,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const modalLayer = getModalLayer(modalPriority);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const mergedContentRef = composeRefs(contentRef, forwardedRef);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-dialog`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n type DialogSettleReason = Exclude<DialogOpenChangeReason, \"trigger\"> | \"programmatic\";\n const dismissReasonRef = useRef<DialogSettleReason | undefined>(undefined);\n const wasOpenRef = useRef(open);\n const completeRef = useRef(onDismissComplete);\n completeRef.current = onDismissComplete;\n const openRef = useRef(open);\n openRef.current = open;\n const requestClose = (reason: Exclude<DialogOpenChangeReason, \"trigger\">) => {\n if (!dismissible || busy) return;\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n };\n const settle = () => {\n const reason = dismissReasonRef.current ?? \"programmatic\";\n dismissReasonRef.current = undefined;\n // After the portal is unmounted and `useModalFocus` has restored focus in\n // its own microtask, so the next overlay can open without a 0ms guess.\n queueMicrotask(() => queueMicrotask(() => completeRef.current?.({ reason })));\n };\n useEffect(() => {\n if (open) { wasOpenRef.current = true; dismissReasonRef.current = undefined; return; }\n if (!wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n }, [open]);\n const epochRef = useRef(0);\n useEffect(() => {\n const epoch = epochRef.current + 1;\n epochRef.current = epoch;\n return () => {\n queueMicrotask(() => {\n // StrictMode re-runs setup right after its probe cleanup; only a real\n // unmount has no later epoch. An open Dialog torn down that way still\n // settles exactly once.\n if (epochRef.current !== epoch || !openRef.current || !wasOpenRef.current) return;\n wasOpenRef.current = false;\n settle();\n });\n };\n }, []);\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay\"\n data-kind=\"dialog\"\n data-modal-priority={modalPriority}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) requestClose(\"outside\");\n }}\n >\n <div\n ref={mergedContentRef}\n id={contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-dialog\", className)}\n data-hjm-modal-content=\"\"\n data-size={size}\n data-state={busy ? \"busy\" : \"idle\"}\n >\n <header className=\"hjm-dialog__header\">\n <h2 id={titleId} className=\"hjm-dialog__title\">{title}</h2>\n {dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {description ? <p id={descriptionId} className=\"hjm-dialog__description\">{description}</p> : null}\n {children ? <div className=\"hjm-dialog__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-dialog__footer\">{footer}</footer> : null}\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n});\n\nexport type AlertDialogProps = ModalOpenState<\n Readonly<{ reason: AlertDialogOpenChangeReason }>\n> &\n Readonly<{\n request: AlertDialogRequest;\n icon?: ReactNode;\n size?: DialogSize;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const AlertDialog = forwardRef<HTMLDivElement, AlertDialogProps>(\n function AlertDialog(\n {\n trigger,\n request,\n icon,\n size = dialogRecipe.defaults.size,\n returnFocusRef,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n ) {\n const modalLayer = getModalLayer(modalPriority);\n validateAlertDialogRequest(request);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const sessionRef = useRef<AlertDialogSession | null>(null);\n const [sessionGeneration, setSessionGeneration] = useState(0);\n if (open && sessionRef.current === null) {\n sessionRef.current = createAlertDialogSession(request);\n }\n const idleSnapshot = useRef<AlertDialogPhase>({ status: \"idle\" });\n const phase = useSyncExternalStore(\n (listener) => sessionRef.current?.subscribe(listener) ?? (() => undefined),\n () => sessionRef.current?.getSnapshot() ?? idleSnapshot.current,\n () => idleSnapshot.current,\n );\n const busy = phase.status === \"busy\";\n const closing = phase.status === \"closing\" || phase.status === \"closed\";\n const error = phase.status === \"error\" ? phase.message : undefined;\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const cancelRef = useRef<HTMLButtonElement>(null);\n const confirmRef = useRef<HTMLButtonElement>(null);\n const initialFocusRef = getAlertDialogInitialFocus(request.mode) === \"cancel\"\n ? cancelRef\n : confirmRef;\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-alert-dialog`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const errorId = `${id}-error`;\n\n const startSession = (): AlertDialogSession => {\n sessionRef.current?.interrupt();\n const session = createAlertDialogSession(request);\n sessionRef.current = session;\n setSessionGeneration((current) => current + 1);\n return session;\n };\n const cancel = (reason: \"cancel-action\" | \"escape\") => {\n const session = sessionRef.current;\n if (!session?.cancel(reason)) return;\n changeOpen(false, { reason });\n };\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n initialFocusRef,\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => cancel(\"escape\"),\n });\n\n const confirm = async () => {\n const session = sessionRef.current;\n if (!session) return;\n if (await session.confirm()) changeOpen(false, { reason: \"confirm\" });\n };\n useEffect(() => {\n if (open) return;\n const session = sessionRef.current;\n if (!session) return;\n const snapshot = session.getSnapshot();\n if (snapshot.status === \"idle\" || snapshot.status === \"error\") {\n session.cancel(\"programmatic\");\n }\n if (session.getSnapshot().status === \"closing\") session.completeExit();\n else if (session.getSnapshot().status !== \"closed\") session.interrupt();\n sessionRef.current = null;\n }, [open, sessionGeneration]);\n useEffect(\n () => () => {\n sessionRef.current?.interrupt();\n },\n [],\n );\n const tone: AlertDialogTone = request.tone ?? \"attention\";\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => {\n startSession();\n changeOpen(true, { reason: \"trigger\" });\n },\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay\"\n data-kind=\"alert-dialog\"\n data-modal-priority={modalPriority}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n >\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n role=\"alertdialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={`${descriptionId}${error ? ` ${errorId}` : \"\"}`}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-alert-dialog\", className)}\n data-hjm-modal-content=\"\"\n data-size={size}\n data-tone={tone}\n data-state={busy ? \"busy\" : error ? \"error\" : \"idle\"}\n >\n {icon ? <div className=\"hjm-alert-dialog__icon\" aria-hidden=\"true\">{icon}</div> : null}\n <h2 id={titleId} className=\"hjm-alert-dialog__title\">{request.title}</h2>\n <p id={descriptionId} className=\"hjm-alert-dialog__description\">{request.description}</p>\n {error ? <p id={errorId} className=\"hjm-alert-dialog__error\" role=\"alert\">{error}</p> : null}\n <div className=\"hjm-alert-dialog__actions\">\n {request.mode === \"confirm\" ? (\n <Button\n ref={cancelRef}\n tone=\"secondary\"\n disabled={busy || closing}\n onClick={() => cancel(\"cancel-action\")}\n >\n {request.cancelLabel}\n </Button>\n ) : null}\n <Button\n ref={confirmRef}\n tone={tone === \"danger\" ? \"danger\" : \"primary\"}\n loading={busy}\n disabled={closing}\n onClick={() => void confirm()}\n >\n {request.confirmLabel}\n </Button>\n </div>\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n },\n);\n\nexport type SheetPlacement = \"bottom\" | \"start\" | \"end\";\n\nexport type SheetSize = keyof typeof sheetRecipe.sizes;\n\nexport type SheetProps = ModalOpenState<SheetOpenChangeDetails> &\n Readonly<{\n title: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n placement?: SheetPlacement;\n /**\n * Height the product opens the sheet at (`sheetRecipe.sizes`); `auto` keeps\n * the content height capped by the recipe. Native has had this since 1.3;\n * Web only had user-adjustable `detents` until 1.5.0. `activeDetent` wins\n * when both are given.\n */\n size?: SheetSize;\n /**\n * Heights the user may step between while the sheet is open, smallest\n * first. `sheetRecipe.sizes` is what the *product* opens at; this is what\n * the *user* can change afterwards.\n */\n detents?: readonly SheetDetent[];\n activeDetent?: SheetDetent;\n onDetentChange?: (detent: SheetDetent) => void;\n /** Localized names for the handle in each direction; required with detents. */\n detentLabels?: Readonly<{ expand: string; collapse: string }>;\n busy?: boolean;\n dismissPolicy?: Partial<SheetDismissPolicy>;\n /** Localized accessible name for the close action. */\n closeLabel: string;\n initialFocusRef?: React.RefObject<HTMLElement | null>;\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n /** Fires once per visible cycle, after the Sheet portal has been removed. */\n onDismissComplete?: (detail: Readonly<{ reason: SheetDismissReason }>) => void;\n /** Higher-priority modals remain interactive above later lower-priority modals. */\n modalPriority?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Sheet = forwardRef<HTMLDivElement, SheetProps>(function Sheet(\n {\n trigger,\n title,\n description,\n children,\n footer,\n placement = sheetRecipe.defaults.placement,\n size = sheetRecipe.defaults.size,\n detents,\n activeDetent,\n onDetentChange,\n detentLabels,\n busy = false,\n dismissPolicy,\n closeLabel,\n initialFocusRef,\n returnFocusRef,\n onDismissComplete,\n modalPriority = 0,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n forwardedRef,\n) {\n const modalLayer = getModalLayer(modalPriority);\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const policy: SheetDismissPolicy = { ...sheetBehaviorDefaults, ...dismissPolicy };\n const lifecycleRef = useRef(createSheetLifecycle(open));\n const previousOpenRef = useRef(open);\n const currentOpenRef = useRef(open);\n currentOpenRef.current = open;\n const dismissReasonRef = useRef<SheetDismissReason | undefined>(undefined);\n const dismissCompleteRef = useRef(onDismissComplete);\n dismissCompleteRef.current = onDismissComplete;\n const settleDismissRef = useRef<(reason: SheetDismissReason) => void>(() => undefined);\n settleDismissRef.current = (reason) => {\n const cycle = lifecycleRef.current.beginDismiss();\n if (cycle !== null && lifecycleRef.current.completeDismiss(cycle)) {\n dismissReasonRef.current = undefined;\n previousOpenRef.current = false;\n dismissCompleteRef.current?.({ reason });\n }\n };\n const triggerRef = useRef<HTMLElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const id = useId().replaceAll(\":\", \"\");\n const contentId = `${id}-sheet`;\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const requestClose = (reason: SheetDismissReason) => {\n if (lifecycleRef.current.requestClose(reason, busy, policy)) {\n dismissReasonRef.current = reason;\n changeOpen(false, { reason });\n }\n };\n useEffect(() => {\n if (open) {\n lifecycleRef.current.open();\n previousOpenRef.current = true;\n dismissReasonRef.current = undefined;\n return;\n }\n if (!previousOpenRef.current) return;\n settleDismissRef.current(dismissReasonRef.current ?? \"programmatic\");\n }, [open]);\n const mountEpochRef = useRef(0);\n useEffect(() => {\n const epoch = mountEpochRef.current + 1;\n mountEpochRef.current = epoch;\n return () => {\n queueMicrotask(() => {\n // React StrictMode immediately runs the setup again after its probe\n // cleanup. A real unmount has no later epoch and is settled here,\n // after the portal and focus-lock cleanups have completed.\n if (mountEpochRef.current !== epoch || !currentOpenRef.current) return;\n settleDismissRef.current(dismissReasonRef.current ?? \"programmatic\");\n });\n };\n }, []);\n useModalFocus({\n active: open,\n priority: modalPriority,\n contentRef,\n ...(initialFocusRef === undefined ? {} : { initialFocusRef }),\n ...(returnFocusRef === undefined ? {} : { returnFocusRef }),\n ...(trigger === undefined ? {} : { fallbackReturnRef: triggerRef }),\n onEscape: () => requestClose(\"escape\"),\n });\n\n return (\n <>\n {trigger === undefined ? null : renderTrigger(\n trigger,\n triggerRef,\n open,\n contentId,\n \"dialog\",\n () => changeOpen(true, { reason: \"trigger\" }),\n )}\n {open ? (\n <HjmPortal {...(portalContainer === undefined ? {} : { container: portalContainer })}>\n <div\n className=\"hjm-overlay hjm-sheet-positioner\"\n data-kind=\"sheet\"\n data-modal-priority={modalPriority}\n data-placement={placement}\n data-state=\"open\"\n style={{ zIndex: modalLayer }}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) requestClose(\"outside\");\n }}\n >\n <div\n ref={composeRefs(contentRef, forwardedRef)}\n id={contentId}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-busy={busy || undefined}\n tabIndex={-1}\n className={classNames(\"hjm-sheet\", className)}\n data-hjm-modal-content=\"\"\n data-placement={placement}\n data-detent={activeDetent ?? (size === \"auto\" ? undefined : size)}\n data-has-footer={footer ? true : undefined}\n data-state={busy ? \"busy\" : \"idle\"}\n >\n {/*\n The handle is a real control, not a drag-only affordance: a\n keyboard or switch user must be able to change the height too.\n Gesture physics stay with the product and report the same way.\n */}\n {detents && detentLabels && activeDetent ? (\n <div className=\"hjm-sheet__handle-row\">\n <button\n type=\"button\"\n className=\"hjm-sheet__handle\"\n aria-label={\n resolveNextSheetDetent(detents, activeDetent, \"expand\") === null\n ? detentLabels.collapse\n : detentLabels.expand\n }\n onClick={() => {\n const expand = resolveNextSheetDetent(detents, activeDetent, \"expand\");\n const next = expand ?? resolveNextSheetDetent(detents, activeDetent, \"collapse\");\n if (next !== null) onDetentChange?.(next);\n }}\n >\n <span aria-hidden=\"true\" className=\"hjm-sheet__handle-bar\" />\n </button>\n </div>\n ) : null}\n <header className=\"hjm-sheet__header\">\n <div>\n <h2 id={titleId} className=\"hjm-sheet__title\">{title}</h2>\n {description ? <p id={descriptionId} className=\"hjm-sheet__description\">{description}</p> : null}\n </div>\n {policy.dismissible ? (\n <button\n type=\"button\"\n className=\"hjm-dialog__close\"\n aria-label={closeLabel}\n disabled={busy && !policy.dismissWhileBusy}\n onClick={() => requestClose(\"close-action\")}\n >\n ×\n </button>\n ) : null}\n </header>\n {children ? <div className=\"hjm-sheet__body\">{children}</div> : null}\n {footer ? <footer className=\"hjm-sheet__footer\">{footer}</footer> : null}\n </div>\n </div>\n </HjmPortal>\n ) : null}\n </>\n );\n});\n\nexport type TooltipProps = OpenState<TooltipOpenChangeDetails> &\n Readonly<{\n trigger: OverlayTrigger;\n content: string;\n placement?: TooltipPlacement;\n align?: TooltipAlign;\n pointerOpenDelayMs?: number;\n focusOpenDelayMs?: number;\n portalContainer?: HTMLElement;\n className?: string;\n }>;\n\nexport const Tooltip = forwardRef<HTMLSpanElement, TooltipProps>(function Tooltip(\n {\n trigger,\n content,\n placement,\n align,\n pointerOpenDelayMs = tooltipBehaviorDefaults.pointerOpenDelayMs,\n focusOpenDelayMs = tooltipBehaviorDefaults.focusOpenDelayMs,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n },\n ref,\n) {\n const descriptor = resolveTooltipDescriptor({\n content,\n ...(placement === undefined ? {} : { placement }),\n ...(align === undefined ? {} : { align }),\n });\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const suppressedRef = useRef(false);\n const touchTapRef = useRef<{ wasVisible: boolean } | null>(null);\n const triggerRef = useRef<HTMLElement>(null);\n const [tooltipNode, setTooltipNode] = useState<HTMLSpanElement | null>(null);\n const id = `${useId().replaceAll(\":\", \"\")}-tooltip`;\n const coordinator = useTooltipCoordinator();\n const activeTooltipId = coordinator?.activeId ?? null;\n const activateTooltip = coordinator?.activate;\n const deactivateTooltip = coordinator?.deactivate;\n const shouldSkipTooltipDelay = coordinator?.shouldSkipDelay;\n const visible = open &&\n (coordinator === null ||\n activeTooltipId === null ||\n activeTooltipId === id);\n const clearTimer = () => {\n if (timerRef.current !== undefined) clearTimeout(timerRef.current);\n timerRef.current = undefined;\n };\n useEffect(() => clearTimer, []);\n const schedule = (\n nextOpen: boolean,\n delay: number,\n detail: TooltipOpenChangeDetails,\n ) => {\n clearTimer();\n if (nextOpen && suppressedRef.current) return;\n if (delay <= 0) {\n if (nextOpen) activateTooltip?.(id);\n changeOpen(nextOpen, detail);\n return;\n }\n timerRef.current = setTimeout(() => {\n if (nextOpen) activateTooltip?.(id);\n changeOpen(nextOpen, detail);\n }, delay);\n };\n useEffect(() => {\n if (open) activateTooltip?.(id);\n else deactivateTooltip?.(id);\n }, [activateTooltip, deactivateTooltip, id, open]);\n useEffect(() => {\n if (\n open &&\n activeTooltipId !== null &&\n activeTooltipId !== id\n ) {\n clearTimer();\n changeOpen(false, { reason: \"another-tooltip\" });\n }\n }, [activeTooltipId, changeOpen, id, open]);\n useEffect(\n () => () => deactivateTooltip?.(id),\n [deactivateTooltip, id],\n );\n const triggerProps = trigger.props;\n const describedBy = visible\n ? [triggerProps[\"aria-describedby\"], id].filter(Boolean).join(\" \")\n : triggerProps[\"aria-describedby\"];\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef),\n ...(describedBy ? { \"aria-describedby\": describedBy } : {}),\n onPointerDown: (event) => {\n triggerProps.onPointerDown?.(event);\n touchTapRef.current = event.pointerType === \"touch\" ? { wasVisible: visible } : null;\n },\n onPointerEnter: (event) => {\n triggerProps.onPointerEnter?.(event);\n if (event.pointerType === \"touch\") return;\n schedule(\n true,\n shouldSkipTooltipDelay?.() ? 0 : pointerOpenDelayMs,\n { reason: \"pointer\" },\n );\n },\n onPointerLeave: (event) => {\n triggerProps.onPointerLeave?.(event);\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(tooltipNode, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n },\n onFocus: (event) => {\n triggerProps.onFocus?.(event);\n schedule(true, focusOpenDelayMs, { reason: \"focus\" });\n },\n onBlur: (event) => {\n triggerProps.onBlur?.(event);\n suppressedRef.current = false;\n schedule(false, 0, { reason: \"blur\" });\n },\n onKeyDown: (event) => {\n triggerProps.onKeyDown?.(event);\n if (event.key === \"Escape\" && visible) {\n event.preventDefault();\n clearTimer();\n suppressedRef.current = true;\n changeOpen(false, { reason: \"escape\" });\n }\n },\n onClick: (event) => {\n triggerProps.onClick?.(event);\n const touchTap = touchTapRef.current;\n touchTapRef.current = null;\n if (event.defaultPrevented) return;\n // Touch has no hover, so a tap is the only way to show the hint. The tap's\n // own focus already opened it; closing here (the mouse/keyboard path) made it\n // flash for 1ms (2026-09-30 audit WR-0930-1). A second tap closes instead.\n if (touchTap !== null && !touchTap.wasVisible) {\n if (!visible) schedule(true, 0, { reason: \"pointer\" });\n return;\n }\n if (visible) changeOpen(false, { reason: \"trigger-activation\" });\n },\n });\n useEffect(() => {\n if (!visible) return;\n // Tap-opened tooltips have no pointer-leave; an outside press dismisses them.\n // Mobile Safari does not focus buttons on tap, so blur alone is not enough.\n const onOutsidePress = (event: PointerEvent) => {\n if (\n containsEventTarget(triggerRef.current, event.target) ||\n containsEventTarget(tooltipNode, event.target)\n ) return;\n clearTimer();\n changeOpen(false, { reason: \"blur\" });\n };\n document.addEventListener(\"pointerdown\", onOutsidePress, true);\n return () => document.removeEventListener(\"pointerdown\", onOutsidePress, true);\n }, [changeOpen, tooltipNode, visible]);\n const popupPosition = useAnchoredPopup(triggerRef, tooltipNode, {\n align: descriptor.align,\n placement: descriptor.placement,\n zIndex: 1100,\n });\n const setTooltipRef = useCallback((node: HTMLSpanElement | null) => {\n setTooltipNode(node);\n }, []);\n\n return (\n <span\n ref={ref}\n className={classNames(\"hjm-tooltip\", className)}\n data-placement={descriptor.placement}\n data-align={descriptor.align}\n data-state={visible ? \"open\" : \"closed\"}\n onPointerEnter={(event) => {\n if (event.pointerType !== \"touch\") clearTimer();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(tooltipNode, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n }}\n >\n {renderedTrigger}\n {visible ? (\n <AnchoredPortal\n anchorRef={triggerRef}\n ssrFallback=\"inline\"\n {...(portalContainer === undefined ? {} : { container: portalContainer })}\n >\n <span\n ref={setTooltipRef}\n id={id}\n role=\"tooltip\"\n className=\"hjm-tooltip__content\"\n data-placement={popupPosition.placement}\n data-align={popupPosition.align}\n style={popupPosition.style}\n onPointerEnter={(event) => {\n if (event.pointerType !== \"touch\") clearTimer();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === \"touch\") return;\n suppressedRef.current = false;\n if (containsEventTarget(triggerRef.current, event.relatedTarget)) {\n clearTimer();\n return;\n }\n schedule(false, 0, { reason: \"pointer-leave\" });\n }}\n >\n {descriptor.content}\n </span>\n </AnchoredPortal>\n ) : null}\n </span>\n );\n});\n\nexport type MenuItem = Readonly<{\n id: string;\n label: ReactNode;\n /** Required for typeahead when label is not plain text. */\n textValue?: string;\n description?: ReactNode;\n leading?: ReactNode;\n trailing?: ReactNode;\n tone?: MenuItemTone;\n disabled?: boolean;\n /** Backward-compatible item-local action; Menu onAction receives every activation. */\n onSelect?: () => void;\n}>;\n\nexport type MenuSection = Omit<MenuSectionDescriptor<string, string>, \"items\"> &\n Readonly<{ items: readonly MenuItem[] }>;\n\nexport type MenuOpenChangeReason =\n | \"trigger\"\n | \"selection\"\n | \"escape\"\n | \"outside\"\n | \"tab\";\n\nexport type MenuAsyncState =\n | Readonly<{ status: \"idle\" }>\n | Readonly<{\n status: \"loading\" | \"loadingMore\" | \"empty\" | \"error\";\n message: ReactNode;\n }>;\n\ntype MenuActionSelection = Readonly<{\n selectionMode?: \"action\";\n value?: never;\n defaultValue?: never;\n onValueChange?: never;\n}>;\n\ntype MenuSingleSelection =\n | Readonly<{\n selectionMode: \"single\";\n value: string | null;\n defaultValue?: never;\n onValueChange(value: string): void;\n }>\n | Readonly<{\n selectionMode: \"single\";\n value?: never;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n }>;\n\ntype MenuMultipleSelection =\n | Readonly<{\n selectionMode: \"multiple\";\n value: ReadonlySet<string>;\n defaultValue?: never;\n onValueChange(value: ReadonlySet<string>): void;\n }>\n | Readonly<{\n selectionMode: \"multiple\";\n value?: never;\n defaultValue?: ReadonlySet<string>;\n onValueChange?: (value: ReadonlySet<string>) => void;\n }>;\n\ntype MenuSourceProps =\n | Readonly<{\n items: readonly MenuItem[];\n sections?: never;\n }>\n | Readonly<{\n items?: never;\n sections: readonly MenuSection[];\n }>;\n\ntype MenuBaseProps = Readonly<{\n trigger: OverlayTrigger;\n label: string;\n density?: MenuDensity;\n /** Logical alignment against the trigger; automatically mirrors in RTL. */\n align?: \"start\" | \"end\";\n disabled?: boolean;\n asyncState?: MenuAsyncState;\n onAction?: (id: string) => void;\n /** Runs only once the owner actually closes the menu. */\n onActionAfterDismiss?: (id: string) => void;\n portalContainer?: HTMLElement;\n className?: string;\n}> & MenuSourceProps;\n\nexport type MenuProps = OpenState<Readonly<{ reason: MenuOpenChangeReason }>> &\n MenuBaseProps &\n (MenuActionSelection | MenuSingleSelection | MenuMultipleSelection);\n\nfunction menuTextValue(item: MenuItem): string {\n const value = item.textValue ?? (typeof item.label === \"string\" ? item.label : undefined);\n if (value === undefined || value.trim().length === 0) {\n throw new TypeError(`Menu item ${item.id} needs textValue for typeahead`);\n }\n return value.trim();\n}\n\nfunction validateMenuItems(\n items: readonly MenuItem[],\n sections: readonly MenuSection[] | undefined,\n asyncState: MenuAsyncState,\n): void {\n if (items.length === 0 && (asyncState.status === \"idle\" || asyncState.status === \"loadingMore\")) {\n throw new TypeError(\"Menu requires at least one item\");\n }\n const ids = new Set<string>();\n for (const item of items) {\n if (item.id.trim().length === 0) throw new TypeError(\"Menu item id must not be empty\");\n if (ids.has(item.id)) throw new TypeError(`Duplicate Menu item id: ${item.id}`);\n ids.add(item.id);\n menuTextValue(item);\n }\n if (sections !== undefined) {\n const sectionIds = new Set<string>();\n for (const section of sections) {\n if (section.id.trim().length === 0) throw new TypeError(\"Menu section id must not be empty\");\n if (sectionIds.has(section.id)) throw new TypeError(`Duplicate Menu section id: ${section.id}`);\n sectionIds.add(section.id);\n if (section.items.length === 0) throw new TypeError(`Menu section ${section.id} must not be empty`);\n if ((section.label?.trim().length ?? 0) === 0 &&\n (section.accessibilityLabel?.trim().length ?? 0) === 0) {\n throw new TypeError(`Menu section ${section.id} needs a label or accessibilityLabel`);\n }\n }\n }\n if (\n (asyncState.status === \"idle\" || asyncState.status === \"loadingMore\") &&\n !items.some((item) => !item.disabled)\n ) {\n throw new TypeError(\"Menu requires at least one enabled item\");\n }\n}\n\nexport const Menu = forwardRef<HTMLDivElement, MenuProps>(function Menu(props, ref) {\n // Unconditional: `??` on the hook call would break the rules of hooks.\n const densityDefault = useHjmDensityDefault({\n comfortable: menuRecipe.defaults.density,\n compact: \"compact\",\n });\n const {\n trigger,\n label,\n density: densityProp,\n align = \"start\",\n disabled = false,\n asyncState = { status: \"idle\" },\n onAction,\n onActionAfterDismiss,\n portalContainer,\n open: openProp,\n defaultOpen,\n onOpenChange,\n className,\n } = props;\n const density = densityProp ?? densityDefault;\n const sections = props.sections;\n const items = sections === undefined ? props.items : sections.flatMap((section) => section.items);\n if (label.trim().length === 0) throw new TypeError(\"Menu label must not be empty\");\n validateMenuItems(items, sections, asyncState);\n const selectionMode = props.selectionMode ?? \"action\";\n const [open, changeOpen] = useOpenState({\n ...(openProp === undefined ? {} : { open: openProp }),\n ...(defaultOpen === undefined ? {} : { defaultOpen }),\n ...(onOpenChange === undefined ? {} : { onOpenChange }),\n });\n const [focusIndex, setFocusIndex] = useState(() =>\n items.findIndex((item) => !item.disabled),\n );\n const singleSelection = selectionMode === \"single\"\n ? (props as MenuSingleSelection)\n : undefined;\n const multipleSelection = selectionMode === \"multiple\"\n ? (props as MenuMultipleSelection)\n : undefined;\n const [singleValue, setSingleValue] = useControllableState<string | null>({\n ...(singleSelection?.value !== undefined\n ? { value: singleSelection.value }\n : {}),\n defaultValue: singleSelection?.defaultValue ?? null,\n ...(singleSelection?.onValueChange !== undefined\n ? {\n onChange: (next: string | null) => {\n if (next !== null) singleSelection.onValueChange?.(next);\n },\n }\n : {}),\n });\n const [multipleValue, setMultipleValue] = useControllableState<ReadonlySet<string>>({\n ...(multipleSelection?.value !== undefined\n ? { value: multipleSelection.value }\n : {}),\n defaultValue: multipleSelection?.defaultValue ?? new Set<string>(),\n ...(multipleSelection?.onValueChange !== undefined\n ? { onChange: multipleSelection.onValueChange }\n : {}),\n });\n const knownIds = new Set(items.map((item) => item.id));\n if (selectionMode === \"single\" && singleValue !== null && !knownIds.has(singleValue)) {\n throw new RangeError(`Unknown Menu single value: ${singleValue}`);\n }\n if (selectionMode === \"multiple\") {\n for (const selectedId of multipleValue) {\n if (!knownIds.has(selectedId)) throw new RangeError(`Unknown Menu multiple value: ${selectedId}`);\n }\n }\n const triggerRef = useRef<HTMLElement>(null);\n const itemRefs = useRef(new Map<number, HTMLButtonElement>());\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const [contentNode, setContentNode] = useState<HTMLDivElement | null>(null);\n const restoreFocusRef = useRef(false);\n const afterDismissIdRef = useRef<string | undefined>(undefined);\n const typeaheadRef = useRef({ value: \"\", time: 0 });\n const id = `${useId().replaceAll(\":\", \"\")}-menu`;\n const popupPosition = useAnchoredPopup(triggerRef, contentNode, { align, zIndex: 900 });\n const setMenuContentRef = useCallback((node: HTMLDivElement | null) => {\n contentRef.current = node;\n setContentNode(node);\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }, [ref]);\n\n useEffect(() => {\n if (!open) {\n if (restoreFocusRef.current) {\n restoreFocusRef.current = false;\n queueMicrotask(() => triggerRef.current?.focus());\n }\n const completedId = afterDismissIdRef.current;\n if (completedId !== undefined) {\n afterDismissIdRef.current = undefined;\n queueMicrotask(() => onActionAfterDismiss?.(completedId));\n }\n return;\n }\n const item = itemRefs.current.get(focusIndex);\n if (item && !item.disabled) item.focus();\n else contentRef.current?.focus();\n }, [contentNode, focusIndex, onActionAfterDismiss, open]);\n\n const itemIsDisabled = (item: MenuItem) =>\n disabled || asyncState.status === \"loading\" || Boolean(item.disabled);\n const firstEnabled = () => items.findIndex((item) => !itemIsDisabled(item));\n const lastEnabled = () => {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n if (items[index] && !itemIsDisabled(items[index]!)) return index;\n }\n return firstEnabled();\n };\n const focusAt = (index: number) => {\n setFocusIndex(index);\n queueMicrotask(() => itemRefs.current.get(index)?.focus());\n };\n const moveFocus = (step: 1 | -1) => {\n for (let offset = 1; offset <= items.length; offset += 1) {\n const next = (focusIndex + step * offset + items.length) % items.length;\n if (items[next] && !itemIsDisabled(items[next]!)) {\n focusAt(next);\n return;\n }\n }\n };\n const close = (reason: MenuOpenChangeReason, restore: boolean) => {\n if (restore) restoreFocusRef.current = true;\n changeOpen(false, { reason });\n };\n const openMenu = (focus: \"first\" | \"last\" = \"first\") => {\n if (disabled) return;\n const index = focus === \"first\" ? firstEnabled() : lastEnabled();\n setFocusIndex(index);\n changeOpen(true, { reason: \"trigger\" });\n };\n\n const itemSelected = (id: string) =>\n selectionMode === \"single\"\n ? singleValue === id\n : selectionMode === \"multiple\"\n ? multipleValue.has(id)\n : false;\n\n const activateItem = (item: MenuItem, index: number) => {\n if (itemIsDisabled(item)) return;\n item.onSelect?.();\n onAction?.(item.id);\n if (selectionMode === \"multiple\") {\n const next = new Set(multipleValue);\n if (next.has(item.id)) next.delete(item.id);\n else next.add(item.id);\n setMultipleValue(next);\n focusAt(index);\n return;\n }\n if (selectionMode === \"single\") setSingleValue(item.id);\n afterDismissIdRef.current = item.id;\n close(\"selection\", true);\n };\n\n const runTypeahead = (key: string) => {\n const currentTime = Date.now();\n const previous = currentTime - typeaheadRef.current.time < 500\n ? typeaheadRef.current.value\n : \"\";\n const combined = `${previous}${key}`.toLocaleLowerCase();\n const search = new Set(combined).size === 1 ? key.toLocaleLowerCase() : combined;\n typeaheadRef.current = { value: combined, time: currentTime };\n for (let offset = 1; offset <= items.length; offset += 1) {\n const index = (focusIndex + offset + items.length) % items.length;\n const item = items[index];\n if (\n item &&\n !itemIsDisabled(item) &&\n menuTextValue(item).toLocaleLowerCase().startsWith(search)\n ) {\n focusAt(index);\n return;\n }\n }\n };\n\n useEffect(() => {\n if (!open) return;\n const handlePointerDown = (event: PointerEvent) => {\n if (\n event.target instanceof Node &&\n !wrapperRef.current?.contains(event.target) &&\n !contentRef.current?.contains(event.target)\n ) {\n close(\"outside\", false);\n }\n };\n document.addEventListener(\"pointerdown\", handlePointerDown);\n return () => document.removeEventListener(\"pointerdown\", handlePointerDown);\n });\n\n const triggerProps = trigger.props;\n const renderedTrigger = cloneElement(trigger, {\n ref: composeRefs(triggerProps.ref, triggerRef),\n \"aria-controls\": id,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n \"aria-disabled\": disabled || undefined,\n disabled: triggerProps.disabled || disabled,\n onClick: (event) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented || triggerProps.disabled || disabled) return;\n if (open) close(\"trigger\", false);\n else openMenu();\n },\n onKeyDown: (event) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key === \"ArrowDown\" || event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openMenu(\"first\");\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n openMenu(\"last\");\n }\n },\n });\n\n const handleMenuKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n moveFocus(1);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n moveFocus(-1);\n } else if (event.key === \"Home\") {\n event.preventDefault();\n focusAt(firstEnabled());\n } else if (event.key === \"End\") {\n event.preventDefault();\n focusAt(lastEnabled());\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n close(\"escape\", true);\n } else if (event.key === \"Tab\") {\n close(\"tab\", false);\n } else if (\n event.key.length === 1 &&\n event.key !== \" \" &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n runTypeahead(event.key);\n }\n };\n\n const showItems = asyncState.status !== \"empty\" && asyncState.status !== \"error\";\n\n return (\n <span ref={wrapperRef} className=\"hjm-menu\" data-state={open ? \"open\" : \"closed\"}>\n {renderedTrigger}\n {open ? (\n <AnchoredPortal\n anchorRef={triggerRef}\n ssrFallback=\"inline\"\n {...(portalContainer === undefined ? {} : { container: portalContainer })}\n >\n <div\n ref={setMenuContentRef}\n id={id}\n role=\"menu\"\n aria-label={label}\n className={classNames(\"hjm-menu__content\", className)}\n data-density={density}\n data-async-state={asyncState.status}\n data-placement={popupPosition.placement}\n data-align={popupPosition.align}\n aria-busy={\n asyncState.status === \"loading\" || asyncState.status === \"loadingMore\" || undefined\n }\n style={popupPosition.style}\n tabIndex={-1}\n onKeyDown={handleMenuKeyDown}\n >\n {asyncState.status !== \"idle\" ? (\n <div\n className=\"hjm-menu__state-message\"\n role={asyncState.status === \"error\" ? \"alert\" : \"status\"}\n >\n {asyncState.message}\n </div>\n ) : null}\n {showItems ? (sections === undefined ? items.map((item, index) => {\n const selected = itemSelected(item.id);\n const itemDisabled = itemIsDisabled(item);\n const role = selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n return renderMenuItem(item, index, role, selected, itemDisabled);\n }) : sections.map((section, sectionIndex) => {\n const sectionLabelId = `${id}-section-${sectionIndex}`;\n const firstIndex = sections\n .slice(0, sectionIndex)\n .reduce((total, current) => total + current.items.length, 0);\n return (\n <div key={section.id} className=\"hjm-menu__section-boundary\">\n {sectionIndex > 0 ? <div role=\"separator\" className=\"hjm-menu__separator\" /> : null}\n <div\n role=\"group\"\n aria-labelledby={section.label ? sectionLabelId : undefined}\n aria-label={section.label ? undefined : section.accessibilityLabel}\n className=\"hjm-menu__section\"\n >\n {section.label ? (\n <div id={sectionLabelId} className=\"hjm-menu__section-label\">\n {section.label}\n </div>\n ) : null}\n {section.items.map((item, itemIndex) => {\n const index = firstIndex + itemIndex;\n const selected = itemSelected(item.id);\n const itemDisabled = itemIsDisabled(item);\n const role = selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n return renderMenuItem(item, index, role, selected, itemDisabled);\n })}\n </div>\n </div>\n );\n })) : null}\n </div>\n </AnchoredPortal>\n ) : null}\n </span>\n );\n\n function renderMenuItem(\n item: MenuItem,\n index: number,\n role: \"menuitem\" | \"menuitemradio\" | \"menuitemcheckbox\",\n selected: boolean,\n itemDisabled: boolean,\n ) {\n return (\n <button\n key={item.id}\n ref={(node) => {\n if (node) {\n itemRefs.current.set(index, node);\n if (open && !itemDisabled && index === focusIndex) {\n queueMicrotask(() => {\n if (node.isConnected && open) node.focus();\n });\n }\n } else itemRefs.current.delete(index);\n }}\n type=\"button\"\n role={role}\n aria-checked={selectionMode === \"action\" ? undefined : selected}\n className=\"hjm-menu__item\"\n data-tone={item.tone ?? menuRecipe.defaults.itemTone}\n data-state={itemDisabled ? \"disabled\" : selected ? \"selected\" : \"idle\"}\n data-focus={index === focusIndex || undefined}\n disabled={itemDisabled}\n tabIndex={!itemDisabled && index === focusIndex ? 0 : -1}\n onClick={() => activateItem(item, index)}\n >\n {item.tone === \"danger\" ? (\n <span className=\"hjm-menu__danger-indicator\" aria-hidden=\"true\">!</span>\n ) : null}\n {item.leading ? <span className=\"hjm-menu__leading\" aria-hidden=\"true\">{item.leading}</span> : null}\n <span className=\"hjm-menu__copy\">\n <span>{item.label}</span>\n {item.description ? <span className=\"hjm-menu__description\">{item.description}</span> : null}\n </span>\n {item.trailing ? <span className=\"hjm-menu__trailing\">{item.trailing}</span> : null}\n </button>\n );\n }\n});\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type QRErrorCorrection } from "@hjmds/design-contracts/components/qr-code";
|
|
3
|
+
export type QRCodeProps = {
|
|
4
|
+
value: string;
|
|
5
|
+
label: string;
|
|
6
|
+
size?: number;
|
|
7
|
+
level?: QRErrorCorrection;
|
|
8
|
+
fallback: ReactNode;
|
|
9
|
+
};
|
|
10
|
+
export declare function QRCode({ value, label, size, level, fallback }: QRCodeProps): import("react").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=qr-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr-code.d.ts","sourceRoot":"","sources":["../src/qr-code.tsx"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAC1H,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAC;AAC1H,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAU,EAAE,KAAW,EAAE,QAAQ,EAAE,EAAE,WAAW,+BAStF"}
|
package/dist/qr-code.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import qrcode from "qrcode-generator";
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import { createQRMatrix, qrPath, qrCodeRecipe } from "@hjmds/design-contracts/components/qr-code";
|
|
5
|
+
export function QRCode({ value, label, size = 192, level = "M", fallback }) {
|
|
6
|
+
const matrix = useMemo(() => createQRMatrix(value, qrcode, level), [value, level]);
|
|
7
|
+
const modules = matrix.count + matrix.quietZone * 2;
|
|
8
|
+
if (!label.trim() || fallback == null || fallback === false || !Number.isFinite(size) || size < modules * qrCodeRecipe.minModuleSize)
|
|
9
|
+
throw new TypeError("QRCode needs an accessible label, alternative action and at least two pixels per module");
|
|
10
|
+
// Integer-sized modules plus a four-module white quiet zone preserve scan geometry in both themes.
|
|
11
|
+
const actualSize = Math.floor(size / modules) * modules;
|
|
12
|
+
return _jsxs("div", { "data-hjm-qr-code": true, children: [_jsxs("svg", { role: "img", "aria-label": label, width: actualSize, height: actualSize, viewBox: `0 0 ${modules} ${modules}`, shapeRendering: "crispEdges", children: [_jsx("rect", { width: modules, height: modules, fill: qrCodeRecipe.background }), _jsx("path", { d: qrPath(matrix), fill: qrCodeRecipe.foreground })] }), fallback] });
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=qr-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr-code.js","sourceRoot":"","sources":["../src/qr-code.tsx"],"names":[],"mappings":";AAAA,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAA0B,MAAM,4CAA4C,CAAC;AAE1H,MAAM,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,GAAG,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,QAAQ,EAAe;IACrF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,OAAO,GAAG,YAAY,CAAC,aAAa;QAAE,MAAM,IAAI,SAAS,CAAC,yFAAyF,CAAC,CAAC;IACrP,mGAAmG;IACnG,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC;IACxD,OAAO,oDAAsB,eAAK,IAAI,EAAC,KAAK,gBAAa,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,OAAO,IAAI,OAAO,EAAE,EAAE,cAAc,EAAC,YAAY,aACtK,eAAM,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,GAAI,EAAA,eAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,UAAU,GAAI,IAC9H,EAAC,QAAQ,IAAO,CAAC;AACzB,CAAC","sourcesContent":["import qrcode from \"qrcode-generator\";\nimport { useMemo, type ReactNode } from \"react\";\nimport { createQRMatrix, qrPath, qrCodeRecipe, type QRErrorCorrection } from \"@hjmds/design-contracts/components/qr-code\";\nexport type QRCodeProps = { value: string; label: string; size?: number; level?: QRErrorCorrection; fallback: ReactNode };\nexport function QRCode({ value, label, size = 192, level = \"M\", fallback }: QRCodeProps) {\n const matrix = useMemo(() => createQRMatrix(value, qrcode, level), [value, level]);\n const modules = matrix.count + matrix.quietZone * 2;\n if (!label.trim() || fallback == null || fallback === false || !Number.isFinite(size) || size < modules * qrCodeRecipe.minModuleSize) throw new TypeError(\"QRCode needs an accessible label, alternative action and at least two pixels per module\");\n // Integer-sized modules plus a four-module white quiet zone preserve scan geometry in both themes.\n const actualSize = Math.floor(size / modules) * modules;\n return <div data-hjm-qr-code><svg role=\"img\" aria-label={label} width={actualSize} height={actualSize} viewBox={`0 0 ${modules} ${modules}`} shapeRendering=\"crispEdges\">\n <rect width={modules} height={modules} fill={qrCodeRecipe.background} /><path d={qrPath(matrix)} fill={qrCodeRecipe.foreground} />\n </svg>{fallback}</div>;\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type SortableItem, type SortableLabels, type ReorderIntent } from "@hjmds/design-contracts/components/interaction-adapters";
|
|
3
|
+
export type SortableCollectionProps = {
|
|
4
|
+
items: readonly SortableItem[];
|
|
5
|
+
label: string;
|
|
6
|
+
labels: SortableLabels;
|
|
7
|
+
renderItem(item: SortableItem): ReactNode;
|
|
8
|
+
onCommit(intent: ReorderIntent): void;
|
|
9
|
+
onCancel?(): void;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
};
|
|
12
|
+
/** Small controlled collections only; persistence and rollback belong to the host. */
|
|
13
|
+
export declare function SortableCollection(props: SortableCollectionProps): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=sortable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortable.d.ts","sourceRoot":"","sources":["../src/sortable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA2D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIhG,OAAO,EAAgC,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,yDAAyD,CAAC;AAInK,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IACtE,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC9E,CAAC;AAkBF,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,+BAiEhE"}
|
package/dist/sortable.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useLayoutEffect, useRef, useState, useMemo } from "react";
|
|
3
|
+
import { Accessibility } from "@dnd-kit/dom";
|
|
4
|
+
import { DragDropProvider } from "@dnd-kit/react";
|
|
5
|
+
import { useSortable, isSortable } from "@dnd-kit/react/sortable";
|
|
6
|
+
import { reorderIntent, validateItems } from "@hjmds/design-contracts/components/interaction-adapters";
|
|
7
|
+
import { Button } from "./actions.js";
|
|
8
|
+
import { useHjmTheme } from "./provider.js";
|
|
9
|
+
function Row({ item, index, children, disabled, reduced, labels, move, count }) {
|
|
10
|
+
const { ref, handleRef } = useSortable({ id: item.id, index, disabled: disabled || item.disabled === true,
|
|
11
|
+
...(reduced ? { transition: null } : {}) });
|
|
12
|
+
return _jsxs("li", { ref: ref, "data-item-id": item.id, style: { display: "grid", gridTemplateColumns: "auto minmax(0, 1fr)", alignItems: "center", gap: "var(--hjm-space-sm)", paddingBlock: "var(--hjm-space-xs)" }, children: [_jsx(Button, { ref: handleRef, tone: "ghost", type: "button", disabled: disabled || item.disabled, "aria-label": labels.handle(item), style: { minWidth: 44, minHeight: 44, touchAction: "none", cursor: "grab" }, children: "\u283F" }), _jsx("div", { style: { minWidth: 0, overflowWrap: "anywhere" }, children: children }), _jsxs("div", { style: { gridColumn: "1 / -1", display: "flex", flexWrap: "wrap", gap: "var(--hjm-space-xs)" }, children: [_jsx(Button, { tone: "ghost", disabled: disabled || item.disabled || index === 0, onClick: () => move(index - 1), children: labels.previous(item) }), _jsx(Button, { tone: "ghost", disabled: disabled || item.disabled || index === count - 1, onClick: () => move(index + 1), children: labels.next(item) })] })] });
|
|
13
|
+
}
|
|
14
|
+
/** Small controlled collections only; persistence and rollback belong to the host. */
|
|
15
|
+
export function SortableCollection(props) {
|
|
16
|
+
validateItems(props.items);
|
|
17
|
+
if (!props.label.trim())
|
|
18
|
+
throw new TypeError("SortableCollection needs a label");
|
|
19
|
+
const { environment } = useHjmTheme();
|
|
20
|
+
const [announcement, setAnnouncement] = useState("");
|
|
21
|
+
const latest = useRef(props);
|
|
22
|
+
latest.current = props;
|
|
23
|
+
const accessibility = useMemo(() => Accessibility.configure({
|
|
24
|
+
screenReaderInstructions: { draggable: props.labels.instructions },
|
|
25
|
+
announcements: {
|
|
26
|
+
dragstart: ({ operation }) => {
|
|
27
|
+
const item = latest.current.items.find(i => i.id === operation.source?.id);
|
|
28
|
+
return item ? latest.current.labels.dragStart(item) : undefined;
|
|
29
|
+
},
|
|
30
|
+
dragend: ({ canceled }) => canceled ? latest.current.labels.dragCancel : undefined,
|
|
31
|
+
// HJM emits the accepted controlled position, never raw upstream IDs.
|
|
32
|
+
dragover: () => undefined, dragmove: () => undefined,
|
|
33
|
+
},
|
|
34
|
+
}), [props.labels.instructions]);
|
|
35
|
+
const plugins = useCallback((defaults) => [...defaults.filter(plugin => plugin !== Accessibility), accessibility],
|
|
36
|
+
// A fresh function every render made the provider reassign manager.plugins on each render (2026-09-30 review).
|
|
37
|
+
[accessibility]);
|
|
38
|
+
const list = useRef(null);
|
|
39
|
+
// Moving a row re-parents its DOM node, and an edge move disables the pressed button: both dropped focus to
|
|
40
|
+
// <body> after a keyboard reorder. Refocus the moved row once the host has accepted the new order.
|
|
41
|
+
const refocus = useRef(null);
|
|
42
|
+
const snapshot = useRef("");
|
|
43
|
+
const signature = JSON.stringify(props.items);
|
|
44
|
+
useLayoutEffect(() => {
|
|
45
|
+
const pending = refocus.current;
|
|
46
|
+
if (!pending)
|
|
47
|
+
return;
|
|
48
|
+
const row = list.current?.querySelector(`[data-item-id="${CSS.escape(pending.id)}"]`);
|
|
49
|
+
if (!row)
|
|
50
|
+
return;
|
|
51
|
+
refocus.current = null;
|
|
52
|
+
const [handle, previous, next] = [...row.querySelectorAll("button")];
|
|
53
|
+
const preferred = pending.direction === "previous" ? previous : next;
|
|
54
|
+
const fallback = pending.direction === "previous" ? next : previous;
|
|
55
|
+
(preferred && !preferred.disabled ? preferred : fallback && !fallback.disabled ? fallback : handle)?.focus();
|
|
56
|
+
// Announce only once the controlled order reflects the move, never a proposed position.
|
|
57
|
+
const index = props.items.findIndex(item => item.id === pending.id);
|
|
58
|
+
if (index >= 0)
|
|
59
|
+
setAnnouncement(props.labels.position(props.items[index], index + 1, props.items.length));
|
|
60
|
+
}, [signature]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
61
|
+
const commit = (id, to, source) => {
|
|
62
|
+
if (props.disabled)
|
|
63
|
+
return;
|
|
64
|
+
const intent = reorderIntent(props.items, id, to, source);
|
|
65
|
+
if (!intent) {
|
|
66
|
+
// A rejected drag (fixed row in range, same index) must still end the host's drag session.
|
|
67
|
+
if (source === "drag")
|
|
68
|
+
props.onCancel?.();
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (source === "keyboard")
|
|
72
|
+
refocus.current = { id, direction: intent.toIndex < intent.fromIndex ? "previous" : "next" };
|
|
73
|
+
else
|
|
74
|
+
refocus.current = { id, direction: "next" };
|
|
75
|
+
props.onCommit(intent);
|
|
76
|
+
};
|
|
77
|
+
return _jsxs(DragDropProvider, { plugins: plugins, onDragStart: () => { snapshot.current = signature; }, onDragEnd: event => {
|
|
78
|
+
if (event.canceled || snapshot.current !== signature) {
|
|
79
|
+
props.onCancel?.();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const source = event.operation.source;
|
|
83
|
+
if (source && isSortable(source))
|
|
84
|
+
commit(String(source.id), source.index, "drag");
|
|
85
|
+
}, children: [_jsx("ul", { ref: list, "aria-label": props.label, style: { listStyle: "none", margin: 0, padding: 0 }, children: props.items.map((item, index) => _jsx(Row, { item: item, index: index, count: props.items.length, disabled: props.disabled ?? false, reduced: environment.reducedMotion, labels: props.labels, move: to => commit(item.id, to, "keyboard"), children: props.renderItem(item) }, item.id)) }), _jsx("span", { role: "status", style: { position: "absolute", width: 1, height: 1, overflow: "hidden", clipPath: "inset(50%)" }, children: announcement })] });
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=sortable.js.map
|