@monimesl/dot-core 0.1.0-alpha.16 → 0.1.0-alpha.18
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/index.d.ts +66 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -390,6 +390,37 @@ export declare const Image: ComponentManifest<"Image", {
|
|
|
390
390
|
readonly aspect: readonly ["1:1", "4:3", "3:2", "16:9", "3:4", "2:3", "9:16"];
|
|
391
391
|
}, "error" | "load", "none">;
|
|
392
392
|
//#endregion
|
|
393
|
+
//#region src/view/components/slider.d.ts
|
|
394
|
+
export declare const Slider: ComponentManifest<"Slider", {
|
|
395
|
+
readonly value: "number";
|
|
396
|
+
readonly min: "number";
|
|
397
|
+
readonly max: "number";
|
|
398
|
+
readonly step: "number";
|
|
399
|
+
readonly showValue: "boolean";
|
|
400
|
+
readonly label: "string";
|
|
401
|
+
readonly hint: "string";
|
|
402
|
+
readonly disabled: "boolean";
|
|
403
|
+
}, "change", "none">;
|
|
404
|
+
//#endregion
|
|
405
|
+
//#region src/view/components/prose.d.ts
|
|
406
|
+
export declare const Prose: ComponentManifest<"Prose", {
|
|
407
|
+
readonly padding: readonly ["none", "small", "medium", "large"];
|
|
408
|
+
readonly paddingTop: readonly ["none", "small", "medium", "large"];
|
|
409
|
+
readonly paddingStart: readonly ["none", "small", "medium", "large"];
|
|
410
|
+
readonly paddingEnd: readonly ["none", "small", "medium", "large"];
|
|
411
|
+
readonly paddingBottom: readonly ["none", "small", "medium", "large"];
|
|
412
|
+
}, never, "elements">;
|
|
413
|
+
export declare const Quote: ComponentManifest<"Quote", {
|
|
414
|
+
readonly cite: "string";
|
|
415
|
+
}, never, "elements">;
|
|
416
|
+
export declare const BulletList: ComponentManifest<"BulletList", {
|
|
417
|
+
readonly ordered: "boolean";
|
|
418
|
+
}, never, "elements">;
|
|
419
|
+
export declare const Bullet: ComponentManifest<"Bullet", Record<never, PropType>, never, "elements">;
|
|
420
|
+
export declare const RichText: ComponentManifest<"RichText", {
|
|
421
|
+
readonly markdown: "string";
|
|
422
|
+
}, never, "none">;
|
|
423
|
+
//#endregion
|
|
393
424
|
//#region src/view/components/input.d.ts
|
|
394
425
|
export declare const Input: ComponentManifest<"Input", {
|
|
395
426
|
readonly value: "string";
|
|
@@ -512,7 +543,7 @@ export declare const Text: ComponentManifest<"Text", {
|
|
|
512
543
|
readonly paddingStart: readonly ["none", "small", "medium", "large"];
|
|
513
544
|
readonly paddingEnd: readonly ["none", "small", "medium", "large"];
|
|
514
545
|
readonly paddingBottom: readonly ["none", "small", "medium", "large"];
|
|
515
|
-
readonly variant: readonly ["display", "title", "subtitle", "body", "caption"];
|
|
546
|
+
readonly variant: readonly ["display", "title", "subtitle", "lead", "body", "caption"];
|
|
516
547
|
readonly tone: {
|
|
517
548
|
readonly words: readonly ["default", "muted", "info", "success", "warning", "danger", "onPrimary"];
|
|
518
549
|
readonly or: "themeColor";
|
|
@@ -522,6 +553,9 @@ export declare const Text: ComponentManifest<"Text", {
|
|
|
522
553
|
readonly maxLines: "number";
|
|
523
554
|
readonly decoration: readonly ["none", "underline", "strikethrough"];
|
|
524
555
|
readonly numeric: "boolean";
|
|
556
|
+
readonly leading: readonly ["tight", "normal", "relaxed"];
|
|
557
|
+
readonly italic: "boolean";
|
|
558
|
+
readonly selectable: "boolean";
|
|
525
559
|
}, never, "text">;
|
|
526
560
|
//#endregion
|
|
527
561
|
//#region src/view/components/text-area.d.ts
|
|
@@ -668,6 +702,10 @@ export declare const builtinComponents: {
|
|
|
668
702
|
readonly Badge: ComponentManifest<"Badge", {
|
|
669
703
|
readonly tone: readonly ["default", "info", "success", "warning", "danger"];
|
|
670
704
|
}, never, "text">;
|
|
705
|
+
readonly Bullet: ComponentManifest<"Bullet", Record<never, PropType>, never, "elements">;
|
|
706
|
+
readonly BulletList: ComponentManifest<"BulletList", {
|
|
707
|
+
readonly ordered: "boolean";
|
|
708
|
+
}, never, "elements">;
|
|
671
709
|
readonly Button: ComponentManifest<"Button", {
|
|
672
710
|
readonly variant: readonly ["primary", "secondary"];
|
|
673
711
|
readonly disabled: "boolean";
|
|
@@ -817,11 +855,21 @@ export declare const builtinComponents: {
|
|
|
817
855
|
readonly ProgressBar: ComponentManifest<"ProgressBar", {
|
|
818
856
|
readonly value: "number";
|
|
819
857
|
}, never, "none">;
|
|
858
|
+
readonly Prose: ComponentManifest<"Prose", {
|
|
859
|
+
readonly padding: readonly ["none", "small", "medium", "large"];
|
|
860
|
+
readonly paddingTop: readonly ["none", "small", "medium", "large"];
|
|
861
|
+
readonly paddingStart: readonly ["none", "small", "medium", "large"];
|
|
862
|
+
readonly paddingEnd: readonly ["none", "small", "medium", "large"];
|
|
863
|
+
readonly paddingBottom: readonly ["none", "small", "medium", "large"];
|
|
864
|
+
}, never, "elements">;
|
|
820
865
|
readonly QRCode: ComponentManifest<"QRCode", {
|
|
821
866
|
readonly value: "string";
|
|
822
867
|
readonly size: "number";
|
|
823
868
|
readonly label: "string";
|
|
824
869
|
}, never, "none">;
|
|
870
|
+
readonly Quote: ComponentManifest<"Quote", {
|
|
871
|
+
readonly cite: "string";
|
|
872
|
+
}, never, "elements">;
|
|
825
873
|
readonly Radio: ComponentManifest<"Radio", {
|
|
826
874
|
readonly value: "string";
|
|
827
875
|
readonly label: "string";
|
|
@@ -832,6 +880,9 @@ export declare const builtinComponents: {
|
|
|
832
880
|
readonly label: "string";
|
|
833
881
|
readonly disabled: "boolean";
|
|
834
882
|
}, "change", "elements">;
|
|
883
|
+
readonly RichText: ComponentManifest<"RichText", {
|
|
884
|
+
readonly markdown: "string";
|
|
885
|
+
}, never, "none">;
|
|
835
886
|
readonly Scroll: ComponentManifest<"Scroll", {
|
|
836
887
|
readonly padding: readonly ["none", "small", "medium", "large"];
|
|
837
888
|
readonly paddingTop: readonly ["none", "small", "medium", "large"];
|
|
@@ -865,6 +916,16 @@ export declare const builtinComponents: {
|
|
|
865
916
|
readonly lines: "number";
|
|
866
917
|
readonly height: "number";
|
|
867
918
|
}, never, "none">;
|
|
919
|
+
readonly Slider: ComponentManifest<"Slider", {
|
|
920
|
+
readonly value: "number";
|
|
921
|
+
readonly min: "number";
|
|
922
|
+
readonly max: "number";
|
|
923
|
+
readonly step: "number";
|
|
924
|
+
readonly showValue: "boolean";
|
|
925
|
+
readonly label: "string";
|
|
926
|
+
readonly hint: "string";
|
|
927
|
+
readonly disabled: "boolean";
|
|
928
|
+
}, "change", "none">;
|
|
868
929
|
readonly Spinner: ComponentManifest<"Spinner", {
|
|
869
930
|
readonly size: readonly ["small", "medium", "large"];
|
|
870
931
|
}, never, "none">;
|
|
@@ -905,7 +966,7 @@ export declare const builtinComponents: {
|
|
|
905
966
|
readonly paddingStart: readonly ["none", "small", "medium", "large"];
|
|
906
967
|
readonly paddingEnd: readonly ["none", "small", "medium", "large"];
|
|
907
968
|
readonly paddingBottom: readonly ["none", "small", "medium", "large"];
|
|
908
|
-
readonly variant: readonly ["display", "title", "subtitle", "body", "caption"];
|
|
969
|
+
readonly variant: readonly ["display", "title", "subtitle", "lead", "body", "caption"];
|
|
909
970
|
readonly tone: {
|
|
910
971
|
readonly words: readonly ["default", "muted", "info", "success", "warning", "danger", "onPrimary"];
|
|
911
972
|
readonly or: "themeColor";
|
|
@@ -915,6 +976,9 @@ export declare const builtinComponents: {
|
|
|
915
976
|
readonly maxLines: "number";
|
|
916
977
|
readonly decoration: readonly ["none", "underline", "strikethrough"];
|
|
917
978
|
readonly numeric: "boolean";
|
|
979
|
+
readonly leading: readonly ["tight", "normal", "relaxed"];
|
|
980
|
+
readonly italic: "boolean";
|
|
981
|
+
readonly selectable: "boolean";
|
|
918
982
|
}, never, "text">;
|
|
919
983
|
readonly TextArea: ComponentManifest<"TextArea", {
|
|
920
984
|
readonly value: "string";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/event/core.ts","../src/view/component.ts","../src/theme/theme.ts","../src/host/context.ts","../src/host/calls.ts","../src/page/bars.ts","../src/page/navigation.ts","../src/protocol/core.ts","../src/view/renderer.ts","../src/view/values.ts","../src/view/components/amount-input.ts","../src/view/components/button.ts","../src/view/components/carousel.ts","../src/view/components/chip.ts","../src/view/components/code-input.ts","../src/view/components/detail-row.ts","../src/view/components/divider.ts","../src/view/components/empty-state.ts","../src/view/components/feedback.ts","../src/view/components/footer.ts","../src/view/components/grid.ts","../src/view/components/icon.ts","../src/view/components/image.ts","../src/view/components/input.ts","../src/view/components/link.ts","../src/view/components/list.ts","../src/view/components/overlays.ts","../src/view/components/qr-code.ts","../src/view/components/select.ts","../src/view/components/scroll.ts","../src/view/components/skeleton.ts","../src/view/components/tabs.ts","../src/view/components/text.ts","../src/view/components/text-area.ts","../src/view/components/toggles.ts","../src/view/components/view.ts","../src/view/components/options.ts","../src/view/components/index.ts","../src/source/location.ts","../src/source/error.ts","../src/event/emitter.ts","../src/protocol/transport.ts","../src/host/host.ts","../src/host/permissions.ts","../src/host/files.ts","../src/host/network.ts","../src/host/react.ts","../src/page/lifecycle.ts","../src/page/state.ts","../src/version/semantic-version.ts","../src/messageChannel.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/event/core.ts","../src/view/component.ts","../src/theme/theme.ts","../src/host/context.ts","../src/host/calls.ts","../src/page/bars.ts","../src/page/navigation.ts","../src/protocol/core.ts","../src/view/renderer.ts","../src/view/values.ts","../src/view/components/amount-input.ts","../src/view/components/button.ts","../src/view/components/carousel.ts","../src/view/components/chip.ts","../src/view/components/code-input.ts","../src/view/components/detail-row.ts","../src/view/components/divider.ts","../src/view/components/empty-state.ts","../src/view/components/feedback.ts","../src/view/components/footer.ts","../src/view/components/grid.ts","../src/view/components/icon.ts","../src/view/components/image.ts","../src/view/components/slider.ts","../src/view/components/prose.ts","../src/view/components/input.ts","../src/view/components/link.ts","../src/view/components/list.ts","../src/view/components/overlays.ts","../src/view/components/qr-code.ts","../src/view/components/select.ts","../src/view/components/scroll.ts","../src/view/components/skeleton.ts","../src/view/components/tabs.ts","../src/view/components/text.ts","../src/view/components/text-area.ts","../src/view/components/toggles.ts","../src/view/components/view.ts","../src/view/components/options.ts","../src/view/components/index.ts","../src/source/location.ts","../src/source/error.ts","../src/event/emitter.ts","../src/protocol/transport.ts","../src/host/host.ts","../src/host/permissions.ts","../src/host/files.ts","../src/host/network.ts","../src/host/react.ts","../src/page/lifecycle.ts","../src/page/state.ts","../src/version/semantic-version.ts","../src/messageChannel.ts"],"mappings":";UAEiB,SAAS,kBAAkB,OAAO,SAAS;WACjD;WACA,QAAQ;WACR,MAAM;;wBAGD,YAAY,SAAS,uBACnC,cACA,SAAQ,QACR,OAAM,SAAS,2BACd,SAAS;;;UCVK;EACf;EACA;EACA;EACA;;UAKe;WACN;WACA;;KAGC,iBAAiB,gCAAgC;KAEjD,UAAU,UAAU,YAAY,8BACxC,YACA,UAAU,UACR,sBAAsB,8CACtB,gBAAgB,YACd,UAAU;wBAGF,UAAU,MAAM,WAAW,QAAQ;wBAKnC,eAAe,MAAM;KAMzB;UAIK,kBACf,8BACA,cAAc,eAAe,YAAY,eAAe,WACxD,gCACA,iBAAiB,eAAe;WAEvB,MAAM;WACN,OAAO;WAEP,iBAAiB;WACjB,UAAU;WACV;WAEA,qBAAqB;;UAGf;EACf;EACA;EACA;;wBAGc,sBACR,2BACA,cAAc,eAAe,YAAY,cAAc,iBACvD,qCACA,iBAAiB,eAAe,cACtC;EACA,MAAM;EACN,QAAQ;EACR,kBAAkB;EAClB,UAAU;EACV;EACA,qBAAqB;IACnB,kBAAkB,MAAM,OAAO,QAAQ;KAI/B,UAAU,6BAA6B,WAAW;wBAE9C,UAAU,sBAAsB,OAAO,QAAQ,UAAU;wBAKzD,YAAY;wBAMZ,UAAU;KAOd,QAAQ,UAAU,mBAAmB,uBAC9C,WAAW,cAAc,UAAU,WAAW,wBAE9C,KAAK,uBAAuB,UAAU,QAAQ,OAAO,qCACnD;EAA2C,WAAW;;KAE/C,oBAAoB,SAAS,eAAe;wBAExC,kBAAkB,WAAW,SAAS,qBAAqB;;;UC1G1D;EAEf,SAAS;EACT,SAAS;EACT,QAAQ;;KAGE;UAEK;EACf,UAAU;EACV,aAAa;EACb,UAAU;EACV,OAAO;EAGP,SAAS,SAAS,eAAe;;UAGlB;EACf,QAAQ;EACR,OAAO;;KAGG;KAEA;;;KCxBA;UAEK;WACN,QAAQ;WACR,UAAU;;qBAGR,wBAAwB;;;KCVzB;qBAGC,kBAAkB;WACX;WACT,MAAM;EAEH,YAAA,MAAM,eAAe;;UAMlB;EACf;;UAGe,YAAY,WAAW,QAAQ;EAE9C;;KAGU,cACV,gBACA,iBACA,SAAS,oBACN;wBAKW,YAAY,QAAQ;wBAIpB,SAAS,QACvB,gBACA,iBACA,UAAS,kBACR,YAAY;wBAWC,kBAAkB,QAChC,SAAS,QAAQ,SACjB,sBACC,YAAY;;;UCnDE;EAEf;EACA;EAEA;EACA;;UAGe;EAEf;;UAIe;EACf,gBAAgB;EAChB,SAAS;;UAGM;EACf,eAAe;EACf,QAAQ;;wBAMM,mBAAmB,SAAS;wBAe5B,YAAY,SAAS;wBAMrB,aAAa,SAAS;wBAMtB,gBAAgB,UAAU,6BAA6B;;;qBCzD1D;wBAIG,SAAS;KAIb,oBAAoB,SAAS;KAE7B;WAEG;WACA;WACA,SAAS;;WAET;WAAyB;;UAEvB;WACN;WACA;WACA,SAAS;;qBAGP;;WACF;EAIG,YAAA;MAIR,kBAAkB;MAIlB,OAAO;EAMX,MAAM,YAAY;;;;KCpCR,YAAY;UAGP;EAEf,SAAS;EAGT;IAAQ;IAAoB;IAAc,SAAS;;EACnD;IAAU;;EACV;IAAQ;;EACR;IAAQ;;EACR;IAAS;IAAoB;IAAiB,OAAO;;;UAItC;EACf;IAAY,OAAO;;EACnB;IAAiB;IAAoB,OAAO;;EAC5C;IAAgB;IAAoB,YAAY;;EAChD;IAAS;IAAqB;;EAE9B,UAAU;IAAe;;EAEzB;IAAY;IAAY;IAAgB;IAAiB;;EAEzD;IAAc;;EAGd;IAAY;MAAuB;;UAIpB;EAEf;IAAa,gBAAgB;IAAc;;EAE3C,mBAAmB;EAEnB,YAAY;;KAGF;EACR;EAAY;;EAAqB;EAAY;IAAS,MAAM;IAAe;;;UAE9D,SAAS,8BAA8B;WAC7C,MAAM;WACN,SAAS;;KAGR;KAEA,YAAY,UAAU,oBAAoB;;;UCvDrC,cAAc;WACpB,IACP,cACA,OAAO,mCACJ,WAAW,qBACX;WAGI,KACP,iBACA,OAAO,SAAS,8BACZ,OAAO;WACJ,OAAO;WAEP,OACP,gBACA,SAAS,eAAe,mBAAmB,kBAC3C,OAAO,eAAe,8BACnB;;KAKK,cAAc,MAAM,OAAO,WAAW,SAAS,cAAc,UAAU;;;wBC3BnE,OAAO;wBAeP,OAAO;;;qBCVV,aAAA;;;;;;;;;;;;;qBCHA,QAAA;;;;;;;qBCGA,UAAA;;;;;;;;;;;;;;;;qBCDA,MAAA;;;;;;;;qBCAA,WAAA;;;;;;;;;;;qBCCA,WAAA;;;;;;;;;;;;;qBCHA,SAAO,6BAAA,cAAP;;;qBCGA,YAAA;;;;;;;;;;;;qBCFA,SAAA;WAAO;;qBAMP,aAAA;WAAW;;qBAQX,QAAA;;;;;;;;;qBAMA,OAAA;WAAK;;;;qBClBL,QAAA;;;;;;;;;qBCDA,MAAA;;;;;;;;;qBAOA,UAAA;;;;;;;;qBCRA,MAAA;;;;;;;qBCAA,OAAA;;;;;;;;;;;qBCCA,QAAA;;;;;;;;;;;;qBCCA,OAAA;;;;;;;qBAOA,OAAA;WAAK;;qBAOL,YAAA;WAAU;;qBAMV,QAAM,4BAAA,cAAN;qBAOA,UAAA;WAAQ;;;;qBC9BR,OAAA;;;;;;;;;;;;;;qBCGA,MAAA;;;;;;qBCAA,MAAA;;;;;;;;qBAQA,UAAA;;;;;;;;;;;;;;qBCRA,OAAA;;;;;;;;;;qBASA,OAAA;;;;;;;qBCXA,QAAA;;;;;;;qBCAA,QAAA;;;;;;;;qBAcA,QAAA;;;;;;qBCXA,QAAA;;;;;;;;;;;;qBCJA,UAAA;;;;;;;qBCGA,MAAA;;;;;;;;;qBAYA,KAAA;;;;;;;qBCdA,MAAA;;;;;;;;;;;;;;;;;;;;;;qBCDA,UAAA;;;;;;;;;;;;qBCAA,QAAA;;;;;qBAOA,UAAA;;;;;qBAQA,YAAA;;;;;qBAOA,OAAA;;;;;;;qBCrBA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAyBA,OAAA;;;;;;;;;;;;;;qBC5BA;qBAGA;qBAIA;;;;;;;qBASA;qBAEA;qBAGA;WAAA;WAAA;;qBAGA;WAAA;WAAA;;qBAMA;qBAGA;qBAGA;WAAA;WAAA;;qBAGA;;;;;;;;;;;;;;;;;;;qBAYA;qBAEA;KAwED,mBAAmB;;;qBChClB;wBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA+CD,2BAA2B;qBAE1B,iBAAe,SAAA,eAAA,0BAAA,eAAf,mBAAe;;;UC9IX;WACN;WACA;WACA;;wBAIK,cAAc,kBAAkB,mBAAmB;wBAsBnD,WAAW,gBAAgB,iBAAiB;wBAI5C,eAAe,iBAAiB,eAAe,WAAW;;;qBC7B7D,oBAAoB;WACtB;WACA;WACA,KAAK;EAEF,YAAA,gBAAgB,eAAe,WAAW;;;;KCTnD,eAAe;qBAEP,aAAa,kBAAkB,WAAW,SAAS;;EAG9D,GAAG,gBAAgB,QAAQ,MAAM,GAAG,UAAU,OAAO;EAOrD,KAAK,gBAAgB,QAAQ,MAAM,MAAM,MAAM,WAAW,OAAO;;;;UCXlD;EACf,KAAK;EAEL,OAAO,WAAW;;UAIH;EACf,YAAY;EACZ,iBAAiB,iBAAiB,WAAW;IAAS;;EACtD,oBAAoB,iBAAiB,WAAW;IAAS;;;wBAG3C,uBAAuB,SAAS,mBAAmB;wBAYnD,wBAAwB,WAAW;;;QCxB3C;MAGF,iBAAiB;;wBAIP,iBAAiB;;;qBCLpB;KAED,wBAAwB;wBAEpB,aAAa,gBAAgB,SAAS;;;qBCRzC;wBAIG,mBAAmB,gBAAgB;;;;;qBCFtC,sBAAoB;qBAGpB;wBAEG,cAAc;wBAId,WAAW,0BAA0B;;;qBCPxC;qBAGA;;;;;;wBASG,aAAa,yBAAyB;wBAMtC,kBAAkB,qBAAqB;wBAOvC,mBAAmB,6BAA6B;;;UC3B/C;EACf,OAAO,SAAS,2BAA2B;EAC3C,iBAAiB;EACjB,iBAAiB;EACjB,mBAAmB;;UAGJ;EACf,mBAAmB;EACnB,QAAQ,OAAO;;qBAWJ,4BAAuD;;;wBCtBpD,aAAa,GAAG,OAAO,GAAG,SAAS,QAAQ,KAAK;;;qBCCnD,gBAAc;wBAWX,kBAAkB,iBAAiB;wBAInC,aAAa;wBAIb,iBAAiB,iBAAiB;wBAKlC,aAAa,iBAAiB;wBAM9B,gBAAgB,cAAc;;;KC5BlC,eAAe,YAAY,SAAS;qBAEnC,eAAe,iBAAiB,YAAY,iBAAiB;;EAI5D,YAAA,WAAW;EAIvB,KAAK,UAAU,YAAY,WAAW,MAAM,GAAG,SAAS,SAAS;EAIjE,OAAO,UAAU,YAAY,WAC3B,MAAM,GACN,SAAS,eAAe,SAAS,MAChC,eAAe,SAAS;EAM3B,OAAO,UAAU,gBAAgB,SAAS"}
|
package/dist/index.js
CHANGED
|
@@ -410,6 +410,49 @@ const Image = defineComponent({
|
|
|
410
410
|
}]
|
|
411
411
|
});
|
|
412
412
|
//#endregion
|
|
413
|
+
//#region src/view/components/slider.ts
|
|
414
|
+
const Slider = defineComponent({
|
|
415
|
+
name: "Slider",
|
|
416
|
+
props: {
|
|
417
|
+
value: "number",
|
|
418
|
+
min: "number",
|
|
419
|
+
max: "number",
|
|
420
|
+
step: "number",
|
|
421
|
+
showValue: "boolean",
|
|
422
|
+
label: "string",
|
|
423
|
+
hint: "string",
|
|
424
|
+
disabled: "boolean"
|
|
425
|
+
},
|
|
426
|
+
events: ["change"],
|
|
427
|
+
children: "none"
|
|
428
|
+
});
|
|
429
|
+
//#endregion
|
|
430
|
+
//#region src/view/components/prose.ts
|
|
431
|
+
const Prose = defineComponent({
|
|
432
|
+
name: "Prose",
|
|
433
|
+
props: { ...PADDING_PROPS },
|
|
434
|
+
children: "elements"
|
|
435
|
+
});
|
|
436
|
+
const Quote = defineComponent({
|
|
437
|
+
name: "Quote",
|
|
438
|
+
props: { cite: "string" },
|
|
439
|
+
children: "elements"
|
|
440
|
+
});
|
|
441
|
+
const BulletList = defineComponent({
|
|
442
|
+
name: "BulletList",
|
|
443
|
+
props: { ordered: "boolean" },
|
|
444
|
+
children: "elements"
|
|
445
|
+
});
|
|
446
|
+
const Bullet = defineComponent({
|
|
447
|
+
name: "Bullet",
|
|
448
|
+
children: "elements"
|
|
449
|
+
});
|
|
450
|
+
const RichText = defineComponent({
|
|
451
|
+
name: "RichText",
|
|
452
|
+
props: { markdown: "string" },
|
|
453
|
+
children: "none"
|
|
454
|
+
});
|
|
455
|
+
//#endregion
|
|
413
456
|
//#region src/view/components/input.ts
|
|
414
457
|
const Input = defineComponent({
|
|
415
458
|
name: "Input",
|
|
@@ -589,6 +632,7 @@ const Text = defineComponent({
|
|
|
589
632
|
"display",
|
|
590
633
|
"title",
|
|
591
634
|
"subtitle",
|
|
635
|
+
"lead",
|
|
592
636
|
"body",
|
|
593
637
|
"caption"
|
|
594
638
|
],
|
|
@@ -610,6 +654,13 @@ const Text = defineComponent({
|
|
|
610
654
|
"strikethrough"
|
|
611
655
|
],
|
|
612
656
|
numeric: "boolean",
|
|
657
|
+
leading: [
|
|
658
|
+
"tight",
|
|
659
|
+
"normal",
|
|
660
|
+
"relaxed"
|
|
661
|
+
],
|
|
662
|
+
italic: "boolean",
|
|
663
|
+
selectable: "boolean",
|
|
613
664
|
...PADDING_PROPS
|
|
614
665
|
},
|
|
615
666
|
children: "text",
|
|
@@ -726,6 +777,8 @@ const Stack = defineComponent({
|
|
|
726
777
|
const builtinComponents = {
|
|
727
778
|
AmountInput,
|
|
728
779
|
Badge,
|
|
780
|
+
Bullet,
|
|
781
|
+
BulletList,
|
|
729
782
|
Button,
|
|
730
783
|
Carousel,
|
|
731
784
|
Checkbox,
|
|
@@ -746,13 +799,17 @@ const builtinComponents = {
|
|
|
746
799
|
Notice,
|
|
747
800
|
Option,
|
|
748
801
|
ProgressBar,
|
|
802
|
+
Prose,
|
|
749
803
|
QRCode,
|
|
804
|
+
Quote,
|
|
750
805
|
Radio,
|
|
751
806
|
RadioGroup,
|
|
807
|
+
RichText,
|
|
752
808
|
Scroll,
|
|
753
809
|
Select,
|
|
754
810
|
Sheet,
|
|
755
811
|
Skeleton,
|
|
812
|
+
Slider,
|
|
756
813
|
Spinner,
|
|
757
814
|
Stack,
|
|
758
815
|
Switch,
|
|
@@ -1141,6 +1198,6 @@ var MessageChannel = class {
|
|
|
1141
1198
|
}
|
|
1142
1199
|
};
|
|
1143
1200
|
//#endregion
|
|
1144
|
-
export { ASPECTS, AmountInput, BACKGROUNDS, BORDERS, BOX_PROPS, Badge, Button, Carousel, Checkbox, Chip, CodeInput, DEFAULT_SYSTEM_CONTEXT, DOT_FILE_PATH_MAX_LENGTH, DetailRow, Divider, EmptyState, EventEmitter, Footer, Grid, GridItem, HostError, ICON_NAMES, Icon, Image, Input, LENGTH, Link, List, ListItem, MAX_STACK_DEPTH, MessageChannel, NETWORK_HOST_MAX_LENGTH, NETWORK_HOST_PATTERN, NavigationStack, Notice, Option, PADDING_PROPS, PAGE_HOOKS, PERMISSIONS, ProgressBar, QRCode, RADII, REACT_HOST_MODULES, REACT_HOST_PATH, Radio, RadioGroup, SEMVER_PATTERN, SIZES, SPACES, STATUS_TONES, Scroll, Select, Sheet, Skeleton, SourceError, Spinner, Stack, Switch, TEXT_TONES, TONES, Tab, Tabs, Text, TextArea, Toast, View, allowsHost, applyChanges, builtinComponents, builtinRegistry, callHost, checkConfigs, checkNavigationBar, checkTabBar, compareVersions, componentRegistry, connectHost, createAdaptorTransport, createEvent, createHostRequest, createLocator, createTransportPair, defineComponent, dotFilePathProblem, eventName, eventProp, hostTransport, isEventProp, isNetworkHost, isNewerMajor, isPageId, isPermission, isReactCompatible, isSemanticVersion, isVersionAtLeast, isWordsOr, locatedMessage, locationAt, majorVersion, mergeConfigs, newestReactOfMajor, otherThanWords, reactHostUrl, toList, toText };
|
|
1201
|
+
export { ASPECTS, AmountInput, BACKGROUNDS, BORDERS, BOX_PROPS, Badge, Bullet, BulletList, Button, Carousel, Checkbox, Chip, CodeInput, DEFAULT_SYSTEM_CONTEXT, DOT_FILE_PATH_MAX_LENGTH, DetailRow, Divider, EmptyState, EventEmitter, Footer, Grid, GridItem, HostError, ICON_NAMES, Icon, Image, Input, LENGTH, Link, List, ListItem, MAX_STACK_DEPTH, MessageChannel, NETWORK_HOST_MAX_LENGTH, NETWORK_HOST_PATTERN, NavigationStack, Notice, Option, PADDING_PROPS, PAGE_HOOKS, PERMISSIONS, ProgressBar, Prose, QRCode, Quote, RADII, REACT_HOST_MODULES, REACT_HOST_PATH, Radio, RadioGroup, RichText, SEMVER_PATTERN, SIZES, SPACES, STATUS_TONES, Scroll, Select, Sheet, Skeleton, Slider, SourceError, Spinner, Stack, Switch, TEXT_TONES, TONES, Tab, Tabs, Text, TextArea, Toast, View, allowsHost, applyChanges, builtinComponents, builtinRegistry, callHost, checkConfigs, checkNavigationBar, checkTabBar, compareVersions, componentRegistry, connectHost, createAdaptorTransport, createEvent, createHostRequest, createLocator, createTransportPair, defineComponent, dotFilePathProblem, eventName, eventProp, hostTransport, isEventProp, isNetworkHost, isNewerMajor, isPageId, isPermission, isReactCompatible, isSemanticVersion, isVersionAtLeast, isWordsOr, locatedMessage, locationAt, majorVersion, mergeConfigs, newestReactOfMajor, otherThanWords, reactHostUrl, toList, toText };
|
|
1145
1202
|
|
|
1146
1203
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/view/component.ts","../src/view/values.ts","../src/view/components/amount-input.ts","../src/view/components/button.ts","../src/view/components/options.ts","../src/view/components/carousel.ts","../src/view/components/chip.ts","../src/view/components/code-input.ts","../src/view/components/detail-row.ts","../src/view/components/divider.ts","../src/view/components/empty-state.ts","../src/view/components/feedback.ts","../src/view/components/footer.ts","../src/view/components/grid.ts","../src/view/components/icon.ts","../src/view/components/image.ts","../src/view/components/input.ts","../src/view/components/link.ts","../src/view/components/list.ts","../src/view/components/overlays.ts","../src/view/components/qr-code.ts","../src/view/components/select.ts","../src/view/components/scroll.ts","../src/view/components/skeleton.ts","../src/view/components/tabs.ts","../src/view/components/text.ts","../src/view/components/text-area.ts","../src/view/components/toggles.ts","../src/view/components/view.ts","../src/view/components/index.ts","../src/source/location.ts","../src/source/error.ts","../src/event/emitter.ts","../src/event/core.ts","../src/host/host.ts","../src/host/context.ts","../src/host/calls.ts","../src/host/permissions.ts","../src/host/files.ts","../src/host/network.ts","../src/version/semantic-version.ts","../src/host/react.ts","../src/protocol/transport.ts","../src/page/lifecycle.ts","../src/page/navigation.ts","../src/page/state.ts","../src/page/bars.ts","../src/messageChannel.ts"],"sourcesContent":["import type { DotEvent } from '../event/core';\n\nexport interface PropTypes {\n string: string;\n number: number;\n boolean: boolean;\n any: unknown;\n}\n\n// One of `words`, or else a number, such as a width of 120 or \"fill\", or a colour the dot named in\n// its theme, such as \"surface\" or \"gold\".\nexport interface WordsOr {\n readonly words: readonly string[];\n readonly or: 'number' | 'themeColor';\n}\n\nexport type PropType = keyof PropTypes | readonly string[] | WordsOr;\n\nexport type PropValue<T extends PropType> = T extends readonly string[]\n ? T[number]\n : T extends WordsOr\n ? T['words'][number] | (T['or'] extends 'number' ? number : string)\n : T extends keyof PropTypes\n ? PropTypes[T]\n : never;\n\nexport function isWordsOr(type: PropType): type is WordsOr {\n return typeof type === 'object' && !Array.isArray(type);\n}\n\n// What `type` takes besides its words, for messages about it.\nexport function otherThanWords(type: WordsOr): string {\n return type.or === 'number' ? 'a number' : \"a colour from the theme's custom colours\";\n}\n\n// `text` holds text and inline components such as `Text`. `elements` holds components, and any\n// loose text in it is wrapped in an inline one.\nexport type ChildrenType = 'none' | 'text' | 'elements';\n\n// A component apart from any renderer. The compiler checks markup against it, and each renderer\n// maps it to its own elements.\nexport interface ComponentManifest<\n Name extends string = string,\n Props extends Record<string, PropType> = Record<string, PropType>,\n Events extends string = string,\n Children extends ChildrenType = ChildrenType,\n> {\n readonly name: Name;\n readonly props: Props;\n // Event names. `click` is written `onClick` in markup and arrives as the `onClick` prop.\n readonly events: readonly Events[];\n readonly children: Children;\n readonly inline?: boolean;\n // Props that make another prop pointless. The compiler warns when markup sets both.\n readonly overrides?: readonly PropOverride[];\n}\n\nexport interface PropOverride {\n prop: string;\n ignores: string;\n because: string;\n}\n\nexport function defineComponent<\n const Name extends string,\n const Props extends Record<string, PropType> = Record<never, PropType>,\n const Events extends string = never,\n const Children extends ChildrenType = ChildrenType,\n>(manifest: {\n name: Name;\n props?: Props;\n events?: readonly Events[];\n children: Children;\n inline?: boolean;\n overrides?: readonly PropOverride[];\n}): ComponentManifest<Name, Props, Events, Children> {\n return { props: {} as Props, events: [], ...manifest };\n}\n\nexport type EventProp<Event extends string> = `on${Capitalize<Event>}`;\n\nexport function eventProp<Event extends string>(event: Event): EventProp<Event> {\n return `on${event.charAt(0).toUpperCase()}${event.slice(1)}` as EventProp<Event>;\n}\n\n// Event props are `on` followed by a capital letter, like `onClick`.\nexport function isEventProp(name: string): boolean {\n const letterAfterOn = name.charAt('on'.length);\n return name.startsWith('on') && letterAfterOn >= 'A' && letterAfterOn <= 'Z';\n}\n\n// The reverse of eventProp: `onClick` -> `click`.\nexport function eventName(prop: string): string {\n const name = prop.slice('on'.length);\n return name.charAt(0).toLowerCase() + name.slice(1);\n}\n\n// The props a renderer's version of `M` receives. Any prop may be undefined, since markup can leave\n// it out and a binding can give undefined.\nexport type PropsOf<M extends ComponentManifest, Children = never> = {\n [K in keyof M['props']]?: PropValue<M['props'][K]> | undefined;\n} & {\n [E in M['events'][number] as EventProp<E>]?: ((event: DotEvent) => void) | undefined;\n} & (M['children'] extends 'none' ? unknown : { children?: Children | undefined });\n\nexport type ComponentRegistry = Readonly<Record<string, ComponentManifest>>;\n\nexport function componentRegistry(manifests: Iterable<ComponentManifest>): ComponentRegistry {\n const registry: Record<string, ComponentManifest> = {};\n for (const manifest of manifests) {\n if (manifest.name in registry) {\n throw new Error(`Component <${manifest.name}> is defined twice`);\n }\n registry[manifest.name] = manifest;\n }\n return registry;\n}\n","export function toText(value: unknown): string {\n switch (typeof value) {\n case 'string':\n return value;\n case 'number':\n case 'boolean':\n case 'bigint':\n return String(value);\n case 'object':\n return value === null ? '' : JSON.stringify(value);\n default:\n return '';\n }\n}\n\nexport function toList(value: unknown): readonly unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n if (typeof value === 'object' && value !== null && Symbol.iterator in value) {\n return Array.from(value as Iterable<unknown>);\n }\n return [];\n}\n","import { defineComponent } from '../component';\n\n// A sum of money in large type, with thousands separators. Once typed, it shows the minor units, so\n// 1 reads 1.00. `value` and the value `change` carries are in `unit`. `change` carries null when\n// the field is empty.\nexport const AmountInput = defineComponent({\n name: 'AmountInput',\n props: {\n value: 'number',\n // The ISO 4217 code shown before the amount. Defaults to SLE.\n currency: 'string',\n // Digits after the decimal point. Defaults to the currency's own, such as 2 for SLE cents.\n minorUnits: 'number',\n // `minor` (the default) counts minor units, so 150 is SLE 1.50. `major` is the amount itself,\n // so 1 is SLE 1.00.\n unit: ['minor', 'major'],\n label: 'string',\n placeholder: 'string',\n hint: 'string',\n error: 'string',\n disabled: 'boolean',\n },\n events: ['change'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\nexport const Button = defineComponent({\n name: 'Button',\n props: {\n variant: ['primary', 'secondary'],\n disabled: 'boolean',\n // Shows a spinner and ignores taps, such as while a payment is sent.\n loading: 'boolean',\n },\n events: ['click'],\n children: 'text',\n});\n","export const SIZES = ['small', 'medium', 'large'] as const;\n\n// Space between or around components.\nexport const SPACES = ['none', 'small', 'medium', 'large'] as const;\n\n// Space inside a component's edges, for all sides or one at a time, in place of the component's\n// own. `start` and `end` follow the reading direction, so they swap in right-to-left languages.\nexport const PADDING_PROPS = {\n padding: SPACES,\n paddingTop: SPACES,\n paddingStart: SPACES,\n paddingEnd: SPACES,\n paddingBottom: SPACES,\n} as const;\n\n// The shape of a picture's or a video's box.\nexport const ASPECTS = ['1:1', '4:3', '3:2', '16:9', '3:4', '2:3', '9:16'] as const;\n\nexport const TONES = ['default', 'muted', 'info', 'success', 'warning', 'danger'] as const;\n\n// A text's colour. `onPrimary` reads on a `primary` background. A dot's own colours come from its theme.\nexport const TEXT_TONES = { words: [...TONES, 'onPrimary'], or: 'themeColor' } as const;\n\n// A box's fill: a colour of the theme, a tone as a soft tint, or one of the dot's own colours.\nexport const BACKGROUNDS = {\n words: ['background', 'surface', 'primary', 'muted', 'info', 'success', 'warning', 'danger'],\n or: 'themeColor',\n} as const;\n\n// A box's outline. `subtle` is the hairline cards have.\nexport const BORDERS = ['none', 'subtle', 'strong'] as const;\n\n// A box's corners, scaled by the theme's shape. `full` makes pills and circles.\nexport const RADII = ['none', 'small', 'medium', 'large', 'full'] as const;\n\n// A box's width or height in points, or `fill` for all the parent gives it.\nexport const LENGTH = { words: ['fill'], or: 'number' } as const;\n\n// How a box looks and how much room it takes: on View, and in part on Stack.\nexport const BOX_PROPS = {\n background: BACKGROUNDS,\n border: BORDERS,\n radius: RADII,\n width: LENGTH,\n height: LENGTH,\n minHeight: 'number',\n maxWidth: 'number',\n // The box's shape, which sets its height from its width.\n aspect: ASPECTS,\n} as const;\n\nexport const STATUS_TONES = ['default', 'info', 'success', 'warning', 'danger'] as const;\n\nexport const ICON_NAMES = [\n 'arrow-down',\n 'arrow-left',\n 'arrow-right',\n 'arrow-up',\n 'bank',\n 'bell',\n 'bolt',\n 'calendar',\n 'card',\n 'cart',\n 'cash',\n 'check',\n 'chevron-down',\n 'chevron-left',\n 'chevron-right',\n 'chevron-up',\n 'clock',\n 'close',\n 'copy',\n 'download',\n 'edit',\n 'error',\n 'external-link',\n 'eye',\n 'eye-off',\n 'file',\n 'gift',\n 'globe',\n 'grid',\n 'headphones',\n 'heart',\n 'help',\n 'history',\n 'home',\n 'image',\n 'info',\n 'link',\n 'list',\n 'location',\n 'lock',\n 'logout',\n 'mail',\n 'microphone',\n 'minus',\n 'mobile',\n 'more',\n 'music',\n 'phone',\n 'playlist',\n 'plus',\n 'qr-code',\n 'receipt',\n 'refresh',\n 'search',\n 'send',\n 'settings',\n 'share',\n 'star',\n 'success',\n 'ticket',\n 'trash',\n 'upload',\n 'user',\n 'users',\n 'video',\n 'wallet',\n 'warning',\n 'water',\n 'wifi',\n] as const;\n\nexport type IconName = (typeof ICON_NAMES)[number];\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS, SPACES } from './options';\n\n// Shows its children one at a time, as slides to swipe between. `change` carries the `index` of\n// the slide it moved to.\nexport const Carousel = defineComponent({\n name: 'Carousel',\n props: {\n // Moves to the next slide every `interval` milliseconds, pausing while touched.\n autoplay: 'boolean',\n interval: 'number',\n // After the last slide comes the first again.\n loop: 'boolean',\n indicator: ['dots', 'none'],\n // Space between slides, seen while one slides in.\n gap: SPACES,\n // `scale` shrinks a slide as it leaves the middle and grows the one coming in, as you swipe.\n effect: ['slide', 'scale'],\n // The slide to show. Changing it moves the carousel there.\n index: 'number',\n ...PADDING_PROPS,\n },\n events: ['change'],\n children: 'elements',\n});\n","import { defineComponent } from '../component';\nimport { ICON_NAMES } from './options';\n\n// A small rounded choice, such as a filter. `selected` fills it in.\nexport const Chip = defineComponent({\n name: 'Chip',\n props: { label: 'string', icon: ICON_NAMES, selected: 'boolean', disabled: 'boolean' },\n events: ['tap'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\n// A one-time code or PIN, one box per digit. `complete` comes after the `change` that fills the\n// last box.\nexport const CodeInput = defineComponent({\n name: 'CodeInput',\n props: {\n value: 'string',\n // Number of digits. Defaults to 6.\n length: 'number',\n label: 'string',\n hint: 'string',\n error: 'string',\n // Shows dots in place of the digits, as for a PIN.\n secure: 'boolean',\n disabled: 'boolean',\n },\n events: ['change', 'complete'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS, TONES } from './options';\n\n// A label and its value on one line, such as a line of a receipt. A long value wraps onto more\n// lines and stays at the end.\nexport const DetailRow = defineComponent({\n name: 'DetailRow',\n props: {\n label: 'string',\n value: 'string',\n // The value's tone and weight. The label is always muted.\n tone: TONES,\n weight: ['regular', 'medium', 'bold'],\n ...PADDING_PROPS,\n },\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\nexport const Divider = defineComponent({\n name: 'Divider',\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { ICON_NAMES, PADDING_PROPS } from './options';\n\n// Shown where there's nothing yet, such as an empty list. Its children, such as a button, show\n// under its text.\nexport const EmptyState = defineComponent({\n name: 'EmptyState',\n props: { icon: ICON_NAMES, title: 'string', text: 'string', ...PADDING_PROPS },\n children: 'elements',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS, SIZES, STATUS_TONES } from './options';\n\nexport const Spinner = defineComponent({\n name: 'Spinner',\n props: { size: SIZES },\n children: 'none',\n});\n\nexport const ProgressBar = defineComponent({\n name: 'ProgressBar',\n // From 0 to 100.\n props: { value: 'number' },\n children: 'none',\n});\n\n// A message in the flow of the page, such as a failed payment's reason.\nexport const Notice = defineComponent({\n name: 'Notice',\n props: { tone: STATUS_TONES, title: 'string', ...PADDING_PROPS },\n children: 'text',\n});\n\nexport const Badge = defineComponent({\n name: 'Badge',\n props: { tone: STATUS_TONES },\n children: 'text',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS } from './options';\n\n// Holds the page's main action and stays at the bottom while the page scrolls. Put it last in the\n// page's root View.\nexport const Footer = defineComponent({\n name: 'Footer',\n props: PADDING_PROPS,\n children: 'elements',\n});\n","import { defineComponent } from '../component';\nimport { ICON_NAMES, PADDING_PROPS, SPACES } from './options';\n\n// Lays out its children in equal columns. `columns` defaults to 4.\nexport const Grid = defineComponent({\n name: 'Grid',\n props: { columns: 'number', gap: SPACES, ...PADDING_PROPS },\n children: 'elements',\n});\n\n// An icon or picture over a short label, such as a service on a home screen.\nexport const GridItem = defineComponent({\n name: 'GridItem',\n props: {\n label: 'string',\n icon: ICON_NAMES,\n image: 'string',\n // A short note on the item's corner, such as \"New\" or a count.\n badge: 'string',\n },\n events: ['tap'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { ICON_NAMES, SIZES, TONES } from './options';\n\nexport const Icon = defineComponent({\n name: 'Icon',\n props: { name: ICON_NAMES, size: SIZES, tone: TONES },\n children: 'none',\n inline: true,\n});\n","import { defineComponent } from '../component';\nimport { ASPECTS } from './options';\n\nexport const Image = defineComponent({\n name: 'Image',\n props: {\n src: 'string',\n alt: 'string',\n width: 'number',\n height: 'number',\n // `cover` fills the box and crops. `contain` shows the whole picture.\n fit: ['cover', 'contain'],\n shape: ['rounded', 'square', 'circle'],\n // The box's shape. Without a width, the picture fills the width it's given, such as the\n // screen's, and its height follows.\n aspect: ASPECTS,\n },\n events: ['load', 'error'],\n children: 'none',\n overrides: [{ prop: 'aspect', ignores: 'height', because: 'the aspect sets the height' }],\n});\n","import { defineComponent } from '../component';\n\nexport const Input = defineComponent({\n name: 'Input',\n props: {\n value: 'string',\n placeholder: 'string',\n label: 'string',\n // Help shown under the field, which `error` replaces.\n hint: 'string',\n error: 'string',\n // Text shown inside the field, before and after what the person types, such as \"Le\".\n prefix: 'string',\n suffix: 'string',\n type: ['text', 'number', 'email', 'phone', 'password'],\n maxLength: 'number',\n disabled: 'boolean',\n },\n events: ['change', 'submit'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { TONES } from './options';\n\n// Text to tap, inside a Text or on its own. With an https `href`, Dash opens it in the device's\n// browser. Without one, it raises `tap` for the page.\nexport const Link = defineComponent({\n name: 'Link',\n props: {\n href: 'string',\n // The primary color unless a tone sets another.\n tone: TONES,\n },\n events: ['tap'],\n children: 'text',\n inline: true,\n});\n","import { defineComponent } from '../component';\nimport { ICON_NAMES, PADDING_PROPS } from './options';\n\n// `endReached` comes when the last row scrolls into view, such as to load more rows. It comes again\n// once a new last row does.\nexport const List = defineComponent({\n name: 'List',\n props: { size: ['sm', 'md'], ...PADDING_PROPS },\n events: ['endReached'],\n children: 'elements',\n});\n\n// Its children show at its end, in place of `value`. A row with `onTap` shows a chevron.\nexport const ListItem = defineComponent({\n name: 'ListItem',\n props: {\n title: 'string',\n subtitle: 'string',\n value: 'string',\n icon: ICON_NAMES,\n image: 'string',\n ...PADDING_PROPS,\n },\n events: ['tap'],\n children: 'elements',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS, STATUS_TONES } from './options';\n\n// A panel that slides up over the page while `open` is true, such as an action sheet of buttons.\n// Tapping outside it raises `close`. The page closes it by setting `open` back to false.\nexport const Sheet = defineComponent({\n name: 'Sheet',\n props: { open: 'boolean', title: 'string', showCloseIcon: 'boolean', ...PADDING_PROPS },\n events: ['close'],\n children: 'elements',\n});\n\n// Shows `message` briefly over the page, then raises `hide`. Clear the message there so the same\n// one can show again.\nexport const Toast = defineComponent({\n name: 'Toast',\n props: {\n message: 'string',\n tone: STATUS_TONES,\n // In milliseconds.\n duration: 'number',\n },\n events: ['hide'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\n// Shows `value` as a QR code. It's dark on light in every theme, so any camera can read it.\nexport const QRCode = defineComponent({\n name: 'QRCode',\n props: {\n value: 'string',\n // In pixels. Defaults to 200.\n size: 'number',\n // What screen readers say in place of the code.\n label: 'string',\n },\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\n// A field that opens a sheet of its `Option`s. `value` is the chosen option's value.\nexport const Select = defineComponent({\n name: 'Select',\n props: {\n value: 'string',\n label: 'string',\n placeholder: 'string',\n hint: 'string',\n error: 'string',\n disabled: 'boolean',\n },\n events: ['change'],\n children: 'elements',\n});\n\nexport const Option = defineComponent({\n name: 'Option',\n props: { value: 'string', label: 'string' },\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS, SPACES } from './options';\n\n// A row of children that scrolls sideways, such as a shelf of albums. Each child keeps its own\n// width. A View child is as wide as its widest fixed-width child, such as an Image with a width.\n// Once a scroll stops, `change` carries the `index` of the child at the start.\nexport const Scroll = defineComponent({\n name: 'Scroll',\n props: {\n gap: SPACES,\n // Where children come to rest after a swipe.\n snap: ['none', 'start', 'center'],\n // The child to scroll to. Changing it scrolls there.\n index: 'number',\n // paddingStart and paddingEnd are the space before the first child and after the last.\n ...PADDING_PROPS,\n },\n events: ['change'],\n children: 'elements',\n});\n","import { defineComponent } from '../component';\n\nexport const Skeleton = defineComponent({\n name: 'Skeleton',\n props: {\n shape: ['text', 'circle', 'box'],\n // Lines of text, for `text`.\n lines: 'number',\n // In pixels, for `circle` and `box`.\n height: 'number',\n },\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS } from './options';\n\n// A row of `Tab`s with one chosen. `value` is the chosen tab's value. The page shows the content\n// for it, such as with an <If> for each tab.\nexport const Tabs = defineComponent({\n name: 'Tabs',\n props: {\n value: 'string',\n // `underline` marks the chosen tab with a line. `segmented` fills it in, in a rounded track.\n variant: ['underline', 'segmented'],\n ...PADDING_PROPS,\n },\n events: ['change'],\n children: 'elements',\n});\n\nexport const Tab = defineComponent({\n name: 'Tab',\n props: {\n value: 'string',\n label: 'string',\n // A count shown next to the label, such as unread items.\n badge: 'number',\n },\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS, TEXT_TONES } from './options';\n\nexport const Text = defineComponent({\n name: 'Text',\n props: {\n // `display` is for large amounts, such as a balance.\n variant: ['display', 'title', 'subtitle', 'body', 'caption'],\n tone: TEXT_TONES,\n weight: ['regular', 'medium', 'bold'],\n align: ['start', 'center', 'end'],\n // Cuts the text off with an ellipsis after this many lines.\n maxLines: 'number',\n // `strikethrough` shows a price that no longer applies.\n decoration: ['none', 'underline', 'strikethrough'],\n // Gives every digit the same width, so amounts line up in a list.\n numeric: 'boolean',\n ...PADDING_PROPS,\n },\n children: 'text',\n inline: true,\n});\n","import { defineComponent } from '../component';\n\nexport const TextArea = defineComponent({\n name: 'TextArea',\n props: {\n value: 'string',\n placeholder: 'string',\n label: 'string',\n hint: 'string',\n error: 'string',\n // The lines of text it shows before scrolling.\n rows: 'number',\n maxLength: 'number',\n disabled: 'boolean',\n },\n events: ['change'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\nexport const Switch = defineComponent({\n name: 'Switch',\n props: { checked: 'boolean', label: 'string', disabled: 'boolean' },\n events: ['change'],\n children: 'none',\n});\n\nexport const Checkbox = defineComponent({\n name: 'Checkbox',\n props: { checked: 'boolean', label: 'string', disabled: 'boolean' },\n events: ['change'],\n children: 'none',\n});\n\n// A choice of one of its `Radio`s. `value` is the chosen radio's value.\nexport const RadioGroup = defineComponent({\n name: 'RadioGroup',\n props: { value: 'string', label: 'string', disabled: 'boolean' },\n events: ['change'],\n children: 'elements',\n});\n\nexport const Radio = defineComponent({\n name: 'Radio',\n props: { value: 'string', label: 'string', disabled: 'boolean' },\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { BOX_PROPS, PADDING_PROPS, SPACES } from './options';\n\nexport const View = defineComponent({\n name: 'View',\n props: {\n gap: SPACES,\n direction: ['column', 'row'],\n // Across `direction`.\n align: ['stretch', 'start', 'center', 'end'],\n // Along `direction`. `between` puts the first and last child at the ends.\n justify: ['start', 'center', 'end', 'between'],\n // Lets children that don't fit flow onto another line.\n wrap: 'boolean',\n // Fills the space the parent has left, along the parent's direction.\n grow: 'boolean',\n ...PADDING_PROPS,\n // `card` is a surface with a hairline and rounded corners. The box props change any of those.\n variant: ['plain', 'card'],\n ...BOX_PROPS,\n },\n events: ['tap'],\n children: 'elements',\n overrides: [{ prop: 'aspect', ignores: 'height', because: 'the aspect sets the height' }],\n});\n\n// Lays its children on top of each other, the first at the bottom, such as text over a picture or a\n// badge on a corner. Each child fills the stack, and places its own content, such as with `justify`.\nexport const Stack = defineComponent({\n name: 'Stack',\n props: {\n radius: BOX_PROPS.radius,\n width: BOX_PROPS.width,\n height: BOX_PROPS.height,\n aspect: BOX_PROPS.aspect,\n },\n children: 'elements',\n overrides: [{ prop: 'aspect', ignores: 'height', because: 'the aspect sets the height' }],\n});\n","import { componentRegistry } from '../component';\nimport { AmountInput } from './amount-input';\nimport { Button } from './button';\nimport { Carousel } from './carousel';\nimport { Chip } from './chip';\nimport { CodeInput } from './code-input';\nimport { DetailRow } from './detail-row';\nimport { Divider } from './divider';\nimport { EmptyState } from './empty-state';\nimport { Badge, Notice, ProgressBar, Spinner } from './feedback';\nimport { Footer } from './footer';\nimport { Grid, GridItem } from './grid';\nimport { Icon } from './icon';\nimport { Image } from './image';\nimport { Input } from './input';\nimport { Link } from './link';\nimport { List, ListItem } from './list';\nimport { Sheet, Toast } from './overlays';\nimport { QRCode } from './qr-code';\nimport { Option, Select } from './select';\nimport { Scroll } from './scroll';\nimport { Skeleton } from './skeleton';\nimport { Tab, Tabs } from './tabs';\nimport { Text } from './text';\nimport { TextArea } from './text-area';\nimport { Checkbox, Radio, RadioGroup, Switch } from './toggles';\nimport { Stack, View } from './view';\n\nexport {\n AmountInput,\n Badge,\n Button,\n Carousel,\n Checkbox,\n Chip,\n CodeInput,\n DetailRow,\n Divider,\n EmptyState,\n Footer,\n Grid,\n GridItem,\n Icon,\n Image,\n Input,\n Link,\n List,\n ListItem,\n Notice,\n Option,\n ProgressBar,\n QRCode,\n Radio,\n RadioGroup,\n Scroll,\n Select,\n Sheet,\n Skeleton,\n Spinner,\n Stack,\n Switch,\n Tab,\n Tabs,\n Text,\n TextArea,\n Toast,\n View,\n};\nexport {\n ASPECTS,\n BACKGROUNDS,\n BORDERS,\n BOX_PROPS,\n ICON_NAMES,\n LENGTH,\n PADDING_PROPS,\n RADII,\n SIZES,\n SPACES,\n STATUS_TONES,\n TEXT_TONES,\n TONES,\n} from './options';\nexport type { IconName } from './options';\n\nexport const builtinComponents = {\n AmountInput,\n Badge,\n Button,\n Carousel,\n Checkbox,\n Chip,\n CodeInput,\n DetailRow,\n Divider,\n EmptyState,\n Footer,\n Grid,\n GridItem,\n Icon,\n Image,\n Input,\n Link,\n List,\n ListItem,\n Notice,\n Option,\n ProgressBar,\n QRCode,\n Radio,\n RadioGroup,\n Scroll,\n Select,\n Sheet,\n Skeleton,\n Spinner,\n Stack,\n Switch,\n Tab,\n Tabs,\n Text,\n TextArea,\n Toast,\n View,\n} as const;\n\nexport type BuiltinComponents = typeof builtinComponents;\n\nexport const builtinRegistry = componentRegistry(Object.values(builtinComponents));\n","export interface SourceLocation {\n readonly line: number;\n readonly column: number;\n readonly offset: number;\n}\n\n// Finds lines by binary search over their start offsets, computed once per source.\nexport function createLocator(source: string): (offset: number) => SourceLocation {\n const lineStarts = [0];\n for (let index = 0; index < source.length; index++) {\n if (source[index] === '\\n') {\n lineStarts.push(index + 1);\n }\n }\n return (offset) => {\n let low = 0;\n let high = lineStarts.length - 1;\n while (low < high) {\n const middle = Math.floor((low + high + 1) / 2);\n if (lineStarts[middle]! <= offset) {\n low = middle;\n } else {\n high = middle - 1;\n }\n }\n return { line: low + 1, column: offset - lineStarts[low]! + 1, offset };\n };\n}\n\nexport function locationAt(source: string, offset: number): SourceLocation {\n return createLocator(source)(offset);\n}\n\nexport function locatedMessage(message: string, file?: string, location?: SourceLocation): string {\n const where = [file, location?.line, location?.column]\n .filter((part) => part !== undefined)\n .join(':');\n return where ? `${where}: ${message}` : message;\n}\n","import type { SourceLocation } from './location';\nimport { locatedMessage } from './location';\n\n// A problem at a place in a source file. The message starts with `file:line:column:`\nexport class SourceError extends Error {\n readonly reason: string;\n readonly file: string | undefined;\n readonly loc: SourceLocation | undefined;\n\n constructor(reason: string, file?: string, location?: SourceLocation) {\n super(locatedMessage(reason, file, location));\n this.reason = reason;\n this.file = file;\n this.loc = location;\n }\n}\n","type Listener = (...args: never[]) => void;\n\nexport class EventEmitter<Events extends { [K in keyof Events]: Listener }> {\n readonly #listeners = new Map<keyof Events, Set<Listener>>();\n\n on<K extends keyof Events>(name: K, listener: Events[K]): () => void {\n const listeners = this.#listeners.get(name) ?? new Set();\n this.#listeners.set(name, listeners);\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n\n emit<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): void {\n const listeners = this.#listeners.get(name) as Set<Events[K]> | undefined;\n listeners?.forEach((listener) => listener(...args));\n }\n}\n","// `data` holds the `data-*` attributes of the component that raised the event: `data-account-id`\n// arrives as `data.accountId`.\nexport interface DotEvent<Detail = unknown, Data = Readonly<Record<string, unknown>>> {\n readonly type: string;\n readonly detail: Detail;\n readonly data: Data;\n}\n\nexport function createEvent<Detail = Record<string, never>>(\n type: string,\n detail: Detail = {} as Detail,\n data: Readonly<Record<string, unknown>> = {},\n): DotEvent<Detail> {\n return { type, detail, data };\n}\n","import type { Transport } from '../protocol/transport';\n\ndeclare global {\n // Installed by the host (the iOS or Android app, or the browser simulator) before Dot starts.\n // noinspection ES6ConvertVarToLetConst\n var __hostTransport: Transport | undefined;\n}\n\n// The transport the host installed. Messages crossing it must be JSON-serializable.\nexport function hostTransport(): Transport {\n const transport = globalThis.__hostTransport;\n if (!transport) {\n throw new Error(\n 'No Dot host found: `globalThis.__hostTransport` is not set. ' +\n 'Run the dot in the Dash app, or in the simulator with `dotctl dev`.',\n );\n }\n return transport;\n}\n","import type { ColorScheme } from '../theme/theme';\n\n// `background` while the person is away from Dash, such as in another app or with the phone locked.\nexport type AppState = 'active' | 'background';\n\nexport interface SystemContext {\n readonly scheme: ColorScheme;\n readonly appState: AppState;\n}\n\nexport const DEFAULT_SYSTEM_CONTEXT: SystemContext = {\n scheme: 'light',\n appState: 'active',\n};\n","export type HostErrorCode =\n 'unsupported' | 'denied' | 'cancelled' | 'timeout' | 'invalid' | 'failed';\n\nexport class HostError extends Error {\n override readonly name = 'HostError';\n readonly code: HostErrorCode;\n\n constructor(code: HostErrorCode, message: string) {\n super(message);\n this.code = code;\n }\n}\n\nexport interface HostCallOptions {\n timeout?: number | undefined;\n}\n\nexport interface HostRequest<T> extends Promise<T> {\n // Stops waiting. The promise rejects with `cancelled` and the host stops the work.\n cancel(): void;\n}\n\nexport type HostCaller = (\n method: string,\n params: unknown,\n options: HostCallOptions,\n) => HostRequest<unknown>;\n\nlet connectedCaller: HostCaller | null = null;\n\n// The service connects itself when it starts\nexport function connectHost(caller: HostCaller | null): void {\n connectedCaller = caller;\n}\n\nexport function callHost<Result>(\n method: string,\n params: unknown,\n options: HostCallOptions = {},\n): HostRequest<Result> {\n if (!connectedCaller) {\n const error = new HostError(\n 'unsupported',\n `Can't run \"${method}\" here: call Dash from the dot's logic`,\n );\n return createHostRequest(Promise.reject(error));\n }\n return connectedCaller(method, params, options) as HostRequest<Result>;\n}\n\nexport function createHostRequest<Result>(\n promise: Promise<Result>,\n cancel: () => void = () => {},\n): HostRequest<Result> {\n const request = promise as HostRequest<Result>;\n request.cancel = cancel;\n return request;\n}\n","// Declared in dot.json with a reason Dash shows the person. A host method that needs one runs only\n// once it's allowed. `account` gives the person's Dash username (email or phone) and full name.\n// `camera` lets the person take a photo or scan a code for the dot, `photoLibrary` choose one of\n// their photos, and `files` choose one of their files.\nexport const PERMISSIONS = ['account', 'camera', 'photoLibrary', 'files'] as const;\n\nexport type DotPermission = (typeof PERMISSIONS)[number];\n\nexport function isPermission(value: string): value is DotPermission {\n return (PERMISSIONS as readonly string[]).includes(value);\n}\n","export const DOT_FILE_PATH_MAX_LENGTH = 512;\nconst MAX_NAME_LENGTH = 255;\n\n// What's wrong with `path` as a path inside a dot's storage, or null if nothing is.\nexport function dotFilePathProblem(path: string, { allowRoot = false } = {}): string | null {\n if (path === '') {\n return allowRoot ? null : 'A path is needed, such as \"receipts/42.pdf\"';\n }\n if (path.length > DOT_FILE_PATH_MAX_LENGTH) {\n return `\"${path.slice(0, 40)}…\" is longer than ${DOT_FILE_PATH_MAX_LENGTH} characters`;\n }\n if (path.startsWith('/')) {\n return `\"${path}\" starts with \"/\". Start paths without it, such as \"receipts/42.pdf\"`;\n }\n if ([...path].some((char) => char === '\\\\' || char.charCodeAt(0) < 0x20)) {\n return `\"${path}\" has a backslash or another character paths can't use`;\n }\n for (const name of path.split('/')) {\n if (name === '' || name === '.' || name === '..') {\n return `\"${path}\" has an empty, \".\" or \"..\" part. Name each folder, such as \"receipts/42.pdf\"`;\n }\n if (name.length > MAX_NAME_LENGTH) {\n return `\"${path}\" has a name longer than ${MAX_NAME_LENGTH} characters`;\n }\n }\n return null;\n}\n","// An exact host name, or \"*.example.com\" for any subdomain of example.com, but not example.com.\nconst LABEL = '[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?';\nexport const NETWORK_HOST_PATTERN = new RegExp(\n `^(?:\\\\*\\\\.${LABEL}(?:\\\\.${LABEL})+|${LABEL}(?:\\\\.${LABEL})*)$`,\n);\nexport const NETWORK_HOST_MAX_LENGTH = 253;\n\nexport function isNetworkHost(value: string): boolean {\n return value.length <= NETWORK_HOST_MAX_LENGTH && NETWORK_HOST_PATTERN.test(value);\n}\n\nexport function allowsHost(hosts: readonly string[], host: string): boolean {\n const name = host.toLowerCase().replace(/\\.$/, '');\n return hosts.some((pattern) =>\n pattern.startsWith('*.') ? name.endsWith(pattern.slice(1)) : name === pattern,\n );\n}\n","// A semantic version, as https://semver.org defines it: `1.4.0`, `2.0.0-beta.1`, `1.0.0+build.7`.\nexport const SEMVER_PATTERN =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\ninterface SemanticVersion {\n readonly major: number;\n readonly minor: number;\n readonly patch: number;\n // `[\"beta\", \"1\"]` for `1.0.0-beta.1`; empty for a release.\n readonly prerelease: readonly string[];\n}\n\nexport function isSemanticVersion(value: unknown): value is string {\n return typeof value === 'string' && SEMVER_PATTERN.test(value);\n}\n\nexport function majorVersion(version: string): number {\n return parseVersion(version).major;\n}\n\nexport function isVersionAtLeast(version: string, minimum: string): boolean {\n return compareVersions(version, minimum) >= 0;\n}\n\n// Whether `version` is a newer major release than `current`. A newer minor or patch doesn't count.\nexport function isNewerMajor(version: string, current: string): boolean {\n return parseVersion(version).major > parseVersion(current).major;\n}\n\n// Negative when `left` comes before `right`, positive when after, and 0 for the same release.\n// Build metadata, the part after `+`, does not count.\nexport function compareVersions(left: string, right: string): number {\n const leftVersion = parseVersion(left);\n const rightVersion = parseVersion(right);\n const differences = [\n leftVersion.major - rightVersion.major,\n leftVersion.minor - rightVersion.minor,\n leftVersion.patch - rightVersion.patch,\n ];\n for (const difference of differences) {\n if (difference !== 0) {\n return difference;\n }\n }\n return comparePrereleases(leftVersion.prerelease, rightVersion.prerelease);\n}\n\nfunction parseVersion(version: string): SemanticVersion {\n const match = SEMVER_PATTERN.exec(version);\n if (!match) {\n throw new Error(`\"${version}\" is not a semantic version`);\n }\n const [, major, minor, patch, prerelease] = match;\n return {\n major: Number(major),\n minor: Number(minor),\n patch: Number(patch),\n prerelease: prerelease === undefined ? [] : prerelease.split('.'),\n };\n}\n\n// A release comes after its pre-releases (`1.0.0-beta` < `1.0.0`). Between pre-releases, the first\n// identifier that differs decides; if all match, the one with fewer identifiers comes first.\nfunction comparePrereleases(left: readonly string[], right: readonly string[]): number {\n if (left.length === 0 || right.length === 0) {\n return right.length - left.length;\n }\n const shared = Math.min(left.length, right.length);\n for (let index = 0; index < shared; index++) {\n const order = compareIdentifiers(left[index]!, right[index]!);\n if (order !== 0) {\n return order;\n }\n }\n return left.length - right.length;\n}\n\n// Numbers compare as numbers and come before words, which compare as text.\nfunction compareIdentifiers(left: string, right: string): number {\n const leftIsNumber = /^\\d+$/.test(left);\n const rightIsNumber = /^\\d+$/.test(right);\n if (leftIsNumber && rightIsNumber) {\n return Number(left) - Number(right);\n }\n if (leftIsNumber) {\n return -1;\n }\n if (rightIsNumber) {\n return 1;\n }\n if (left < right) {\n return -1;\n }\n if (left > right) {\n return 1;\n }\n return 0;\n}\n","import { compareVersions, isVersionAtLeast, majorVersion } from '../version/semantic-version';\n\n// The host ships React, not each dot. An import map in the dot's index.html points React's names at\n// the host's copies under `/__dot/react/<major>/`.\nexport const REACT_HOST_PATH = '/__dot/react/';\n\n// Each name a dot imports React by, and the host's file for it.\nexport const REACT_HOST_MODULES = {\n react: 'react.js',\n 'react/jsx-runtime': 'react-jsx-runtime.js',\n 'react-dom': 'react-dom.js',\n 'react-dom/client': 'react-dom-client.js',\n} as const;\n\n// By major version only. The host serves its newest React of that major, so it can update React\n// without dots being rebuilt.\nexport function reactHostUrl(dotReactVersion: string, file: string): string {\n return `${REACT_HOST_PATH}${majorVersion(dotReactVersion)}/${file}`;\n}\n\n// Releases within a major only add to React, so a dot runs on its own major at or above the version\n// it was built with. Another major may change or remove what the dot relies on.\nexport function isReactCompatible(hostVersion: string, dotVersion: string): boolean {\n return (\n majorVersion(hostVersion) === majorVersion(dotVersion) &&\n isVersionAtLeast(hostVersion, dotVersion)\n );\n}\n\nexport function newestReactOfMajor(versions: readonly string[], major: number): string | undefined {\n const matching = versions.filter((version) => majorVersion(version) === major);\n return matching.sort(compareVersions).at(-1);\n}\n","// Carries messages across a worker, a message port or a native app boundary.\nexport interface Transport {\n post(message: unknown): void;\n // Returns a function that removes the listener.\n listen(listener: (message: unknown) => void): () => void;\n}\n\n// Anything that acts like a MessagePort or a Worker.\nexport interface TransportAdapter {\n postMessage(message: unknown): void;\n addEventListener(type: 'message', listener: (event: { data: unknown }) => void): void;\n removeEventListener(type: 'message', listener: (event: { data: unknown }) => void): void;\n}\n\nexport function createAdaptorTransport(adapter: TransportAdapter): Transport {\n return {\n post: (message) => adapter.postMessage(message),\n listen(listener) {\n const onMessage = (event: { data: unknown }) => listener(event.data);\n adapter.addEventListener('message', onMessage);\n return () => adapter.removeEventListener('message', onMessage);\n },\n };\n}\n\n// Two transports connected to each other in the same thread, for tests and single-thread setups.\nexport function createTransportPair(): [Transport, Transport] {\n type Listeners = Set<(message: unknown) => void>;\n const firstListeners: Listeners = new Set();\n const secondListeners: Listeners = new Set();\n const createSide = (ownListeners: Listeners, otherListeners: Listeners): Transport => ({\n post: (message) => {\n // Copy the message, as crossing to another thread would\n const copy: unknown = JSON.parse(JSON.stringify(message));\n otherListeners.forEach((listener) => listener(copy));\n },\n listen(listener) {\n ownListeners.add(listener);\n return () => ownListeners.delete(listener);\n },\n });\n return [createSide(firstListeners, secondListeners), createSide(secondListeners, firstListeners)];\n}\n","import type { PageLaunchOptions } from './navigation';\n\nexport interface PageHooks {\n onLoad(options: PageLaunchOptions): void | Promise<void>;\n onShow(): void | Promise<void>;\n onHide(): void | Promise<void>;\n onUnload(): void | Promise<void>;\n}\n\nexport interface DotHooks {\n onLaunch(): void | Promise<void>;\n onError(error: Error): void;\n}\n\n// A record rather than a list, so adding a hook to PageHooks without listing it is a type error.\nconst pageHooks: Record<keyof PageHooks, true> = {\n onLoad: true,\n onShow: true,\n onHide: true,\n onUnload: true,\n};\n\nexport const PAGE_HOOKS = Object.keys(pageHooks) as readonly (keyof PageHooks)[];\n","export const MAX_STACK_DEPTH = 16;\n\nconst PAGE_ID = /^[A-Za-z0-9_-]+(?:\\/[A-Za-z0-9_-]+)*$/;\n\nexport function isPageId(value: string): boolean {\n return PAGE_ID.test(value);\n}\n\nexport type PageLaunchOptions = Readonly<Record<string, string>>;\n\nexport type Navigation =\n | {\n readonly action: 'push' | 'replace' | 'reset';\n readonly page: string;\n readonly options: PageLaunchOptions;\n }\n | { readonly action: 'back'; readonly delta: number };\n\nexport interface StackEntry {\n readonly instanceId: number;\n readonly page: string;\n readonly options: PageLaunchOptions;\n}\n\nexport class NavigationStack {\n readonly limit: number;\n #pages: StackEntry[] = [];\n #nextInstanceId = 1;\n\n constructor(limit = MAX_STACK_DEPTH) {\n this.limit = limit;\n }\n\n get pages(): readonly StackEntry[] {\n return this.#pages;\n }\n\n get top(): StackEntry | undefined {\n return this.#pages.at(-1);\n }\n\n // False for a push onto a full stack, or for going back from the first page, which the host\n // handles.\n apply(navigation: Navigation): boolean {\n switch (navigation.action) {\n case 'push':\n if (this.#pages.length >= this.limit) {\n return false;\n }\n break;\n case 'replace':\n this.#pages.pop();\n break;\n case 'reset':\n this.#pages = [];\n break;\n case 'back': {\n const count = Math.min(navigation.delta, this.#pages.length - 1);\n if (count < 1) {\n return false;\n }\n this.#pages = this.#pages.slice(0, -count);\n return true;\n }\n }\n const { page, options } = navigation;\n this.#pages = [...this.#pages, { instanceId: this.#nextInstanceId++, page, options }];\n return true;\n }\n}\n","export function applyChanges<T>(state: T, changes: Partial<T>): T {\n const next = { ...state } as Record<string, unknown>;\n for (const [key, value] of Object.entries(changes)) {\n if (value !== undefined) {\n next[key] = value;\n }\n }\n return next as T;\n}\n","// Set in defineDot, definePage or while a page runs. Dash restores its own bars when the page\n// closes, and its own value for any option set to undefined.\nexport interface NavigationBarOptions {\n // Shown in place of the dot's name.\n title?: string | undefined;\n hidden?: boolean | undefined;\n // As #RRGGBB.\n backgroundColor?: string | undefined;\n textColor?: string | undefined;\n}\n\nexport interface TabBarOptions {\n // Hides Dash's own tabs at the bottom of the screen.\n hidden?: boolean | undefined;\n}\n\n// The `configs` of defineDot and definePage.\nexport interface PageConfigs {\n navigationBar?: NavigationBarOptions | undefined;\n tabBar?: TabBarOptions | undefined;\n}\n\nexport interface PageBars {\n navigationBar: NavigationBarOptions;\n tabBar: TabBarOptions;\n}\n\nconst HEX_COLOR = /^#[0-9a-fA-F]{6}$/;\n\n// Throws when an option has the wrong type, or a color isn't #RRGGBB.\nexport function checkNavigationBar(options: NavigationBarOptions): void {\n const { title, hidden, backgroundColor, textColor } = options;\n if (title !== undefined && typeof title !== 'string') {\n throw new TypeError(\"The navigation bar's title must be text\");\n }\n if (hidden !== undefined && typeof hidden !== 'boolean') {\n throw new TypeError(\"The navigation bar's `hidden` must be true or false\");\n }\n for (const [name, color] of Object.entries({ backgroundColor, textColor })) {\n if (color !== undefined && (typeof color !== 'string' || !HEX_COLOR.test(color))) {\n throw new TypeError(`The navigation bar's ${name} must be a color such as \"#1A73E8\"`);\n }\n }\n}\n\nexport function checkTabBar(options: TabBarOptions): void {\n if (options.hidden !== undefined && typeof options.hidden !== 'boolean') {\n throw new TypeError(\"The tab bar's `hidden` must be true or false\");\n }\n}\n\nexport function checkConfigs(configs: PageConfigs): void {\n checkNavigationBar(configs.navigationBar ?? {});\n checkTabBar(configs.tabBar ?? {});\n}\n\n// Later configs override earlier ones, option by option.\nexport function mergeConfigs(...configs: (PageConfigs | undefined)[]): PageBars {\n const bars: PageBars = { navigationBar: {}, tabBar: {} };\n for (const config of configs) {\n bars.navigationBar = { ...bars.navigationBar, ...config?.navigationBar };\n bars.tabBar = { ...bars.tabBar, ...config?.tabBar };\n }\n return bars;\n}\n","import type { Transport } from './protocol/transport';\nimport type { Envelope, MessageMap, MessageType } from './protocol/core';\n\nexport type MessageHandler<Payload> = (payload: Payload) => void;\n\nexport class MessageChannel<Outgoing extends MessageMap, Incoming extends MessageMap> {\n readonly #transport: Transport;\n readonly #handlers = new Map<string, MessageHandler<never>>();\n\n constructor(transport: Transport) {\n this.#transport = transport;\n }\n\n send<T extends MessageType<Outgoing>>(type: T, payload: Outgoing[T]): void {\n this.#transport.post({ type, payload } satisfies Envelope);\n }\n\n handle<T extends MessageType<Incoming>>(\n type: T,\n handler: MessageHandler<Incoming[T]>,\n ): MessageHandler<Incoming[T]> | undefined {\n const previous = this.#handlers.get(type) as MessageHandler<Incoming[T]> | undefined;\n this.#handlers.set(type, handler);\n return previous;\n }\n\n listen(onError: (error: unknown, message: Envelope) => void): () => void {\n return this.#transport.listen((rawMessage) => {\n const message = rawMessage as Envelope;\n const handler = this.#handlers.get(message.type) as MessageHandler<unknown> | undefined;\n if (!handler) {\n onError(new Error(`No handler for message \"${message.type}\"`), message);\n return;\n }\n try {\n handler(message.payload);\n } catch (error) {\n onError(error, message);\n }\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/view/component.ts","../src/view/values.ts","../src/view/components/amount-input.ts","../src/view/components/button.ts","../src/view/components/options.ts","../src/view/components/carousel.ts","../src/view/components/chip.ts","../src/view/components/code-input.ts","../src/view/components/detail-row.ts","../src/view/components/divider.ts","../src/view/components/empty-state.ts","../src/view/components/feedback.ts","../src/view/components/footer.ts","../src/view/components/grid.ts","../src/view/components/icon.ts","../src/view/components/image.ts","../src/view/components/slider.ts","../src/view/components/prose.ts","../src/view/components/input.ts","../src/view/components/link.ts","../src/view/components/list.ts","../src/view/components/overlays.ts","../src/view/components/qr-code.ts","../src/view/components/select.ts","../src/view/components/scroll.ts","../src/view/components/skeleton.ts","../src/view/components/tabs.ts","../src/view/components/text.ts","../src/view/components/text-area.ts","../src/view/components/toggles.ts","../src/view/components/view.ts","../src/view/components/index.ts","../src/source/location.ts","../src/source/error.ts","../src/event/emitter.ts","../src/event/core.ts","../src/host/host.ts","../src/host/context.ts","../src/host/calls.ts","../src/host/permissions.ts","../src/host/files.ts","../src/host/network.ts","../src/version/semantic-version.ts","../src/host/react.ts","../src/protocol/transport.ts","../src/page/lifecycle.ts","../src/page/navigation.ts","../src/page/state.ts","../src/page/bars.ts","../src/messageChannel.ts"],"sourcesContent":["import type { DotEvent } from '../event/core';\n\nexport interface PropTypes {\n string: string;\n number: number;\n boolean: boolean;\n any: unknown;\n}\n\n// One of `words`, or else a number, such as a width of 120 or \"fill\", or a colour the dot named in\n// its theme, such as \"surface\" or \"gold\".\nexport interface WordsOr {\n readonly words: readonly string[];\n readonly or: 'number' | 'themeColor';\n}\n\nexport type PropType = keyof PropTypes | readonly string[] | WordsOr;\n\nexport type PropValue<T extends PropType> = T extends readonly string[]\n ? T[number]\n : T extends WordsOr\n ? T['words'][number] | (T['or'] extends 'number' ? number : string)\n : T extends keyof PropTypes\n ? PropTypes[T]\n : never;\n\nexport function isWordsOr(type: PropType): type is WordsOr {\n return typeof type === 'object' && !Array.isArray(type);\n}\n\n// What `type` takes besides its words, for messages about it.\nexport function otherThanWords(type: WordsOr): string {\n return type.or === 'number' ? 'a number' : \"a colour from the theme's custom colours\";\n}\n\n// `text` holds text and inline components such as `Text`. `elements` holds components, and any\n// loose text in it is wrapped in an inline one.\nexport type ChildrenType = 'none' | 'text' | 'elements';\n\n// A component apart from any renderer. The compiler checks markup against it, and each renderer\n// maps it to its own elements.\nexport interface ComponentManifest<\n Name extends string = string,\n Props extends Record<string, PropType> = Record<string, PropType>,\n Events extends string = string,\n Children extends ChildrenType = ChildrenType,\n> {\n readonly name: Name;\n readonly props: Props;\n // Event names. `click` is written `onClick` in markup and arrives as the `onClick` prop.\n readonly events: readonly Events[];\n readonly children: Children;\n readonly inline?: boolean;\n // Props that make another prop pointless. The compiler warns when markup sets both.\n readonly overrides?: readonly PropOverride[];\n}\n\nexport interface PropOverride {\n prop: string;\n ignores: string;\n because: string;\n}\n\nexport function defineComponent<\n const Name extends string,\n const Props extends Record<string, PropType> = Record<never, PropType>,\n const Events extends string = never,\n const Children extends ChildrenType = ChildrenType,\n>(manifest: {\n name: Name;\n props?: Props;\n events?: readonly Events[];\n children: Children;\n inline?: boolean;\n overrides?: readonly PropOverride[];\n}): ComponentManifest<Name, Props, Events, Children> {\n return { props: {} as Props, events: [], ...manifest };\n}\n\nexport type EventProp<Event extends string> = `on${Capitalize<Event>}`;\n\nexport function eventProp<Event extends string>(event: Event): EventProp<Event> {\n return `on${event.charAt(0).toUpperCase()}${event.slice(1)}` as EventProp<Event>;\n}\n\n// Event props are `on` followed by a capital letter, like `onClick`.\nexport function isEventProp(name: string): boolean {\n const letterAfterOn = name.charAt('on'.length);\n return name.startsWith('on') && letterAfterOn >= 'A' && letterAfterOn <= 'Z';\n}\n\n// The reverse of eventProp: `onClick` -> `click`.\nexport function eventName(prop: string): string {\n const name = prop.slice('on'.length);\n return name.charAt(0).toLowerCase() + name.slice(1);\n}\n\n// The props a renderer's version of `M` receives. Any prop may be undefined, since markup can leave\n// it out and a binding can give undefined.\nexport type PropsOf<M extends ComponentManifest, Children = never> = {\n [K in keyof M['props']]?: PropValue<M['props'][K]> | undefined;\n} & {\n [E in M['events'][number] as EventProp<E>]?: ((event: DotEvent) => void) | undefined;\n} & (M['children'] extends 'none' ? unknown : { children?: Children | undefined });\n\nexport type ComponentRegistry = Readonly<Record<string, ComponentManifest>>;\n\nexport function componentRegistry(manifests: Iterable<ComponentManifest>): ComponentRegistry {\n const registry: Record<string, ComponentManifest> = {};\n for (const manifest of manifests) {\n if (manifest.name in registry) {\n throw new Error(`Component <${manifest.name}> is defined twice`);\n }\n registry[manifest.name] = manifest;\n }\n return registry;\n}\n","export function toText(value: unknown): string {\n switch (typeof value) {\n case 'string':\n return value;\n case 'number':\n case 'boolean':\n case 'bigint':\n return String(value);\n case 'object':\n return value === null ? '' : JSON.stringify(value);\n default:\n return '';\n }\n}\n\nexport function toList(value: unknown): readonly unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n if (typeof value === 'object' && value !== null && Symbol.iterator in value) {\n return Array.from(value as Iterable<unknown>);\n }\n return [];\n}\n","import { defineComponent } from '../component';\n\n// A sum of money in large type, with thousands separators. Once typed, it shows the minor units, so\n// 1 reads 1.00. `value` and the value `change` carries are in `unit`. `change` carries null when\n// the field is empty.\nexport const AmountInput = defineComponent({\n name: 'AmountInput',\n props: {\n value: 'number',\n // The ISO 4217 code shown before the amount. Defaults to SLE.\n currency: 'string',\n // Digits after the decimal point. Defaults to the currency's own, such as 2 for SLE cents.\n minorUnits: 'number',\n // `minor` (the default) counts minor units, so 150 is SLE 1.50. `major` is the amount itself,\n // so 1 is SLE 1.00.\n unit: ['minor', 'major'],\n label: 'string',\n placeholder: 'string',\n hint: 'string',\n error: 'string',\n disabled: 'boolean',\n },\n events: ['change'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\nexport const Button = defineComponent({\n name: 'Button',\n props: {\n variant: ['primary', 'secondary'],\n disabled: 'boolean',\n // Shows a spinner and ignores taps, such as while a payment is sent.\n loading: 'boolean',\n },\n events: ['click'],\n children: 'text',\n});\n","export const SIZES = ['small', 'medium', 'large'] as const;\n\n// Space between or around components.\nexport const SPACES = ['none', 'small', 'medium', 'large'] as const;\n\n// Space inside a component's edges, for all sides or one at a time, in place of the component's\n// own. `start` and `end` follow the reading direction, so they swap in right-to-left languages.\nexport const PADDING_PROPS = {\n padding: SPACES,\n paddingTop: SPACES,\n paddingStart: SPACES,\n paddingEnd: SPACES,\n paddingBottom: SPACES,\n} as const;\n\n// The shape of a picture's or a video's box.\nexport const ASPECTS = ['1:1', '4:3', '3:2', '16:9', '3:4', '2:3', '9:16'] as const;\n\nexport const TONES = ['default', 'muted', 'info', 'success', 'warning', 'danger'] as const;\n\n// A text's colour. `onPrimary` reads on a `primary` background. A dot's own colours come from its theme.\nexport const TEXT_TONES = { words: [...TONES, 'onPrimary'], or: 'themeColor' } as const;\n\n// A box's fill: a colour of the theme, a tone as a soft tint, or one of the dot's own colours.\nexport const BACKGROUNDS = {\n words: ['background', 'surface', 'primary', 'muted', 'info', 'success', 'warning', 'danger'],\n or: 'themeColor',\n} as const;\n\n// A box's outline. `subtle` is the hairline cards have.\nexport const BORDERS = ['none', 'subtle', 'strong'] as const;\n\n// A box's corners, scaled by the theme's shape. `full` makes pills and circles.\nexport const RADII = ['none', 'small', 'medium', 'large', 'full'] as const;\n\n// A box's width or height in points, or `fill` for all the parent gives it.\nexport const LENGTH = { words: ['fill'], or: 'number' } as const;\n\n// How a box looks and how much room it takes: on View, and in part on Stack.\nexport const BOX_PROPS = {\n background: BACKGROUNDS,\n border: BORDERS,\n radius: RADII,\n width: LENGTH,\n height: LENGTH,\n minHeight: 'number',\n maxWidth: 'number',\n // The box's shape, which sets its height from its width.\n aspect: ASPECTS,\n} as const;\n\nexport const STATUS_TONES = ['default', 'info', 'success', 'warning', 'danger'] as const;\n\nexport const ICON_NAMES = [\n 'arrow-down',\n 'arrow-left',\n 'arrow-right',\n 'arrow-up',\n 'bank',\n 'bell',\n 'bolt',\n 'calendar',\n 'card',\n 'cart',\n 'cash',\n 'check',\n 'chevron-down',\n 'chevron-left',\n 'chevron-right',\n 'chevron-up',\n 'clock',\n 'close',\n 'copy',\n 'download',\n 'edit',\n 'error',\n 'external-link',\n 'eye',\n 'eye-off',\n 'file',\n 'gift',\n 'globe',\n 'grid',\n 'headphones',\n 'heart',\n 'help',\n 'history',\n 'home',\n 'image',\n 'info',\n 'link',\n 'list',\n 'location',\n 'lock',\n 'logout',\n 'mail',\n 'microphone',\n 'minus',\n 'mobile',\n 'more',\n 'music',\n 'phone',\n 'playlist',\n 'plus',\n 'qr-code',\n 'receipt',\n 'refresh',\n 'search',\n 'send',\n 'settings',\n 'share',\n 'star',\n 'success',\n 'ticket',\n 'trash',\n 'upload',\n 'user',\n 'users',\n 'video',\n 'wallet',\n 'warning',\n 'water',\n 'wifi',\n] as const;\n\nexport type IconName = (typeof ICON_NAMES)[number];\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS, SPACES } from './options';\n\n// Shows its children one at a time, as slides to swipe between. `change` carries the `index` of\n// the slide it moved to.\nexport const Carousel = defineComponent({\n name: 'Carousel',\n props: {\n // Moves to the next slide every `interval` milliseconds, pausing while touched.\n autoplay: 'boolean',\n interval: 'number',\n // After the last slide comes the first again.\n loop: 'boolean',\n indicator: ['dots', 'none'],\n // Space between slides, seen while one slides in.\n gap: SPACES,\n // `scale` shrinks a slide as it leaves the middle and grows the one coming in, as you swipe.\n effect: ['slide', 'scale'],\n // The slide to show. Changing it moves the carousel there.\n index: 'number',\n ...PADDING_PROPS,\n },\n events: ['change'],\n children: 'elements',\n});\n","import { defineComponent } from '../component';\nimport { ICON_NAMES } from './options';\n\n// A small rounded choice, such as a filter. `selected` fills it in.\nexport const Chip = defineComponent({\n name: 'Chip',\n props: { label: 'string', icon: ICON_NAMES, selected: 'boolean', disabled: 'boolean' },\n events: ['tap'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\n// A one-time code or PIN, one box per digit. `complete` comes after the `change` that fills the\n// last box.\nexport const CodeInput = defineComponent({\n name: 'CodeInput',\n props: {\n value: 'string',\n // Number of digits. Defaults to 6.\n length: 'number',\n label: 'string',\n hint: 'string',\n error: 'string',\n // Shows dots in place of the digits, as for a PIN.\n secure: 'boolean',\n disabled: 'boolean',\n },\n events: ['change', 'complete'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS, TONES } from './options';\n\n// A label and its value on one line, such as a line of a receipt. A long value wraps onto more\n// lines and stays at the end.\nexport const DetailRow = defineComponent({\n name: 'DetailRow',\n props: {\n label: 'string',\n value: 'string',\n // The value's tone and weight. The label is always muted.\n tone: TONES,\n weight: ['regular', 'medium', 'bold'],\n ...PADDING_PROPS,\n },\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\nexport const Divider = defineComponent({\n name: 'Divider',\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { ICON_NAMES, PADDING_PROPS } from './options';\n\n// Shown where there's nothing yet, such as an empty list. Its children, such as a button, show\n// under its text.\nexport const EmptyState = defineComponent({\n name: 'EmptyState',\n props: { icon: ICON_NAMES, title: 'string', text: 'string', ...PADDING_PROPS },\n children: 'elements',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS, SIZES, STATUS_TONES } from './options';\n\nexport const Spinner = defineComponent({\n name: 'Spinner',\n props: { size: SIZES },\n children: 'none',\n});\n\nexport const ProgressBar = defineComponent({\n name: 'ProgressBar',\n // From 0 to 100.\n props: { value: 'number' },\n children: 'none',\n});\n\n// A message in the flow of the page, such as a failed payment's reason.\nexport const Notice = defineComponent({\n name: 'Notice',\n props: { tone: STATUS_TONES, title: 'string', ...PADDING_PROPS },\n children: 'text',\n});\n\nexport const Badge = defineComponent({\n name: 'Badge',\n props: { tone: STATUS_TONES },\n children: 'text',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS } from './options';\n\n// Holds the page's main action and stays at the bottom while the page scrolls. Put it last in the\n// page's root View.\nexport const Footer = defineComponent({\n name: 'Footer',\n props: PADDING_PROPS,\n children: 'elements',\n});\n","import { defineComponent } from '../component';\nimport { ICON_NAMES, PADDING_PROPS, SPACES } from './options';\n\n// Lays out its children in equal columns. `columns` defaults to 4.\nexport const Grid = defineComponent({\n name: 'Grid',\n props: { columns: 'number', gap: SPACES, ...PADDING_PROPS },\n children: 'elements',\n});\n\n// An icon or picture over a short label, such as a service on a home screen.\nexport const GridItem = defineComponent({\n name: 'GridItem',\n props: {\n label: 'string',\n icon: ICON_NAMES,\n image: 'string',\n // A short note on the item's corner, such as \"New\" or a count.\n badge: 'string',\n },\n events: ['tap'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { ICON_NAMES, SIZES, TONES } from './options';\n\nexport const Icon = defineComponent({\n name: 'Icon',\n props: { name: ICON_NAMES, size: SIZES, tone: TONES },\n children: 'none',\n inline: true,\n});\n","import { defineComponent } from '../component';\nimport { ASPECTS } from './options';\n\nexport const Image = defineComponent({\n name: 'Image',\n props: {\n src: 'string',\n alt: 'string',\n width: 'number',\n height: 'number',\n // `cover` fills the box and crops. `contain` shows the whole picture.\n fit: ['cover', 'contain'],\n shape: ['rounded', 'square', 'circle'],\n // The box's shape. Without a width, the picture fills the width it's given, such as the\n // screen's, and its height follows.\n aspect: ASPECTS,\n },\n events: ['load', 'error'],\n children: 'none',\n overrides: [{ prop: 'aspect', ignores: 'height', because: 'the aspect sets the height' }],\n});\n","import { defineComponent } from '../component';\n\n// A number chosen by dragging, from `min` to `max` (0 and 100 unless set) in steps of `step` (1).\n// `showValue` shows the number next to the label.\nexport const Slider = defineComponent({\n name: 'Slider',\n props: {\n value: 'number',\n min: 'number',\n max: 'number',\n step: 'number',\n showValue: 'boolean',\n label: 'string',\n hint: 'string',\n disabled: 'boolean',\n },\n events: ['change'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS } from './options';\n\n// Lays out long text to read, such as a news article: paragraphs a little apart, more room above\n// headings, the lines of its body text further apart, and no wider than reads comfortably.\nexport const Prose = defineComponent({\n name: 'Prose',\n props: { ...PADDING_PROPS },\n children: 'elements',\n});\n\n// Someone's words, set apart with a line at their side. `cite` says who said them.\nexport const Quote = defineComponent({\n name: 'Quote',\n props: { cite: 'string' },\n children: 'elements',\n});\n\n// A list of points, with a dot before each, or numbered when `ordered`. Each point is a Bullet.\nexport const BulletList = defineComponent({\n name: 'BulletList',\n props: { ordered: 'boolean' },\n children: 'elements',\n});\n\nexport const Bullet = defineComponent({\n name: 'Bullet',\n children: 'elements',\n});\n\n// Markdown from a server, such as an article's body, drawn as Prose: headings, paragraphs, bold,\n// italic, links, lists, quotes, pictures and lines between parts. Raw HTML in it shows as text.\nexport const RichText = defineComponent({\n name: 'RichText',\n props: { markdown: 'string' },\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\nexport const Input = defineComponent({\n name: 'Input',\n props: {\n value: 'string',\n placeholder: 'string',\n label: 'string',\n // Help shown under the field, which `error` replaces.\n hint: 'string',\n error: 'string',\n // Text shown inside the field, before and after what the person types, such as \"Le\".\n prefix: 'string',\n suffix: 'string',\n type: ['text', 'number', 'email', 'phone', 'password'],\n maxLength: 'number',\n disabled: 'boolean',\n },\n events: ['change', 'submit'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { TONES } from './options';\n\n// Text to tap, inside a Text or on its own. With an https `href`, Dash opens it in the device's\n// browser. Without one, it raises `tap` for the page.\nexport const Link = defineComponent({\n name: 'Link',\n props: {\n href: 'string',\n // The primary color unless a tone sets another.\n tone: TONES,\n },\n events: ['tap'],\n children: 'text',\n inline: true,\n});\n","import { defineComponent } from '../component';\nimport { ICON_NAMES, PADDING_PROPS } from './options';\n\n// `endReached` comes when the last row scrolls into view, such as to load more rows. It comes again\n// once a new last row does.\nexport const List = defineComponent({\n name: 'List',\n props: { size: ['sm', 'md'], ...PADDING_PROPS },\n events: ['endReached'],\n children: 'elements',\n});\n\n// Its children show at its end, in place of `value`. A row with `onTap` shows a chevron.\nexport const ListItem = defineComponent({\n name: 'ListItem',\n props: {\n title: 'string',\n subtitle: 'string',\n value: 'string',\n icon: ICON_NAMES,\n image: 'string',\n ...PADDING_PROPS,\n },\n events: ['tap'],\n children: 'elements',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS, STATUS_TONES } from './options';\n\n// A panel that slides up over the page while `open` is true, such as an action sheet of buttons.\n// Tapping outside it raises `close`. The page closes it by setting `open` back to false.\nexport const Sheet = defineComponent({\n name: 'Sheet',\n props: { open: 'boolean', title: 'string', showCloseIcon: 'boolean', ...PADDING_PROPS },\n events: ['close'],\n children: 'elements',\n});\n\n// Shows `message` briefly over the page, then raises `hide`. Clear the message there so the same\n// one can show again.\nexport const Toast = defineComponent({\n name: 'Toast',\n props: {\n message: 'string',\n tone: STATUS_TONES,\n // In milliseconds.\n duration: 'number',\n },\n events: ['hide'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\n// Shows `value` as a QR code. It's dark on light in every theme, so any camera can read it.\nexport const QRCode = defineComponent({\n name: 'QRCode',\n props: {\n value: 'string',\n // In pixels. Defaults to 200.\n size: 'number',\n // What screen readers say in place of the code.\n label: 'string',\n },\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\n// A field that opens a sheet of its `Option`s. `value` is the chosen option's value.\nexport const Select = defineComponent({\n name: 'Select',\n props: {\n value: 'string',\n label: 'string',\n placeholder: 'string',\n hint: 'string',\n error: 'string',\n disabled: 'boolean',\n },\n events: ['change'],\n children: 'elements',\n});\n\nexport const Option = defineComponent({\n name: 'Option',\n props: { value: 'string', label: 'string' },\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS, SPACES } from './options';\n\n// A row of children that scrolls sideways, such as a shelf of albums. Each child keeps its own\n// width. A View child is as wide as its widest fixed-width child, such as an Image with a width.\n// Once a scroll stops, `change` carries the `index` of the child at the start.\nexport const Scroll = defineComponent({\n name: 'Scroll',\n props: {\n gap: SPACES,\n // Where children come to rest after a swipe.\n snap: ['none', 'start', 'center'],\n // The child to scroll to. Changing it scrolls there.\n index: 'number',\n // paddingStart and paddingEnd are the space before the first child and after the last.\n ...PADDING_PROPS,\n },\n events: ['change'],\n children: 'elements',\n});\n","import { defineComponent } from '../component';\n\nexport const Skeleton = defineComponent({\n name: 'Skeleton',\n props: {\n shape: ['text', 'circle', 'box'],\n // Lines of text, for `text`.\n lines: 'number',\n // In pixels, for `circle` and `box`.\n height: 'number',\n },\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS } from './options';\n\n// A row of `Tab`s with one chosen. `value` is the chosen tab's value. The page shows the content\n// for it, such as with an <If> for each tab.\nexport const Tabs = defineComponent({\n name: 'Tabs',\n props: {\n value: 'string',\n // `underline` marks the chosen tab with a line. `segmented` fills it in, in a rounded track.\n variant: ['underline', 'segmented'],\n ...PADDING_PROPS,\n },\n events: ['change'],\n children: 'elements',\n});\n\nexport const Tab = defineComponent({\n name: 'Tab',\n props: {\n value: 'string',\n label: 'string',\n // A count shown next to the label, such as unread items.\n badge: 'number',\n },\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { PADDING_PROPS, TEXT_TONES } from './options';\n\nexport const Text = defineComponent({\n name: 'Text',\n props: {\n // `display` is for large amounts, such as a balance. `lead` is an article's opening paragraph.\n variant: ['display', 'title', 'subtitle', 'lead', 'body', 'caption'],\n tone: TEXT_TONES,\n weight: ['regular', 'medium', 'bold'],\n align: ['start', 'center', 'end'],\n // Cuts the text off with an ellipsis after this many lines.\n maxLines: 'number',\n // `strikethrough` shows a price that no longer applies.\n decoration: ['none', 'underline', 'strikethrough'],\n // Gives every digit the same width, so amounts line up in a list.\n numeric: 'boolean',\n // The space between lines, closer or wider than the variant's own.\n leading: ['tight', 'normal', 'relaxed'],\n italic: 'boolean',\n // Lets the person select the text and copy it, such as a passage of an article.\n selectable: 'boolean',\n ...PADDING_PROPS,\n },\n children: 'text',\n inline: true,\n});\n","import { defineComponent } from '../component';\n\nexport const TextArea = defineComponent({\n name: 'TextArea',\n props: {\n value: 'string',\n placeholder: 'string',\n label: 'string',\n hint: 'string',\n error: 'string',\n // The lines of text it shows before scrolling.\n rows: 'number',\n maxLength: 'number',\n disabled: 'boolean',\n },\n events: ['change'],\n children: 'none',\n});\n","import { defineComponent } from '../component';\n\nexport const Switch = defineComponent({\n name: 'Switch',\n props: { checked: 'boolean', label: 'string', disabled: 'boolean' },\n events: ['change'],\n children: 'none',\n});\n\nexport const Checkbox = defineComponent({\n name: 'Checkbox',\n props: { checked: 'boolean', label: 'string', disabled: 'boolean' },\n events: ['change'],\n children: 'none',\n});\n\n// A choice of one of its `Radio`s. `value` is the chosen radio's value.\nexport const RadioGroup = defineComponent({\n name: 'RadioGroup',\n props: { value: 'string', label: 'string', disabled: 'boolean' },\n events: ['change'],\n children: 'elements',\n});\n\nexport const Radio = defineComponent({\n name: 'Radio',\n props: { value: 'string', label: 'string', disabled: 'boolean' },\n children: 'none',\n});\n","import { defineComponent } from '../component';\nimport { BOX_PROPS, PADDING_PROPS, SPACES } from './options';\n\nexport const View = defineComponent({\n name: 'View',\n props: {\n gap: SPACES,\n direction: ['column', 'row'],\n // Across `direction`.\n align: ['stretch', 'start', 'center', 'end'],\n // Along `direction`. `between` puts the first and last child at the ends.\n justify: ['start', 'center', 'end', 'between'],\n // Lets children that don't fit flow onto another line.\n wrap: 'boolean',\n // Fills the space the parent has left, along the parent's direction.\n grow: 'boolean',\n ...PADDING_PROPS,\n // `card` is a surface with a hairline and rounded corners. The box props change any of those.\n variant: ['plain', 'card'],\n ...BOX_PROPS,\n },\n events: ['tap'],\n children: 'elements',\n overrides: [{ prop: 'aspect', ignores: 'height', because: 'the aspect sets the height' }],\n});\n\n// Lays its children on top of each other, the first at the bottom, such as text over a picture or a\n// badge on a corner. Each child fills the stack, and places its own content, such as with `justify`.\nexport const Stack = defineComponent({\n name: 'Stack',\n props: {\n radius: BOX_PROPS.radius,\n width: BOX_PROPS.width,\n height: BOX_PROPS.height,\n aspect: BOX_PROPS.aspect,\n },\n children: 'elements',\n overrides: [{ prop: 'aspect', ignores: 'height', because: 'the aspect sets the height' }],\n});\n","import { componentRegistry } from '../component';\nimport { AmountInput } from './amount-input';\nimport { Button } from './button';\nimport { Carousel } from './carousel';\nimport { Chip } from './chip';\nimport { CodeInput } from './code-input';\nimport { DetailRow } from './detail-row';\nimport { Divider } from './divider';\nimport { EmptyState } from './empty-state';\nimport { Badge, Notice, ProgressBar, Spinner } from './feedback';\nimport { Footer } from './footer';\nimport { Grid, GridItem } from './grid';\nimport { Icon } from './icon';\nimport { Image } from './image';\nimport { Slider } from './slider';\nimport { Bullet, BulletList, Prose, Quote, RichText } from './prose';\nimport { Input } from './input';\nimport { Link } from './link';\nimport { List, ListItem } from './list';\nimport { Sheet, Toast } from './overlays';\nimport { QRCode } from './qr-code';\nimport { Option, Select } from './select';\nimport { Scroll } from './scroll';\nimport { Skeleton } from './skeleton';\nimport { Tab, Tabs } from './tabs';\nimport { Text } from './text';\nimport { TextArea } from './text-area';\nimport { Checkbox, Radio, RadioGroup, Switch } from './toggles';\nimport { Stack, View } from './view';\n\nexport {\n AmountInput,\n Badge,\n Bullet,\n BulletList,\n Button,\n Carousel,\n Checkbox,\n Chip,\n CodeInput,\n DetailRow,\n Divider,\n EmptyState,\n Footer,\n Grid,\n GridItem,\n Icon,\n Image,\n Input,\n Link,\n List,\n ListItem,\n Notice,\n Option,\n ProgressBar,\n Prose,\n QRCode,\n Quote,\n Radio,\n RadioGroup,\n RichText,\n Scroll,\n Select,\n Sheet,\n Skeleton,\n Slider,\n Spinner,\n Stack,\n Switch,\n Tab,\n Tabs,\n Text,\n TextArea,\n Toast,\n View,\n};\nexport {\n ASPECTS,\n BACKGROUNDS,\n BORDERS,\n BOX_PROPS,\n ICON_NAMES,\n LENGTH,\n PADDING_PROPS,\n RADII,\n SIZES,\n SPACES,\n STATUS_TONES,\n TEXT_TONES,\n TONES,\n} from './options';\nexport type { IconName } from './options';\n\nexport const builtinComponents = {\n AmountInput,\n Badge,\n Bullet,\n BulletList,\n Button,\n Carousel,\n Checkbox,\n Chip,\n CodeInput,\n DetailRow,\n Divider,\n EmptyState,\n Footer,\n Grid,\n GridItem,\n Icon,\n Image,\n Input,\n Link,\n List,\n ListItem,\n Notice,\n Option,\n ProgressBar,\n Prose,\n QRCode,\n Quote,\n Radio,\n RadioGroup,\n RichText,\n Scroll,\n Select,\n Sheet,\n Skeleton,\n Slider,\n Spinner,\n Stack,\n Switch,\n Tab,\n Tabs,\n Text,\n TextArea,\n Toast,\n View,\n} as const;\n\nexport type BuiltinComponents = typeof builtinComponents;\n\nexport const builtinRegistry = componentRegistry(Object.values(builtinComponents));\n","export interface SourceLocation {\n readonly line: number;\n readonly column: number;\n readonly offset: number;\n}\n\n// Finds lines by binary search over their start offsets, computed once per source.\nexport function createLocator(source: string): (offset: number) => SourceLocation {\n const lineStarts = [0];\n for (let index = 0; index < source.length; index++) {\n if (source[index] === '\\n') {\n lineStarts.push(index + 1);\n }\n }\n return (offset) => {\n let low = 0;\n let high = lineStarts.length - 1;\n while (low < high) {\n const middle = Math.floor((low + high + 1) / 2);\n if (lineStarts[middle]! <= offset) {\n low = middle;\n } else {\n high = middle - 1;\n }\n }\n return { line: low + 1, column: offset - lineStarts[low]! + 1, offset };\n };\n}\n\nexport function locationAt(source: string, offset: number): SourceLocation {\n return createLocator(source)(offset);\n}\n\nexport function locatedMessage(message: string, file?: string, location?: SourceLocation): string {\n const where = [file, location?.line, location?.column]\n .filter((part) => part !== undefined)\n .join(':');\n return where ? `${where}: ${message}` : message;\n}\n","import type { SourceLocation } from './location';\nimport { locatedMessage } from './location';\n\n// A problem at a place in a source file. The message starts with `file:line:column:`\nexport class SourceError extends Error {\n readonly reason: string;\n readonly file: string | undefined;\n readonly loc: SourceLocation | undefined;\n\n constructor(reason: string, file?: string, location?: SourceLocation) {\n super(locatedMessage(reason, file, location));\n this.reason = reason;\n this.file = file;\n this.loc = location;\n }\n}\n","type Listener = (...args: never[]) => void;\n\nexport class EventEmitter<Events extends { [K in keyof Events]: Listener }> {\n readonly #listeners = new Map<keyof Events, Set<Listener>>();\n\n on<K extends keyof Events>(name: K, listener: Events[K]): () => void {\n const listeners = this.#listeners.get(name) ?? new Set();\n this.#listeners.set(name, listeners);\n listeners.add(listener);\n return () => listeners.delete(listener);\n }\n\n emit<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): void {\n const listeners = this.#listeners.get(name) as Set<Events[K]> | undefined;\n listeners?.forEach((listener) => listener(...args));\n }\n}\n","// `data` holds the `data-*` attributes of the component that raised the event: `data-account-id`\n// arrives as `data.accountId`.\nexport interface DotEvent<Detail = unknown, Data = Readonly<Record<string, unknown>>> {\n readonly type: string;\n readonly detail: Detail;\n readonly data: Data;\n}\n\nexport function createEvent<Detail = Record<string, never>>(\n type: string,\n detail: Detail = {} as Detail,\n data: Readonly<Record<string, unknown>> = {},\n): DotEvent<Detail> {\n return { type, detail, data };\n}\n","import type { Transport } from '../protocol/transport';\n\ndeclare global {\n // Installed by the host (the iOS or Android app, or the browser simulator) before Dot starts.\n // noinspection ES6ConvertVarToLetConst\n var __hostTransport: Transport | undefined;\n}\n\n// The transport the host installed. Messages crossing it must be JSON-serializable.\nexport function hostTransport(): Transport {\n const transport = globalThis.__hostTransport;\n if (!transport) {\n throw new Error(\n 'No Dot host found: `globalThis.__hostTransport` is not set. ' +\n 'Run the dot in the Dash app, or in the simulator with `dotctl dev`.',\n );\n }\n return transport;\n}\n","import type { ColorScheme } from '../theme/theme';\n\n// `background` while the person is away from Dash, such as in another app or with the phone locked.\nexport type AppState = 'active' | 'background';\n\nexport interface SystemContext {\n readonly scheme: ColorScheme;\n readonly appState: AppState;\n}\n\nexport const DEFAULT_SYSTEM_CONTEXT: SystemContext = {\n scheme: 'light',\n appState: 'active',\n};\n","export type HostErrorCode =\n 'unsupported' | 'denied' | 'cancelled' | 'timeout' | 'invalid' | 'failed';\n\nexport class HostError extends Error {\n override readonly name = 'HostError';\n readonly code: HostErrorCode;\n\n constructor(code: HostErrorCode, message: string) {\n super(message);\n this.code = code;\n }\n}\n\nexport interface HostCallOptions {\n timeout?: number | undefined;\n}\n\nexport interface HostRequest<T> extends Promise<T> {\n // Stops waiting. The promise rejects with `cancelled` and the host stops the work.\n cancel(): void;\n}\n\nexport type HostCaller = (\n method: string,\n params: unknown,\n options: HostCallOptions,\n) => HostRequest<unknown>;\n\nlet connectedCaller: HostCaller | null = null;\n\n// The service connects itself when it starts\nexport function connectHost(caller: HostCaller | null): void {\n connectedCaller = caller;\n}\n\nexport function callHost<Result>(\n method: string,\n params: unknown,\n options: HostCallOptions = {},\n): HostRequest<Result> {\n if (!connectedCaller) {\n const error = new HostError(\n 'unsupported',\n `Can't run \"${method}\" here: call Dash from the dot's logic`,\n );\n return createHostRequest(Promise.reject(error));\n }\n return connectedCaller(method, params, options) as HostRequest<Result>;\n}\n\nexport function createHostRequest<Result>(\n promise: Promise<Result>,\n cancel: () => void = () => {},\n): HostRequest<Result> {\n const request = promise as HostRequest<Result>;\n request.cancel = cancel;\n return request;\n}\n","// Declared in dot.json with a reason Dash shows the person. A host method that needs one runs only\n// once it's allowed. `account` gives the person's Dash username (email or phone) and full name.\n// `camera` lets the person take a photo or scan a code for the dot, `photoLibrary` choose one of\n// their photos, and `files` choose one of their files.\nexport const PERMISSIONS = ['account', 'camera', 'photoLibrary', 'files'] as const;\n\nexport type DotPermission = (typeof PERMISSIONS)[number];\n\nexport function isPermission(value: string): value is DotPermission {\n return (PERMISSIONS as readonly string[]).includes(value);\n}\n","export const DOT_FILE_PATH_MAX_LENGTH = 512;\nconst MAX_NAME_LENGTH = 255;\n\n// What's wrong with `path` as a path inside a dot's storage, or null if nothing is.\nexport function dotFilePathProblem(path: string, { allowRoot = false } = {}): string | null {\n if (path === '') {\n return allowRoot ? null : 'A path is needed, such as \"receipts/42.pdf\"';\n }\n if (path.length > DOT_FILE_PATH_MAX_LENGTH) {\n return `\"${path.slice(0, 40)}…\" is longer than ${DOT_FILE_PATH_MAX_LENGTH} characters`;\n }\n if (path.startsWith('/')) {\n return `\"${path}\" starts with \"/\". Start paths without it, such as \"receipts/42.pdf\"`;\n }\n if ([...path].some((char) => char === '\\\\' || char.charCodeAt(0) < 0x20)) {\n return `\"${path}\" has a backslash or another character paths can't use`;\n }\n for (const name of path.split('/')) {\n if (name === '' || name === '.' || name === '..') {\n return `\"${path}\" has an empty, \".\" or \"..\" part. Name each folder, such as \"receipts/42.pdf\"`;\n }\n if (name.length > MAX_NAME_LENGTH) {\n return `\"${path}\" has a name longer than ${MAX_NAME_LENGTH} characters`;\n }\n }\n return null;\n}\n","// An exact host name, or \"*.example.com\" for any subdomain of example.com, but not example.com.\nconst LABEL = '[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?';\nexport const NETWORK_HOST_PATTERN = new RegExp(\n `^(?:\\\\*\\\\.${LABEL}(?:\\\\.${LABEL})+|${LABEL}(?:\\\\.${LABEL})*)$`,\n);\nexport const NETWORK_HOST_MAX_LENGTH = 253;\n\nexport function isNetworkHost(value: string): boolean {\n return value.length <= NETWORK_HOST_MAX_LENGTH && NETWORK_HOST_PATTERN.test(value);\n}\n\nexport function allowsHost(hosts: readonly string[], host: string): boolean {\n const name = host.toLowerCase().replace(/\\.$/, '');\n return hosts.some((pattern) =>\n pattern.startsWith('*.') ? name.endsWith(pattern.slice(1)) : name === pattern,\n );\n}\n","// A semantic version, as https://semver.org defines it: `1.4.0`, `2.0.0-beta.1`, `1.0.0+build.7`.\nexport const SEMVER_PATTERN =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\ninterface SemanticVersion {\n readonly major: number;\n readonly minor: number;\n readonly patch: number;\n // `[\"beta\", \"1\"]` for `1.0.0-beta.1`; empty for a release.\n readonly prerelease: readonly string[];\n}\n\nexport function isSemanticVersion(value: unknown): value is string {\n return typeof value === 'string' && SEMVER_PATTERN.test(value);\n}\n\nexport function majorVersion(version: string): number {\n return parseVersion(version).major;\n}\n\nexport function isVersionAtLeast(version: string, minimum: string): boolean {\n return compareVersions(version, minimum) >= 0;\n}\n\n// Whether `version` is a newer major release than `current`. A newer minor or patch doesn't count.\nexport function isNewerMajor(version: string, current: string): boolean {\n return parseVersion(version).major > parseVersion(current).major;\n}\n\n// Negative when `left` comes before `right`, positive when after, and 0 for the same release.\n// Build metadata, the part after `+`, does not count.\nexport function compareVersions(left: string, right: string): number {\n const leftVersion = parseVersion(left);\n const rightVersion = parseVersion(right);\n const differences = [\n leftVersion.major - rightVersion.major,\n leftVersion.minor - rightVersion.minor,\n leftVersion.patch - rightVersion.patch,\n ];\n for (const difference of differences) {\n if (difference !== 0) {\n return difference;\n }\n }\n return comparePrereleases(leftVersion.prerelease, rightVersion.prerelease);\n}\n\nfunction parseVersion(version: string): SemanticVersion {\n const match = SEMVER_PATTERN.exec(version);\n if (!match) {\n throw new Error(`\"${version}\" is not a semantic version`);\n }\n const [, major, minor, patch, prerelease] = match;\n return {\n major: Number(major),\n minor: Number(minor),\n patch: Number(patch),\n prerelease: prerelease === undefined ? [] : prerelease.split('.'),\n };\n}\n\n// A release comes after its pre-releases (`1.0.0-beta` < `1.0.0`). Between pre-releases, the first\n// identifier that differs decides; if all match, the one with fewer identifiers comes first.\nfunction comparePrereleases(left: readonly string[], right: readonly string[]): number {\n if (left.length === 0 || right.length === 0) {\n return right.length - left.length;\n }\n const shared = Math.min(left.length, right.length);\n for (let index = 0; index < shared; index++) {\n const order = compareIdentifiers(left[index]!, right[index]!);\n if (order !== 0) {\n return order;\n }\n }\n return left.length - right.length;\n}\n\n// Numbers compare as numbers and come before words, which compare as text.\nfunction compareIdentifiers(left: string, right: string): number {\n const leftIsNumber = /^\\d+$/.test(left);\n const rightIsNumber = /^\\d+$/.test(right);\n if (leftIsNumber && rightIsNumber) {\n return Number(left) - Number(right);\n }\n if (leftIsNumber) {\n return -1;\n }\n if (rightIsNumber) {\n return 1;\n }\n if (left < right) {\n return -1;\n }\n if (left > right) {\n return 1;\n }\n return 0;\n}\n","import { compareVersions, isVersionAtLeast, majorVersion } from '../version/semantic-version';\n\n// The host ships React, not each dot. An import map in the dot's index.html points React's names at\n// the host's copies under `/__dot/react/<major>/`.\nexport const REACT_HOST_PATH = '/__dot/react/';\n\n// Each name a dot imports React by, and the host's file for it.\nexport const REACT_HOST_MODULES = {\n react: 'react.js',\n 'react/jsx-runtime': 'react-jsx-runtime.js',\n 'react-dom': 'react-dom.js',\n 'react-dom/client': 'react-dom-client.js',\n} as const;\n\n// By major version only. The host serves its newest React of that major, so it can update React\n// without dots being rebuilt.\nexport function reactHostUrl(dotReactVersion: string, file: string): string {\n return `${REACT_HOST_PATH}${majorVersion(dotReactVersion)}/${file}`;\n}\n\n// Releases within a major only add to React, so a dot runs on its own major at or above the version\n// it was built with. Another major may change or remove what the dot relies on.\nexport function isReactCompatible(hostVersion: string, dotVersion: string): boolean {\n return (\n majorVersion(hostVersion) === majorVersion(dotVersion) &&\n isVersionAtLeast(hostVersion, dotVersion)\n );\n}\n\nexport function newestReactOfMajor(versions: readonly string[], major: number): string | undefined {\n const matching = versions.filter((version) => majorVersion(version) === major);\n return matching.sort(compareVersions).at(-1);\n}\n","// Carries messages across a worker, a message port or a native app boundary.\nexport interface Transport {\n post(message: unknown): void;\n // Returns a function that removes the listener.\n listen(listener: (message: unknown) => void): () => void;\n}\n\n// Anything that acts like a MessagePort or a Worker.\nexport interface TransportAdapter {\n postMessage(message: unknown): void;\n addEventListener(type: 'message', listener: (event: { data: unknown }) => void): void;\n removeEventListener(type: 'message', listener: (event: { data: unknown }) => void): void;\n}\n\nexport function createAdaptorTransport(adapter: TransportAdapter): Transport {\n return {\n post: (message) => adapter.postMessage(message),\n listen(listener) {\n const onMessage = (event: { data: unknown }) => listener(event.data);\n adapter.addEventListener('message', onMessage);\n return () => adapter.removeEventListener('message', onMessage);\n },\n };\n}\n\n// Two transports connected to each other in the same thread, for tests and single-thread setups.\nexport function createTransportPair(): [Transport, Transport] {\n type Listeners = Set<(message: unknown) => void>;\n const firstListeners: Listeners = new Set();\n const secondListeners: Listeners = new Set();\n const createSide = (ownListeners: Listeners, otherListeners: Listeners): Transport => ({\n post: (message) => {\n // Copy the message, as crossing to another thread would\n const copy: unknown = JSON.parse(JSON.stringify(message));\n otherListeners.forEach((listener) => listener(copy));\n },\n listen(listener) {\n ownListeners.add(listener);\n return () => ownListeners.delete(listener);\n },\n });\n return [createSide(firstListeners, secondListeners), createSide(secondListeners, firstListeners)];\n}\n","import type { PageLaunchOptions } from './navigation';\n\nexport interface PageHooks {\n onLoad(options: PageLaunchOptions): void | Promise<void>;\n onShow(): void | Promise<void>;\n onHide(): void | Promise<void>;\n onUnload(): void | Promise<void>;\n}\n\nexport interface DotHooks {\n onLaunch(): void | Promise<void>;\n onError(error: Error): void;\n}\n\n// A record rather than a list, so adding a hook to PageHooks without listing it is a type error.\nconst pageHooks: Record<keyof PageHooks, true> = {\n onLoad: true,\n onShow: true,\n onHide: true,\n onUnload: true,\n};\n\nexport const PAGE_HOOKS = Object.keys(pageHooks) as readonly (keyof PageHooks)[];\n","export const MAX_STACK_DEPTH = 16;\n\nconst PAGE_ID = /^[A-Za-z0-9_-]+(?:\\/[A-Za-z0-9_-]+)*$/;\n\nexport function isPageId(value: string): boolean {\n return PAGE_ID.test(value);\n}\n\nexport type PageLaunchOptions = Readonly<Record<string, string>>;\n\nexport type Navigation =\n | {\n readonly action: 'push' | 'replace' | 'reset';\n readonly page: string;\n readonly options: PageLaunchOptions;\n }\n | { readonly action: 'back'; readonly delta: number };\n\nexport interface StackEntry {\n readonly instanceId: number;\n readonly page: string;\n readonly options: PageLaunchOptions;\n}\n\nexport class NavigationStack {\n readonly limit: number;\n #pages: StackEntry[] = [];\n #nextInstanceId = 1;\n\n constructor(limit = MAX_STACK_DEPTH) {\n this.limit = limit;\n }\n\n get pages(): readonly StackEntry[] {\n return this.#pages;\n }\n\n get top(): StackEntry | undefined {\n return this.#pages.at(-1);\n }\n\n // False for a push onto a full stack, or for going back from the first page, which the host\n // handles.\n apply(navigation: Navigation): boolean {\n switch (navigation.action) {\n case 'push':\n if (this.#pages.length >= this.limit) {\n return false;\n }\n break;\n case 'replace':\n this.#pages.pop();\n break;\n case 'reset':\n this.#pages = [];\n break;\n case 'back': {\n const count = Math.min(navigation.delta, this.#pages.length - 1);\n if (count < 1) {\n return false;\n }\n this.#pages = this.#pages.slice(0, -count);\n return true;\n }\n }\n const { page, options } = navigation;\n this.#pages = [...this.#pages, { instanceId: this.#nextInstanceId++, page, options }];\n return true;\n }\n}\n","export function applyChanges<T>(state: T, changes: Partial<T>): T {\n const next = { ...state } as Record<string, unknown>;\n for (const [key, value] of Object.entries(changes)) {\n if (value !== undefined) {\n next[key] = value;\n }\n }\n return next as T;\n}\n","// Set in defineDot, definePage or while a page runs. Dash restores its own bars when the page\n// closes, and its own value for any option set to undefined.\nexport interface NavigationBarOptions {\n // Shown in place of the dot's name.\n title?: string | undefined;\n hidden?: boolean | undefined;\n // As #RRGGBB.\n backgroundColor?: string | undefined;\n textColor?: string | undefined;\n}\n\nexport interface TabBarOptions {\n // Hides Dash's own tabs at the bottom of the screen.\n hidden?: boolean | undefined;\n}\n\n// The `configs` of defineDot and definePage.\nexport interface PageConfigs {\n navigationBar?: NavigationBarOptions | undefined;\n tabBar?: TabBarOptions | undefined;\n}\n\nexport interface PageBars {\n navigationBar: NavigationBarOptions;\n tabBar: TabBarOptions;\n}\n\nconst HEX_COLOR = /^#[0-9a-fA-F]{6}$/;\n\n// Throws when an option has the wrong type, or a color isn't #RRGGBB.\nexport function checkNavigationBar(options: NavigationBarOptions): void {\n const { title, hidden, backgroundColor, textColor } = options;\n if (title !== undefined && typeof title !== 'string') {\n throw new TypeError(\"The navigation bar's title must be text\");\n }\n if (hidden !== undefined && typeof hidden !== 'boolean') {\n throw new TypeError(\"The navigation bar's `hidden` must be true or false\");\n }\n for (const [name, color] of Object.entries({ backgroundColor, textColor })) {\n if (color !== undefined && (typeof color !== 'string' || !HEX_COLOR.test(color))) {\n throw new TypeError(`The navigation bar's ${name} must be a color such as \"#1A73E8\"`);\n }\n }\n}\n\nexport function checkTabBar(options: TabBarOptions): void {\n if (options.hidden !== undefined && typeof options.hidden !== 'boolean') {\n throw new TypeError(\"The tab bar's `hidden` must be true or false\");\n }\n}\n\nexport function checkConfigs(configs: PageConfigs): void {\n checkNavigationBar(configs.navigationBar ?? {});\n checkTabBar(configs.tabBar ?? {});\n}\n\n// Later configs override earlier ones, option by option.\nexport function mergeConfigs(...configs: (PageConfigs | undefined)[]): PageBars {\n const bars: PageBars = { navigationBar: {}, tabBar: {} };\n for (const config of configs) {\n bars.navigationBar = { ...bars.navigationBar, ...config?.navigationBar };\n bars.tabBar = { ...bars.tabBar, ...config?.tabBar };\n }\n return bars;\n}\n","import type { Transport } from './protocol/transport';\nimport type { Envelope, MessageMap, MessageType } from './protocol/core';\n\nexport type MessageHandler<Payload> = (payload: Payload) => void;\n\nexport class MessageChannel<Outgoing extends MessageMap, Incoming extends MessageMap> {\n readonly #transport: Transport;\n readonly #handlers = new Map<string, MessageHandler<never>>();\n\n constructor(transport: Transport) {\n this.#transport = transport;\n }\n\n send<T extends MessageType<Outgoing>>(type: T, payload: Outgoing[T]): void {\n this.#transport.post({ type, payload } satisfies Envelope);\n }\n\n handle<T extends MessageType<Incoming>>(\n type: T,\n handler: MessageHandler<Incoming[T]>,\n ): MessageHandler<Incoming[T]> | undefined {\n const previous = this.#handlers.get(type) as MessageHandler<Incoming[T]> | undefined;\n this.#handlers.set(type, handler);\n return previous;\n }\n\n listen(onError: (error: unknown, message: Envelope) => void): () => void {\n return this.#transport.listen((rawMessage) => {\n const message = rawMessage as Envelope;\n const handler = this.#handlers.get(message.type) as MessageHandler<unknown> | undefined;\n if (!handler) {\n onError(new Error(`No handler for message \"${message.type}\"`), message);\n return;\n }\n try {\n handler(message.payload);\n } catch (error) {\n onError(error, message);\n }\n });\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED