@hjmds/react 1.19.0 → 1.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions.d.ts +10 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +9 -3
- package/dist/actions.js.map +1 -1
- package/dist/authoring-tools.d.ts +38 -0
- package/dist/authoring-tools.d.ts.map +1 -0
- package/dist/authoring-tools.js +65 -0
- package/dist/authoring-tools.js.map +1 -0
- package/dist/bottom-navigation.d.ts.map +1 -1
- package/dist/bottom-navigation.js +1 -1
- package/dist/bottom-navigation.js.map +1 -1
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +1 -0
- package/dist/calendar.js.map +1 -1
- package/dist/chart.d.ts +157 -0
- package/dist/chart.d.ts.map +1 -0
- package/dist/chart.js +467 -0
- package/dist/chart.js.map +1 -0
- package/dist/collection-editing.d.ts +66 -0
- package/dist/collection-editing.d.ts.map +1 -0
- package/dist/collection-editing.js +126 -0
- package/dist/collection-editing.js.map +1 -0
- package/dist/communication.d.ts +51 -0
- package/dist/communication.d.ts.map +1 -0
- package/dist/communication.js +71 -0
- package/dist/communication.js.map +1 -0
- package/dist/data-table.d.ts +21 -1
- package/dist/data-table.d.ts.map +1 -1
- package/dist/data-table.js +105 -10
- package/dist/data-table.js.map +1 -1
- package/dist/data-workflows.d.ts +67 -0
- package/dist/data-workflows.d.ts.map +1 -0
- package/dist/data-workflows.js +60 -0
- package/dist/data-workflows.js.map +1 -0
- package/dist/evidence.d.ts +1 -1
- package/dist/evidence.js +1 -1
- package/dist/evidence.js.map +1 -1
- package/dist/internal/use-composition-action.d.ts +17 -0
- package/dist/internal/use-composition-action.d.ts.map +1 -0
- package/dist/internal/use-composition-action.js +18 -0
- package/dist/internal/use-composition-action.js.map +1 -0
- package/dist/media-transport.d.ts +22 -0
- package/dist/media-transport.d.ts.map +1 -0
- package/dist/media-transport.js +50 -0
- package/dist/media-transport.js.map +1 -0
- package/dist/navigation.d.ts +3 -1
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +29 -5
- package/dist/navigation.js.map +1 -1
- package/dist/screen-flows.d.ts +1 -1
- package/dist/screen-flows.d.ts.map +1 -1
- package/dist/screen-flows.js +1 -1
- package/dist/screen-flows.js.map +1 -1
- package/dist/screens.d.ts +8 -2
- package/dist/screens.d.ts.map +1 -1
- package/dist/screens.js +11 -5
- package/dist/screens.js.map +1 -1
- package/dist/social-compositions.d.ts +52 -0
- package/dist/social-compositions.d.ts.map +1 -0
- package/dist/social-compositions.js +41 -0
- package/dist/social-compositions.js.map +1 -0
- package/dist/streaming-answer.d.ts +24 -0
- package/dist/streaming-answer.d.ts.map +1 -0
- package/dist/streaming-answer.js +57 -0
- package/dist/streaming-answer.js.map +1 -0
- package/dist/styles.css +149 -1
- package/dist/styles.layered.css +149 -1
- package/dist/table-family.d.ts +66 -0
- package/dist/table-family.d.ts.map +1 -0
- package/dist/table-family.js +75 -0
- package/dist/table-family.js.map +1 -0
- package/dist/task-controls.d.ts +47 -0
- package/dist/task-controls.d.ts.map +1 -0
- package/dist/task-controls.js +46 -0
- package/dist/task-controls.js.map +1 -0
- package/dist/toggle-feedback.d.ts +26 -0
- package/dist/toggle-feedback.d.ts.map +1 -0
- package/dist/toggle-feedback.js +47 -0
- package/dist/toggle-feedback.js.map +1 -0
- package/dist/transfer-task.d.ts +18 -0
- package/dist/transfer-task.d.ts.map +1 -0
- package/dist/transfer-task.js +56 -0
- package/dist/transfer-task.js.map +1 -0
- package/package.json +58 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../src/chart.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,KAAK,EACL,eAAe,EACf,OAAO,EACP,MAAM,EACN,QAAQ,GAKT,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAAE,oBAAoB,EACxC,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,EACX,cAAc,EACd,aAAa,EACb,WAAW,EACX,cAAc,EACd,mBAAmB,GAQpB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C;;;;;;;;GAQG;AAEH,gGAAgG;AAChG,iBAAiB;AACjB,gGAAgG;AAEhG,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,SAAS,QAAQ,CAAC,SAAyB;IACzC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,KAAK,OAAO;QACvC,CAAC,CAAC,eAAe,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;QACvC,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IACzH,OAAO,SAAS,CAAC,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,CAAC;QAC3D,CAAC,CAAC,OAAO,IAAI,GAAG;QAChB,CAAC,CAAC,0BAA0B,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC;AAC5F,CAAC;AAED,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;AAClC,MAAM,WAAW,GAAG;IAClB,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;IAClD,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;IACpD,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;IAClD,wBAAwB,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI;IACjD,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC;IACxD,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;IAC9D,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC;IAC5D,6BAA6B,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;CAC9C,CAAC;AAEnB,SAAS,cAAc;IACrB,MAAM,KAAK,GAAG,mBAAmB,EAAE,EAAE,WAAW,CAAC,KAAK,IAAI,OAAO,CAAC;IAClE,OAAO,WAAW,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1G,CAAC;AAED,SAAS,QAAQ;IACf,OAAO,KAAK,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,2FAA2F;AAC3F,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAC;IAC9D,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,GAAG,IAAI,IAAI,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,OAAO,cAAc,KAAK,WAAW;YAAE,OAAO;QAClD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7F,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACrC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACX,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC1B,CAAC;AAYD,sGAAsG;AACtG,SAAS,QAAQ,CAAC,EAAE,UAAU,EAAE,iBAAiB,GAAG,IAAI,EAAE,aAAa,EAAE,aAAa,GAAG,KAAK,EAAc,EAAE,QAAuB,EAAE,UAA8B;IACnK,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,UAAU,EAAE,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/N,MAAM,WAAW,GAAG,MAAM,CAAgB,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1E,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAgB,iBAAiB,CAAC,CAAC;IACjE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,IAAI,WAAW,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACjJ,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACnD,MAAM,OAAO,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAC5J,MAAM,KAAK,GAAG,KAAK,IAAI,OAAO,IAAI,QAAQ,CAAC;IAC3C,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,KAAoB,EAAE,SAAkB,EAAE,EAAE;QACnE,IAAI,SAAS,EAAE,CAAC;YAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAAC,CAAC;aACpD,CAAC;YAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAAC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAAC,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;gBAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;QAAC,CAAC;QACnH,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;IACzG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,KAAK,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AAC5D,CAAC;AAED,8FAA8F;AAC9F,SAAS,QAAQ,CAAC,IAA6C,EAAE,OAAuC,EAAE,KAAiB;IACzH,MAAM,MAAM,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,KAAgC,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC,CAAC;IACF,OAAO;QACL,aAAa,CAAC,KAAgC;YAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC/B,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;YACjC,KAAK,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACzD,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACrB,CAAC;QACD,aAAa,CAAC,KAAgC;YAC5C,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,SAAS;gBAAE,OAAO;YAC/C,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACrB,CAAC;QACD,WAAW,CAAC,KAAgC;YAC1C,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,SAAS;gBAAE,OAAO;YAC/C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,KAAK,EAAE,CAAC;QACV,CAAC;QACD,eAAe,CAAC,KAAgC;YAC9C,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,SAAS;gBAAE,OAAO;YAC/C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,KAAK,EAAE,CAAC;QACV,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,UAA6B,EAAE,MAA8B,EAAE,KAAa,EAAE,MAAiC,EAAE,OAAe;IACjJ,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAChK,CAAC;AAED,gGAAgG;AAChG,SAAS,OAAO,CAAC,KAAoB,EAAE,SAA4B,EAAE,KAAoB,EAAE,QAA2B,EAAE,YAA+B;IACrJ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACtD,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACzD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAwD;IAC5F,qEAAqE;IACrE,MAAM,IAAI,GAAG,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,eAAM,SAAS,EAAC,mBAAmB,iBAAa,MAAM,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,YAAG,IAAI,GAAQ,CAAC;AACvG,CAAC;AAuBD,yFAAyF;AACzF,4EAA4E;AAC5E,SAAS,cAAc,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAsO;IAC3S,MAAM,aAAa,GAAG,mBAAmB,EAAE,EAAE,WAAW,CAAC,aAAa,CAAC;IACvE,MAAM,IAAI,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAA8I,IAAI,CAAC,CAAC;IAC3K,MAAM,IAAI,GAAG,CAAC,CAAsC,EAAE,IAAa,EAAE,IAA0C,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7L,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAChE,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;QAChC,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACxC,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC;QAC1B,+EAA+E;QAC/E,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5K,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACpF,MAAM,UAAU,GAAG,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9F,IAAI,KAAK,GAAG,CAAC,EAAE,KAAyB,CAAC;QACzC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACrM,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACnG,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACtK,KAAK,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,GAAG,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;QACxJ,OAAO,GAAG,EAAE,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9G,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IACxC,OAAO,kBAAU,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,GAAI,CAAC;AACtE,CAAC;AACD,SAAS,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,IAAI,EAA+G;IACxL,MAAM,aAAa,GAAG,mBAAmB,EAAE,EAAE,WAAW,CAAC,aAAa,CAAC;IACvE,MAAM,IAAI,GAAG,MAAM,CAAwB,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IAC3F,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;QAAC,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC;QACxD,IAAI,CAAC,OAAO,IAAI,aAAa,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACzJ,IAAI,KAAK,GAAG,CAAC,EAAE,KAAyB,CAAC;QACzC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACrN,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;YAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAChH,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACtK,KAAK,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,GAAG,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC;QAAC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;QACxJ,OAAO,GAAG,EAAE,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9G,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IACxC,OAAO,kBAAU,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,GAAI,CAAC;AAC1F,CAAC;AA8BD,MAAM,UAAU,SAAS,CAAC,EACxB,UAAU,EAAE,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,GAAG,EACnI,KAAK,GAAG,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EACxH,SAAS,GAAG,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,GAAG,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,UAAU,EAClH;IACf,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,cAAc,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,aAAa,GAAG,GAAG,EAAE,cAAc,CAAC;IACvF,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACnE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,UAAU,CAAC,CAAC;IACtG,MAAM,MAAM,GAAG,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;IACzF,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC;QAC1C,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;QAC1D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;KACrF,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IACvF,+FAA+F;IAC/F,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9G,MAAM,QAAQ,GAAG,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;IACtG,MAAM,KAAK,GAAG,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,MAAM,SAAS,GAAG,CAAC,KAAoC,EAAE,EAAE;QACzD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QACrG,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO;QAC/B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC;IACF,OAAO,CACL,eAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,iBAAiB,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,WAAW,EAAE,GAAG,WAAW,EAAE,oBAAkB,SAAS,IAAI,SAAS,aACpK,eACE,SAAS,EAAC,iBAAiB,EAC3B,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,gBACC,kBAAkB,sBACZ,aAAa,mBAChB,CAAC,mBACD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,mBAClC,KAAK,IAAI,CAAC,oBACT,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,EAC/G,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAC5B,SAAS,EAAE,SAAS,KAChB,QAAQ,aAEZ,eAAK,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,MAAM,EAAE,iBAAc,MAAM,EAAC,SAAS,EAAC,OAAO,aACxG,2BACE,mBAAU,EAAE,EAAE,GAAG,EAAE,QAAQ,YAAE,eAAM,CAAC,EAAE,aAAa,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAI,GAAW,EACvT,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACvB,0BAA8B,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,aAC9E,eAAM,MAAM,EAAC,GAAG,EAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,UAAU,GAAI,EAC1F,eAAM,MAAM,EAAC,GAAG,EAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa,GAAI,KAF1E,IAAI,CAAC,EAAE,CAGX,CAClB,CAAC,IACG,EACN,CAAC,YAAY,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAiB,SAAS,EAAC,iBAAiB,EAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAjG,IAAI,CAAiG,CAAC,EACzJ,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAuB,SAAS,EAAC,kBAAkB,EAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAC,QAAQ,EAAC,UAAU,EAAC,KAAK,YAAE,WAAW,CAAC,IAAI,CAAC,IAAxI,IAAI,IAAI,EAAE,CAAsI,CAAC,CAAC,CAAC,CAAC,IAAI,EACnO,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAC1B,eAAM,SAAS,EAAC,sBAAsB,EAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAI,CAC5K,CAAC,CAAC,CAAC,IAAI,EACP,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gCACtB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;gCACtE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;gCAC3B,OAAO,CACL,4BAA8B,IAAI,CAAC,EAAE,aAClC,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAClD,KAAC,cAAc,IAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAgB,SAAS,EAAC,iBAAiB,EAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,IAAlE,IAAI,CAAC,EAAE,CAA+D,CAC1O,CAAC,CAAC,CAAC,CAAC,IAAI,EACR,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAC5B,wBAAiB,KAAC,cAAc,IAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAC,iBAAiB,EAAC,MAAM,EAAE,aAAa,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAC,MAAM,EAAC,cAAc,EAAC,OAAO,EAAC,aAAa,EAAC,OAAO,GAAG,EACzS,aAAa,IAAI,KAAK,KAAK,IAAI,IAAI,YAAG,QAAQ,EAAE,QAAQ,EAAE,SAAS,YAAE,KAAC,cAAc,IAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAC,iBAAiB,EAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAC,MAAM,EAAC,cAAc,EAAC,OAAO,EAAC,aAAa,EAAC,OAAO,GAAG,GAAI,KAD7R,IAAI,CAAC,EAAE,CAC2R,CAC3S,CAAC,EAED,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACnE,iBAAsC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,IAAhF,IAAI,OAAO,CAAC,CAAC,CAAE,CAAC,KAAK,EAAE,CAA6D,CAClG,CAAC,KAXI,IAAI,CAAC,EAAE,CAYX,CACL,CAAC;4BACJ,CAAC,CAAC,EACD,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAC7C,aAAG,SAAS,EAAC,kBAAkB,aAC7B,eAAM,SAAS,EAAC,mBAAmB,EAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAI,EACvO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;wCACtB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;wCAC7B,IAAI,CAAC,CAAC;4CAAE,OAAO,IAAI,CAAC;wCACpB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wCAC/B,OAAO,CACL,wBACE,iBAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,gBAAgB,GAAI,EAC1H,iBAAQ,SAAS,EAAC,gBAAgB,EAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,GAAI,KAF/G,IAAI,CAAC,EAAE,CAGX,CACL,CAAC;oCACJ,CAAC,CAAC,IACA,CACL,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAW;iCAC7F,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC;iCACtD,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;gCAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC;gCAC7B,IAAI,CAAC,CAAC;oCAAE,OAAO,IAAI,CAAC;gCACpB,OAAO,CACL,eAAkB,SAAS,EAAC,qCAAqC,EAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAC9K,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,YAAG,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAD1G,KAAK,CAC6G,CAC9H,CAAC;4BACJ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EACV,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACnC,8BACE,eAAM,SAAS,EAAC,kBAAkB,EAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,UAAU,EAAC,OAAO,YAAE,UAAU,CAAC,CAAC,CAAC,GAAQ,EACtG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,kBAAkB,EAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,UAAU,EAAC,KAAK,YAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAQ,CAAC,CAAC,CAAC,IAAI,IAC5I,CACJ,CAAC,CAAC,CAAC,IAAI,IACJ,EACL,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAC,YAAY,IAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAE,GAAI,CAAC,CAAC,CAAC,IAAI,IAChK,EACN,YAAG,EAAE,EAAE,aAAa,EAAE,SAAS,EAAC,qBAAqB,YAAE,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,GAAK,IACpH,CACP,CAAC;AACJ,CAAC;AAcD,uEAAuE;AACvE,SAAS,OAAO,CAAC,GAAa,EAAE,QAAiB,EAAE,QAAiB,EAAE,KAAc;IAClF,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;IAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,MAAM,CAAC,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChE,IAAI,QAAQ,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IAClL,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IACjL,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAA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","sourcesContent":["import {\n useCallback,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type PointerEvent,\n type ReactNode,\n} from \"react\";\nimport type { ColorReference } from \"@hjmds/design-contracts/color-references\";\nimport { resolveDatavizSeriesColor } from \"@hjmds/design-contracts/dataviz\";\nimport {\n prepareChartLineMorph,\n areaPath,\n chartRecipe,\n describeChart,\n isChartNumber,\n linePath,\n nearestChartIndex,\n nearestScatterPoint,\n observedIndices,\n resolveBarGeometry,\n resolveLineGeometry,\n resolvePieGeometry, resolvePieVisibility, type PieVisibilitySummary,\n resolveRadarGeometry,\n resolveScatterGeometry,\n scaleLinear,\n seriesExtremes,\n splitSegments,\n stackValues,\n stepChartIndex,\n validateChartSeries,\n type ChartBar,\n type ChartBarLayout,\n type ChartCurve,\n type ChartInsets,\n type ChartOrientation,\n type ChartSeries,\n type ScatterDatum,\n} from \"@hjmds/design-contracts/components/chart\";\nimport { spacing } from \"@hjmds/design-contracts/foundations\";\nimport { useOptionalHjmTheme } from \"./provider.js\";\nimport { classNames } from \"./internal.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\n/*\n * Web chart renderers (2026-10-14). Geometry, domains, stacking, gaps and the text alternative come\n * from `@hjmds/design-contracts/components/chart`; this file only paints plain SVG and translates\n * pointer/keyboard input into the contract's focus index. Prop names mirror\n * `@hjmds/react-native/chart` so products write one chart description for both surfaces.\n * Interaction follows react-native-wagmi-charts (press-and-drag cursor, release returns to the\n * latest value) with pointer events and `touch-action: pan-y` so vertical page scrolling still wins.\n * Optional data morphing updates SVG hosts directly and respects reduced motion.\n */\n\n// ---------------------------------------------------------------------------------------------\n// Shared helpers\n// ---------------------------------------------------------------------------------------------\n\nfunction kebab(value: string): string {\n return value.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n}\n\n/**\n * Chrome colors stay recipe references resolved through the provider's CSS variables, so a theme\n * switch repaints without re-rendering and the recipe (not styles.css) owns the choice.\n */\nfunction cssColor(reference: ColorReference): string {\n const name = reference.source === \"theme\"\n ? `--hjm-color-${kebab(reference.key)}`\n : reference.source === \"accent\" ? `--hjm-accent-${kebab(reference.key)}` : `--hjm-accent-fill-${kebab(reference.key)}`;\n return reference.alpha === undefined || reference.alpha === 1\n ? `var(${name})`\n : `color-mix(in srgb, var(${name}) ${Math.round(reference.alpha * 100)}%, transparent)`;\n}\n\nconst chrome = chartRecipe.chrome;\nconst chromeStyle = {\n \"--hjm-chart-axis-line\": cssColor(chrome.axisLine),\n \"--hjm-chart-axis-label\": cssColor(chrome.axisLabel),\n \"--hjm-chart-grid-line\": cssColor(chrome.gridLine),\n \"--hjm-chart-grid-width\": `${chrome.gridWidth}px`,\n \"--hjm-chart-legend-label\": cssColor(chrome.legendLabel),\n \"--hjm-chart-tooltip-surface\": cssColor(chrome.tooltipSurface),\n \"--hjm-chart-tooltip-border\": cssColor(chrome.tooltipBorder),\n \"--hjm-chart-tooltip-content\": cssColor(chrome.tooltipContent),\n} as CSSProperties;\n\nfunction useSeriesColor(): (series: Readonly<{ color?: string | undefined }>, index: number) => string {\n const theme = useOptionalHjmTheme()?.environment.theme ?? \"light\";\n return useCallback((series, index) => series.color ?? resolveDatavizSeriesColor(theme, index), [theme]);\n}\n\nfunction useSvgId(): string {\n return useId().replace(/[^a-zA-Z0-9_-]/g, \"\");\n}\n\n/** Responsive width: `fallback` renders on the server and before the first measurement. */\nfunction useMeasuredWidth(fallback: number): [(node: HTMLDivElement | null) => void, number] {\n const [width, setWidth] = useState(fallback);\n const [node, setNode] = useState<HTMLDivElement | null>(null);\n useLayoutEffect(() => {\n if (!node) return;\n const update = (next: number) => { if (next > 0) setWidth(Math.round(next)); };\n update(node.getBoundingClientRect().width);\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver((entries) => update(entries[0]?.contentRect.width ?? 0));\n observer.observe(node);\n return () => observer.disconnect();\n }, [node]);\n return [setNode, width];\n}\n\ntype FocusDetail = Readonly<{ scrubbing: boolean }>;\ntype FocusProps = Readonly<{\n /** Controlled focused category; `null` shows no focus. */\n focusIndex?: number | null;\n defaultFocusIndex?: number | null;\n onFocusChange?: (index: number | null, detail: FocusDetail) => void;\n /** Keep the scrubbed point after release instead of returning to the default (Native parity, 2026-10-14). */\n holdOnRelease?: boolean;\n}>;\n\n/** Controlled/uncontrolled focus plus a transient scrub index (same model as the Native renderer). */\nfunction useFocus({ focusIndex, defaultFocusIndex = null, onFocusChange, holdOnRelease = false }: FocusProps, fallback: number | null, categories?: readonly string[]) {\n const categoryKey = (index: number | null) => index === null || categories?.[index] === undefined ? null : JSON.stringify([categories[index], categories.slice(0, index).filter(value => value === categories[index]).length]);\n const selectedKey = useRef<string | null>(categoryKey(defaultFocusIndex));\n const [own, setOwn] = useState<number | null>(defaultFocusIndex);\n const [scrub, setScrub] = useState<number | null>(null);\n const last = useRef<number | null>(null);\n const mapped = categories && selectedKey.current !== null ? categories.findIndex((_, index) => categoryKey(index) === selectedKey.current) : own;\n const ownSelection = mapped === -1 ? null : mapped;\n const settled = focusIndex !== undefined ? (categories && (focusIndex === null || categories[focusIndex] === undefined) ? null : focusIndex) : ownSelection;\n const focus = scrub ?? settled ?? fallback;\n const set = useCallback((index: number | null, scrubbing: boolean) => {\n if (scrubbing) { setScrub(index); last.current = index; }\n else { setScrub(null); if (focusIndex === undefined) { selectedKey.current = categoryKey(index); setOwn(index); } }\n onFocusChange?.(index, { scrubbing });\n }, [focusIndex, onFocusChange, categories]);\n const release = useCallback(() => set(holdOnRelease ? last.current : null, false), [set, holdOnRelease]);\n return { focus, scrubbing: scrub !== null, set, release };\n}\n\n/** Press-and-drag; the pointer is captured so a drag that leaves the plot keeps scrubbing. */\nfunction useScrub(pick: (x: number, y: number) => number | null, onScrub: (index: number | null) => void, onEnd: () => void) {\n const active = useRef<number | null>(null);\n const at = (event: PointerEvent<HTMLElement>) => {\n const rect = event.currentTarget.getBoundingClientRect();\n return pick(event.clientX - rect.left, event.clientY - rect.top);\n };\n return {\n onPointerDown(event: PointerEvent<HTMLElement>) {\n if (event.button !== 0) return;\n active.current = event.pointerId;\n event.currentTarget.setPointerCapture?.(event.pointerId);\n onScrub(at(event));\n },\n onPointerMove(event: PointerEvent<HTMLElement>) {\n if (active.current !== event.pointerId) return;\n onScrub(at(event));\n },\n onPointerUp(event: PointerEvent<HTMLElement>) {\n if (active.current !== event.pointerId) return;\n active.current = null;\n onEnd();\n },\n onPointerCancel(event: PointerEvent<HTMLElement>) {\n if (active.current !== event.pointerId) return;\n active.current = null;\n onEnd();\n },\n };\n}\n\nfunction valueText(categories: readonly string[], series: readonly ChartSeries[], index: number, format: (value: number) => string, missing: string): string {\n const values = series.map((item) => { const v = item.values[index]; return isChartNumber(v) ? format(v) : missing; });\n return series.length === 1 ? `${categories[index]} ${values[0]}` : `${categories[index]} ${series.map((item, s) => `${item.label} ${values[s]}`).join(\", \")}`;\n}\n\n/** Arrow/Home/End stepping over observed indices only; returns undefined for unrelated keys. */\nfunction keyStep(event: KeyboardEvent, available: readonly number[], focus: number | null, nextKeys: readonly string[], previousKeys: readonly string[]): number | null | undefined {\n if (nextKeys.includes(event.key)) return stepChartIndex(available, focus, 1);\n if (previousKeys.includes(event.key)) return stepChartIndex(available, focus, -1);\n if (event.key === \"Home\") return available[0] ?? null;\n if (event.key === \"End\") return available.at(-1) ?? null;\n return undefined;\n}\n\nfunction CursorBubble({ x, width, text }: Readonly<{ x: number; width: number; text: string }>) {\n // Clamped like the Native bubble so the label never leaves the plot.\n const half = 44, center = Math.min(width - half, Math.max(half, x));\n return <span className=\"hjm-chart__bubble\" aria-hidden=\"true\" style={{ left: center }}>{text}</span>;\n}\n\ntype ChartRootProps = Readonly<{\n className?: string;\n /** Canonical layout-only placement on the root element. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\ntype CartesianCommon = ChartRootProps & Readonly<{\n categories: readonly string[];\n series: readonly ChartSeries[];\n /** Accessible name (Web `aria-label`). Product-localized. */\n accessibilityLabel: string;\n formatValue: (value: number) => string;\n /** Spoken/written for a missing observation in the text alternative. */\n missingLabel: string;\n height?: number;\n /** Width used on the server and before the first ResizeObserver measurement. */\n width?: number;\n domain?: readonly [number, number];\n showAxis?: boolean;\n}>;\n\n// Paths/rectangles update their host attributes directly; values, axes and accessibility\n// always come from the latest real data. No per-frame React reconciliation.\nfunction MotionLinePath({ points, lower, floor, curve, animate, ...rest }: Omit<React.SVGProps<SVGPathElement>, \"points\" | \"ref\"> & { points: readonly { x: number; y: number }[]; lower?: readonly { x: number; y: number }[] | undefined; floor?: number | undefined; curve: ChartCurve; animate: boolean }) {\n const reducedMotion = useOptionalHjmTheme()?.environment.reducedMotion;\n const node = useRef<SVGPathElement | null>(null);\n const previous = useRef<{ points: readonly { x: number; y: number }[]; lower?: readonly { x: number; y: number }[] | undefined; floor?: number | undefined } | null>(null);\n const path = (p: readonly { x: number; y: number }[], base?: number, edge?: readonly { x: number; y: number }[]) => base === undefined ? linePath(p, curve) : areaPath(p, base, curve, edge);\n const signature = JSON.stringify([points, lower, floor, curve]);\n useLayoutEffect(() => {\n const before = previous.current;\n const target = { points, lower, floor };\n previous.current = target;\n // A bounded morph avoids multiplying frame work for dense historical datasets.\n const morph = animate && !reducedMotion && !document.hidden && before && points.length + before.points.length <= 1024 ? prepareChartLineMorph(before.points, points) : null;\n if (!morph) { node.current?.setAttribute(\"d\", path(points, floor, lower)); return; }\n const lowerMorph = before?.lower && lower ? prepareChartLineMorph(before.lower, lower) : null;\n let frame = 0, start: number | undefined;\n const paint = (t: number) => {\n const current = t === 1 ? target : { points: morph(t), lower: lowerMorph?.(t) ?? lower, floor: floor === undefined ? undefined : (before?.floor ?? floor) + (floor - (before?.floor ?? floor)) * t };\n previous.current = current;\n const d = path(current.points, current.floor, current.lower); node.current?.setAttribute(\"d\", d);\n };\n const tick = (now: number) => { start ??= now; const t = Math.min(1, (now - start) / 220); paint(1 - (1 - t) ** 3); if (t < 1) frame = requestAnimationFrame(tick); };\n paint(0); frame = requestAnimationFrame(tick);\n const visibility = () => { if (document.hidden) { cancelAnimationFrame(frame); paint(1); } }; document.addEventListener(\"visibilitychange\", visibility);\n return () => { cancelAnimationFrame(frame); document.removeEventListener(\"visibilitychange\", visibility); };\n }, [signature, animate, reducedMotion]);\n return <path {...rest} ref={node} d={path(points, floor, lower)} />;\n}\nfunction MotionBar({ bar, animate, vertical = true, rounded = true, ...rest }: React.SVGProps<SVGPathElement> & { bar: ChartBar; animate: boolean; vertical?: boolean; rounded?: boolean }) {\n const reducedMotion = useOptionalHjmTheme()?.environment.reducedMotion;\n const node = useRef<SVGPathElement | null>(null), previous = useRef<ChartBar | null>(null);\n const signature = JSON.stringify([bar, vertical, rounded]);\n useLayoutEffect(() => {\n const before = previous.current; previous.current = bar;\n if (!animate || reducedMotion || !before || document.hidden) { node.current?.setAttribute(\"d\", barPath(bar, vertical, bar.value < 0, rounded)); return; }\n let frame = 0, start: number | undefined;\n const paint = (t: number) => {\n const value = { ...bar, x: before.x + (bar.x - before.x) * t, y: before.y + (bar.y - before.y) * t, width: before.width + (bar.width - before.width) * t, height: before.height + (bar.height - before.height) * t };\n previous.current = value; node.current?.setAttribute(\"d\", barPath(value, vertical, value.value < 0, rounded));\n };\n const tick = (now: number) => { start ??= now; const t = Math.min(1, (now - start) / 220); paint(1 - (1 - t) ** 3); if (t < 1) frame = requestAnimationFrame(tick); };\n paint(0); frame = requestAnimationFrame(tick);\n const visibility = () => { if (document.hidden) { cancelAnimationFrame(frame); paint(1); } }; document.addEventListener(\"visibilitychange\", visibility);\n return () => { cancelAnimationFrame(frame); document.removeEventListener(\"visibilitychange\", visibility); };\n }, [signature, animate, reducedMotion]);\n return <path {...rest} ref={node} d={barPath(bar, vertical, bar.value < 0, rounded)} />;\n}\n\n// ---------------------------------------------------------------------------------------------\n// LineChart\n// ---------------------------------------------------------------------------------------------\n\nexport type LineChartProps = CartesianCommon & FocusProps & Readonly<{\n curve?: ChartCurve;\n /** Gradient area under each line. Defaults to on for a single series. */\n area?: boolean;\n stacked?: boolean;\n /** Smallest value on top (ranks, ERA). */\n invert?: boolean;\n includeZero?: boolean;\n /** Dashed horizontal reference line; `\"first\"` uses the first observation (previous close). */\n referenceValue?: number | \"first\";\n /** Labels for the first series' high/low markers, shown while not scrubbing. */\n extremes?: Readonly<{ high: string; low: string }>;\n /** Bubble text above the cursor while scrubbing; defaults to the category. */\n cursorLabel?: (index: number) => string;\n /** Morph actual data changes; reduced motion snaps immediately. */\n animateChanges?: boolean;\n /** Keep the chosen side in series color; mute the other side. */\n scrubEmphasis?: \"before\" | \"after\";\n /** Value labels only (rank charts: \"1위\" at the top). */\n valueAxis?: boolean;\n /** Overrides grid/label ticks. */\n ticks?: readonly number[];\n}>;\n\nexport function LineChart({\n categories, series, accessibilityLabel, formatValue, missingLabel, height = chartRecipe.heights.regular, width: fallbackWidth = 320,\n curve = \"linear\", area, stacked = false, invert = false, domain, includeZero, referenceValue, extremes, showAxis = false,\n valueAxis = false, ticks: tickOverride, cursorLabel, animateChanges = false, scrubEmphasis, className, layoutStyle, ...focusProps\n}: LineChartProps) {\n validateChartSeries(categories, series);\n const colorOf = useSeriesColor(), id = useSvgId(), descriptionId = `${id}-description`;\n const [measure, width] = useMeasuredWidth(fallbackWidth);\n const available = useMemo(() => observedIndices(series), [series]);\n const { focus, scrubbing, set, release } = useFocus(focusProps, available.at(-1) ?? null, categories);\n const insets = showAxis || valueAxis ? chartRecipe.insets.axis : chartRecipe.insets.plot;\n const g = useMemo(() => resolveLineGeometry({\n categories, series, width, height, insets, invert, stacked,\n ...(domain ? { domain } : {}), ...(includeZero === undefined ? {} : { includeZero }),\n }), [categories, series, width, height, insets, invert, stacked, domain, includeZero]);\n // Release returns to the default (latest) focus unless holdOnRelease keeps the scrubbed point.\n const handlers = useScrub((x) => nearestChartIndex(g.xs, x, available), (index) => set(index, true), release);\n const showArea = area ?? series.length === 1;\n const reference = referenceValue === \"first\" ? series[0]?.values.find(isChartNumber) : referenceValue;\n const marks = extremes && !scrubbing ? seriesExtremes(series[0]?.values ?? []) : null;\n const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n const next = keyStep(event, available, focus, [\"ArrowRight\", \"ArrowUp\"], [\"ArrowLeft\", \"ArrowDown\"]);\n if (next === undefined) return;\n event.preventDefault();\n set(next, false);\n };\n return (\n <div ref={measure} className={classNames(\"hjm-chart\", \"hjm-chart--line\", className)} style={{ ...chromeStyle, ...layoutStyle }} data-scrubbing={scrubbing || undefined}>\n <div\n className=\"hjm-chart__plot\"\n role=\"slider\"\n tabIndex={0}\n aria-label={accessibilityLabel}\n aria-describedby={descriptionId}\n aria-valuemin={0}\n aria-valuemax={Math.max(0, categories.length - 1)}\n aria-valuenow={focus ?? 0}\n aria-valuetext={focus === null ? missingLabel : valueText(categories, series, focus, formatValue, missingLabel)}\n style={{ blockSize: height }}\n onKeyDown={onKeyDown}\n {...handlers}\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} aria-hidden=\"true\" focusable=\"false\">\n <defs>\n <clipPath id={`${id}-scrub`}><rect x={scrubEmphasis === \"after\" && focus !== null ? g.xs[focus] ?? g.plot.left : g.plot.left} y={0} width={focus === null ? width : scrubEmphasis === \"after\" ? g.plot.right - (g.xs[focus] ?? g.plot.left) : (g.xs[focus] ?? g.plot.right) - g.plot.left} height={height} /></clipPath>\n {series.map((item, s) => (\n <linearGradient key={item.id} id={`${id}-area-${s}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0\" stopColor={colorOf(item, s)} stopOpacity={chartRecipe.area.topOpacity} />\n <stop offset=\"1\" stopColor={colorOf(item, s)} stopOpacity={chartRecipe.area.bottomOpacity} />\n </linearGradient>\n ))}\n </defs>\n {(tickOverride ?? g.ticks).map((tick) => <line key={tick} className=\"hjm-chart__grid\" x1={g.plot.left} x2={g.plot.right} y1={g.y(tick)} y2={g.y(tick)} />)}\n {showAxis || valueAxis ? (tickOverride ?? g.ticks).map((tick) => <text key={`t${tick}`} className=\"hjm-chart__label\" x={g.plot.left - 6} y={g.y(tick)} dominantBaseline=\"middle\" textAnchor=\"end\">{formatValue(tick)}</text>) : null}\n {isChartNumber(reference) ? (\n <line className=\"hjm-chart__reference\" x1={g.plot.left} x2={g.plot.right} y1={g.y(reference)} y2={g.y(reference)} strokeDasharray={chartRecipe.reference.dash.join(\" \")} />\n ) : null}\n {series.map((item, s) => {\n const color = colorOf(item, s), segments = splitSegments(g.plots[s]!);\n const lower = g.lower?.[s];\n return (\n <g key={item.id} data-series={item.id}>\n {showArea || stacked ? segments.map((segment, i) => (\n <MotionLinePath animate={animateChanges} points={segment} floor={g.plot.bottom} curve={curve} lower={lower ? segment.map((p) => lower[p.index]!) : undefined} key={`a${i}`} className=\"hjm-chart__area\" fill={`url(#${id}-area-${s})`} />\n )) : null}\n {segments.map((segment, i) => (\n <g key={`l${i}`}><MotionLinePath animate={animateChanges} points={segment} curve={curve} className=\"hjm-chart__line\" stroke={scrubEmphasis && focus !== null ? \"var(--hjm-chart-axis-label)\" : color} strokeWidth={chartRecipe.line.strokeWidth} fill=\"none\" strokeLinejoin=\"round\" strokeLinecap=\"round\" />\n {scrubEmphasis && focus !== null && <g clipPath={`url(#${id}-scrub)`}><MotionLinePath animate={animateChanges} points={segment} curve={curve} className=\"hjm-chart__line\" stroke={color} strokeWidth={chartRecipe.line.strokeWidth} fill=\"none\" strokeLinejoin=\"round\" strokeLinecap=\"round\" /></g>}</g>\n ))}\n {/* An isolated observation between gaps has no line, so it gets a dot. */}\n {segments.filter((segment) => segment.length === 1).map((segment) => (\n <circle key={`d${segment[0]!.index}`} cx={segment[0]!.x} cy={segment[0]!.y} r={3} fill={color} />\n ))}\n </g>\n );\n })}\n {focus !== null && g.xs[focus] !== undefined ? (\n <g className=\"hjm-chart__focus\">\n <line className=\"hjm-chart__cursor\" x1={g.xs[focus]} x2={g.xs[focus]} y1={g.plot.top - 4} y2={g.plot.bottom} strokeWidth={chartRecipe.cursor.strokeWidth} strokeDasharray={scrubbing ? undefined : chartRecipe.cursor.dash.join(\" \")} />\n {series.map((item, s) => {\n const p = g.plots[s]![focus];\n if (!p) return null;\n const color = colorOf(item, s);\n return (\n <g key={item.id}>\n <circle cx={p.x} cy={p.y} r={chartRecipe.line.focusHaloRadius} fill={color} opacity={chartRecipe.line.focusHaloOpacity} />\n <circle className=\"hjm-chart__dot\" cx={p.x} cy={p.y} r={chartRecipe.line.pointRadius} fill={color} strokeWidth={2} />\n </g>\n );\n })}\n </g>\n ) : null}\n {marks && extremes ? ([[marks.max, extremes.high, -10], [marks.min, extremes.low, 16]] as const)\n .filter(([index], i) => i === 0 || index !== marks.max)\n .map(([index, label, dy]) => {\n const p = g.plots[0]![index];\n if (!p) return null;\n return (\n <text key={label} className=\"hjm-chart__label hjm-chart__extreme\" x={Math.min(g.plot.right - 4, Math.max(g.plot.left + 4, p.x))} y={Math.max(10, Math.min(height - 2, p.y + dy))}\n textAnchor={p.x < width * 0.2 ? \"start\" : p.x > width * 0.8 ? \"end\" : \"middle\"}>{`${label} ${formatValue(p.value)}`}</text>\n );\n }) : null}\n {showAxis && categories.length > 0 ? (\n <>\n <text className=\"hjm-chart__label\" x={g.xs[0]} y={height - 4} textAnchor=\"start\">{categories[0]}</text>\n {categories.length > 1 ? <text className=\"hjm-chart__label\" x={g.xs.at(-1)} y={height - 4} textAnchor=\"end\">{categories.at(-1)}</text> : null}\n </>\n ) : null}\n </svg>\n {scrubbing && focus !== null && g.xs[focus] !== undefined ? <CursorBubble x={g.xs[focus]!} width={width} text={cursorLabel?.(focus) ?? categories[focus]!} /> : null}\n </div>\n <p id={descriptionId} className=\"hjm-visually-hidden\">{describeChart(categories, series, formatValue, missingLabel)}</p>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------------------------\n// BarChart\n// ---------------------------------------------------------------------------------------------\n\nexport type BarChartProps = CartesianCommon & FocusProps & Readonly<{\n orientation?: ChartOrientation;\n layout?: ChartBarLayout;\n /** Value label at each bar end (the stack total for stacked bars). */\n showValues?: boolean;\n animateChanges?: boolean;\n}>;\n\n/** Rounds only the value end of a bar so stacks read as one column. */\nfunction barPath(bar: ChartBar, vertical: boolean, negative: boolean, round: boolean): string {\n const { x, y, width: w, height: h } = bar;\n const r = round ? Math.min(chartRecipe.bar.radius, vertical ? w / 2 : h / 2, vertical ? h : w) : 0;\n const n = (value: number) => Number(value.toFixed(2));\n if (r <= 0) return `M${n(x)},${n(y)}h${n(w)}v${n(h)}h${n(-w)}Z`;\n if (vertical && !negative) return `M${n(x)},${n(y + h)}V${n(y + r)}Q${n(x)},${n(y)} ${n(x + r)},${n(y)}H${n(x + w - r)}Q${n(x + w)},${n(y)} ${n(x + w)},${n(y + r)}V${n(y + h)}Z`;\n if (vertical) return `M${n(x)},${n(y)}H${n(x + w)}V${n(y + h - r)}Q${n(x + w)},${n(y + h)} ${n(x + w - r)},${n(y + h)}H${n(x + r)}Q${n(x)},${n(y + h)} ${n(x)},${n(y + h - r)}Z`;\n if (!negative) return `M${n(x)},${n(y)}H${n(x + w - r)}Q${n(x + w)},${n(y)} ${n(x + w)},${n(y + r)}V${n(y + h - r)}Q${n(x + w)},${n(y + h)} ${n(x + w - r)},${n(y + h)}H${n(x)}Z`;\n return `M${n(x + w)},${n(y)}V${n(y + h)}H${n(x + r)}Q${n(x)},${n(y + h)} ${n(x)},${n(y + h - r)}V${n(y + r)}Q${n(x)},${n(y)} ${n(x + r)},${n(y)}Z`;\n}\n\nexport function BarChart({\n categories, series, accessibilityLabel, formatValue, missingLabel, height, width: fallbackWidth = 320, orientation = \"vertical\",\n layout = \"grouped\", domain, showAxis = false, showValues = false, animateChanges = false, className, layoutStyle, ...focusProps\n}: BarChartProps) {\n validateChartSeries(categories, series);\n const colorOf = useSeriesColor(), id = useSvgId(), descriptionId = `${id}-description`;\n const [measure, width] = useMeasuredWidth(fallbackWidth);\n const vertical = orientation === \"vertical\";\n // Horizontal bars grow with the category count so labels never overlap (same rule as Native).\n const resolvedHeight = height ?? (vertical ? chartRecipe.heights.regular : Math.max(chartRecipe.heights.compact, categories.length * 36 + spacing.lg));\n const available = useMemo(() => observedIndices(series), [series]);\n const { focus, scrubbing, set } = useFocus(focusProps, null, categories);\n const insets: ChartInsets = vertical\n ? (showAxis ? chartRecipe.insets.axis : { ...chartRecipe.insets.plot, bottom: spacing.lg })\n : { top: spacing.xs, right: showValues ? 48 : spacing.sm, bottom: spacing.xs, left: 72 };\n const g = useMemo(() => resolveBarGeometry({ categories, series, width, height: resolvedHeight, insets, orientation, layout, ...(domain ? { domain } : {}) }),\n [categories, series, width, resolvedHeight, insets, orientation, layout, domain]);\n const categoryKeys = useMemo(() => {\n const occurrences = new Map<string, number>();\n return categories.map(label => { const occurrence = occurrences.get(label) ?? 0; occurrences.set(label, occurrence + 1); return JSON.stringify([label, occurrence]); });\n }, [categories]);\n // Only the outermost segment of each stack (per sign) gets rounded corners.\n const outer = useMemo(() => {\n if (layout !== \"stacked\") return null;\n const stacks = stackValues(series), result = new Set<string>();\n categories.forEach((_, i) => {\n let positive = -1, negative = -1;\n series.forEach((item, s) => { const v = item.values[i]; if (!isChartNumber(v) || !stacks[s]![i]) return; if (v >= 0) positive = s; else negative = s; });\n if (positive >= 0) result.add(`${positive}-${i}`);\n if (negative >= 0) result.add(`${negative}-${i}`);\n });\n return result;\n }, [categories, series, layout]);\n const handlers = useScrub((x, y) => nearestChartIndex(g.centers, vertical ? x : y, available), (index) => set(index, true), () => set(focus, false));\n const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Escape\" && focus !== null) { event.preventDefault(); set(null, false); return; }\n const next = vertical\n ? keyStep(event, available, focus, [\"ArrowRight\", \"ArrowUp\"], [\"ArrowLeft\", \"ArrowDown\"])\n : keyStep(event, available, focus, [\"ArrowDown\", \"ArrowRight\"], [\"ArrowUp\", \"ArrowLeft\"]);\n if (next === undefined) return;\n event.preventDefault();\n set(next, false);\n };\n const totals = layout === \"stacked\" && showValues\n ? categories.map((_, i) => series.reduce((sum, item) => sum + (isChartNumber(item.values[i]) ? item.values[i]! : 0), 0))\n : null;\n return (\n <div ref={measure} className={classNames(\"hjm-chart\", \"hjm-chart--bar\", className)} style={{ ...chromeStyle, ...layoutStyle }} data-orientation={orientation} data-scrubbing={scrubbing || undefined}>\n <div\n className=\"hjm-chart__plot\"\n role=\"slider\"\n tabIndex={0}\n aria-label={accessibilityLabel}\n aria-describedby={descriptionId}\n aria-orientation={vertical ? \"horizontal\" : \"vertical\"}\n aria-valuemin={0}\n aria-valuemax={Math.max(0, categories.length - 1)}\n aria-valuenow={focus ?? 0}\n // Without a focus the slider has no value; its name stands in so nothing misleading is read.\n aria-valuetext={focus === null ? accessibilityLabel : valueText(categories, series, focus, formatValue, missingLabel)}\n style={{ blockSize: resolvedHeight }}\n onKeyDown={onKeyDown}\n {...handlers}\n >\n <svg width={width} height={resolvedHeight} viewBox={`0 0 ${width} ${resolvedHeight}`} aria-hidden=\"true\" focusable=\"false\">\n {g.ticks.map((tick) => vertical\n ? <line key={tick} className=\"hjm-chart__grid\" x1={g.plot.left} x2={g.plot.right} y1={g.value(tick)} y2={g.value(tick)} />\n : <line key={tick} className=\"hjm-chart__grid\" y1={g.plot.top} y2={g.plot.bottom} x1={g.value(tick)} x2={g.value(tick)} />)}\n {showAxis && vertical ? g.ticks.map((tick) => <text key={`t${tick}`} className=\"hjm-chart__label\" x={g.plot.left - 6} y={g.value(tick)} dominantBaseline=\"middle\" textAnchor=\"end\">{formatValue(tick)}</text>) : null}\n {g.bars.map((bar) => (\n <MotionBar\n key={`${series[bar.seriesIndex]!.id}-${categoryKeys[bar.index]}`}\n bar={bar} animate={animateChanges && g.bars.length <= 200} vertical={vertical} rounded={outer ? outer.has(`${bar.seriesIndex}-${bar.index}`) : true}\n className=\"hjm-chart__bar\"\n data-index={bar.index}\n fill={colorOf(series[bar.seriesIndex]!, bar.seriesIndex)}\n opacity={focus === null || focus === bar.index ? 1 : chartRecipe.bar.restOpacity}\n />\n ))}\n {showValues && layout === \"grouped\" ? g.bars.map((bar) => (\n <text key={`v${bar.seriesIndex}-${bar.index}`} className=\"hjm-chart__label hjm-chart__value\"\n x={vertical ? bar.x + bar.width / 2 : bar.x + bar.width + 4} y={vertical ? bar.y - 4 : bar.y + bar.height / 2}\n dominantBaseline={vertical ? undefined : \"middle\"} textAnchor={vertical ? \"middle\" : \"start\"}>{formatValue(bar.value)}</text>\n )) : null}\n {totals ? totals.map((total, i) => {\n if (!available.includes(i)) return null;\n const end = g.value(Math.max(0, ...stackValues(series).map((row) => row[i]?.[1] ?? 0)));\n return (\n <text key={`total${i}`} className=\"hjm-chart__label hjm-chart__value\" x={vertical ? g.centers[i] : end + 4} y={vertical ? end - 4 : g.centers[i]}\n dominantBaseline={vertical ? undefined : \"middle\"} textAnchor={vertical ? \"middle\" : \"start\"}>{formatValue(total)}</text>\n );\n }) : null}\n {categories.map((category, i) => vertical\n ? (categories.length <= 12 || i % Math.ceil(categories.length / 12) === 0)\n ? <text key={`c${i}`} className=\"hjm-chart__label\" data-focused={focus === i || undefined} x={g.centers[i]} y={resolvedHeight - 4} textAnchor=\"middle\">{category}</text>\n : null\n : <text key={`c${i}`} className=\"hjm-chart__label\" data-focused={focus === i || undefined} x={g.plot.left - 8} y={g.centers[i]} dominantBaseline=\"middle\" textAnchor=\"end\">{category}</text>)}\n </svg>\n {scrubbing && focus !== null && vertical && g.centers[focus] !== undefined\n ? <CursorBubble x={g.centers[focus]!} width={width} text={valueText(categories, series, focus, formatValue, missingLabel)} />\n : null}\n </div>\n <p id={descriptionId} className=\"hjm-visually-hidden\">{describeChart(categories, series, formatValue, missingLabel)}</p>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------------------------\n// ChartLegend\n// ---------------------------------------------------------------------------------------------\n\nexport type ChartLegendItem = Readonly<{ id: string; label: string; color: string; value?: string }>;\nexport type ChartLegendProps = ChartRootProps & Readonly<{\n items: readonly ChartLegendItem[]; exclusion?: Readonly<{ excludedIds: readonly string[]; onToggle: (id: string) => void; label: (item: ChartLegendItem, included: boolean) => string }>;\n selectedId?: string | null;\n /** When given, rows are toggle buttons; pressing the selected row clears the selection. */\n onSelect?: (id: string | null) => void;\n}>;\n\n/** Swatch + label (+ value). Color is never the only encoding: every row carries its label. */\nexport function ChartLegend({ items, selectedId, onSelect, exclusion, className, layoutStyle }: ChartLegendProps) {\n return (\n <ul className={classNames(\"hjm-chart-legend\", className)} style={{ ...chromeStyle, ...layoutStyle }} data-interactive={onSelect ? \"\" : undefined}>\n {items.map((item) => {\n const content = (\n <>\n <span className=\"hjm-chart-legend__swatch\" aria-hidden=\"true\" style={{ background: item.color }} />\n <span className=\"hjm-chart-legend__label\">{item.label}</span>\n {item.value !== undefined ? <span className=\"hjm-chart-legend__value\">{item.value}</span> : null}\n </>\n );\n const dimmed = selectedId != null && selectedId !== item.id;\n return (\n <li key={item.id} className=\"hjm-chart-legend__item\" data-dimmed={dimmed || undefined}>\n {exclusion ? <input type=\"checkbox\" checked={!exclusion.excludedIds.includes(item.id)} aria-label={exclusion.label(item, !exclusion.excludedIds.includes(item.id))} onChange={() => exclusion.onToggle(item.id)} /> : null}\n {onSelect ? (\n <button type=\"button\" className=\"hjm-chart-legend__button\" aria-pressed={selectedId === item.id} onClick={() => onSelect(selectedId === item.id ? null : item.id)}>\n {content}\n </button>\n ) : content}\n </li>\n );\n })}\n </ul>\n );\n}\n\n// ---------------------------------------------------------------------------------------------\n// PieChart\n// ---------------------------------------------------------------------------------------------\n\nexport type PieDatum = Readonly<{ id: string; label: string; value: number | null; color?: string }>;\nexport type PieChartProps = ChartRootProps & Readonly<{\n data: readonly PieDatum[];\n accessibilityLabel: string;\n formatValue: (value: number) => string;\n donut?: boolean;\n size?: number;\n /** Rendered in the donut hole (ignored for a full pie). */\n centerContent?: ReactNode | ((summary: PieVisibilitySummary) => ReactNode);\n /** Controlled denominator filtering, independent of selectedId emphasis. */\n exclusion?: Readonly<{ excludedIds: readonly string[]; onExcludedIdsChange: (ids: readonly string[]) => void; label: (datum: PieDatum, included: boolean) => string }>;\n selectedId?: string | null;\n defaultSelectedId?: string | null;\n onSelect?: (id: string | null) => void;\n showLegend?: boolean;\n}>;\n\nexport function PieChart({\n data, accessibilityLabel, formatValue, donut = true, size = 180, centerContent, selectedId, defaultSelectedId = null, onSelect,\n showLegend = true, exclusion, className, layoutStyle,\n}: PieChartProps) {\n const colorOf = useSeriesColor(), id = useSvgId(), descriptionId = `${id}-description`;\n const [own, setOwn] = useState<string | null>(defaultSelectedId);\n const candidate = selectedId !== undefined ? selectedId : own;\n const selected = candidate !== null && exclusion?.excludedIds.includes(candidate) ? null : candidate;\n const interactive = onSelect !== undefined || selectedId !== undefined;\n const select = (next: string | null) => { if (selectedId === undefined) setOwn(next); onSelect?.(next); };\n const toggle = (next: string) => select(selected === next ? null : next);\n // The selected slice moves outward by this much, so it is reserved inside the box.\n const lift = 4;\n const radius = size / 2 - lift - 2, inner = donut ? radius * chartRecipe.pie.donutRatio : 0;\n const visibility = resolvePieVisibility(data, exclusion?.excludedIds);\n const slices = resolvePieGeometry(visibility.values, { cx: size / 2, cy: size / 2, radius, innerRadius: inner });\n const center = typeof centerContent === \"function\" ? centerContent(visibility) : centerContent;\n const legendExclusion = exclusion ? { excludedIds: exclusion.excludedIds, label: (item: ChartLegendItem, included: boolean) => exclusion.label(data.find(datum => datum.id === item.id)!, included),\n onToggle: (id: string) => exclusion.onExcludedIdsChange(exclusion.excludedIds.includes(id) ? exclusion.excludedIds.filter(key => key !== id) : [...exclusion.excludedIds, id]) } : undefined;\n const colorAt = (index: number) => colorOf(data[index]!, index);\n const percentOf = (index: number) => slices.find((slice) => slice.index === index)?.percent;\n const percentText = (index: number) => { const p = percentOf(index); return p === undefined ? \"\" : `${Math.round(p)}%`; };\n const rowValue = (d: PieDatum, i: number) => isChartNumber(d.value) ? `${formatValue(d.value)}${percentOf(i) !== undefined ? ` · ${percentText(i)}` : \"\"}` : \"—\";\n const summary = data.map((d, i) => exclusion?.excludedIds.includes(d.id) ? \"\" : `${d.label} ${isChartNumber(d.value) ? formatValue(d.value) : \"\"}${percentOf(i) !== undefined ? ` (${percentText(i)})` : \"\"}`.trim()).filter(Boolean).join(\", \");\n // With a legend, its rows are the keyboard path; slices stay pointer targets so each item has\n // one tab stop. Without a legend the slices themselves become the buttons.\n const sliceButtons = interactive && !showLegend;\n return (\n <div className={classNames(\"hjm-chart\", \"hjm-chart--pie\", className)} style={{ ...chromeStyle, ...layoutStyle }}>\n <div className=\"hjm-chart__pie\" role={sliceButtons ? \"group\" : \"img\"} aria-label={accessibilityLabel} aria-describedby={descriptionId} style={{ inlineSize: size, blockSize: size }}>\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} aria-hidden={sliceButtons ? undefined : true} focusable=\"false\">\n {slices.map((slice) => {\n const datum = data[slice.index]!, isSelected = selected === datum.id;\n const mid = (slice.startAngle + slice.endAngle) / 2;\n return (\n <path\n key={datum.id}\n className=\"hjm-chart__slice\"\n data-id={datum.id}\n data-selected={isSelected || undefined}\n d={slice.path}\n fill={colorAt(slice.index)}\n opacity={selected !== null && !isSelected ? chartRecipe.bar.restOpacity : 1}\n transform={isSelected ? `translate(${(Math.sin(mid) * lift).toFixed(2)} ${(-Math.cos(mid) * lift).toFixed(2)})` : undefined}\n {...(interactive ? { onClick: () => toggle(datum.id) } : {})}\n {...(sliceButtons ? {\n role: \"button\",\n tabIndex: 0,\n \"aria-pressed\": isSelected,\n \"aria-label\": `${datum.label} ${rowValue(datum, slice.index)}`,\n onKeyDown: (event: KeyboardEvent<SVGPathElement>) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n toggle(datum.id);\n },\n } : {})}\n />\n );\n })}\n {!donut ? slices.filter((slice) => slice.percent >= chartRecipe.pie.minLabelPercent * 2).map((slice) => (\n <text key={`t${slice.index}`} className=\"hjm-chart__slice-label\" x={slice.centroid.x} y={slice.centroid.y} dominantBaseline=\"middle\" textAnchor=\"middle\">{percentText(slice.index)}</text>\n )) : null}\n </svg>\n {donut && center != null ? <div className=\"hjm-chart__pie-center\">{center}</div> : null}\n </div>\n {showLegend ? (\n <ChartLegend\n items={data.map((d, i) => ({ id: d.id, label: d.label, color: colorAt(i), value: rowValue(d, i) }))}\n selectedId={selected}\n {...(legendExclusion ? { exclusion: legendExclusion } : {})}\n {...(interactive ? { onSelect: select } : {})}\n />\n ) : null}\n <p id={descriptionId} className=\"hjm-visually-hidden\">{summary}</p>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------------------------\n// RadarChart\n// ---------------------------------------------------------------------------------------------\n\nexport type RadarChartProps = ChartRootProps & Readonly<{\n /** At least three axes. */\n categories: readonly string[];\n series: readonly ChartSeries[];\n accessibilityLabel: string;\n formatValue: (value: number) => string;\n missingLabel: string;\n /** One shared domain for every axis; defaults to 0..max. */\n domain?: readonly [number, number];\n levels?: number;\n size?: number;\n /** Defaults to on for more than one series. */\n showLegend?: boolean;\n}>;\n\nexport function RadarChart({\n categories, series, accessibilityLabel, formatValue, missingLabel, domain, levels = chartRecipe.radar.levels, size = 240, showLegend,\n className, layoutStyle,\n}: RadarChartProps) {\n validateChartSeries(categories, series);\n const colorOf = useSeriesColor(), id = useSvgId(), descriptionId = `${id}-description`;\n // Room around the polygon for axis labels (same reservation as Native).\n const pad = 44, center = size / 2;\n const g = resolveRadarGeometry({ categories, series, cx: center, cy: center, radius: center - pad, levels, ...(domain ? { domain } : {}) });\n return (\n <div className={classNames(\"hjm-chart\", \"hjm-chart--radar\", className)} style={{ ...chromeStyle, ...layoutStyle }}>\n <div className=\"hjm-chart__radar\" role=\"img\" aria-label={accessibilityLabel} aria-describedby={descriptionId} style={{ inlineSize: size, blockSize: size }}>\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} aria-hidden=\"true\" focusable=\"false\">\n {g.rings.map((ring, i) => <path key={i} className=\"hjm-chart__grid\" d={ring} fill=\"none\" />)}\n {g.axes.map((axis) => <line key={axis.index} className=\"hjm-chart__grid\" x1={center} y1={center} x2={axis.end.x} y2={axis.end.y} />)}\n {g.polygons.map((polygon) => {\n const color = colorOf(series[polygon.seriesIndex]!, polygon.seriesIndex);\n return (\n <g key={polygon.seriesIndex} data-series={series[polygon.seriesIndex]!.id}>\n <path className=\"hjm-chart__polygon\" d={polygon.path} fill={color} fillOpacity={chartRecipe.radar.fillOpacity} stroke={color} strokeWidth={chartRecipe.radar.strokeWidth} strokeLinejoin=\"round\" />\n {polygon.points.map((p) => p.value !== null ? <circle key={p.index} cx={p.x} cy={p.y} r={3} fill={color} /> : null)}\n </g>\n );\n })}\n {g.axes.map((axis) => {\n const first = series[0]?.values[axis.index];\n return (\n <g key={`l${axis.index}`}>\n <text className=\"hjm-chart__label hjm-chart__axis-name\" x={axis.labelAt.x} y={axis.labelAt.y} dominantBaseline=\"middle\" textAnchor={axis.anchor}>{axis.label}</text>\n {series.length === 1 ? (\n <text className=\"hjm-chart__label\" x={axis.labelAt.x} y={axis.labelAt.y + 14} dominantBaseline=\"middle\" textAnchor={axis.anchor}>{isChartNumber(first) ? formatValue(first) : missingLabel}</text>\n ) : null}\n </g>\n );\n })}\n </svg>\n </div>\n {showLegend ?? series.length > 1 ? <ChartLegend items={series.map((item, s) => ({ id: item.id, label: item.label, color: colorOf(item, s) }))} /> : null}\n <p id={descriptionId} className=\"hjm-visually-hidden\">{describeChart(categories, series, formatValue, missingLabel)}</p>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------------------------\n// ScatterChart\n// ---------------------------------------------------------------------------------------------\n\nexport type ScatterChartProps = ChartRootProps & Readonly<{\n points: readonly ScatterDatum[];\n accessibilityLabel: string;\n xLabel: string;\n yLabel: string;\n formatX: (value: number) => string;\n formatY: (value: number) => string;\n height?: number;\n /** Width used on the server and before the first ResizeObserver measurement. */\n width?: number;\n /** Legend labels by `seriesIndex`; the legend shows for two or more. */\n seriesLabels?: readonly string[];\n focusId?: string | null;\n onFocusChange?: (id: string | null) => void;\n}>;\n\nexport function ScatterChart({\n points, accessibilityLabel, xLabel, yLabel, formatX, formatY, height = chartRecipe.heights.tall, width: fallbackWidth = 320,\n seriesLabels, focusId, onFocusChange, className, layoutStyle,\n}: ScatterChartProps) {\n const colorOf = useSeriesColor(), id = useSvgId(), descriptionId = `${id}-description`;\n const [measure, width] = useMeasuredWidth(fallbackWidth);\n const [own, setOwn] = useState<string | null>(null);\n const focused = focusId !== undefined ? focusId : own;\n const choose = (next: string | null) => { if (focusId === undefined) setOwn(next); onFocusChange?.(next); };\n const g = useMemo(() => resolveScatterGeometry({ points, width, height }), [points, width, height]);\n // Keyboard order follows the x axis so arrows read left to right.\n const ordered = useMemo(() => [...points].sort((a, b) => a.x - b.x || a.y - b.y), [points]);\n const handlers = useScrub((x, y) => nearestScatterPoint(g.points, x, y), (index) => { if (index !== null) choose(points[index]!.id); }, () => undefined);\n const focusPoint = g.points.find((p) => p.id === focused);\n const sx = scaleLinear(g.xDomain, [g.plot.left, g.plot.right]), sy = scaleLinear(g.yDomain, [g.plot.bottom, g.plot.top]);\n const describe = (p: ScatterDatum) => `${p.label}, ${xLabel} ${formatX(p.x)}, ${yLabel} ${formatY(p.y)}`;\n const position = ordered.findIndex((p) => p.id === focused);\n const onKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n let next: ScatterDatum | undefined;\n if (event.key === \"ArrowRight\" || event.key === \"ArrowUp\") next = ordered[Math.min(ordered.length - 1, position + 1)];\n else if (event.key === \"ArrowLeft\" || event.key === \"ArrowDown\") next = ordered[position < 0 ? ordered.length - 1 : Math.max(0, position - 1)];\n else if (event.key === \"Home\") next = ordered[0];\n else if (event.key === \"End\") next = ordered.at(-1);\n else if (event.key === \"Escape\" && focused !== null) { event.preventDefault(); choose(null); return; }\n else return;\n event.preventDefault();\n if (next) choose(next.id);\n };\n return (\n <div ref={measure} className={classNames(\"hjm-chart\", \"hjm-chart--scatter\", className)} style={{ ...chromeStyle, ...layoutStyle }}>\n <div\n className=\"hjm-chart__plot\"\n role=\"slider\"\n tabIndex={0}\n aria-label={accessibilityLabel}\n aria-describedby={descriptionId}\n aria-valuemin={0}\n aria-valuemax={Math.max(0, points.length - 1)}\n aria-valuenow={Math.max(0, position)}\n aria-valuetext={focusPoint ? describe(focusPoint) : accessibilityLabel}\n style={{ blockSize: height }}\n onKeyDown={onKeyDown}\n {...handlers}\n >\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} aria-hidden=\"true\" focusable=\"false\">\n {g.yTicks.map((tick) => (\n <g key={`y${tick}`}>\n <line className=\"hjm-chart__grid\" x1={g.plot.left} x2={g.plot.right} y1={sy(tick)} y2={sy(tick)} />\n <text className=\"hjm-chart__label\" x={g.plot.left - 6} y={sy(tick)} dominantBaseline=\"middle\" textAnchor=\"end\">{formatY(tick)}</text>\n </g>\n ))}\n {g.xTicks.map((tick) => <text key={`x${tick}`} className=\"hjm-chart__label\" x={sx(tick)} y={height - 4} textAnchor=\"middle\">{formatX(tick)}</text>)}\n {g.points.map((p) => {\n const isFocused = p.id === focused;\n return (\n <circle key={p.id} className={classNames(\"hjm-chart__point\", isFocused && \"hjm-chart__dot\")} data-id={p.id} cx={p.px} cy={p.py}\n r={isFocused ? chartRecipe.scatter.focusRadius : chartRecipe.scatter.radius} fill={colorOf({}, p.seriesIndex ?? 0)}\n opacity={focused !== null && !isFocused ? 0.45 : 0.9} strokeWidth={isFocused ? 2 : 0} />\n );\n })}\n </svg>\n {focusPoint ? <CursorBubble x={focusPoint.px} width={width} text={`${focusPoint.label} · ${formatX(focusPoint.x)} / ${formatY(focusPoint.y)}`} /> : null}\n </div>\n <div className=\"hjm-chart__axis-titles\" aria-hidden=\"true\"><span>{yLabel} ↑</span><span>{xLabel} →</span></div>\n {seriesLabels && seriesLabels.length > 1 ? <ChartLegend items={seriesLabels.map((label, i) => ({ id: String(i), label, color: colorOf({}, i) }))} /> : null}\n <p id={descriptionId} className=\"hjm-visually-hidden\">{points.map(describe).join(\". \")}</p>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------------------------\n// Sparkline\n// ---------------------------------------------------------------------------------------------\n\nexport type SparklineProps = ChartRootProps & Readonly<{\n values: readonly (number | null)[];\n color?: string;\n invert?: boolean;\n domain?: readonly [number, number];\n width?: number;\n height?: number;\n /** Omit when the adjacent text already states the value; the sparkline is then decorative. */\n accessibilityLabel?: string;\n}>;\n\nexport function Sparkline({\n values, color, invert = false, domain, width = chartRecipe.sparkline.width, height = chartRecipe.sparkline.height, accessibilityLabel,\n className, layoutStyle,\n}: SparklineProps) {\n const colorOf = useSeriesColor(), id = useSvgId();\n const stroke = color ?? colorOf({}, 0);\n const pad = chartRecipe.sparkline.padding;\n const g = resolveLineGeometry({\n categories: values.map((_, i) => String(i)), series: [{ id: \"s\", label: \"s\", values }], width, height,\n insets: { top: pad, right: pad, bottom: pad, left: pad }, invert, ...(domain ? { domain } : {}),\n });\n const segments = splitSegments(g.plots[0]!);\n const labelled = accessibilityLabel !== undefined && accessibilityLabel.trim().length > 0;\n return (\n <svg\n className={classNames(\"hjm-sparkline\", className)}\n style={layoutStyle}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n focusable=\"false\"\n {...(labelled ? { role: \"img\", \"aria-label\": accessibilityLabel } : { \"aria-hidden\": true })}\n >\n <defs>\n <linearGradient id={`${id}-spark`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0\" stopColor={stroke} stopOpacity={0.28} />\n <stop offset=\"1\" stopColor={stroke} stopOpacity={0} />\n </linearGradient>\n </defs>\n {segments.map((segment, i) => <path key={`a${i}`} d={areaPath(segment, height)} fill={`url(#${id}-spark)`} />)}\n {segments.map((segment, i) => <path key={`l${i}`} className=\"hjm-chart__line\" d={linePath(segment)} stroke={stroke} strokeWidth={chartRecipe.sparkline.strokeWidth} fill=\"none\" strokeLinejoin=\"round\" strokeLinecap=\"round\" />)}\n </svg>\n );\n}\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type ColumnSetting, type FilterRecoveryOption, type FocusTarget, type SelectionAction } from "@hjmds/design-contracts/collection-editing";
|
|
3
|
+
import { type FieldGroupBinding, type FieldGroupProps } from "./field-group.js";
|
|
4
|
+
export type InlineEditProps = Readonly<{
|
|
5
|
+
id: string;
|
|
6
|
+
value: string;
|
|
7
|
+
label: string;
|
|
8
|
+
editLabel: string;
|
|
9
|
+
saveLabel: string;
|
|
10
|
+
cancelLabel: string;
|
|
11
|
+
errorLabel: string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
validate?: (draft: string) => string | undefined;
|
|
14
|
+
/** Resolve only after confirming and updating the product value; reject to preserve the draft. */
|
|
15
|
+
onSave: (draft: string) => void | Promise<void>;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function InlineEdit(props: InlineEditProps): import("react").JSX.Element;
|
|
18
|
+
export type RepeatableFieldGroupProps = Omit<FieldGroupProps, "renderField"> & Readonly<{
|
|
19
|
+
renderField: (binding: FieldGroupBinding & {
|
|
20
|
+
focusRef: (target: FocusTarget | null) => void;
|
|
21
|
+
}) => ReactNode;
|
|
22
|
+
addLabel: string;
|
|
23
|
+
removeLabel: (id: string) => string;
|
|
24
|
+
minFields?: number;
|
|
25
|
+
maxFields?: number;
|
|
26
|
+
/** Return the new stable id to focus after the controlled descriptor includes it. */
|
|
27
|
+
onAdd: () => string | undefined;
|
|
28
|
+
onRemove: (id: string) => void;
|
|
29
|
+
}>;
|
|
30
|
+
export declare function RepeatableFieldGroup({ renderField, addLabel, removeLabel, minFields, maxFields, onAdd, onRemove, ...props }: RepeatableFieldGroupProps): import("react").JSX.Element;
|
|
31
|
+
export type SelectionActionBarProps = Readonly<{
|
|
32
|
+
selectedIds: readonly string[];
|
|
33
|
+
selectionLabel: (count: number) => string;
|
|
34
|
+
clearLabel: string;
|
|
35
|
+
onClear: () => void;
|
|
36
|
+
actions: readonly SelectionAction[];
|
|
37
|
+
onAction: (actionId: string, selectedIds: readonly string[]) => void | Promise<void>;
|
|
38
|
+
errorLabel: string;
|
|
39
|
+
disabled?: boolean;
|
|
40
|
+
/** Product supplies the exact confirmed operation to undo; never restore an entire collection. */
|
|
41
|
+
recovery?: Readonly<{
|
|
42
|
+
label: string;
|
|
43
|
+
onUndo: () => void | Promise<void>;
|
|
44
|
+
}>;
|
|
45
|
+
}>;
|
|
46
|
+
export declare function SelectionActionBar(props: SelectionActionBarProps): import("react").JSX.Element | null;
|
|
47
|
+
export type FilterRecoveryProps = Readonly<{
|
|
48
|
+
title: string;
|
|
49
|
+
description?: string;
|
|
50
|
+
options: readonly FilterRecoveryOption[];
|
|
51
|
+
optionLabel: (option: FilterRecoveryOption) => string;
|
|
52
|
+
onApply: (id: string) => void | Promise<void>;
|
|
53
|
+
errorLabel: string;
|
|
54
|
+
disabled?: boolean;
|
|
55
|
+
}>;
|
|
56
|
+
export declare function FilterRecovery(props: FilterRecoveryProps): import("react").JSX.Element;
|
|
57
|
+
export type TableColumnSettingsProps = Readonly<{
|
|
58
|
+
label: string;
|
|
59
|
+
columns: readonly ColumnSetting[];
|
|
60
|
+
disabled?: boolean;
|
|
61
|
+
earlierLabel: (column: ColumnSetting) => string;
|
|
62
|
+
laterLabel: (column: ColumnSetting) => string;
|
|
63
|
+
onColumnsChange: (columns: readonly ColumnSetting[]) => void;
|
|
64
|
+
}>;
|
|
65
|
+
export declare function TableColumnSettings(props: TableColumnSettingsProps): import("react").JSX.Element;
|
|
66
|
+
//# sourceMappingURL=collection-editing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-editing.d.ts","sourceRoot":"","sources":["../src/collection-editing.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
4
|
+
import { useCompositionAction } from "./internal/use-composition-action.js";
|
|
5
|
+
import { assertDistinctIds, changeColumnSettings, collectionEditingRecipe, focusAfterRemoval, recoverableFilters, snapshotSelection } from "@hjmds/design-contracts/collection-editing";
|
|
6
|
+
import { Button } from "./actions.js";
|
|
7
|
+
import { TextField } from "./forms.js";
|
|
8
|
+
import { Checkbox } from "./selection.js";
|
|
9
|
+
import { Stack, Text } from "./layout.js";
|
|
10
|
+
import { FieldGroup } from "./field-group.js";
|
|
11
|
+
function ErrorMessage({ children }) {
|
|
12
|
+
return _jsx("div", { role: "alert", style: { display: "grid", placeItems: "center", textAlign: "center" }, children: _jsx(Text, { tone: "danger", children: children }) });
|
|
13
|
+
}
|
|
14
|
+
export function InlineEdit(props) { return _jsx(InlineEditBody, { ...props }, props.id); }
|
|
15
|
+
function InlineEditBody(props) {
|
|
16
|
+
const [editing, setEditing] = useState(false), [draft, setDraft] = useState(props.value);
|
|
17
|
+
const action = useCompositionAction(props.disabled);
|
|
18
|
+
const input = useRef(null), trigger = useRef(null), group = useRef(null);
|
|
19
|
+
const restore = useRef(false);
|
|
20
|
+
useLayoutEffect(() => {
|
|
21
|
+
if (editing)
|
|
22
|
+
input.current?.focus();
|
|
23
|
+
else if (restore.current) {
|
|
24
|
+
restore.current = false;
|
|
25
|
+
trigger.current?.focus();
|
|
26
|
+
}
|
|
27
|
+
}, [editing]);
|
|
28
|
+
const error = props.validate?.(draft);
|
|
29
|
+
const close = () => {
|
|
30
|
+
restore.current = group.current?.contains(document.activeElement) ?? false;
|
|
31
|
+
setEditing(false);
|
|
32
|
+
};
|
|
33
|
+
const save = async () => {
|
|
34
|
+
if (props.disabled || error || action.pending || action.session.getSnapshot().status === "pending")
|
|
35
|
+
return;
|
|
36
|
+
const result = await action.run("save", () => props.onSave(draft));
|
|
37
|
+
if (result.status === "success")
|
|
38
|
+
close();
|
|
39
|
+
};
|
|
40
|
+
return _jsx("div", { ref: group, role: "group", "aria-label": props.label, children: !editing ? _jsxs(Stack, { axis: "inline", gap: "sm", align: "center", wrap: true, children: [_jsx(Text, { children: props.value }), _jsx(Button, { ref: trigger, disabled: props.disabled ?? false, tone: "ghost", onClick: () => { setDraft(props.value); action.session.reset(null); setEditing(true); }, children: props.editLabel })] })
|
|
41
|
+
: _jsxs(Stack, { gap: collectionEditingRecipe.actionGap, children: [_jsx(TextField, { ref: input, label: props.label, value: draft, disabled: props.disabled ?? false, readOnly: action.pending, ...(error ? { error, "aria-invalid": true } : {}), onValueChange: setDraft, onKeyDown: event => {
|
|
42
|
+
// Enter during IME composition confirms a character, not the title.
|
|
43
|
+
if (event.nativeEvent.isComposing || event.keyCode === 229)
|
|
44
|
+
return;
|
|
45
|
+
if (event.key === "Enter") {
|
|
46
|
+
event.preventDefault();
|
|
47
|
+
void save();
|
|
48
|
+
}
|
|
49
|
+
if (event.key === "Escape" && !action.pending) {
|
|
50
|
+
event.preventDefault();
|
|
51
|
+
event.stopPropagation();
|
|
52
|
+
close();
|
|
53
|
+
}
|
|
54
|
+
} }), _jsxs(Stack, { axis: "inline", gap: "sm", wrap: true, children: [_jsx(Button, { tone: "ghost", disabled: action.pending, onClick: close, children: props.cancelLabel }), _jsx(Button, { loading: action.pending, disabled: props.disabled === true || !!error, onClick: () => void save(), children: props.saveLabel })] }), action.failed ? _jsx(ErrorMessage, { children: props.errorLabel }) : null] }) });
|
|
55
|
+
}
|
|
56
|
+
export function RepeatableFieldGroup({ renderField, addLabel, removeLabel, minFields = 0, maxFields = Infinity, onAdd, onRemove, ...props }) {
|
|
57
|
+
const targets = useRef(new Map()), add = useRef(null);
|
|
58
|
+
const focus = useRef(undefined);
|
|
59
|
+
useLayoutEffect(() => {
|
|
60
|
+
if (focus.current === undefined)
|
|
61
|
+
return;
|
|
62
|
+
if (focus.current === null) {
|
|
63
|
+
add.current?.focus();
|
|
64
|
+
focus.current = undefined;
|
|
65
|
+
}
|
|
66
|
+
else if (targets.current.has(focus.current)) {
|
|
67
|
+
targets.current.get(focus.current)?.focus();
|
|
68
|
+
focus.current = undefined;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
const fields = props.descriptor.fields;
|
|
72
|
+
const live = useRef(true), policy = useRef({ fields, minFields, maxFields, onAdd, onRemove, disabled: props.descriptor.disabled });
|
|
73
|
+
policy.current = { fields, minFields, maxFields, onAdd, onRemove, disabled: props.descriptor.disabled };
|
|
74
|
+
useEffect(() => { live.current = true; return () => { live.current = false; }; }, []);
|
|
75
|
+
return _jsxs(Stack, { gap: collectionEditingRecipe.gap, children: [_jsx(FieldGroup, { ...props, renderField: binding => _jsxs(Stack, { gap: "sm", children: [renderField({ ...binding, focusRef: target => { if (target)
|
|
76
|
+
targets.current.set(binding.id, target);
|
|
77
|
+
else
|
|
78
|
+
targets.current.delete(binding.id); } }), _jsx(Button, { tone: "ghost", disabled: binding.controlProps.disabled || fields.length <= minFields, onClick: binding.guardChange(() => {
|
|
79
|
+
const current = policy.current;
|
|
80
|
+
if (!live.current || current.disabled || current.fields.length <= current.minFields)
|
|
81
|
+
return;
|
|
82
|
+
focus.current = focusAfterRemoval(current.fields.map(field => field.id), binding.id, current.fields.filter(field => field.disabled).map(field => field.id)) ?? null;
|
|
83
|
+
current.onRemove(binding.id);
|
|
84
|
+
}), children: removeLabel(binding.id) })] }) }), _jsx(Button, { ref: add, tone: "secondary", disabled: props.descriptor.disabled === true || fields.length >= maxFields, onClick: () => {
|
|
85
|
+
const current = policy.current;
|
|
86
|
+
if (!live.current || current.disabled || current.fields.length >= current.maxFields)
|
|
87
|
+
return;
|
|
88
|
+
const id = current.onAdd();
|
|
89
|
+
if (id !== undefined)
|
|
90
|
+
focus.current = id;
|
|
91
|
+
}, children: addLabel })] });
|
|
92
|
+
}
|
|
93
|
+
export function SelectionActionBar(props) {
|
|
94
|
+
const action = useCompositionAction(props.disabled);
|
|
95
|
+
assertDistinctIds(props.actions);
|
|
96
|
+
snapshotSelection(props.selectedIds);
|
|
97
|
+
if (!props.selectedIds.length && !props.recovery && !action.pending && !action.failed)
|
|
98
|
+
return null;
|
|
99
|
+
return _jsx("div", { role: "group", "aria-label": props.selectionLabel(props.selectedIds.length), children: _jsxs(Stack, { gap: "sm", children: [_jsx(Text, { role: "status", children: props.selectionLabel(props.selectedIds.length) }), _jsxs(Stack, { axis: "inline", gap: "sm", wrap: true, children: [props.actions.map(item => _jsx(Button, { tone: item.destructive ? "danger" : "secondary", loading: action.active === `action:${item.id}`, disabled: props.disabled === true || (action.pending && action.active !== `action:${item.id}`) || !props.selectedIds.length, onClick: () => {
|
|
100
|
+
if (props.disabled)
|
|
101
|
+
return;
|
|
102
|
+
const scope = snapshotSelection(props.selectedIds);
|
|
103
|
+
if (scope.length)
|
|
104
|
+
void action.run(`action:${item.id}`, () => props.onAction(item.id, scope));
|
|
105
|
+
}, children: item.label }, item.id)), _jsx(Button, { tone: "ghost", disabled: props.disabled === true || action.pending || !props.selectedIds.length, onClick: props.onClear, children: props.clearLabel }), props.recovery ? _jsx(Button, { tone: "ghost", loading: action.active === "undo", disabled: props.disabled === true || (action.pending && action.active !== "undo"), onClick: () => {
|
|
106
|
+
if (!props.disabled)
|
|
107
|
+
void action.run("undo", () => props.recovery.onUndo());
|
|
108
|
+
}, children: props.recovery.label }) : null] }), action.failed ? _jsx(ErrorMessage, { children: props.errorLabel }) : null] }) });
|
|
109
|
+
}
|
|
110
|
+
export function FilterRecovery(props) {
|
|
111
|
+
const action = useCompositionAction(props.disabled), options = recoverableFilters(props.options);
|
|
112
|
+
return _jsx("div", { role: "group", "aria-label": props.title, style: { display: "grid", placeItems: "center", textAlign: "center" }, children: _jsxs(Stack, { gap: "sm", align: "center", children: [_jsx(Text, { emphasis: "strong", children: props.title }), props.description ? _jsx(Text, { tone: "muted", children: props.description }) : null, options.map(option => _jsx(Button, { tone: "secondary", loading: action.active === option.id, disabled: props.disabled === true || (action.pending && action.active !== option.id), onClick: () => { if (!props.disabled)
|
|
113
|
+
void action.run(option.id, () => props.onApply(option.id)); }, children: props.optionLabel(option) }, option.id)), action.failed ? _jsx(ErrorMessage, { children: props.errorLabel }) : null] }) });
|
|
114
|
+
}
|
|
115
|
+
export function TableColumnSettings(props) {
|
|
116
|
+
assertDistinctIds(props.columns);
|
|
117
|
+
const change = (id, kind) => {
|
|
118
|
+
if (props.disabled)
|
|
119
|
+
return;
|
|
120
|
+
const next = changeColumnSettings(props.columns, id, kind);
|
|
121
|
+
if (next !== props.columns)
|
|
122
|
+
props.onColumnsChange(next);
|
|
123
|
+
};
|
|
124
|
+
return _jsxs("fieldset", { disabled: props.disabled, style: { margin: 0, padding: 0, border: 0, minInlineSize: 0 }, children: [_jsx("legend", { children: props.label }), _jsx(Stack, { gap: "sm", children: props.columns.map(column => _jsxs(Stack, { gap: "sm", children: [_jsx(Checkbox, { label: column.label, checked: column.visible, disabled: column.locked === true || (column.visible && props.columns.filter(item => item.visible).length === 1), onCheckedChange: () => change(column.id, "toggle") }), _jsxs(Stack, { axis: "inline", gap: "sm", wrap: true, children: [_jsx(Button, { tone: "ghost", disabled: changeColumnSettings(props.columns, column.id, "earlier") === props.columns, onClick: () => change(column.id, "earlier"), children: props.earlierLabel(column) }), _jsx(Button, { tone: "ghost", disabled: changeColumnSettings(props.columns, column.id, "later") === props.columns, onClick: () => change(column.id, "later"), children: props.laterLabel(column) })] })] }, column.id)) })] });
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=collection-editing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-editing.js","sourceRoot":"","sources":["../src/collection-editing.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport { useEffect, useLayoutEffect, useRef, useState, type ReactNode } from \"react\";\nimport { useCompositionAction } from \"./internal/use-composition-action.js\";\nimport { assertDistinctIds, changeColumnSettings, collectionEditingRecipe, focusAfterRemoval, recoverableFilters, snapshotSelection, type ColumnSetting, type FilterRecoveryOption, type FocusTarget, type SelectionAction } from \"@hjmds/design-contracts/collection-editing\";\nimport { Button } from \"./actions.js\";\nimport { TextField } from \"./forms.js\";\nimport { Checkbox } from \"./selection.js\";\nimport { Stack, Text } from \"./layout.js\";\nimport { FieldGroup, type FieldGroupBinding, type FieldGroupProps } from \"./field-group.js\";\n\n\nfunction ErrorMessage({ children }: { children: ReactNode }) {\n return <div role=\"alert\" style={{ display: \"grid\", placeItems: \"center\", textAlign: \"center\" }}><Text tone=\"danger\">{children}</Text></div>;\n}\n\nexport type InlineEditProps = Readonly<{\n id: string; value: string; label: string; editLabel: string; saveLabel: string; cancelLabel: string; errorLabel: string;\n disabled?: boolean; validate?: (draft: string) => string | undefined;\n /** Resolve only after confirming and updating the product value; reject to preserve the draft. */\n onSave: (draft: string) => void | Promise<void>;\n}>;\nexport function InlineEdit(props: InlineEditProps) { return <InlineEditBody key={props.id} {...props} />; }\nfunction InlineEditBody(props: InlineEditProps) {\n const [editing, setEditing] = useState(false), [draft, setDraft] = useState(props.value);\n const action = useCompositionAction(props.disabled);\n const input = useRef<HTMLInputElement>(null), trigger = useRef<HTMLButtonElement>(null), group = useRef<HTMLDivElement>(null);\n const restore = useRef(false);\n useLayoutEffect(() => {\n if (editing) input.current?.focus();\n else if (restore.current) { restore.current = false; trigger.current?.focus(); }\n }, [editing]);\n const error = props.validate?.(draft);\n const close = () => {\n restore.current = group.current?.contains(document.activeElement) ?? false;\n setEditing(false);\n };\n const save = async () => {\n if (props.disabled || error || action.pending || action.session.getSnapshot().status === \"pending\") return;\n const result = await action.run(\"save\", () => props.onSave(draft));\n if (result.status === \"success\") close();\n };\n return <div ref={group} role=\"group\" aria-label={props.label}>\n {!editing ? <Stack axis=\"inline\" gap=\"sm\" align=\"center\" wrap><Text>{props.value}</Text><Button ref={trigger} disabled={props.disabled ?? false} tone=\"ghost\" onClick={() => { setDraft(props.value); action.session.reset(null); setEditing(true); }}>{props.editLabel}</Button></Stack>\n : <Stack gap={collectionEditingRecipe.actionGap}>\n <TextField ref={input} label={props.label} value={draft} disabled={props.disabled ?? false} readOnly={action.pending}\n {...(error ? { error, \"aria-invalid\": true } : {})} onValueChange={setDraft}\n onKeyDown={event => {\n // Enter during IME composition confirms a character, not the title.\n if (event.nativeEvent.isComposing || event.keyCode === 229) return;\n if (event.key === \"Enter\") { event.preventDefault(); void save(); }\n if (event.key === \"Escape\" && !action.pending) { event.preventDefault(); event.stopPropagation(); close(); }\n }} />\n <Stack axis=\"inline\" gap=\"sm\" wrap><Button tone=\"ghost\" disabled={action.pending} onClick={close}>{props.cancelLabel}</Button>\n <Button loading={action.pending} disabled={props.disabled === true || !!error} onClick={() => void save()}>{props.saveLabel}</Button></Stack>\n {action.failed ? <ErrorMessage>{props.errorLabel}</ErrorMessage> : null}\n </Stack>}\n </div>;\n}\n\nexport type RepeatableFieldGroupProps = Omit<FieldGroupProps, \"renderField\"> & Readonly<{\n renderField: (binding: FieldGroupBinding & { focusRef: (target: FocusTarget | null) => void }) => ReactNode;\n addLabel: string; removeLabel: (id: string) => string; minFields?: number; maxFields?: number;\n /** Return the new stable id to focus after the controlled descriptor includes it. */\n onAdd: () => string | undefined; onRemove: (id: string) => void;\n}>;\nexport function RepeatableFieldGroup({ renderField, addLabel, removeLabel, minFields = 0, maxFields = Infinity, onAdd, onRemove, ...props }: RepeatableFieldGroupProps) {\n const targets = useRef(new Map<string, FocusTarget>()), add = useRef<HTMLButtonElement>(null);\n const focus = useRef<string | null | undefined>(undefined);\n useLayoutEffect(() => {\n if (focus.current === undefined) return;\n if (focus.current === null) { add.current?.focus(); focus.current = undefined; }\n else if (targets.current.has(focus.current)) { targets.current.get(focus.current)?.focus(); focus.current = undefined; }\n });\n const fields = props.descriptor.fields;\n const live = useRef(true), policy = useRef({ fields, minFields, maxFields, onAdd, onRemove, disabled: props.descriptor.disabled });\n policy.current = { fields, minFields, maxFields, onAdd, onRemove, disabled: props.descriptor.disabled };\n useEffect(() => { live.current = true; return () => { live.current = false; }; }, []);\n return <Stack gap={collectionEditingRecipe.gap}>\n <FieldGroup {...props} renderField={binding => <Stack gap=\"sm\">\n {renderField({ ...binding, focusRef: target => { if (target) targets.current.set(binding.id, target); else targets.current.delete(binding.id); } })}\n <Button tone=\"ghost\" disabled={binding.controlProps.disabled || fields.length <= minFields} onClick={binding.guardChange(() => {\n const current = policy.current;\n if (!live.current || current.disabled || current.fields.length <= current.minFields) return;\n focus.current = focusAfterRemoval(current.fields.map(field => field.id), binding.id, current.fields.filter(field => field.disabled).map(field => field.id)) ?? null;\n current.onRemove(binding.id);\n })}>{removeLabel(binding.id)}</Button>\n </Stack>} />\n <Button ref={add} tone=\"secondary\" disabled={props.descriptor.disabled === true || fields.length >= maxFields} onClick={() => {\n const current = policy.current;\n if (!live.current || current.disabled || current.fields.length >= current.maxFields) return;\n const id = current.onAdd(); if (id !== undefined) focus.current = id;\n }}>{addLabel}</Button>\n </Stack>;\n}\n\nexport type SelectionActionBarProps = Readonly<{\n selectedIds: readonly string[]; selectionLabel: (count: number) => string;\n clearLabel: string; onClear: () => void; actions: readonly SelectionAction[];\n onAction: (actionId: string, selectedIds: readonly string[]) => void | Promise<void>; errorLabel: string; disabled?: boolean;\n /** Product supplies the exact confirmed operation to undo; never restore an entire collection. */\n recovery?: Readonly<{ label: string; onUndo: () => void | Promise<void> }>;\n}>;\nexport function SelectionActionBar(props: SelectionActionBarProps) {\n const action = useCompositionAction(props.disabled);\n assertDistinctIds(props.actions); snapshotSelection(props.selectedIds);\n if (!props.selectedIds.length && !props.recovery && !action.pending && !action.failed) return null;\n return <div role=\"group\" aria-label={props.selectionLabel(props.selectedIds.length)}><Stack gap=\"sm\">\n <Text role=\"status\">{props.selectionLabel(props.selectedIds.length)}</Text>\n <Stack axis=\"inline\" gap=\"sm\" wrap>\n {props.actions.map(item => <Button key={item.id} tone={item.destructive ? \"danger\" : \"secondary\"} loading={action.active === `action:${item.id}`} disabled={props.disabled === true || (action.pending && action.active !== `action:${item.id}`) || !props.selectedIds.length} onClick={() => {\n if (props.disabled) return;\n const scope = snapshotSelection(props.selectedIds);\n if (scope.length) void action.run(`action:${item.id}`, () => props.onAction(item.id, scope));\n }}>{item.label}</Button>)}\n <Button tone=\"ghost\" disabled={props.disabled === true || action.pending || !props.selectedIds.length} onClick={props.onClear}>{props.clearLabel}</Button>\n {props.recovery ? <Button tone=\"ghost\" loading={action.active === \"undo\"} disabled={props.disabled === true || (action.pending && action.active !== \"undo\")} onClick={() => {\n if (!props.disabled) void action.run(\"undo\", () => props.recovery!.onUndo());\n }}>{props.recovery.label}</Button> : null}\n </Stack>\n {action.failed ? <ErrorMessage>{props.errorLabel}</ErrorMessage> : null}\n </Stack></div>;\n}\n\nexport type FilterRecoveryProps = Readonly<{\n title: string; description?: string; options: readonly FilterRecoveryOption[];\n optionLabel: (option: FilterRecoveryOption) => string; onApply: (id: string) => void | Promise<void>;\n errorLabel: string; disabled?: boolean;\n}>;\nexport function FilterRecovery(props: FilterRecoveryProps) {\n const action = useCompositionAction(props.disabled), options = recoverableFilters(props.options);\n return <div role=\"group\" aria-label={props.title} style={{ display: \"grid\", placeItems: \"center\", textAlign: \"center\" }}><Stack gap=\"sm\" align=\"center\">\n <Text emphasis=\"strong\">{props.title}</Text>{props.description ? <Text tone=\"muted\">{props.description}</Text> : null}\n {options.map(option => <Button key={option.id} tone=\"secondary\" loading={action.active === option.id} disabled={props.disabled === true || (action.pending && action.active !== option.id)}\n onClick={() => { if (!props.disabled) void action.run(option.id, () => props.onApply(option.id)); }}>{props.optionLabel(option)}</Button>)}\n {action.failed ? <ErrorMessage>{props.errorLabel}</ErrorMessage> : null}\n </Stack></div>;\n}\n\nexport type TableColumnSettingsProps = Readonly<{\n label: string; columns: readonly ColumnSetting[]; disabled?: boolean;\n earlierLabel: (column: ColumnSetting) => string; laterLabel: (column: ColumnSetting) => string;\n onColumnsChange: (columns: readonly ColumnSetting[]) => void;\n}>;\nexport function TableColumnSettings(props: TableColumnSettingsProps) {\n assertDistinctIds(props.columns);\n const change = (id: string, kind: \"toggle\" | \"earlier\" | \"later\") => {\n if (props.disabled) return;\n const next = changeColumnSettings(props.columns, id, kind); if (next !== props.columns) props.onColumnsChange(next);\n };\n return <fieldset disabled={props.disabled} style={{ margin: 0, padding: 0, border: 0, minInlineSize: 0 }}><legend>{props.label}</legend><Stack gap=\"sm\">\n {props.columns.map(column => <Stack key={column.id} gap=\"sm\">\n <Checkbox label={column.label} checked={column.visible} disabled={column.locked === true || (column.visible && props.columns.filter(item => item.visible).length === 1)} onCheckedChange={() => change(column.id, \"toggle\")} />\n <Stack axis=\"inline\" gap=\"sm\" wrap><Button tone=\"ghost\" disabled={changeColumnSettings(props.columns, column.id, \"earlier\") === props.columns} onClick={() => change(column.id, \"earlier\")}>{props.earlierLabel(column)}</Button>\n <Button tone=\"ghost\" disabled={changeColumnSettings(props.columns, column.id, \"later\") === props.columns} onClick={() => change(column.id, \"later\")}>{props.laterLabel(column)}</Button></Stack>\n </Stack>)}\n </Stack></fieldset>;\n}\n"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type ReplyTarget, type SearchResponse } from "@hjmds/design-contracts/communication";
|
|
3
|
+
import { type ChatMessageProps, type MessageComposerProps } from "./screens.js";
|
|
4
|
+
import { type SearchRecentQueries } from "./screen-flows.js";
|
|
5
|
+
export type ReplyMessageProps = Omit<ChatMessageProps, "replyAction" | "timestampPresentation"> & Readonly<{
|
|
6
|
+
messageId: string;
|
|
7
|
+
onReply: (messageId: string) => void;
|
|
8
|
+
replyLabel: string;
|
|
9
|
+
replyDisabled?: boolean;
|
|
10
|
+
/** A drag has one owner: reply, or time reveal. Accessible reply stays available in either mode. */
|
|
11
|
+
swipeAction?: "reply" | "timestamp";
|
|
12
|
+
}>;
|
|
13
|
+
export declare function ReplyMessage({ messageId, onReply, replyLabel, replyDisabled, swipeAction, ...message }: ReplyMessageProps): import("react").JSX.Element;
|
|
14
|
+
export type ReplyComposerProps = Omit<MessageComposerProps, "onSend" | "replyTo" | "pending" | "error"> & Readonly<{
|
|
15
|
+
replyTarget: ReplyTarget | null;
|
|
16
|
+
onReplyCancel: () => void;
|
|
17
|
+
cancelReplyLabel: string;
|
|
18
|
+
errorLabel: string;
|
|
19
|
+
/** Resolve only after the actual send acknowledgement. The controlled draft is never cleared here. */
|
|
20
|
+
onSend: (value: string, context: Readonly<{
|
|
21
|
+
replyToId: string | null;
|
|
22
|
+
}>) => void | Promise<void>;
|
|
23
|
+
}>;
|
|
24
|
+
export declare function ReplyComposer({ replyTarget, onReplyCancel, cancelReplyLabel, errorLabel, onSend, ...composer }: ReplyComposerProps): import("react").JSX.Element;
|
|
25
|
+
export type ExpandableSearchProps<T> = Readonly<{
|
|
26
|
+
expanded: boolean;
|
|
27
|
+
onExpandedChange: (expanded: boolean) => void;
|
|
28
|
+
query: string;
|
|
29
|
+
onQueryChange: (query: string) => void;
|
|
30
|
+
onSearch: (query: string, context: Readonly<{
|
|
31
|
+
signal: AbortSignal;
|
|
32
|
+
}>) => Promise<SearchResponse<T>>;
|
|
33
|
+
renderResult: (result: T) => ReactNode;
|
|
34
|
+
onSubmit?: (query: string) => void;
|
|
35
|
+
recentQueries?: SearchRecentQueries;
|
|
36
|
+
debounceMs?: number;
|
|
37
|
+
disabled?: boolean;
|
|
38
|
+
labels: Readonly<{
|
|
39
|
+
title: string;
|
|
40
|
+
open: string;
|
|
41
|
+
cancel: string;
|
|
42
|
+
query: string;
|
|
43
|
+
clear: string;
|
|
44
|
+
searching: string;
|
|
45
|
+
error: string;
|
|
46
|
+
commit: (query: string) => string;
|
|
47
|
+
suggestionCount: (count: number) => string;
|
|
48
|
+
}>;
|
|
49
|
+
}>;
|
|
50
|
+
export declare function ExpandableSearch<T>(props: ExpandableSearchProps<T>): import("react").JSX.Element;
|
|
51
|
+
//# sourceMappingURL=communication.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"communication.d.ts","sourceRoot":"","sources":["../src/communication.tsx"],"names":[],"mappings":"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"}
|