@ni/nimble-components 30.0.7 → 30.0.8

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.
Files changed (107) hide show
  1. package/dist/all-components-bundle.js +19 -14
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +1195 -1191
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/esm/anchor-menu-item/index.js.map +1 -1
  6. package/dist/esm/anchor-tabs/index.js.map +1 -1
  7. package/dist/esm/anchor-tree-item/index.js.map +1 -1
  8. package/dist/esm/combobox/index.js.map +1 -1
  9. package/dist/esm/dialog/index.js.map +1 -1
  10. package/dist/esm/drawer/index.js.map +1 -1
  11. package/dist/esm/label-provider/base/index.js.map +1 -1
  12. package/dist/esm/list-option/index.js.map +1 -1
  13. package/dist/esm/list-option-group/index.js.map +1 -1
  14. package/dist/esm/mapping/icon/index.js.map +1 -1
  15. package/dist/esm/menu-button/index.js.map +1 -1
  16. package/dist/esm/menu-button/testing/menu-button.pageobject.js.map +1 -1
  17. package/dist/esm/rich-text/base/index.js.map +1 -1
  18. package/dist/esm/rich-text/editor/index.js.map +1 -1
  19. package/dist/esm/rich-text/editor/models/create-tiptap-editor.js.map +1 -1
  20. package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.js.map +1 -1
  21. package/dist/esm/rich-text/mention-listbox/index.js.map +1 -1
  22. package/dist/esm/rich-text/models/markdown-parser.js +12 -12
  23. package/dist/esm/rich-text/models/markdown-parser.js.map +1 -1
  24. package/dist/esm/rich-text/models/rich-text-tracker.js.map +1 -1
  25. package/dist/esm/rich-text/models/testing/markdown-parser-utils.js.map +1 -1
  26. package/dist/esm/rich-text/viewer/index.js.map +1 -1
  27. package/dist/esm/rich-text/viewer/testing/rich-text-viewer.pageobject.js.map +1 -1
  28. package/dist/esm/rich-text-mention/base/index.js.map +1 -1
  29. package/dist/esm/rich-text-mention/base/models/mention-validator.js.map +1 -1
  30. package/dist/esm/rich-text-mention/users/index.js.map +1 -1
  31. package/dist/esm/select/index.js.map +1 -1
  32. package/dist/esm/select/testing/select.pageobject.js.map +1 -1
  33. package/dist/esm/table/components/group-row/index.js.map +1 -1
  34. package/dist/esm/table/components/header/index.js.map +1 -1
  35. package/dist/esm/table/components/row/index.js.map +1 -1
  36. package/dist/esm/table/index.js.map +1 -1
  37. package/dist/esm/table/models/array-to-tree.js.map +1 -1
  38. package/dist/esm/table/models/data-hierarchy-manager.js.map +1 -1
  39. package/dist/esm/table/models/expansion-manager.js.map +1 -1
  40. package/dist/esm/table/models/interactive-selection-manager.js.map +1 -1
  41. package/dist/esm/table/models/keyboard-navigation-manager.js.map +1 -1
  42. package/dist/esm/table/models/selection-managers/multi-selection-manager.js.map +1 -1
  43. package/dist/esm/table/models/selection-managers/selection-manager-base.js.map +1 -1
  44. package/dist/esm/table/models/sort-operations.js.map +1 -1
  45. package/dist/esm/table/models/table-layout-manager.js.map +1 -1
  46. package/dist/esm/table/models/table-update-tracker.js.map +1 -1
  47. package/dist/esm/table/models/table-validator.js.map +1 -1
  48. package/dist/esm/table/models/virtualizer.js.map +1 -1
  49. package/dist/esm/table/testing/table.pageobject.js.map +1 -1
  50. package/dist/esm/table-column/anchor/cell-view/index.js.map +1 -1
  51. package/dist/esm/table-column/anchor/cell-view/template.js.map +1 -1
  52. package/dist/esm/table-column/base/cell-view/index.js.map +1 -1
  53. package/dist/esm/table-column/base/cell-view/template.js.map +1 -1
  54. package/dist/esm/table-column/base/group-header-view/template.js.map +1 -1
  55. package/dist/esm/table-column/base/models/column-internals.js.map +1 -1
  56. package/dist/esm/table-column/base/models/column-validator.js.map +1 -1
  57. package/dist/esm/table-column/date-text/cell-view/index.js.map +1 -1
  58. package/dist/esm/table-column/date-text/group-header-view/index.js.map +1 -1
  59. package/dist/esm/table-column/date-text/index.js.map +1 -1
  60. package/dist/esm/table-column/date-text/models/format-helper.js.map +1 -1
  61. package/dist/esm/table-column/date-text/testing/table-column-date-text.pageobject.js.map +1 -1
  62. package/dist/esm/table-column/duration-text/group-header-view/index.js.map +1 -1
  63. package/dist/esm/table-column/duration-text/models/duration-formatter.js.map +1 -1
  64. package/dist/esm/table-column/duration-text/testing/table-column-duration-text.pageobject.js.map +1 -1
  65. package/dist/esm/table-column/enum-base/index.js.map +1 -1
  66. package/dist/esm/table-column/enum-base/models/mapping-key-resolver.js.map +1 -1
  67. package/dist/esm/table-column/mapping/cell-view/index.js.map +1 -1
  68. package/dist/esm/table-column/mapping/group-header-view/index.js.map +1 -1
  69. package/dist/esm/table-column/mapping/index.js.map +1 -1
  70. package/dist/esm/table-column/mapping/testing/table-column-mapping.pageobject.js.map +1 -1
  71. package/dist/esm/table-column/menu-button/cell-view/index.js.map +1 -1
  72. package/dist/esm/table-column/menu-button/index.js.map +1 -1
  73. package/dist/esm/table-column/mixins/custom-sort-order.js.map +1 -1
  74. package/dist/esm/table-column/mixins/sortable-column.js.map +1 -1
  75. package/dist/esm/table-column/number-text/index.js.map +1 -1
  76. package/dist/esm/table-column/number-text/models/number-text-unit-format.js.map +1 -1
  77. package/dist/esm/table-column/text-base/cell-view/index.js.map +1 -1
  78. package/dist/esm/table-column/text-base/group-header-view/index.js.map +1 -1
  79. package/dist/esm/text-area/index.js.map +1 -1
  80. package/dist/esm/theme-provider/design-tokens.js.map +1 -1
  81. package/dist/esm/theme-provider/index.js.map +1 -1
  82. package/dist/esm/tree-view/index.js.map +1 -1
  83. package/dist/esm/utilities/models/converter.js.map +1 -1
  84. package/dist/esm/utilities/models/document-element-lang.js.map +1 -1
  85. package/dist/esm/utilities/models/tracker.js.map +1 -1
  86. package/dist/esm/utilities/style/direction.js.map +1 -1
  87. package/dist/esm/utilities/style/multivalue-property-stylesheet-behavior.js.map +1 -1
  88. package/dist/esm/utilities/style/theme.js.map +1 -1
  89. package/dist/esm/utilities/testing/component.js.map +1 -1
  90. package/dist/esm/utilities/unit-format/decimal-unit-format.js.map +1 -1
  91. package/dist/esm/utilities/unit-format/default-unit-format.js.map +1 -1
  92. package/dist/esm/utilities/unit-format/scaled-unit-format/manually-translated-scaled-unit-format.js.map +1 -1
  93. package/dist/esm/utilities/unit-format/unit-format.js.map +1 -1
  94. package/dist/esm/utilities/unit-format/unit-scale/unit-scale.js.map +1 -1
  95. package/dist/esm/wafer-map/experimental/computations.js.map +1 -1
  96. package/dist/esm/wafer-map/experimental/hover-handler.js.map +1 -1
  97. package/dist/esm/wafer-map/experimental/worker-renderer.js.map +1 -1
  98. package/dist/esm/wafer-map/index.js.map +1 -1
  99. package/dist/esm/wafer-map/modules/computations.js.map +1 -1
  100. package/dist/esm/wafer-map/modules/create-matrix-renderer.js.map +1 -1
  101. package/dist/esm/wafer-map/modules/hover-handler.js.map +1 -1
  102. package/dist/esm/wafer-map/modules/prerendering.js.map +1 -1
  103. package/dist/esm/wafer-map/modules/rendering.js.map +1 -1
  104. package/dist/esm/wafer-map/modules/wafer-map-update-tracker.js.map +1 -1
  105. package/dist/esm/wafer-map/modules/wafer-map-validator.js.map +1 -1
  106. package/dist/esm/wafer-map/modules/zoom-handler.js.map +1 -1
  107. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../../../src/utilities/models/tracker.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,OAAO,OAAO;IAGhB,YAAmB,gBAAkC;QAEjD,IAAI,CAAC,YAAY,GAAG,EAAkB,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,GAAG,EAAgB,EAAE;YACrB,OAAO;gBACH,GAAG,CAAC;gBACJ,CAAC,GAAG,CAAC,EAAE,KAAK;aACf,CAAC;QACN,CAAC,EACD,IAAI,CAAC,YAAY,CACpB,CAAC;IACN,CAAC;IAEM,eAAe;QAClB,OAAO,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAEM,SAAS,CAAC,GAA2C;QACxD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,GAA2C;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,EAAE;YACb,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;IACL,CAAC;IAEM,OAAO,CAAC,GAA2C;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;IACL,CAAC;IAEM,QAAQ;QACX,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACnB,OAAO;SACV;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAEM,UAAU;QACb,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACpB,OAAO;SACV;QAED,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAEM,UAAU;QACb,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEM,UAAU;QACb,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IAEM,WAAW;QACd,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEM,gBAAgB,KAAU,CAAC;IAE1B,UAAU,CAAC,KAAc;QAE7B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CACrD,CAAC,CAAC,EAAE,GAAG,EAAgB,EAAE;YACrB,OAAO;gBACH,GAAG,CAAC;gBACJ,CAAC,GAAG,CAAC,EAAE,KAAK;aACf,CAAC;QACN,CAAC,EACD,IAAI,CAAC,YAAY,CACpB,CAAC;IACN,CAAC;CACJ","sourcesContent":["type ObjectFromList<T extends readonly string[]> = {\n [K in T extends readonly (infer U)[] ? U : never]: boolean;\n};\n\n/**\n * Generic Tracker which sets or resets provided flags\n */\nexport class Tracker<TrackedItemsList extends readonly string[]> {\n private trackedItems: ObjectFromList<TrackedItemsList>;\n\n public constructor(trackedItemsList: TrackedItemsList) {\n type TrackedItems = typeof this.trackedItems;\n this.trackedItems = {} as TrackedItems;\n this.trackedItems = trackedItemsList.reduce<TrackedItems>(\n (r, key): TrackedItems => {\n return {\n ...r,\n [key]: false\n };\n },\n this.trackedItems\n );\n }\n\n public getTrackedItems(): ObjectFromList<TrackedItemsList> {\n return { ...this.trackedItems };\n }\n\n public isTracked(key: keyof ObjectFromList<TrackedItemsList>): boolean {\n return this.trackedItems[key];\n }\n\n public track(key: keyof ObjectFromList<TrackedItemsList>): void {\n const wasTracked = this.trackedItems[key];\n if (!wasTracked) {\n this.trackedItems[key] = true;\n this.onTrackingChange();\n }\n }\n\n public untrack(key: keyof ObjectFromList<TrackedItemsList>): void {\n const wasTracked = this.trackedItems[key];\n if (wasTracked) {\n this.trackedItems[key] = false;\n this.onTrackingChange();\n }\n }\n\n public trackAll(): void {\n if (this.allTracked()) {\n return;\n }\n\n this.setAllKeys(true);\n this.onTrackingChange();\n }\n\n public untrackAll(): void {\n if (this.noneTracked()) {\n return;\n }\n\n this.setAllKeys(false);\n this.onTrackingChange();\n }\n\n public allTracked(): boolean {\n return Object.values(this.trackedItems).every(x => x);\n }\n\n public anyTracked(): boolean {\n return Object.values(this.trackedItems).some(x => x);\n }\n\n public noneTracked(): boolean {\n return Object.values(this.trackedItems).every(x => !x);\n }\n\n public onTrackingChange(): void {}\n\n private setAllKeys(value: boolean): void {\n type TrackedItems = typeof this.trackedItems;\n this.trackedItems = Object.keys(this.trackedItems).reduce<TrackedItems>(\n (r, key): TrackedItems => {\n return {\n ...r,\n [key]: value\n };\n },\n this.trackedItems\n );\n }\n}\n"]}
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../../../src/utilities/models/tracker.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,OAAO,OAAO;IAGhB,YAAmB,gBAAkC;QAEjD,IAAI,CAAC,YAAY,GAAG,EAAkB,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,GAAG,EAAgB,EAAE;YACrB,OAAO;gBACH,GAAG,CAAC;gBACJ,CAAC,GAAG,CAAC,EAAE,KAAK;aACf,CAAC;QACN,CAAC,EACD,IAAI,CAAC,YAAY,CACpB,CAAC;IACN,CAAC;IAEM,eAAe;QAClB,OAAO,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAEM,SAAS,CAAC,GAA2C;QACxD,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,GAA2C;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAEM,OAAO,CAAC,GAA2C;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAEM,QAAQ;QACX,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAEM,UAAU;QACb,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAEM,UAAU;QACb,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEM,UAAU;QACb,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;IAEM,WAAW;QACd,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEM,gBAAgB,KAAU,CAAC;IAE1B,UAAU,CAAC,KAAc;QAE7B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CACrD,CAAC,CAAC,EAAE,GAAG,EAAgB,EAAE;YACrB,OAAO;gBACH,GAAG,CAAC;gBACJ,CAAC,GAAG,CAAC,EAAE,KAAK;aACf,CAAC;QACN,CAAC,EACD,IAAI,CAAC,YAAY,CACpB,CAAC;IACN,CAAC;CACJ","sourcesContent":["type ObjectFromList<T extends readonly string[]> = {\n [K in T extends readonly (infer U)[] ? U : never]: boolean;\n};\n\n/**\n * Generic Tracker which sets or resets provided flags\n */\nexport class Tracker<TrackedItemsList extends readonly string[]> {\n private trackedItems: ObjectFromList<TrackedItemsList>;\n\n public constructor(trackedItemsList: TrackedItemsList) {\n type TrackedItems = typeof this.trackedItems;\n this.trackedItems = {} as TrackedItems;\n this.trackedItems = trackedItemsList.reduce<TrackedItems>(\n (r, key): TrackedItems => {\n return {\n ...r,\n [key]: false\n };\n },\n this.trackedItems\n );\n }\n\n public getTrackedItems(): ObjectFromList<TrackedItemsList> {\n return { ...this.trackedItems };\n }\n\n public isTracked(key: keyof ObjectFromList<TrackedItemsList>): boolean {\n return this.trackedItems[key];\n }\n\n public track(key: keyof ObjectFromList<TrackedItemsList>): void {\n const wasTracked = this.trackedItems[key];\n if (!wasTracked) {\n this.trackedItems[key] = true;\n this.onTrackingChange();\n }\n }\n\n public untrack(key: keyof ObjectFromList<TrackedItemsList>): void {\n const wasTracked = this.trackedItems[key];\n if (wasTracked) {\n this.trackedItems[key] = false;\n this.onTrackingChange();\n }\n }\n\n public trackAll(): void {\n if (this.allTracked()) {\n return;\n }\n\n this.setAllKeys(true);\n this.onTrackingChange();\n }\n\n public untrackAll(): void {\n if (this.noneTracked()) {\n return;\n }\n\n this.setAllKeys(false);\n this.onTrackingChange();\n }\n\n public allTracked(): boolean {\n return Object.values(this.trackedItems).every(x => x);\n }\n\n public anyTracked(): boolean {\n return Object.values(this.trackedItems).some(x => x);\n }\n\n public noneTracked(): boolean {\n return Object.values(this.trackedItems).every(x => !x);\n }\n\n public onTrackingChange(): void {}\n\n private setAllKeys(value: boolean): void {\n type TrackedItems = typeof this.trackedItems;\n this.trackedItems = Object.keys(this.trackedItems).reduce<TrackedItems>(\n (r, key): TrackedItems => {\n return {\n ...r,\n [key]: value\n };\n },\n this.trackedItems\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"direction.js","sourceRoot":"","sources":["../../../../src/utilities/style/direction.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,gKAAgK;AAChK,6DAA6D;AAU7D,OAAO,EAAE,SAAS,IAAI,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACzE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,6BAA6B;IAQtC,YAAY,GAAyB,EAAE,GAAyB;QALxD,UAAK,GAGT,IAAI,OAAO,EAAE,CAAC;QAGd,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,MAAiC;QACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,MAAiC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,KAAK,EAAE;YACP,oBAAoB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC3C;IACL,CAAC;IAEO,MAAM,CAAC,MAAiC;QAC5C,MAAM,UAAU,GACZ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YACtB,IAAI,yCAAyC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE9E,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACvD,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3C,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,yCAAyC;IAG3C,YACY,GAAyB,EACzB,GAAyB,EACzB,MAAiC;QAFjC,QAAG,GAAH,GAAG,CAAsB;QACzB,QAAG,GAAH,GAAG,CAAsB;QACzB,WAAM,GAAN,MAAM,CAA2B;QALrC,aAAQ,GAAyB,IAAI,CAAC;IAM3C,CAAC;IAEG,YAAY,CAAC,EAChB,MAAM,EACN,KAAK,GAC8C;QACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,SAAoB;QAC9B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;YACnC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;gBACxB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC3D;YACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;gBACxB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACxD;SACJ;IACL,CAAC;CACJ","sourcesContent":["/* eslint-disable */\n// Sourced from: https://github.com/microsoft/fast/blob/a150068ee196e73fe7a4f7b538a38752e0e506ba/packages/web-components/fast-components/src/styles/direction.ts\n// Changes: Updated imports to reference nimble design tokens\n\nimport type {\n Behavior,\n ElementStyles,\n FASTElement,\n Subscriber\n} from '@microsoft/fast-element';\nimport type { DesignTokenChangeRecord } from '@microsoft/fast-foundation';\nimport type { Direction } from '@microsoft/fast-web-utilities';\nimport { direction as directionDesignToken } from '../../theme-provider';\n/**\n * Behavior to conditionally apply LTR and RTL stylesheets. To determine which to apply,\n * the behavior will use the nearest DesignSystemProvider's 'direction' design system value.\n *\n * @public\n * @example\n * ```ts\n * import { css } from \"@microsoft/fast-element\";\n * import { DirectionalStyleSheetBehavior } from \"@microsoft/fast-foundation\";\n *\n * css`\n * // ...\n * `.withBehaviors(new DirectionalStyleSheetBehavior(\n * css`:host { content: \"ltr\"}`),\n * css`:host { content: \"rtl\"}`),\n * )\n * ```\n */\nexport class DirectionalStyleSheetBehavior implements Behavior {\n private ltr: ElementStyles | null;\n private rtl: ElementStyles | null;\n private cache: WeakMap<\n HTMLElement,\n DirectionalStyleSheetBehaviorSubscription\n > = new WeakMap();\n\n constructor(ltr: ElementStyles | null, rtl: ElementStyles | null) {\n this.ltr = ltr;\n this.rtl = rtl;\n }\n\n /**\n * @internal\n */\n public bind(source: FASTElement & HTMLElement) {\n this.attach(source);\n }\n\n /**\n * @internal\n */\n public unbind(source: FASTElement & HTMLElement) {\n const cache = this.cache.get(source);\n\n if (cache) {\n directionDesignToken.unsubscribe(cache);\n }\n }\n\n private attach(source: FASTElement & HTMLElement) {\n const subscriber =\n this.cache.get(source) ||\n new DirectionalStyleSheetBehaviorSubscription(this.ltr, this.rtl, source);\n\n const value = directionDesignToken.getValueFor(source);\n directionDesignToken.subscribe(subscriber);\n subscriber.attach(value);\n\n this.cache.set(source, subscriber);\n }\n}\n\n/**\n * Subscription for {@link DirectionalStyleSheetBehavior}\n */\nclass DirectionalStyleSheetBehaviorSubscription implements Subscriber {\n private attached: ElementStyles | null = null;\n\n constructor(\n private ltr: ElementStyles | null,\n private rtl: ElementStyles | null,\n private source: HTMLElement & FASTElement\n ) {}\n\n public handleChange({\n target,\n token,\n }: DesignTokenChangeRecord<typeof directionDesignToken>) {\n this.attach(token.getValueFor(target));\n }\n\n public attach(direction: Direction) {\n if (this.attached !== this[direction]) {\n if (this.attached !== null) {\n this.source.$fastController.removeStyles(this.attached);\n }\n this.attached = this[direction];\n if (this.attached !== null) {\n this.source.$fastController.addStyles(this.attached);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"direction.js","sourceRoot":"","sources":["../../../../src/utilities/style/direction.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,gKAAgK;AAChK,6DAA6D;AAU7D,OAAO,EAAE,SAAS,IAAI,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACzE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,6BAA6B;IAQtC,YAAY,GAAyB,EAAE,GAAyB;QALxD,UAAK,GAGT,IAAI,OAAO,EAAE,CAAC;QAGd,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,MAAiC;QACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,MAAiC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,KAAK,EAAE,CAAC;YACR,oBAAoB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,MAAiC;QAC5C,MAAM,UAAU,GACZ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YACtB,IAAI,yCAAyC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE9E,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACvD,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3C,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,yCAAyC;IAG3C,YACY,GAAyB,EACzB,GAAyB,EACzB,MAAiC;QAFjC,QAAG,GAAH,GAAG,CAAsB;QACzB,QAAG,GAAH,GAAG,CAAsB;QACzB,WAAM,GAAN,MAAM,CAA2B;QALrC,aAAQ,GAAyB,IAAI,CAAC;IAM3C,CAAC;IAEG,YAAY,CAAC,EAChB,MAAM,EACN,KAAK,GAC8C;QACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,SAAoB;QAC9B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzD,CAAC;QACL,CAAC;IACL,CAAC;CACJ","sourcesContent":["/* eslint-disable */\n// Sourced from: https://github.com/microsoft/fast/blob/a150068ee196e73fe7a4f7b538a38752e0e506ba/packages/web-components/fast-components/src/styles/direction.ts\n// Changes: Updated imports to reference nimble design tokens\n\nimport type {\n Behavior,\n ElementStyles,\n FASTElement,\n Subscriber\n} from '@microsoft/fast-element';\nimport type { DesignTokenChangeRecord } from '@microsoft/fast-foundation';\nimport type { Direction } from '@microsoft/fast-web-utilities';\nimport { direction as directionDesignToken } from '../../theme-provider';\n/**\n * Behavior to conditionally apply LTR and RTL stylesheets. To determine which to apply,\n * the behavior will use the nearest DesignSystemProvider's 'direction' design system value.\n *\n * @public\n * @example\n * ```ts\n * import { css } from \"@microsoft/fast-element\";\n * import { DirectionalStyleSheetBehavior } from \"@microsoft/fast-foundation\";\n *\n * css`\n * // ...\n * `.withBehaviors(new DirectionalStyleSheetBehavior(\n * css`:host { content: \"ltr\"}`),\n * css`:host { content: \"rtl\"}`),\n * )\n * ```\n */\nexport class DirectionalStyleSheetBehavior implements Behavior {\n private ltr: ElementStyles | null;\n private rtl: ElementStyles | null;\n private cache: WeakMap<\n HTMLElement,\n DirectionalStyleSheetBehaviorSubscription\n > = new WeakMap();\n\n constructor(ltr: ElementStyles | null, rtl: ElementStyles | null) {\n this.ltr = ltr;\n this.rtl = rtl;\n }\n\n /**\n * @internal\n */\n public bind(source: FASTElement & HTMLElement) {\n this.attach(source);\n }\n\n /**\n * @internal\n */\n public unbind(source: FASTElement & HTMLElement) {\n const cache = this.cache.get(source);\n\n if (cache) {\n directionDesignToken.unsubscribe(cache);\n }\n }\n\n private attach(source: FASTElement & HTMLElement) {\n const subscriber =\n this.cache.get(source) ||\n new DirectionalStyleSheetBehaviorSubscription(this.ltr, this.rtl, source);\n\n const value = directionDesignToken.getValueFor(source);\n directionDesignToken.subscribe(subscriber);\n subscriber.attach(value);\n\n this.cache.set(source, subscriber);\n }\n}\n\n/**\n * Subscription for {@link DirectionalStyleSheetBehavior}\n */\nclass DirectionalStyleSheetBehaviorSubscription implements Subscriber {\n private attached: ElementStyles | null = null;\n\n constructor(\n private ltr: ElementStyles | null,\n private rtl: ElementStyles | null,\n private source: HTMLElement & FASTElement\n ) {}\n\n public handleChange({\n target,\n token,\n }: DesignTokenChangeRecord<typeof directionDesignToken>) {\n this.attach(token.getValueFor(target));\n }\n\n public attach(direction: Direction) {\n if (this.attached !== this[direction]) {\n if (this.attached !== null) {\n this.source.$fastController.removeStyles(this.attached);\n }\n this.attached = this[direction];\n if (this.attached !== null) {\n this.source.$fastController.addStyles(this.attached);\n }\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"multivalue-property-stylesheet-behavior.js","sourceRoot":"","sources":["../../../../src/utilities/style/multivalue-property-stylesheet-behavior.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,UAAU,EACb,MAAM,yBAAyB,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,OAAO,oCAAoC;IAE7C;;;;;OAKG;IACH,YACqB,YAAoB,EACpB,KAAoC,EACpC,MAAqB;QAFrB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,UAAK,GAAL,KAAK,CAA+B;QACpC,WAAM,GAAN,MAAM,CAAe;IACvC,CAAC;IAEJ;;;OAGG;IACI,IAAI,CAAC,eAA4B;QACpC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,SAAS,CAC7C,IAAI,EACJ,IAAI,CAAC,YAAY,CACpB,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,MAAiC;QAC3C,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACpE,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;;;;OAKG;IACI,YAAY,CAAC,MAAmB,EAAE,GAAW;QAChD,8DAA8D;QAC9D,MAAM,YAAY,GAAiB,MAAM,CAAC,GAAG,CAAiB,CAAC;QAC/D,IACI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YACrB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,YAAY,EACnC;YACE,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACjD;aAAM;YACH,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACpD;IACL,CAAC;CACJ","sourcesContent":["import {\n Behavior,\n ElementStyles,\n FASTElement,\n Observable\n} from '@microsoft/fast-element';\n\n/**\n * A behavior to add or remove a stylesheet from an element based on a property. The behavior ensures that\n * styles are applied while the property matches and that styles are not applied if the property does\n * not match.\n *\n * @public\n */\nexport class MultivaluePropertyStyleSheetBehavior<PropertyType>\nimplements Behavior {\n /**\n * Constructs a {@link MultivaluePropertyStyleSheetBehavior} instance.\n * @param propertyName - The property name to operate from.\n * @param value - The property value or values to operate from.\n * @param styles - The styles to coordinate with the property.\n */\n public constructor(\n private readonly propertyName: string,\n private readonly value: PropertyType | PropertyType[],\n private readonly styles: ElementStyles\n ) {}\n\n /**\n * Binds the behavior to the element.\n * @param elementInstance - The element for which the property is applied.\n */\n public bind(elementInstance: FASTElement): void {\n Observable.getNotifier(elementInstance).subscribe(\n this,\n this.propertyName\n );\n this.handleChange(elementInstance, this.propertyName);\n }\n\n /**\n * Unbinds the behavior from the element.\n * @param source - The element for which the behavior is unbinding.\n */\n public unbind(source: FASTElement & HTMLElement): void {\n Observable.getNotifier(source).unsubscribe(this, this.propertyName);\n source.$fastController.removeStyles(this.styles);\n }\n\n /**\n * Change event for the provided element.\n * @param source - the element for which to attach or detach styles.\n * @param key - the key to lookup to know if the element already has the styles\n * @internal\n */\n public handleChange(source: FASTElement, key: string): void {\n // @ts-expect-error Accessing arbitrary property of an element\n const currentValue: PropertyType = source[key] as PropertyType;\n if (\n Array.isArray(this.value)\n ? this.value.includes(currentValue)\n : this.value === currentValue\n ) {\n source.$fastController.addStyles(this.styles);\n } else {\n source.$fastController.removeStyles(this.styles);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"multivalue-property-stylesheet-behavior.js","sourceRoot":"","sources":["../../../../src/utilities/style/multivalue-property-stylesheet-behavior.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,UAAU,EACb,MAAM,yBAAyB,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,OAAO,oCAAoC;IAE7C;;;;;OAKG;IACH,YACqB,YAAoB,EACpB,KAAoC,EACpC,MAAqB;QAFrB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,UAAK,GAAL,KAAK,CAA+B;QACpC,WAAM,GAAN,MAAM,CAAe;IACvC,CAAC;IAEJ;;;OAGG;IACI,IAAI,CAAC,eAA4B;QACpC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,SAAS,CAC7C,IAAI,EACJ,IAAI,CAAC,YAAY,CACpB,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,MAAiC;QAC3C,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACpE,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;;;;OAKG;IACI,YAAY,CAAC,MAAmB,EAAE,GAAW;QAChD,8DAA8D;QAC9D,MAAM,YAAY,GAAiB,MAAM,CAAC,GAAG,CAAiB,CAAC;QAC/D,IACI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YACrB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,YAAY,EACnC,CAAC;YACC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;CACJ","sourcesContent":["import {\n Behavior,\n ElementStyles,\n FASTElement,\n Observable\n} from '@microsoft/fast-element';\n\n/**\n * A behavior to add or remove a stylesheet from an element based on a property. The behavior ensures that\n * styles are applied while the property matches and that styles are not applied if the property does\n * not match.\n *\n * @public\n */\nexport class MultivaluePropertyStyleSheetBehavior<PropertyType>\nimplements Behavior {\n /**\n * Constructs a {@link MultivaluePropertyStyleSheetBehavior} instance.\n * @param propertyName - The property name to operate from.\n * @param value - The property value or values to operate from.\n * @param styles - The styles to coordinate with the property.\n */\n public constructor(\n private readonly propertyName: string,\n private readonly value: PropertyType | PropertyType[],\n private readonly styles: ElementStyles\n ) {}\n\n /**\n * Binds the behavior to the element.\n * @param elementInstance - The element for which the property is applied.\n */\n public bind(elementInstance: FASTElement): void {\n Observable.getNotifier(elementInstance).subscribe(\n this,\n this.propertyName\n );\n this.handleChange(elementInstance, this.propertyName);\n }\n\n /**\n * Unbinds the behavior from the element.\n * @param source - The element for which the behavior is unbinding.\n */\n public unbind(source: FASTElement & HTMLElement): void {\n Observable.getNotifier(source).unsubscribe(this, this.propertyName);\n source.$fastController.removeStyles(this.styles);\n }\n\n /**\n * Change event for the provided element.\n * @param source - the element for which to attach or detach styles.\n * @param key - the key to lookup to know if the element already has the styles\n * @internal\n */\n public handleChange(source: FASTElement, key: string): void {\n // @ts-expect-error Accessing arbitrary property of an element\n const currentValue: PropertyType = source[key] as PropertyType;\n if (\n Array.isArray(this.value)\n ? this.value.includes(currentValue)\n : this.value === currentValue\n ) {\n source.$fastController.addStyles(this.styles);\n } else {\n source.$fastController.removeStyles(this.styles);\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../../src/utilities/style/theme.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,MAAM,mCAAmC;IACrC,YACqB,KAAsB,EACtB,MAAqB,EACrB,MAAiC;QAFjC,UAAK,GAAL,KAAK,CAAiB;QACtB,WAAM,GAAN,MAAM,CAAe;QACrB,WAAM,GAAN,MAAM,CAA2B;IACnD,CAAC;IAEG,YAAY;QACf,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,IACI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YACrB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,EAC5B;YACE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACtD;aAAM;YACH,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACzD;IACL,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,uBAAuB;IAMzB,YACqB,KAAsB,EACtB,MAAqB;QADrB,UAAK,GAAL,KAAK,CAAiB;QACtB,WAAM,GAAN,MAAM,CAAe;QAPzB,UAAK,GAGlB,IAAI,OAAO,EAAE,CAAC;IAKf,CAAC;IAEJ;;OAEG;IACI,IAAI,CAAC,MAAiC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;eAClC,IAAI,mCAAmC,CACtC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,EACX,MAAM,CACT,CAAC;QAEN,+DAA+D;QAC/D,8CAA8C;QAC9C,6EAA6E;QAC7E,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACzC,UAAU,CAAC,YAAY,EAAE,CAAC;QAE1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,MAAiC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,UAAU,EAAE;YACZ,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SACtC;QAED,iDAAiD;QACjD,6EAA6E;IACjF,CAAC;CACJ;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CACzB,KAAsB,EACtB,MAAqB,EACE,EAAE,CAAC,IAAI,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC","sourcesContent":["/* eslint-disable max-classes-per-file */\nimport type {\n Behavior,\n ElementStyles,\n FASTElement,\n Subscriber\n} from '@microsoft/fast-element';\nimport type { Theme } from '../../theme-provider/types';\nimport { theme as themeToken } from '../../theme-provider';\n\n/**\n * Subscription for {@link ThemeStyleSheetBehavior}\n */\nclass ThemeStyleSheetBehaviorSubscription implements Subscriber {\n public constructor(\n private readonly value: Theme | Theme[],\n private readonly styles: ElementStyles,\n private readonly source: HTMLElement & FASTElement\n ) {}\n\n public handleChange(): void {\n const theme = themeToken.getValueFor(this.source);\n if (\n Array.isArray(this.value)\n ? this.value.includes(theme)\n : this.value === theme\n ) {\n this.source.$fastController.addStyles(this.styles);\n } else {\n this.source.$fastController.removeStyles(this.styles);\n }\n }\n}\n\n/**\n * Behavior to conditionally apply theme-based stylesheets.\n */\nclass ThemeStyleSheetBehavior implements Behavior {\n private readonly cache: WeakMap<\n HTMLElement,\n ThemeStyleSheetBehaviorSubscription\n > = new WeakMap();\n\n public constructor(\n private readonly theme: Theme | Theme[],\n private readonly styles: ElementStyles\n ) {}\n\n /**\n * @internal\n */\n public bind(source: FASTElement & HTMLElement): void {\n const subscriber = this.cache.get(source)\n || new ThemeStyleSheetBehaviorSubscription(\n this.theme,\n this.styles,\n source\n );\n\n // Currently subscriber from cache may have gone through unbind\n // but still be in cache so always resubscribe\n // See: https://github.com/microsoft/fast/issues/3246#issuecomment-1030424876\n themeToken.subscribe(subscriber, source);\n subscriber.handleChange();\n\n this.cache.set(source, subscriber);\n }\n\n /**\n * @internal\n */\n public unbind(source: FASTElement & HTMLElement): void {\n const subscriber = this.cache.get(source);\n\n if (subscriber) {\n themeToken.unsubscribe(subscriber);\n }\n\n // Currently does not evict subscriber from cache\n // See: https://github.com/microsoft/fast/issues/3246#issuecomment-1030424876\n }\n}\n\n/**\n * Behavior to conditionally apply theme-based stylesheets. To determine which to apply,\n * the behavior will use the nearest ThemeProvider's 'theme' design system value.\n *\n * @public\n * @example\n * ```ts\n * css`\n * // ...\n * `.withBehaviors(\n * themeBehavior(Theme.light, css` ... `),\n * // Apply style for both dark and color theme\n * themeBehavior([Theme.dark, Theme.color], css` ... `)\n * )\n * ```\n */\nexport const themeBehavior = (\n theme: Theme | Theme[],\n styles: ElementStyles\n): ThemeStyleSheetBehavior => new ThemeStyleSheetBehavior(theme, styles);\n"]}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../../src/utilities/style/theme.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,MAAM,mCAAmC;IACrC,YACqB,KAAsB,EACtB,MAAqB,EACrB,MAAiC;QAFjC,UAAK,GAAL,KAAK,CAAiB;QACtB,WAAM,GAAN,MAAM,CAAe;QACrB,WAAM,GAAN,MAAM,CAA2B;IACnD,CAAC;IAEG,YAAY;QACf,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,IACI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YACrB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,EAC5B,CAAC;YACC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,uBAAuB;IAMzB,YACqB,KAAsB,EACtB,MAAqB;QADrB,UAAK,GAAL,KAAK,CAAiB;QACtB,WAAM,GAAN,MAAM,CAAe;QAPzB,UAAK,GAGlB,IAAI,OAAO,EAAE,CAAC;IAKf,CAAC;IAEJ;;OAEG;IACI,IAAI,CAAC,MAAiC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;eAClC,IAAI,mCAAmC,CACtC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,EACX,MAAM,CACT,CAAC;QAEN,+DAA+D;QAC/D,8CAA8C;QAC9C,6EAA6E;QAC7E,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACzC,UAAU,CAAC,YAAY,EAAE,CAAC;QAE1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,MAAiC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QAED,iDAAiD;QACjD,6EAA6E;IACjF,CAAC;CACJ;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CACzB,KAAsB,EACtB,MAAqB,EACE,EAAE,CAAC,IAAI,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC","sourcesContent":["/* eslint-disable max-classes-per-file */\nimport type {\n Behavior,\n ElementStyles,\n FASTElement,\n Subscriber\n} from '@microsoft/fast-element';\nimport type { Theme } from '../../theme-provider/types';\nimport { theme as themeToken } from '../../theme-provider';\n\n/**\n * Subscription for {@link ThemeStyleSheetBehavior}\n */\nclass ThemeStyleSheetBehaviorSubscription implements Subscriber {\n public constructor(\n private readonly value: Theme | Theme[],\n private readonly styles: ElementStyles,\n private readonly source: HTMLElement & FASTElement\n ) {}\n\n public handleChange(): void {\n const theme = themeToken.getValueFor(this.source);\n if (\n Array.isArray(this.value)\n ? this.value.includes(theme)\n : this.value === theme\n ) {\n this.source.$fastController.addStyles(this.styles);\n } else {\n this.source.$fastController.removeStyles(this.styles);\n }\n }\n}\n\n/**\n * Behavior to conditionally apply theme-based stylesheets.\n */\nclass ThemeStyleSheetBehavior implements Behavior {\n private readonly cache: WeakMap<\n HTMLElement,\n ThemeStyleSheetBehaviorSubscription\n > = new WeakMap();\n\n public constructor(\n private readonly theme: Theme | Theme[],\n private readonly styles: ElementStyles\n ) {}\n\n /**\n * @internal\n */\n public bind(source: FASTElement & HTMLElement): void {\n const subscriber = this.cache.get(source)\n || new ThemeStyleSheetBehaviorSubscription(\n this.theme,\n this.styles,\n source\n );\n\n // Currently subscriber from cache may have gone through unbind\n // but still be in cache so always resubscribe\n // See: https://github.com/microsoft/fast/issues/3246#issuecomment-1030424876\n themeToken.subscribe(subscriber, source);\n subscriber.handleChange();\n\n this.cache.set(source, subscriber);\n }\n\n /**\n * @internal\n */\n public unbind(source: FASTElement & HTMLElement): void {\n const subscriber = this.cache.get(source);\n\n if (subscriber) {\n themeToken.unsubscribe(subscriber);\n }\n\n // Currently does not evict subscriber from cache\n // See: https://github.com/microsoft/fast/issues/3246#issuecomment-1030424876\n }\n}\n\n/**\n * Behavior to conditionally apply theme-based stylesheets. To determine which to apply,\n * the behavior will use the nearest ThemeProvider's 'theme' design system value.\n *\n * @public\n * @example\n * ```ts\n * css`\n * // ...\n * `.withBehaviors(\n * themeBehavior(Theme.light, css` ... `),\n * // Apply style for both dark and color theme\n * themeBehavior([Theme.dark, Theme.color], css` ... `)\n * )\n * ```\n */\nexport const themeBehavior = (\n theme: Theme | Theme[],\n styles: ElementStyles\n): ThemeStyleSheetBehavior => new ThemeStyleSheetBehavior(theme, styles);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../src/utilities/testing/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAoB;IACnD,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,mBAAmB,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,MAAmB,EACnB,GAAW,EACX,IAAwB;IAExB,OAAO,CACH,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CACpE,CAAC,CAAC,CAAE,CAAC;AACV,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,MAAmB,EACnB,WAAqB,EACrB,IAA0B;IAE1B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;KACnE;IACD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE;QAC5C,MAAM,IAAI,KAAK,CACX,+DAA+D,CAClE,CAAC;KACL;IACD,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE;YACvC,GAAG;YACH,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI;YACb,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACtB;IACD,MAAM,mBAAmB,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,OAAoB,EACpB,SAAiB;IAEjB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,MAAM,OAAO,GAAG,GAAS,EAAE;YACvB,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,EAAE,CAAC;QACd,CAAC,CAAC;QACF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAC/B,OAAoB,EACpB,SAAiB;IAKjB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAChC,OAAO;QACH,OAAO,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC3B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE;gBACzC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAChD,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;gBACb,OAAO,EAAE,CAAC;YACd,CAAC,CAAC;YACF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,GAAG;KACN,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACpC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,qBAAqB,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import { waitForUpdatesAsync } from '../../testing/async-helpers';\n\nexport async function clickElement(element: HTMLElement): Promise<void> {\n element.click();\n await waitForUpdatesAsync();\n}\n\nexport async function sendKeyDownEvent(\n target: HTMLElement,\n key: string,\n init?: KeyboardEventInit\n): Promise<KeyboardEvent> {\n return (\n await sendKeyDownEvents(target, [key], init ? [init] : undefined)\n )[0]!;\n}\n\nexport async function sendKeyDownEvents(\n target: HTMLElement,\n keySequence: string[],\n init?: KeyboardEventInit[]\n): Promise<KeyboardEvent[]> {\n if (keySequence.length === 0) {\n throw new Error('The key sequence must have at least one key.');\n }\n if (init && init.length !== keySequence.length) {\n throw new Error(\n 'The length of the key sequence and the init array must match.'\n );\n }\n const events: KeyboardEvent[] = [];\n for (const [index, key] of keySequence.entries()) {\n const event = new KeyboardEvent('keydown', {\n key,\n cancelable: true,\n bubbles: true,\n ...init?.[index]\n });\n target.dispatchEvent(event);\n events.push(event);\n }\n await waitForUpdatesAsync();\n return events;\n}\n\n/** A helper function to abstract turning waiting for an event to fire into a promise.\n * The returned promise should be resolved prior to completing a test.\n */\nexport async function waitForEventAsync(\n element: HTMLElement,\n eventName: string\n): Promise<void> {\n return new Promise(resolve => {\n const handler = (): void => {\n element.removeEventListener(eventName, handler);\n resolve();\n };\n element.addEventListener(eventName, handler);\n });\n}\n\n/** A helper function to abstract adding an event listener, spying\n * on the event being called, and removing the event listener. The returned promise\n * should be resolved prior to completing a test.\n */\nexport function createEventListener(\n element: HTMLElement,\n eventName: string\n): {\n promise: Promise<void>,\n spy: jasmine.Spy\n } {\n const spy = jasmine.createSpy();\n return {\n promise: new Promise(resolve => {\n const handler = (...args: unknown[]): void => {\n element.removeEventListener(eventName, handler);\n spy(...args);\n resolve();\n };\n element.addEventListener(eventName, handler);\n }),\n spy\n };\n}\n\n/**\n * Waits for a requested animation frame to occur.\n */\nexport async function waitAnimationFrame(): Promise<void> {\n return new Promise(resolve => {\n requestAnimationFrame(() => resolve());\n });\n}\n"]}
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../src/utilities/testing/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAoB;IACnD,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,mBAAmB,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,MAAmB,EACnB,GAAW,EACX,IAAwB;IAExB,OAAO,CACH,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CACpE,CAAC,CAAC,CAAE,CAAC;AACV,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,MAAmB,EACnB,WAAqB,EACrB,IAA0B;IAE1B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACX,+DAA+D,CAClE,CAAC;IACN,CAAC;IACD,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE;YACvC,GAAG;YACH,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI;YACb,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,mBAAmB,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,OAAoB,EACpB,SAAiB;IAEjB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,MAAM,OAAO,GAAG,GAAS,EAAE;YACvB,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,EAAE,CAAC;QACd,CAAC,CAAC;QACF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAC/B,OAAoB,EACpB,SAAiB;IAKjB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAChC,OAAO;QACH,OAAO,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC3B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE;gBACzC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAChD,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;gBACb,OAAO,EAAE,CAAC;YACd,CAAC,CAAC;YACF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,GAAG;KACN,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACpC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,qBAAqB,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import { waitForUpdatesAsync } from '../../testing/async-helpers';\n\nexport async function clickElement(element: HTMLElement): Promise<void> {\n element.click();\n await waitForUpdatesAsync();\n}\n\nexport async function sendKeyDownEvent(\n target: HTMLElement,\n key: string,\n init?: KeyboardEventInit\n): Promise<KeyboardEvent> {\n return (\n await sendKeyDownEvents(target, [key], init ? [init] : undefined)\n )[0]!;\n}\n\nexport async function sendKeyDownEvents(\n target: HTMLElement,\n keySequence: string[],\n init?: KeyboardEventInit[]\n): Promise<KeyboardEvent[]> {\n if (keySequence.length === 0) {\n throw new Error('The key sequence must have at least one key.');\n }\n if (init && init.length !== keySequence.length) {\n throw new Error(\n 'The length of the key sequence and the init array must match.'\n );\n }\n const events: KeyboardEvent[] = [];\n for (const [index, key] of keySequence.entries()) {\n const event = new KeyboardEvent('keydown', {\n key,\n cancelable: true,\n bubbles: true,\n ...init?.[index]\n });\n target.dispatchEvent(event);\n events.push(event);\n }\n await waitForUpdatesAsync();\n return events;\n}\n\n/** A helper function to abstract turning waiting for an event to fire into a promise.\n * The returned promise should be resolved prior to completing a test.\n */\nexport async function waitForEventAsync(\n element: HTMLElement,\n eventName: string\n): Promise<void> {\n return new Promise(resolve => {\n const handler = (): void => {\n element.removeEventListener(eventName, handler);\n resolve();\n };\n element.addEventListener(eventName, handler);\n });\n}\n\n/** A helper function to abstract adding an event listener, spying\n * on the event being called, and removing the event listener. The returned promise\n * should be resolved prior to completing a test.\n */\nexport function createEventListener(\n element: HTMLElement,\n eventName: string\n): {\n promise: Promise<void>,\n spy: jasmine.Spy\n } {\n const spy = jasmine.createSpy();\n return {\n promise: new Promise(resolve => {\n const handler = (...args: unknown[]): void => {\n element.removeEventListener(eventName, handler);\n spy(...args);\n resolve();\n };\n element.addEventListener(eventName, handler);\n }),\n spy\n };\n}\n\n/**\n * Waits for a requested animation frame to occur.\n */\nexport async function waitAnimationFrame(): Promise<void> {\n return new Promise(resolve => {\n requestAnimationFrame(() => resolve());\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"decimal-unit-format.js","sourceRoot":"","sources":["../../../../src/utilities/unit-format/decimal-unit-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqB,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAQ3E;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,UAAoC;IAOvE,YACI,MAAc,EACd,EACI,qBAAqB,GAAG,CAAC,EACzB,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAC1D,SAAS,GAAG,oBAAoB,KACN;QAC1B,qBAAqB,EAAE,CAAC;QACxB,qBAAqB,EAAE,CAAC;QACxB,SAAS,EAAE,oBAAoB;KAClC;QAED,KAAK,EAAE,CAAC;QAdK,yBAAoB,GAAG,IAAI,GAAG,EAA4B,CAAC;QAexE,uFAAuF;QACvF,4EAA4E;QAC5E,6FAA6F;QAC7F,MAAM,WAAW,GAAG,UAAqD,CAAC;QAC1E,MAAM,uBAAuB,GAAG;YAC5B,qBAAqB;YACrB,qBAAqB;YACrB,WAAW;SACd,CAAC;QACF,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,oBAAoB,EAAE;YACrD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,uBAAuB,CAAC;gBAC/B,MAAM;gBACN,uBAAuB;aAC1B,CAAC,CACL,CAAC;SACL;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACvD,CAAC;IAEe,eAAe;QAC3B,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;SACpD,CAAC;IACN,CAAC;IAES,SAAS,CAAC,MAAc;QAC9B,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACrD,UAAU,CAAC,WAAW,CACxB,CAAC;QACH,OAAO,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;CACJ","sourcesContent":["import { UnitFormat, UnitFormatOptions } from './unit-format';\nimport type { ScaledUnitFormat } from './scaled-unit-format/scaled-unit-format';\nimport type { UnitScale } from './unit-scale/unit-scale';\nimport { passthroughUnitScale } from './unit-scale/passthrough-unit-scale';\n\ninterface DecimalUnitFormatOptions extends UnitFormatOptions {\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n}\ntype ResolvedDecimalUnitFormatOptions = Required<DecimalUnitFormatOptions>;\n\n/**\n * Format for decimal numbers with units.\n */\nexport class DecimalUnitFormat extends UnitFormat<DecimalUnitFormatOptions> {\n private readonly unitScale: UnitScale;\n private readonly minimumFractionDigits: number;\n private readonly maximumFractionDigits: number;\n\n private readonly scaledUnitFormatters = new Map<number, ScaledUnitFormat>();\n\n public constructor(\n locale: string,\n {\n minimumFractionDigits = 0,\n maximumFractionDigits = Math.max(3, minimumFractionDigits),\n unitScale = passthroughUnitScale\n }: DecimalUnitFormatOptions = {\n minimumFractionDigits: 0,\n maximumFractionDigits: 3,\n unitScale: passthroughUnitScale\n }\n ) {\n super();\n // Workaround to avoid a ts error about signDisplay not accepting the value 'negative'.\n // It has been supported by browsers since 8/23, but TypeScript still hasn't\n // added it to the type definitions. See https://github.com/microsoft/TypeScript/issues/56269\n const signDisplay = 'negative' as Intl.NumberFormatOptions['signDisplay'];\n const intlNumberFormatOptions = {\n maximumFractionDigits,\n minimumFractionDigits,\n signDisplay\n };\n for (const scaledUnit of unitScale.supportedScaledUnits) {\n this.scaledUnitFormatters.set(\n scaledUnit.scaleFactor,\n scaledUnit.scaledUnitFormatFactory({\n locale,\n intlNumberFormatOptions\n })\n );\n }\n this.unitScale = unitScale;\n this.minimumFractionDigits = minimumFractionDigits;\n this.maximumFractionDigits = maximumFractionDigits;\n }\n\n public override resolvedOptions(): ResolvedDecimalUnitFormatOptions {\n return {\n unitScale: this.unitScale,\n maximumFractionDigits: this.maximumFractionDigits,\n minimumFractionDigits: this.minimumFractionDigits\n };\n }\n\n protected tryFormat(number: number): string {\n const { scaledValue, scaledUnit } = this.unitScale.scaleNumber(number);\n const scaledUnitFormatter = this.scaledUnitFormatters.get(\n scaledUnit.scaleFactor\n )!;\n return scaledUnitFormatter.format(scaledValue);\n }\n}\n"]}
1
+ {"version":3,"file":"decimal-unit-format.js","sourceRoot":"","sources":["../../../../src/utilities/unit-format/decimal-unit-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqB,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAQ3E;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,UAAoC;IAOvE,YACI,MAAc,EACd,EACI,qBAAqB,GAAG,CAAC,EACzB,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,EAC1D,SAAS,GAAG,oBAAoB,KACN;QAC1B,qBAAqB,EAAE,CAAC;QACxB,qBAAqB,EAAE,CAAC;QACxB,SAAS,EAAE,oBAAoB;KAClC;QAED,KAAK,EAAE,CAAC;QAdK,yBAAoB,GAAG,IAAI,GAAG,EAA4B,CAAC;QAexE,uFAAuF;QACvF,4EAA4E;QAC5E,6FAA6F;QAC7F,MAAM,WAAW,GAAG,UAAqD,CAAC;QAC1E,MAAM,uBAAuB,GAAG;YAC5B,qBAAqB;YACrB,qBAAqB;YACrB,WAAW;SACd,CAAC;QACF,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,oBAAoB,EAAE,CAAC;YACtD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACzB,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,uBAAuB,CAAC;gBAC/B,MAAM;gBACN,uBAAuB;aAC1B,CAAC,CACL,CAAC;QACN,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACvD,CAAC;IAEe,eAAe;QAC3B,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;YACjD,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;SACpD,CAAC;IACN,CAAC;IAES,SAAS,CAAC,MAAc;QAC9B,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,mBAAmB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACrD,UAAU,CAAC,WAAW,CACxB,CAAC;QACH,OAAO,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;CACJ","sourcesContent":["import { UnitFormat, UnitFormatOptions } from './unit-format';\nimport type { ScaledUnitFormat } from './scaled-unit-format/scaled-unit-format';\nimport type { UnitScale } from './unit-scale/unit-scale';\nimport { passthroughUnitScale } from './unit-scale/passthrough-unit-scale';\n\ninterface DecimalUnitFormatOptions extends UnitFormatOptions {\n minimumFractionDigits?: number;\n maximumFractionDigits?: number;\n}\ntype ResolvedDecimalUnitFormatOptions = Required<DecimalUnitFormatOptions>;\n\n/**\n * Format for decimal numbers with units.\n */\nexport class DecimalUnitFormat extends UnitFormat<DecimalUnitFormatOptions> {\n private readonly unitScale: UnitScale;\n private readonly minimumFractionDigits: number;\n private readonly maximumFractionDigits: number;\n\n private readonly scaledUnitFormatters = new Map<number, ScaledUnitFormat>();\n\n public constructor(\n locale: string,\n {\n minimumFractionDigits = 0,\n maximumFractionDigits = Math.max(3, minimumFractionDigits),\n unitScale = passthroughUnitScale\n }: DecimalUnitFormatOptions = {\n minimumFractionDigits: 0,\n maximumFractionDigits: 3,\n unitScale: passthroughUnitScale\n }\n ) {\n super();\n // Workaround to avoid a ts error about signDisplay not accepting the value 'negative'.\n // It has been supported by browsers since 8/23, but TypeScript still hasn't\n // added it to the type definitions. See https://github.com/microsoft/TypeScript/issues/56269\n const signDisplay = 'negative' as Intl.NumberFormatOptions['signDisplay'];\n const intlNumberFormatOptions = {\n maximumFractionDigits,\n minimumFractionDigits,\n signDisplay\n };\n for (const scaledUnit of unitScale.supportedScaledUnits) {\n this.scaledUnitFormatters.set(\n scaledUnit.scaleFactor,\n scaledUnit.scaledUnitFormatFactory({\n locale,\n intlNumberFormatOptions\n })\n );\n }\n this.unitScale = unitScale;\n this.minimumFractionDigits = minimumFractionDigits;\n this.maximumFractionDigits = maximumFractionDigits;\n }\n\n public override resolvedOptions(): ResolvedDecimalUnitFormatOptions {\n return {\n unitScale: this.unitScale,\n maximumFractionDigits: this.maximumFractionDigits,\n minimumFractionDigits: this.minimumFractionDigits\n };\n }\n\n protected tryFormat(number: number): string {\n const { scaledValue, scaledUnit } = this.unitScale.scaleNumber(number);\n const scaledUnitFormatter = this.scaledUnitFormatters.get(\n scaledUnit.scaleFactor\n )!;\n return scaledUnitFormatter.format(scaledValue);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"default-unit-format.js","sourceRoot":"","sources":["../../../../src/utilities/unit-format/default-unit-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqB,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,sFAAsF;AACtF,4EAA4E;AAC5E,6FAA6F;AAC7F,MAAM,WAAW,GAAG,UAAqD,CAAC;AAO1E;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAqC7C,YACI,MAAc,EACd,EAAE,SAAS,GAAG,oBAAoB,KAA+B;QAC7D,SAAS,EAAE,oBAAoB;KAClC;QAED,KAAK,EAAE,CAAC;QA7BZ,uIAAuI;QACtH,mCAA8B,GAA6B;YACxE,wBAAwB,EAAE,iBAAiB,CAAC,aAAa;YACzD,qBAAqB,EAAE,iBAAiB,CAAC,aAAa,GAAG,CAAC;YAC1D,gBAAgB,EAAE,eAAe;YACjC,WAAW;SACd,CAAC;QAEe,gCAA2B,GAAG,IAAI,GAAG,EAGnD,CAAC;QAEJ,mGAAmG;QACnG,6FAA6F;QAC5E,uCAAkC,GAA6B;YAC5E,wBAAwB,EAAE,iBAAiB,CAAC,aAAa;YACzD,QAAQ,EAAE,YAAY;YACtB,WAAW;SACd,CAAC;QAWE,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,oBAAoB,EAAE;YAC/C,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAChC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,uBAAuB,CAAC;gBACzB,MAAM;gBACN,uBAAuB,EAAE,IAAI,CAAC,8BAA8B;aAC/D,CAAC,CACL,CAAC;SACL;QACD,IAAI,CAAC,8BAA8B,GAAG,SAAS,CAAC,cAAc,CAAC,uBAAuB,CAAC;YACnF,MAAM;YACN,uBAAuB,EAAE,IAAI,CAAC,kCAAkC;SACnE,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAEe,eAAe;QAC3B,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC;IACN,CAAC;IAES,SAAS,CAAC,MAAc;QAC9B,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEvE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,cAAc,GAAG,aAAa,KAAK,CAAC;eACnC,CAAC,aAAa,IAAI,iBAAiB,CAAC,qBAAqB;mBACrD,aAAa,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;QACpE,OAAO,cAAc;YACjB,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,MAAM,CAAC;YACpD,CAAC,CAAC,IAAI,CAAC,2BAA2B;iBAC7B,GAAG,CAAC,UAAU,CAAC,WAAW,CAAE;iBAC5B,MAAM,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;;AA7ED,4EAA4E;AACpD,+BAAa,GAAG,CAAC,AAAJ,CAAK;AAE1C,wFAAwF;AACxF,0FAA0F;AAC1F,yEAAyE;AACjD,uCAAqB,GAAG,QAAQ,AAAX,CAAY;AAEzD,uFAAuF;AACvF,yBAAyB;AACD,uCAAqB,GAAG,QAAQ,AAAX,CAAY","sourcesContent":["import { UnitFormat, UnitFormatOptions } from './unit-format';\nimport type { ScaledUnitFormat } from './scaled-unit-format/scaled-unit-format';\nimport type { UnitScale } from './unit-scale/unit-scale';\nimport { passthroughUnitScale } from './unit-scale/passthrough-unit-scale';\n\n// Workaround to avoid ts errors about signDisplay not accepting the value 'negative'.\n// It has been supported by browsers since 8/23, but TypeScript still hasn't\n// added it to the type definitions. See https://github.com/microsoft/TypeScript/issues/56269\nconst signDisplay = 'negative' as Intl.NumberFormatOptions['signDisplay'];\n\n// Allow consistent pattern for defining Options and ResolvedOptions\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface DefaultUnitFormatOptions extends UnitFormatOptions {}\ntype ResolvedDefaultUnitFormatOptions = Required<DefaultUnitFormatOptions>;\n\n/**\n * Format for numbers with units to show in a tabular form.\n * Large and tiny numbers are shown exponentially and the rest as decimal.\n */\nexport class DefaultUnitFormat extends UnitFormat {\n // The maximum number of digits that should be rendered for any given value.\n private static readonly maximumDigits = 6;\n\n // Use exponential notation for numbers that will be rendered with 3 leading 0s or more.\n // Because a maximum of 6 digits are rendered, showing more than 3 leading 0s is not ideal\n // because then at least half of the displayed digits will be leading 0s.\n private static readonly exponentialLowerBound = 0.000995;\n\n // Use exponential formatting for numbers whose magnitude cannot otherwise be displayed\n // with 6 digits or less.\n private static readonly exponentialUpperBound = 999999.5;\n\n private readonly unitScale: UnitScale;\n // Format options to use by default. It renders the number with a maximum of 6 signficant digits (including zero before decimal point).\n private readonly defaultIntlNumberFormatOptions: Intl.NumberFormatOptions = {\n maximumSignificantDigits: DefaultUnitFormat.maximumDigits,\n maximumFractionDigits: DefaultUnitFormat.maximumDigits - 1,\n roundingPriority: 'lessPrecision',\n signDisplay\n };\n\n private readonly defaultScaledUnitFormatters = new Map<\n number,\n ScaledUnitFormat\n >();\n\n // Format options for numbers that should be displayed in exponential notation. This should be used\n // for numbers with magintudes over 'exponentialUpperBound' or under 'exponentialLowerBound'.\n private readonly exponentialIntlNumberFormatOptions: Intl.NumberFormatOptions = {\n maximumSignificantDigits: DefaultUnitFormat.maximumDigits,\n notation: 'scientific',\n signDisplay\n };\n\n private readonly exponentialScaledUnitFormatter: ScaledUnitFormat;\n\n public constructor(\n locale: string,\n { unitScale = passthroughUnitScale }: DefaultUnitFormatOptions = {\n unitScale: passthroughUnitScale\n }\n ) {\n super();\n for (const unit of unitScale.supportedScaledUnits) {\n this.defaultScaledUnitFormatters.set(\n unit.scaleFactor,\n unit.scaledUnitFormatFactory({\n locale,\n intlNumberFormatOptions: this.defaultIntlNumberFormatOptions\n })\n );\n }\n this.exponentialScaledUnitFormatter = unitScale.baseScaledUnit.scaledUnitFormatFactory({\n locale,\n intlNumberFormatOptions: this.exponentialIntlNumberFormatOptions\n });\n this.unitScale = unitScale;\n }\n\n public override resolvedOptions(): ResolvedDefaultUnitFormatOptions {\n return {\n unitScale: this.unitScale\n };\n }\n\n protected tryFormat(number: number): string {\n const { scaledValue, scaledUnit } = this.unitScale.scaleNumber(number);\n\n const absoluteValue = Math.abs(scaledValue);\n const useExponential = absoluteValue !== 0\n && (absoluteValue >= DefaultUnitFormat.exponentialUpperBound\n || absoluteValue < DefaultUnitFormat.exponentialLowerBound);\n return useExponential\n ? this.exponentialScaledUnitFormatter.format(number)\n : this.defaultScaledUnitFormatters\n .get(scaledUnit.scaleFactor)!\n .format(scaledValue);\n }\n}\n"]}
1
+ {"version":3,"file":"default-unit-format.js","sourceRoot":"","sources":["../../../../src/utilities/unit-format/default-unit-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAqB,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,sFAAsF;AACtF,4EAA4E;AAC5E,6FAA6F;AAC7F,MAAM,WAAW,GAAG,UAAqD,CAAC;AAO1E;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAqC7C,YACI,MAAc,EACd,EAAE,SAAS,GAAG,oBAAoB,KAA+B;QAC7D,SAAS,EAAE,oBAAoB;KAClC;QAED,KAAK,EAAE,CAAC;QA7BZ,uIAAuI;QACtH,mCAA8B,GAA6B;YACxE,wBAAwB,EAAE,iBAAiB,CAAC,aAAa;YACzD,qBAAqB,EAAE,iBAAiB,CAAC,aAAa,GAAG,CAAC;YAC1D,gBAAgB,EAAE,eAAe;YACjC,WAAW;SACd,CAAC;QAEe,gCAA2B,GAAG,IAAI,GAAG,EAGnD,CAAC;QAEJ,mGAAmG;QACnG,6FAA6F;QAC5E,uCAAkC,GAA6B;YAC5E,wBAAwB,EAAE,iBAAiB,CAAC,aAAa;YACzD,QAAQ,EAAE,YAAY;YACtB,WAAW;SACd,CAAC;QAWE,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,oBAAoB,EAAE,CAAC;YAChD,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAChC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,uBAAuB,CAAC;gBACzB,MAAM;gBACN,uBAAuB,EAAE,IAAI,CAAC,8BAA8B;aAC/D,CAAC,CACL,CAAC;QACN,CAAC;QACD,IAAI,CAAC,8BAA8B,GAAG,SAAS,CAAC,cAAc,CAAC,uBAAuB,CAAC;YACnF,MAAM;YACN,uBAAuB,EAAE,IAAI,CAAC,kCAAkC;SACnE,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAEe,eAAe;QAC3B,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,SAAS;SAC5B,CAAC;IACN,CAAC;IAES,SAAS,CAAC,MAAc;QAC9B,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEvE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,cAAc,GAAG,aAAa,KAAK,CAAC;eACnC,CAAC,aAAa,IAAI,iBAAiB,CAAC,qBAAqB;mBACrD,aAAa,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;QACpE,OAAO,cAAc;YACjB,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,MAAM,CAAC;YACpD,CAAC,CAAC,IAAI,CAAC,2BAA2B;iBAC7B,GAAG,CAAC,UAAU,CAAC,WAAW,CAAE;iBAC5B,MAAM,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;;AA7ED,4EAA4E;AACpD,+BAAa,GAAG,CAAC,AAAJ,CAAK;AAE1C,wFAAwF;AACxF,0FAA0F;AAC1F,yEAAyE;AACjD,uCAAqB,GAAG,QAAQ,AAAX,CAAY;AAEzD,uFAAuF;AACvF,yBAAyB;AACD,uCAAqB,GAAG,QAAQ,AAAX,CAAY","sourcesContent":["import { UnitFormat, UnitFormatOptions } from './unit-format';\nimport type { ScaledUnitFormat } from './scaled-unit-format/scaled-unit-format';\nimport type { UnitScale } from './unit-scale/unit-scale';\nimport { passthroughUnitScale } from './unit-scale/passthrough-unit-scale';\n\n// Workaround to avoid ts errors about signDisplay not accepting the value 'negative'.\n// It has been supported by browsers since 8/23, but TypeScript still hasn't\n// added it to the type definitions. See https://github.com/microsoft/TypeScript/issues/56269\nconst signDisplay = 'negative' as Intl.NumberFormatOptions['signDisplay'];\n\n// Allow consistent pattern for defining Options and ResolvedOptions\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface DefaultUnitFormatOptions extends UnitFormatOptions {}\ntype ResolvedDefaultUnitFormatOptions = Required<DefaultUnitFormatOptions>;\n\n/**\n * Format for numbers with units to show in a tabular form.\n * Large and tiny numbers are shown exponentially and the rest as decimal.\n */\nexport class DefaultUnitFormat extends UnitFormat {\n // The maximum number of digits that should be rendered for any given value.\n private static readonly maximumDigits = 6;\n\n // Use exponential notation for numbers that will be rendered with 3 leading 0s or more.\n // Because a maximum of 6 digits are rendered, showing more than 3 leading 0s is not ideal\n // because then at least half of the displayed digits will be leading 0s.\n private static readonly exponentialLowerBound = 0.000995;\n\n // Use exponential formatting for numbers whose magnitude cannot otherwise be displayed\n // with 6 digits or less.\n private static readonly exponentialUpperBound = 999999.5;\n\n private readonly unitScale: UnitScale;\n // Format options to use by default. It renders the number with a maximum of 6 signficant digits (including zero before decimal point).\n private readonly defaultIntlNumberFormatOptions: Intl.NumberFormatOptions = {\n maximumSignificantDigits: DefaultUnitFormat.maximumDigits,\n maximumFractionDigits: DefaultUnitFormat.maximumDigits - 1,\n roundingPriority: 'lessPrecision',\n signDisplay\n };\n\n private readonly defaultScaledUnitFormatters = new Map<\n number,\n ScaledUnitFormat\n >();\n\n // Format options for numbers that should be displayed in exponential notation. This should be used\n // for numbers with magintudes over 'exponentialUpperBound' or under 'exponentialLowerBound'.\n private readonly exponentialIntlNumberFormatOptions: Intl.NumberFormatOptions = {\n maximumSignificantDigits: DefaultUnitFormat.maximumDigits,\n notation: 'scientific',\n signDisplay\n };\n\n private readonly exponentialScaledUnitFormatter: ScaledUnitFormat;\n\n public constructor(\n locale: string,\n { unitScale = passthroughUnitScale }: DefaultUnitFormatOptions = {\n unitScale: passthroughUnitScale\n }\n ) {\n super();\n for (const unit of unitScale.supportedScaledUnits) {\n this.defaultScaledUnitFormatters.set(\n unit.scaleFactor,\n unit.scaledUnitFormatFactory({\n locale,\n intlNumberFormatOptions: this.defaultIntlNumberFormatOptions\n })\n );\n }\n this.exponentialScaledUnitFormatter = unitScale.baseScaledUnit.scaledUnitFormatFactory({\n locale,\n intlNumberFormatOptions: this.exponentialIntlNumberFormatOptions\n });\n this.unitScale = unitScale;\n }\n\n public override resolvedOptions(): ResolvedDefaultUnitFormatOptions {\n return {\n unitScale: this.unitScale\n };\n }\n\n protected tryFormat(number: number): string {\n const { scaledValue, scaledUnit } = this.unitScale.scaleNumber(number);\n\n const absoluteValue = Math.abs(scaledValue);\n const useExponential = absoluteValue !== 0\n && (absoluteValue >= DefaultUnitFormat.exponentialUpperBound\n || absoluteValue < DefaultUnitFormat.exponentialLowerBound);\n return useExponential\n ? this.exponentialScaledUnitFormatter.format(number)\n : this.defaultScaledUnitFormatters\n .get(scaledUnit.scaleFactor)!\n .format(scaledValue);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"manually-translated-scaled-unit-format.js","sourceRoot":"","sources":["../../../../../src/utilities/unit-format/scaled-unit-format/manually-translated-scaled-unit-format.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;GAEG;AACH,MAAM,OAAO,eAAe;IACxB,YACoB,QAAgB,EAChB,MAAc,EACd,MAAc;QAFd,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;IAC/B,CAAC;CACP;AAqBD;;GAEG;AACH,MAAM,OAAO,kCAAmC,SAAQ,gBAAgB;IAMpE,YACI,8BAA8D,EAC9D,EACI,gBAAgB,EAChB,gBAAgB,EACwB;QAE5C,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACtC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC7B,MAAM,IAAI,KAAK,CACX,yDAAyD,CAC5D,CAAC;SACL;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAClC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,uBAAuB,CAC/B,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAC3C,gBAAgB,EAChB,IAAI,CAAC,MAAM,CACd,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC7C,CAAC;IAEM,MAAM,CAAC,aAAa,CACvB,yCAAoF;QAEpF,OAAO,CACH,8BAA8D,EAC5B,EAAE,CAAC,IAAI,kCAAkC,CAC3E,8BAA8B,EAC9B,yCAAyC,CAC5C,CAAC;IACN,CAAC;IAEM,MAAM,CAAC,KAAa;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,sEAAsE;QACtE,IAAI,IAAI,CAAC,gBAAgB,KAAK,EAAE,EAAE;YAC9B,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;SAChF;QAED,wEAAwE;QACxE,6EAA6E;QAC7E,oHAAoH;QACpH,EAAE;QACF,sFAAsF;QACtF,iFAAiF;QACjF,wFAAwF;QACxF,kFAAkF;QAClF,mFAAmF;QACnF,qEAAqE;QACrE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK;YACtD,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ;YAC/B,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAClC,OAAO,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;IACvC,CAAC;IAEO,mBAAmB,CACvB,gBAAkC,EAClC,MAAc;QAEd,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;QACvC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QACnC,MAAM,iCAAiC,GAAG,MAAM;YAC5C,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;YAC/C,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO,CACH,iCAAiC;eAC9B,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;eAC9B,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAE,CACjC,CAAC;IACN,CAAC;CACJ","sourcesContent":["/* eslint-disable max-classes-per-file */\nimport type { ScaledUnitFormatFactoryOptions } from '../scaled-unit/scaled-unit';\nimport { ScaledUnitFormat } from './scaled-unit-format';\n\n/**\n * Representations of a unit in a particular language\n */\nexport class UnitTranslation {\n public constructor(\n public readonly singular: string,\n public readonly plural: string,\n public readonly symbol: string\n ) {}\n}\n/**\n * A map of locales of string format \"[lang]\" or \"[lang]-[region]\", for example \"en\" and / or \"en-us\", to UnitTranslation objects\n */\nexport type UnitTranslations = ReadonlyMap<string, UnitTranslation>;\nexport interface ManuallyTranslatedScaledUnitFormatOptions {\n /**\n * Translations for the unit by locale string.\n * The locale strings must be of the form [lang] or [lang]-[region], for example \"en\" and / or \"en-us\".\n * Other subtags besides lang and region are not supported.\n * Translations for \"en\" must be provided.\n */\n readonly unitTranslations: UnitTranslations;\n /**\n * String for prefix of this scaled unit, for example \"k\" (for kilo-).\n * Assumed the same across languages.\n * Base unit must use \"\", i.e. empty string, as the scaled prefix text.\n */\n readonly scaledPrefixText: string;\n}\n\n/**\n * A formatter for units that are not supported by Intl.NumberFormat\n */\nexport class ManuallyTranslatedScaledUnitFormat extends ScaledUnitFormat {\n private readonly pluralRules: Intl.PluralRules;\n private readonly formatter: Intl.NumberFormat;\n private readonly unitTranslation: UnitTranslation;\n private readonly scaledPrefixText: string;\n\n protected constructor(\n scaledUnitFormatFactoryOptions: ScaledUnitFormatFactoryOptions,\n {\n unitTranslations,\n scaledPrefixText\n }: ManuallyTranslatedScaledUnitFormatOptions\n ) {\n super(scaledUnitFormatFactoryOptions);\n if (!unitTranslations.get('en')) {\n throw new Error(\n 'English translations must exist with locale string \"en\"'\n );\n }\n this.pluralRules = new Intl.PluralRules(this.locale);\n this.formatter = new Intl.NumberFormat(\n this.locale,\n this.intlNumberFormatOptions\n );\n this.unitTranslation = this.getTranslationToUse(\n unitTranslations,\n this.locale\n );\n this.scaledPrefixText = scaledPrefixText;\n }\n\n public static createFactory(\n manuallyTranslatedScaledUnitFormatOptions: ManuallyTranslatedScaledUnitFormatOptions\n ) {\n return (\n scaledUnitFormatFactoryOptions: ScaledUnitFormatFactoryOptions\n ): ManuallyTranslatedScaledUnitFormat => new ManuallyTranslatedScaledUnitFormat(\n scaledUnitFormatFactoryOptions,\n manuallyTranslatedScaledUnitFormatOptions\n );\n }\n\n public format(value: number): string {\n const formatted = this.formatter.format(value);\n // For non-base units (which are a scaled prefix text of empty string)\n if (this.scaledPrefixText !== '') {\n return `${formatted} ${this.scaledPrefixText}${this.unitTranslation.symbol}`;\n }\n\n // Some languages have more than two forms (singular/plural) of cardinal\n // numbers, but we are treating anything other than the 'one' form as plural.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/PluralRules#description\n //\n // Because PluralRules.select() takes a number (not a string), it cannot differentiate\n // between 1 and 1.0. When NumberFormat is configured to format with a set number\n // of fractional digits, those fractional digits can have an effect on the pluralization\n // of the unit. E.g. in English, it formats \"1 byte\" vs \"1.0 bytes\". Thus there is\n // sometimes an inconsistency between unit pluralization for the same number, based\n // on whether it's supported by NumberFormat, or manually translated.\n const unitLabel = this.pluralRules.select(value) === 'one'\n ? this.unitTranslation.singular\n : this.unitTranslation.plural;\n return `${formatted} ${unitLabel}`;\n }\n\n private getTranslationToUse(\n unitTranslations: UnitTranslations,\n locale: string\n ): UnitTranslation {\n const localeObject = new Intl.Locale(locale ?? 'en');\n const language = localeObject.language;\n const region = localeObject.region;\n const regionSpecificMatchedTranslations = region\n ? unitTranslations.get(`${language}-${region}`)\n : undefined;\n return (\n regionSpecificMatchedTranslations\n ?? unitTranslations.get(language)\n ?? unitTranslations.get('en')!\n );\n }\n}\n"]}
1
+ {"version":3,"file":"manually-translated-scaled-unit-format.js","sourceRoot":"","sources":["../../../../../src/utilities/unit-format/scaled-unit-format/manually-translated-scaled-unit-format.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;GAEG;AACH,MAAM,OAAO,eAAe;IACxB,YACoB,QAAgB,EAChB,MAAc,EACd,MAAc;QAFd,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;IAC/B,CAAC;CACP;AAqBD;;GAEG;AACH,MAAM,OAAO,kCAAmC,SAAQ,gBAAgB;IAMpE,YACI,8BAA8D,EAC9D,EACI,gBAAgB,EAChB,gBAAgB,EACwB;QAE5C,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACtC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACX,yDAAyD,CAC5D,CAAC;QACN,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAClC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,uBAAuB,CAC/B,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAC3C,gBAAgB,EAChB,IAAI,CAAC,MAAM,CACd,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC7C,CAAC;IAEM,MAAM,CAAC,aAAa,CACvB,yCAAoF;QAEpF,OAAO,CACH,8BAA8D,EAC5B,EAAE,CAAC,IAAI,kCAAkC,CAC3E,8BAA8B,EAC9B,yCAAyC,CAC5C,CAAC;IACN,CAAC;IAEM,MAAM,CAAC,KAAa;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,sEAAsE;QACtE,IAAI,IAAI,CAAC,gBAAgB,KAAK,EAAE,EAAE,CAAC;YAC/B,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QACjF,CAAC;QAED,wEAAwE;QACxE,6EAA6E;QAC7E,oHAAoH;QACpH,EAAE;QACF,sFAAsF;QACtF,iFAAiF;QACjF,wFAAwF;QACxF,kFAAkF;QAClF,mFAAmF;QACnF,qEAAqE;QACrE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK;YACtD,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ;YAC/B,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAClC,OAAO,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;IACvC,CAAC;IAEO,mBAAmB,CACvB,gBAAkC,EAClC,MAAc;QAEd,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;QACvC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QACnC,MAAM,iCAAiC,GAAG,MAAM;YAC5C,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;YAC/C,CAAC,CAAC,SAAS,CAAC;QAChB,OAAO,CACH,iCAAiC;eAC9B,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;eAC9B,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAE,CACjC,CAAC;IACN,CAAC;CACJ","sourcesContent":["/* eslint-disable max-classes-per-file */\nimport type { ScaledUnitFormatFactoryOptions } from '../scaled-unit/scaled-unit';\nimport { ScaledUnitFormat } from './scaled-unit-format';\n\n/**\n * Representations of a unit in a particular language\n */\nexport class UnitTranslation {\n public constructor(\n public readonly singular: string,\n public readonly plural: string,\n public readonly symbol: string\n ) {}\n}\n/**\n * A map of locales of string format \"[lang]\" or \"[lang]-[region]\", for example \"en\" and / or \"en-us\", to UnitTranslation objects\n */\nexport type UnitTranslations = ReadonlyMap<string, UnitTranslation>;\nexport interface ManuallyTranslatedScaledUnitFormatOptions {\n /**\n * Translations for the unit by locale string.\n * The locale strings must be of the form [lang] or [lang]-[region], for example \"en\" and / or \"en-us\".\n * Other subtags besides lang and region are not supported.\n * Translations for \"en\" must be provided.\n */\n readonly unitTranslations: UnitTranslations;\n /**\n * String for prefix of this scaled unit, for example \"k\" (for kilo-).\n * Assumed the same across languages.\n * Base unit must use \"\", i.e. empty string, as the scaled prefix text.\n */\n readonly scaledPrefixText: string;\n}\n\n/**\n * A formatter for units that are not supported by Intl.NumberFormat\n */\nexport class ManuallyTranslatedScaledUnitFormat extends ScaledUnitFormat {\n private readonly pluralRules: Intl.PluralRules;\n private readonly formatter: Intl.NumberFormat;\n private readonly unitTranslation: UnitTranslation;\n private readonly scaledPrefixText: string;\n\n protected constructor(\n scaledUnitFormatFactoryOptions: ScaledUnitFormatFactoryOptions,\n {\n unitTranslations,\n scaledPrefixText\n }: ManuallyTranslatedScaledUnitFormatOptions\n ) {\n super(scaledUnitFormatFactoryOptions);\n if (!unitTranslations.get('en')) {\n throw new Error(\n 'English translations must exist with locale string \"en\"'\n );\n }\n this.pluralRules = new Intl.PluralRules(this.locale);\n this.formatter = new Intl.NumberFormat(\n this.locale,\n this.intlNumberFormatOptions\n );\n this.unitTranslation = this.getTranslationToUse(\n unitTranslations,\n this.locale\n );\n this.scaledPrefixText = scaledPrefixText;\n }\n\n public static createFactory(\n manuallyTranslatedScaledUnitFormatOptions: ManuallyTranslatedScaledUnitFormatOptions\n ) {\n return (\n scaledUnitFormatFactoryOptions: ScaledUnitFormatFactoryOptions\n ): ManuallyTranslatedScaledUnitFormat => new ManuallyTranslatedScaledUnitFormat(\n scaledUnitFormatFactoryOptions,\n manuallyTranslatedScaledUnitFormatOptions\n );\n }\n\n public format(value: number): string {\n const formatted = this.formatter.format(value);\n // For non-base units (which are a scaled prefix text of empty string)\n if (this.scaledPrefixText !== '') {\n return `${formatted} ${this.scaledPrefixText}${this.unitTranslation.symbol}`;\n }\n\n // Some languages have more than two forms (singular/plural) of cardinal\n // numbers, but we are treating anything other than the 'one' form as plural.\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/PluralRules#description\n //\n // Because PluralRules.select() takes a number (not a string), it cannot differentiate\n // between 1 and 1.0. When NumberFormat is configured to format with a set number\n // of fractional digits, those fractional digits can have an effect on the pluralization\n // of the unit. E.g. in English, it formats \"1 byte\" vs \"1.0 bytes\". Thus there is\n // sometimes an inconsistency between unit pluralization for the same number, based\n // on whether it's supported by NumberFormat, or manually translated.\n const unitLabel = this.pluralRules.select(value) === 'one'\n ? this.unitTranslation.singular\n : this.unitTranslation.plural;\n return `${formatted} ${unitLabel}`;\n }\n\n private getTranslationToUse(\n unitTranslations: UnitTranslations,\n locale: string\n ): UnitTranslation {\n const localeObject = new Intl.Locale(locale ?? 'en');\n const language = localeObject.language;\n const region = localeObject.region;\n const regionSpecificMatchedTranslations = region\n ? unitTranslations.get(`${language}-${region}`)\n : undefined;\n return (\n regionSpecificMatchedTranslations\n ?? unitTranslations.get(language)\n ?? unitTranslations.get('en')!\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"unit-format.js","sourceRoot":"","sources":["../../../../src/utilities/unit-format/unit-format.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,OAAgB,UAAU;IAG5B;;;OAGG;IACI,MAAM,CAAC,KAAgC;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC3B,OAAO,EAAE,CAAC;SACb;QAED,IAAI;YACA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAChC;QAAC,MAAM;YACJ,OAAO,EAAE,CAAC;SACb;IACL,CAAC;CAKJ","sourcesContent":["import type { UnitScale } from './unit-scale/unit-scale';\n\nexport interface UnitFormatOptions {\n unitScale?: UnitScale;\n}\n\n/**\n * The base class for unit formats.\n */\nexport abstract class UnitFormat<\n Options extends UnitFormatOptions = UnitFormatOptions\n> {\n /**\n * Formats a number value to a string.\n * For nullish values or values that result in an exception being thrown, empty string is returned\n */\n public format(value: number | undefined | null): string {\n if (typeof value !== 'number') {\n return '';\n }\n\n try {\n return this.tryFormat(value);\n } catch {\n return '';\n }\n }\n\n public abstract resolvedOptions(): Required<Options>;\n\n protected abstract tryFormat(number: number): string;\n}\n"]}
1
+ {"version":3,"file":"unit-format.js","sourceRoot":"","sources":["../../../../src/utilities/unit-format/unit-format.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,OAAgB,UAAU;IAG5B;;;OAGG;IACI,MAAM,CAAC,KAAgC;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;CAKJ","sourcesContent":["import type { UnitScale } from './unit-scale/unit-scale';\n\nexport interface UnitFormatOptions {\n unitScale?: UnitScale;\n}\n\n/**\n * The base class for unit formats.\n */\nexport abstract class UnitFormat<\n Options extends UnitFormatOptions = UnitFormatOptions\n> {\n /**\n * Formats a number value to a string.\n * For nullish values or values that result in an exception being thrown, empty string is returned\n */\n public format(value: number | undefined | null): string {\n if (typeof value !== 'number') {\n return '';\n }\n\n try {\n return this.tryFormat(value);\n } catch {\n return '';\n }\n }\n\n public abstract resolvedOptions(): Required<Options>;\n\n protected abstract tryFormat(number: number): string;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"unit-scale.js","sourceRoot":"","sources":["../../../../../src/utilities/unit-format/unit-scale/unit-scale.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,OAAgB,SAAS;IAG3B,YACoB,oBAA2C;QAA3C,yBAAoB,GAApB,oBAAoB,CAAuB;QAE3D,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAC1C,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAC1E,CAAC;QACF,IAAI,CAAC,WAAW,EAAE;YACd,MAAM,IAAI,KAAK,CACX,mEAAmE,CACtE,CAAC;SACL;QACD,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,EAAE;YACjB,MAAM,IAAI,KAAK,CACX,yEAAyE,CAC5E,CAAC;SACL;QACD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACzC,CAAC;IAED,uEAAuE;IACvE,sEAAsE;IACtE,oEAAoE;IACpE,kDAAkD;IAClD,8EAA8E;IAC9E,qGAAqG;IAC9F,WAAW,CAAC,MAAc;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,CAAC;QAClE,IACI,kBAAkB;eACf,SAAS,KAAK,CAAC;eACf,SAAS,KAAK,QAAQ;eACtB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAC5B;YACE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;SACnE;QACD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAE,CAAC;YACjD,IAAI,SAAS,GAAG,UAAU,CAAC,WAAW,IAAI,CAAC,EAAE;gBACzC,OAAO;oBACH,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW;oBAC5C,UAAU;iBACb,CAAC;aACL;SACJ;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAE,CAAC;QACnD,OAAO;YACH,WAAW,EAAE,MAAM,GAAG,YAAY,CAAC,WAAW;YAC9C,UAAU,EAAE,YAAY;SAC3B,CAAC;IACN,CAAC;CACJ","sourcesContent":["import type { ScaledUnit } from '../scaled-unit/scaled-unit';\n\ninterface ScaledNumber {\n readonly scaledValue: number;\n readonly scaledUnit: ScaledUnit;\n}\n\n/**\n * A unit scale consisting of a set of scaled units.\n */\nexport abstract class UnitScale {\n public readonly baseScaledUnit: ScaledUnit;\n\n public constructor(\n public readonly supportedScaledUnits: readonly ScaledUnit[]\n ) {\n const unitsSorted = supportedScaledUnits.every(\n (curr, i, arr) => i === 0 || arr[i - 1]!.scaleFactor < curr.scaleFactor\n );\n if (!unitsSorted) {\n throw new Error(\n 'Supported scaled units must have unique and ordered scale factors'\n );\n }\n const baseScaledUnit = supportedScaledUnits.find(x => x.isBase());\n if (!baseScaledUnit) {\n throw new Error(\n 'Supported scaled units must include a base scaled unit (scale factor=1)'\n );\n }\n this.supportedScaledUnits = supportedScaledUnits;\n this.baseScaledUnit = baseScaledUnit;\n }\n\n // Note that for the sake of reducing complexity in the implementation,\n // we do NOT consider the effects of rounding when picking the unit to\n // use for a given value. If formatting results in rounding, a value\n // may be shown with an unexpected unit. Examples:\n // - 999 bytes with two significant digits => \"1000 bytes\" (instead of \"1 kB\")\n // - 0.00000000000000001 volts (= 0.01 fV) with one fractional digit => \"0 fV\" (instead of \"0 volts\")\n public scaleNumber(number: number): ScaledNumber {\n const magnitude = Math.abs(number);\n const onlyBaseScaledUnit = this.supportedScaledUnits.length === 1;\n if (\n onlyBaseScaledUnit\n || magnitude === 0\n || magnitude === Infinity\n || Number.isNaN(magnitude)\n ) {\n return { scaledValue: number, scaledUnit: this.baseScaledUnit };\n }\n for (let i = this.supportedScaledUnits.length - 1; i >= 0; i -= 1) {\n const scaledUnit = this.supportedScaledUnits[i]!;\n if (magnitude / scaledUnit.scaleFactor >= 1) {\n return {\n scaledValue: number / scaledUnit.scaleFactor,\n scaledUnit\n };\n }\n }\n const smallestUnit = this.supportedScaledUnits[0]!;\n return {\n scaledValue: number / smallestUnit.scaleFactor,\n scaledUnit: smallestUnit\n };\n }\n}\n"]}
1
+ {"version":3,"file":"unit-scale.js","sourceRoot":"","sources":["../../../../../src/utilities/unit-format/unit-scale/unit-scale.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,OAAgB,SAAS;IAG3B,YACoB,oBAA2C;QAA3C,yBAAoB,GAApB,oBAAoB,CAAuB;QAE3D,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAC1C,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAC1E,CAAC;QACF,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACX,mEAAmE,CACtE,CAAC;QACN,CAAC;QACD,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACX,yEAAyE,CAC5E,CAAC;QACN,CAAC;QACD,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACzC,CAAC;IAED,uEAAuE;IACvE,sEAAsE;IACtE,oEAAoE;IACpE,kDAAkD;IAClD,8EAA8E;IAC9E,qGAAqG;IAC9F,WAAW,CAAC,MAAc;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,CAAC;QAClE,IACI,kBAAkB;eACf,SAAS,KAAK,CAAC;eACf,SAAS,KAAK,QAAQ;eACtB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAC5B,CAAC;YACC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpE,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAChE,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAE,CAAC;YACjD,IAAI,SAAS,GAAG,UAAU,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;gBAC1C,OAAO;oBACH,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW;oBAC5C,UAAU;iBACb,CAAC;YACN,CAAC;QACL,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAE,CAAC;QACnD,OAAO;YACH,WAAW,EAAE,MAAM,GAAG,YAAY,CAAC,WAAW;YAC9C,UAAU,EAAE,YAAY;SAC3B,CAAC;IACN,CAAC;CACJ","sourcesContent":["import type { ScaledUnit } from '../scaled-unit/scaled-unit';\n\ninterface ScaledNumber {\n readonly scaledValue: number;\n readonly scaledUnit: ScaledUnit;\n}\n\n/**\n * A unit scale consisting of a set of scaled units.\n */\nexport abstract class UnitScale {\n public readonly baseScaledUnit: ScaledUnit;\n\n public constructor(\n public readonly supportedScaledUnits: readonly ScaledUnit[]\n ) {\n const unitsSorted = supportedScaledUnits.every(\n (curr, i, arr) => i === 0 || arr[i - 1]!.scaleFactor < curr.scaleFactor\n );\n if (!unitsSorted) {\n throw new Error(\n 'Supported scaled units must have unique and ordered scale factors'\n );\n }\n const baseScaledUnit = supportedScaledUnits.find(x => x.isBase());\n if (!baseScaledUnit) {\n throw new Error(\n 'Supported scaled units must include a base scaled unit (scale factor=1)'\n );\n }\n this.supportedScaledUnits = supportedScaledUnits;\n this.baseScaledUnit = baseScaledUnit;\n }\n\n // Note that for the sake of reducing complexity in the implementation,\n // we do NOT consider the effects of rounding when picking the unit to\n // use for a given value. If formatting results in rounding, a value\n // may be shown with an unexpected unit. Examples:\n // - 999 bytes with two significant digits => \"1000 bytes\" (instead of \"1 kB\")\n // - 0.00000000000000001 volts (= 0.01 fV) with one fractional digit => \"0 fV\" (instead of \"0 volts\")\n public scaleNumber(number: number): ScaledNumber {\n const magnitude = Math.abs(number);\n const onlyBaseScaledUnit = this.supportedScaledUnits.length === 1;\n if (\n onlyBaseScaledUnit\n || magnitude === 0\n || magnitude === Infinity\n || Number.isNaN(magnitude)\n ) {\n return { scaledValue: number, scaledUnit: this.baseScaledUnit };\n }\n for (let i = this.supportedScaledUnits.length - 1; i >= 0; i -= 1) {\n const scaledUnit = this.supportedScaledUnits[i]!;\n if (magnitude / scaledUnit.scaleFactor >= 1) {\n return {\n scaledValue: number / scaledUnit.scaleFactor,\n scaledUnit\n };\n }\n }\n const smallestUnit = this.supportedScaledUnits[0]!;\n return {\n scaledValue: number / smallestUnit.scaleFactor,\n scaledUnit: smallestUnit\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"computations.js","sourceRoot":"","sources":["../../../../src/wafer-map/experimental/computations.ts"],"names":[],"mappings":"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","sourcesContent":["import { scaleLinear, ScaleLinear } from 'd3-scale';\nimport { range } from 'd3-array';\nimport type { WaferMap } from '..';\nimport { WaferMapColorScaleMode, WaferMapOriginLocation } from '../types';\nimport type { ColorScale, Dimensions, Margin } from '../workers/types';\n\n/**\n * Computations calculates and stores different measures which are used in the Wafermap\n */\nexport class Computations {\n public get horizontalScale(): ScaleLinear<number, number> {\n return this._horizontalScale;\n }\n\n public get verticalScale(): ScaleLinear<number, number> {\n return this._verticalScale;\n }\n\n public get containerDimensions(): Dimensions {\n return this._containerDimensions;\n }\n\n public get dieDimensions(): Dimensions {\n return this._dieDimensions;\n }\n\n public get margin(): Margin {\n return this._margin;\n }\n\n public get verticalCoefficient(): number {\n return this._verticalCoefficient;\n }\n\n public get horizontalCoefficient(): number {\n return this._horizontalCoefficient;\n }\n\n public get horizontalConstant(): number {\n return this._horizontalConstant;\n }\n\n public get verticalConstant(): number {\n return this._verticalConstant;\n }\n\n public get gridMinX(): number {\n return this._gridMinX;\n }\n\n public get gridMaxX(): number {\n return this._gridMaxX;\n }\n\n public get gridMinY(): number {\n return this._gridMinY;\n }\n\n public get gridMaxY(): number {\n return this._gridMaxY;\n }\n\n public get labelsFontSize(): number {\n return this._labelsFontSize;\n }\n\n public get colorScale(): ColorScale {\n return this._colorScale;\n }\n\n private _horizontalScale!: ScaleLinear<number, number>;\n private _verticalScale!: ScaleLinear<number, number>;\n private _containerDimensions!: Dimensions;\n private _dieDimensions!: Dimensions;\n private _margin!: Margin;\n private _verticalCoefficient!: number;\n private _horizontalCoefficient!: number;\n private _horizontalConstant!: number;\n private _verticalConstant!: number;\n private _gridMinX!: number;\n private _gridMaxX!: number;\n private _gridMinY!: number;\n private _gridMaxY!: number;\n private _labelsFontSize!: number;\n private _colorScale!: ColorScale;\n\n private readonly baseMarginPercentage = 0.04;\n private readonly fontSizeFactor = 0.8;\n private readonly colorScaleResolution = 10;\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public componentResizeUpdate(): void {\n const canvasDimensions = {\n width: this.wafermap.canvasWidth,\n height: this.wafermap.canvasHeight\n };\n const canvasDiameter = Math.min(\n canvasDimensions.width,\n canvasDimensions.height\n );\n const canvasMargin = {\n top: (canvasDimensions.height - canvasDiameter) / 2,\n right: (canvasDimensions.width - canvasDiameter) / 2,\n bottom: (canvasDimensions.height - canvasDiameter) / 2,\n left: (canvasDimensions.width - canvasDiameter) / 2\n };\n const baseMargin = {\n top: canvasDiameter * this.baseMarginPercentage,\n right: canvasDiameter * this.baseMarginPercentage,\n bottom: canvasDiameter * this.baseMarginPercentage,\n left: canvasDiameter * this.baseMarginPercentage\n };\n this._margin = this.calculateMarginAddition(baseMargin, canvasMargin);\n this._containerDimensions = this.calculateContainerDimensions(\n canvasDimensions,\n this.margin\n );\n this.inputDataUpdate();\n }\n\n public inputDataUpdate(): void {\n if (this._containerDimensions === undefined) {\n this.componentResizeUpdate();\n return;\n }\n const containerDiameter = Math.min(\n this._containerDimensions.width,\n this._containerDimensions.height\n );\n if (this.gridDimensionsValidAndDefined()) {\n this.setGridDimensionsFromBoundingBox();\n } else {\n this.setGridDimensionsFromDies();\n }\n // this scale is used for positioning the dies on the canvas\n const originLocation = this.wafermap.originLocation;\n this._horizontalScale = this.createHorizontalScale(\n originLocation,\n containerDiameter\n );\n // this scale is used for positioning the dies on the canvas\n this._verticalScale = this.createVerticalScale(\n originLocation,\n containerDiameter\n );\n this._horizontalCoefficient = this._horizontalScale(1) - this._horizontalScale(0);\n this._verticalCoefficient = this._verticalScale(1) - this._verticalScale(0);\n this._horizontalConstant = this._horizontalScale(0);\n this._verticalConstant = this._verticalScale(0);\n\n this._dieDimensions = {\n width: Math.abs(\n this._horizontalScale(0) - this._horizontalScale(1)\n ),\n height: Math.abs(this._verticalScale(0) - this._verticalScale(1))\n };\n this.colorAndTextUpdate();\n }\n\n public colorAndTextUpdate(): void {\n if (this._dieDimensions === undefined) {\n this.inputDataUpdate();\n return;\n }\n this._labelsFontSize = this.calculateLabelsFontSize(\n this._dieDimensions,\n this.wafermap.maxCharacters\n );\n this._colorScale = this.calculateColorScale();\n }\n\n private gridDimensionsValidAndDefined(): boolean {\n return (\n !this.wafermap.validity.invalidGridDimensions\n && typeof this.wafermap.gridMinX === 'number'\n && typeof this.wafermap.gridMinY === 'number'\n && typeof this.wafermap.gridMaxX === 'number'\n && typeof this.wafermap.gridMinX === 'number'\n );\n }\n\n private setGridDimensionsFromBoundingBox(): void {\n this._gridMinX = this.wafermap.gridMinX!;\n this._gridMinY = this.wafermap.gridMinY!;\n this._gridMaxX = this.wafermap.gridMaxX!;\n this._gridMaxY = this.wafermap.gridMaxY!;\n }\n\n private setGridDimensionsFromDies(): void {\n if (this.wafermap.diesTable === undefined) {\n return;\n }\n\n const colIndex = this.wafermap.diesTable\n .getChild('colIndex')!\n .toArray();\n const rowIndex = this.wafermap.diesTable\n .getChild('rowIndex')!\n .toArray();\n\n const minPoint = { x: colIndex[0]!, y: rowIndex[0]! };\n const maxPoint = { x: colIndex[0]!, y: rowIndex[0]! };\n\n // will replace iterating with arquero after fixing issues: https://github.com/uwdata/arquero/pull/346\n for (let i = 0; i < colIndex.length; i++) {\n if (colIndex[i]! < minPoint.x) {\n minPoint.x = colIndex[i]!;\n }\n if (colIndex[i]! > maxPoint.x) {\n maxPoint.x = colIndex[i]!;\n }\n if (rowIndex[i]! < minPoint.y) {\n minPoint.y = rowIndex[i]!;\n }\n if (rowIndex[i]! > maxPoint.y) {\n maxPoint.y = rowIndex[i]!;\n }\n }\n this._gridMinX = minPoint.x;\n this._gridMinY = minPoint.y;\n this._gridMaxX = maxPoint.x;\n this._gridMaxY = maxPoint.y;\n }\n\n private calculateContainerDimensions(\n canvasDimensions: Dimensions,\n margin: Margin\n ): Dimensions {\n return {\n width: canvasDimensions.width - margin.left - margin.right,\n height: canvasDimensions.height - margin.top - margin.bottom\n };\n }\n\n private createHorizontalScale(\n originLocation: WaferMapOriginLocation,\n containerWidth: number\n ): ScaleLinear<number, number> {\n const scale = scaleLinear<number, number>();\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ) {\n return scale\n .domain([this._gridMinX, this._gridMaxX + 1])\n .range([0, containerWidth]);\n }\n return scale\n .domain([this._gridMinX - 1, this._gridMaxX])\n .range([containerWidth, 0]);\n }\n\n private createVerticalScale(\n originLocation: WaferMapOriginLocation,\n containerHeight: number\n ): ScaleLinear<number, number> {\n const scale = scaleLinear<number, number>();\n // html canvas has top-left origin https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#the_grid\n // we need to flip the vertical scale\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ) {\n return scale\n .domain([this._gridMinY - 1, this._gridMaxY])\n .range([containerHeight, 0]);\n }\n return scale\n .domain([this._gridMinY, this._gridMaxY + 1])\n .range([0, containerHeight]);\n }\n\n private calculateMarginAddition(\n baseMargin: Margin,\n addedMargin: Margin\n ): Margin {\n return {\n top: baseMargin.top + addedMargin.top,\n right: baseMargin.right + addedMargin.right,\n bottom: baseMargin.bottom + addedMargin.bottom,\n left: baseMargin.left + addedMargin.left\n };\n }\n\n private calculateColorScale(): ColorScale {\n if (this.wafermap.colorScaleMode === WaferMapColorScaleMode.linear) {\n const values = this.wafermap.colorScale.values.map(item => +item);\n const d3ColorScale = scaleLinear<string, string>()\n .domain(values)\n .range(this.wafermap.colorScale.colors);\n let min = values[0]!;\n let max = values[0]!;\n values.forEach(value => {\n if (value < min) {\n min = value;\n }\n if (value > max) {\n max = value;\n }\n });\n // the linear color scale will not be infinite but will be limited by the color scale resolution\n const valueSamples = range(\n min,\n max,\n (max - min) / (values.length * this.colorScaleResolution)\n ).concat(max);\n return valueSamples.map(value => {\n return {\n color: d3ColorScale(value),\n value\n };\n });\n }\n // ordinal color categories have to be sorted by value\n return this.wafermap.colorScale.colors\n .map((color, index) => {\n return {\n color,\n value: +this.wafermap.colorScale.values[index]!\n };\n })\n .sort((a, b) => a.value - b.value);\n }\n\n private calculateLabelsFontSize(\n dieDimensions: Dimensions,\n maxCharacters: number\n ): number {\n return Math.min(\n dieDimensions.height,\n (dieDimensions.width / (Math.max(2, maxCharacters) * 0.5))\n * this.fontSizeFactor\n );\n }\n}\n"]}
1
+ {"version":3,"file":"computations.js","sourceRoot":"","sources":["../../../../src/wafer-map/experimental/computations.ts"],"names":[],"mappings":"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","sourcesContent":["import { scaleLinear, ScaleLinear } from 'd3-scale';\nimport { range } from 'd3-array';\nimport type { WaferMap } from '..';\nimport { WaferMapColorScaleMode, WaferMapOriginLocation } from '../types';\nimport type { ColorScale, Dimensions, Margin } from '../workers/types';\n\n/**\n * Computations calculates and stores different measures which are used in the Wafermap\n */\nexport class Computations {\n public get horizontalScale(): ScaleLinear<number, number> {\n return this._horizontalScale;\n }\n\n public get verticalScale(): ScaleLinear<number, number> {\n return this._verticalScale;\n }\n\n public get containerDimensions(): Dimensions {\n return this._containerDimensions;\n }\n\n public get dieDimensions(): Dimensions {\n return this._dieDimensions;\n }\n\n public get margin(): Margin {\n return this._margin;\n }\n\n public get verticalCoefficient(): number {\n return this._verticalCoefficient;\n }\n\n public get horizontalCoefficient(): number {\n return this._horizontalCoefficient;\n }\n\n public get horizontalConstant(): number {\n return this._horizontalConstant;\n }\n\n public get verticalConstant(): number {\n return this._verticalConstant;\n }\n\n public get gridMinX(): number {\n return this._gridMinX;\n }\n\n public get gridMaxX(): number {\n return this._gridMaxX;\n }\n\n public get gridMinY(): number {\n return this._gridMinY;\n }\n\n public get gridMaxY(): number {\n return this._gridMaxY;\n }\n\n public get labelsFontSize(): number {\n return this._labelsFontSize;\n }\n\n public get colorScale(): ColorScale {\n return this._colorScale;\n }\n\n private _horizontalScale!: ScaleLinear<number, number>;\n private _verticalScale!: ScaleLinear<number, number>;\n private _containerDimensions!: Dimensions;\n private _dieDimensions!: Dimensions;\n private _margin!: Margin;\n private _verticalCoefficient!: number;\n private _horizontalCoefficient!: number;\n private _horizontalConstant!: number;\n private _verticalConstant!: number;\n private _gridMinX!: number;\n private _gridMaxX!: number;\n private _gridMinY!: number;\n private _gridMaxY!: number;\n private _labelsFontSize!: number;\n private _colorScale!: ColorScale;\n\n private readonly baseMarginPercentage = 0.04;\n private readonly fontSizeFactor = 0.8;\n private readonly colorScaleResolution = 10;\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public componentResizeUpdate(): void {\n const canvasDimensions = {\n width: this.wafermap.canvasWidth,\n height: this.wafermap.canvasHeight\n };\n const canvasDiameter = Math.min(\n canvasDimensions.width,\n canvasDimensions.height\n );\n const canvasMargin = {\n top: (canvasDimensions.height - canvasDiameter) / 2,\n right: (canvasDimensions.width - canvasDiameter) / 2,\n bottom: (canvasDimensions.height - canvasDiameter) / 2,\n left: (canvasDimensions.width - canvasDiameter) / 2\n };\n const baseMargin = {\n top: canvasDiameter * this.baseMarginPercentage,\n right: canvasDiameter * this.baseMarginPercentage,\n bottom: canvasDiameter * this.baseMarginPercentage,\n left: canvasDiameter * this.baseMarginPercentage\n };\n this._margin = this.calculateMarginAddition(baseMargin, canvasMargin);\n this._containerDimensions = this.calculateContainerDimensions(\n canvasDimensions,\n this.margin\n );\n this.inputDataUpdate();\n }\n\n public inputDataUpdate(): void {\n if (this._containerDimensions === undefined) {\n this.componentResizeUpdate();\n return;\n }\n const containerDiameter = Math.min(\n this._containerDimensions.width,\n this._containerDimensions.height\n );\n if (this.gridDimensionsValidAndDefined()) {\n this.setGridDimensionsFromBoundingBox();\n } else {\n this.setGridDimensionsFromDies();\n }\n // this scale is used for positioning the dies on the canvas\n const originLocation = this.wafermap.originLocation;\n this._horizontalScale = this.createHorizontalScale(\n originLocation,\n containerDiameter\n );\n // this scale is used for positioning the dies on the canvas\n this._verticalScale = this.createVerticalScale(\n originLocation,\n containerDiameter\n );\n this._horizontalCoefficient = this._horizontalScale(1) - this._horizontalScale(0);\n this._verticalCoefficient = this._verticalScale(1) - this._verticalScale(0);\n this._horizontalConstant = this._horizontalScale(0);\n this._verticalConstant = this._verticalScale(0);\n\n this._dieDimensions = {\n width: Math.abs(\n this._horizontalScale(0) - this._horizontalScale(1)\n ),\n height: Math.abs(this._verticalScale(0) - this._verticalScale(1))\n };\n this.colorAndTextUpdate();\n }\n\n public colorAndTextUpdate(): void {\n if (this._dieDimensions === undefined) {\n this.inputDataUpdate();\n return;\n }\n this._labelsFontSize = this.calculateLabelsFontSize(\n this._dieDimensions,\n this.wafermap.maxCharacters\n );\n this._colorScale = this.calculateColorScale();\n }\n\n private gridDimensionsValidAndDefined(): boolean {\n return (\n !this.wafermap.validity.invalidGridDimensions\n && typeof this.wafermap.gridMinX === 'number'\n && typeof this.wafermap.gridMinY === 'number'\n && typeof this.wafermap.gridMaxX === 'number'\n && typeof this.wafermap.gridMinX === 'number'\n );\n }\n\n private setGridDimensionsFromBoundingBox(): void {\n this._gridMinX = this.wafermap.gridMinX!;\n this._gridMinY = this.wafermap.gridMinY!;\n this._gridMaxX = this.wafermap.gridMaxX!;\n this._gridMaxY = this.wafermap.gridMaxY!;\n }\n\n private setGridDimensionsFromDies(): void {\n if (this.wafermap.diesTable === undefined) {\n return;\n }\n\n const colIndex = this.wafermap.diesTable\n .getChild('colIndex')!\n .toArray();\n const rowIndex = this.wafermap.diesTable\n .getChild('rowIndex')!\n .toArray();\n\n const minPoint = { x: colIndex[0]!, y: rowIndex[0]! };\n const maxPoint = { x: colIndex[0]!, y: rowIndex[0]! };\n\n // will replace iterating with arquero after fixing issues: https://github.com/uwdata/arquero/pull/346\n for (let i = 0; i < colIndex.length; i++) {\n if (colIndex[i]! < minPoint.x) {\n minPoint.x = colIndex[i]!;\n }\n if (colIndex[i]! > maxPoint.x) {\n maxPoint.x = colIndex[i]!;\n }\n if (rowIndex[i]! < minPoint.y) {\n minPoint.y = rowIndex[i]!;\n }\n if (rowIndex[i]! > maxPoint.y) {\n maxPoint.y = rowIndex[i]!;\n }\n }\n this._gridMinX = minPoint.x;\n this._gridMinY = minPoint.y;\n this._gridMaxX = maxPoint.x;\n this._gridMaxY = maxPoint.y;\n }\n\n private calculateContainerDimensions(\n canvasDimensions: Dimensions,\n margin: Margin\n ): Dimensions {\n return {\n width: canvasDimensions.width - margin.left - margin.right,\n height: canvasDimensions.height - margin.top - margin.bottom\n };\n }\n\n private createHorizontalScale(\n originLocation: WaferMapOriginLocation,\n containerWidth: number\n ): ScaleLinear<number, number> {\n const scale = scaleLinear<number, number>();\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ) {\n return scale\n .domain([this._gridMinX, this._gridMaxX + 1])\n .range([0, containerWidth]);\n }\n return scale\n .domain([this._gridMinX - 1, this._gridMaxX])\n .range([containerWidth, 0]);\n }\n\n private createVerticalScale(\n originLocation: WaferMapOriginLocation,\n containerHeight: number\n ): ScaleLinear<number, number> {\n const scale = scaleLinear<number, number>();\n // html canvas has top-left origin https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes#the_grid\n // we need to flip the vertical scale\n if (\n originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ) {\n return scale\n .domain([this._gridMinY - 1, this._gridMaxY])\n .range([containerHeight, 0]);\n }\n return scale\n .domain([this._gridMinY, this._gridMaxY + 1])\n .range([0, containerHeight]);\n }\n\n private calculateMarginAddition(\n baseMargin: Margin,\n addedMargin: Margin\n ): Margin {\n return {\n top: baseMargin.top + addedMargin.top,\n right: baseMargin.right + addedMargin.right,\n bottom: baseMargin.bottom + addedMargin.bottom,\n left: baseMargin.left + addedMargin.left\n };\n }\n\n private calculateColorScale(): ColorScale {\n if (this.wafermap.colorScaleMode === WaferMapColorScaleMode.linear) {\n const values = this.wafermap.colorScale.values.map(item => +item);\n const d3ColorScale = scaleLinear<string, string>()\n .domain(values)\n .range(this.wafermap.colorScale.colors);\n let min = values[0]!;\n let max = values[0]!;\n values.forEach(value => {\n if (value < min) {\n min = value;\n }\n if (value > max) {\n max = value;\n }\n });\n // the linear color scale will not be infinite but will be limited by the color scale resolution\n const valueSamples = range(\n min,\n max,\n (max - min) / (values.length * this.colorScaleResolution)\n ).concat(max);\n return valueSamples.map(value => {\n return {\n color: d3ColorScale(value),\n value\n };\n });\n }\n // ordinal color categories have to be sorted by value\n return this.wafermap.colorScale.colors\n .map((color, index) => {\n return {\n color,\n value: +this.wafermap.colorScale.values[index]!\n };\n })\n .sort((a, b) => a.value - b.value);\n }\n\n private calculateLabelsFontSize(\n dieDimensions: Dimensions,\n maxCharacters: number\n ): number {\n return Math.min(\n dieDimensions.height,\n (dieDimensions.width / (Math.max(2, maxCharacters) * 0.5))\n * this.fontSizeFactor\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"hover-handler.js","sourceRoot":"","sources":["../../../../src/wafer-map/experimental/hover-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WaferMap } from '..';\nimport { PointCoordinates, WaferMapOriginLocation } from '../types';\n\n/**\n * HoverHandler deals with user interactions and events like hovering\n */\nexport class HoverHandler {\n public constructor(private readonly wafermap: WaferMap) {}\n\n /**\n * @internal\n */\n public connect(): void {\n this.wafermap.addEventListener('mousemove', this.onMouseMove);\n this.wafermap.addEventListener('mouseout', this.onMouseOut);\n }\n\n /**\n * @internal\n */\n public disconnect(): void {\n this.wafermap.removeEventListener('mousemove', this.onMouseMove);\n this.wafermap.removeEventListener('mouseout', this.onMouseOut);\n }\n\n private readonly onMouseMove = (event: MouseEvent): void => {\n if (!this.wafermap.isExperimentalUpdate()) {\n return;\n }\n // get original mouse position in case we are in zoom.\n const invertedPoint = this.wafermap.transform.invert([\n event.offsetX,\n event.offsetY\n ]);\n const dieCoordinates = this.calculateDieCoordinates({\n x: invertedPoint[0],\n y: invertedPoint[1]\n });\n if (\n dieCoordinates === undefined\n || !this.isDieInGrid(dieCoordinates.x, dieCoordinates.y)\n ) {\n this.wafermap.hoverDie = undefined;\n return;\n }\n const colIndex = this.wafermap\n .diesTable!.getChild('colIndex')!\n .toArray();\n const rowIndex = this.wafermap\n .diesTable!.getChild('rowIndex')!\n .toArray();\n\n // will replace iterating with arquero filtering after fixing errors\n for (let i = 0; i < colIndex.length; i++) {\n if (\n colIndex[i] === dieCoordinates.x\n && rowIndex[i] === dieCoordinates.y\n ) {\n this.wafermap.hoverDie = {\n index: i,\n x: dieCoordinates.x,\n y: dieCoordinates.y\n };\n return;\n }\n }\n this.wafermap.hoverDie = undefined;\n };\n\n private readonly onMouseOut = (_event: MouseEvent): void => {\n this.wafermap.hoverDie = undefined;\n };\n\n private calculateDieCoordinates(\n mousePosition: PointCoordinates\n ): PointCoordinates | undefined {\n if (this.wafermap.isExperimentalUpdate()) {\n const originLocation = this.wafermap.originLocation;\n const xRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ? Math.floor\n : Math.ceil;\n const yRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ? Math.ceil\n : Math.floor;\n // go to x and y scale to get the x,y values of the die.\n const x = xRoundFunction(\n this.wafermap.computations.horizontalScale.invert(\n mousePosition.x - this.wafermap.computations.margin.left\n )\n );\n const y = yRoundFunction(\n this.wafermap.computations.verticalScale.invert(\n mousePosition.y - this.wafermap.computations.margin.top\n )\n );\n return { x, y };\n }\n return undefined;\n }\n\n private isDieInGrid(x: number, y: number): boolean {\n return (\n x >= this.wafermap.computations.gridMinX\n && x <= this.wafermap.computations.gridMaxX\n && y >= this.wafermap.computations.gridMinY\n && y <= this.wafermap.computations.gridMaxY\n );\n }\n}\n"]}
1
+ {"version":3,"file":"hover-handler.js","sourceRoot":"","sources":["../../../../src/wafer-map/experimental/hover-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WaferMap } from '..';\nimport { PointCoordinates, WaferMapOriginLocation } from '../types';\n\n/**\n * HoverHandler deals with user interactions and events like hovering\n */\nexport class HoverHandler {\n public constructor(private readonly wafermap: WaferMap) {}\n\n /**\n * @internal\n */\n public connect(): void {\n this.wafermap.addEventListener('mousemove', this.onMouseMove);\n this.wafermap.addEventListener('mouseout', this.onMouseOut);\n }\n\n /**\n * @internal\n */\n public disconnect(): void {\n this.wafermap.removeEventListener('mousemove', this.onMouseMove);\n this.wafermap.removeEventListener('mouseout', this.onMouseOut);\n }\n\n private readonly onMouseMove = (event: MouseEvent): void => {\n if (!this.wafermap.isExperimentalUpdate()) {\n return;\n }\n // get original mouse position in case we are in zoom.\n const invertedPoint = this.wafermap.transform.invert([\n event.offsetX,\n event.offsetY\n ]);\n const dieCoordinates = this.calculateDieCoordinates({\n x: invertedPoint[0],\n y: invertedPoint[1]\n });\n if (\n dieCoordinates === undefined\n || !this.isDieInGrid(dieCoordinates.x, dieCoordinates.y)\n ) {\n this.wafermap.hoverDie = undefined;\n return;\n }\n const colIndex = this.wafermap\n .diesTable!.getChild('colIndex')!\n .toArray();\n const rowIndex = this.wafermap\n .diesTable!.getChild('rowIndex')!\n .toArray();\n\n // will replace iterating with arquero filtering after fixing errors\n for (let i = 0; i < colIndex.length; i++) {\n if (\n colIndex[i] === dieCoordinates.x\n && rowIndex[i] === dieCoordinates.y\n ) {\n this.wafermap.hoverDie = {\n index: i,\n x: dieCoordinates.x,\n y: dieCoordinates.y\n };\n return;\n }\n }\n this.wafermap.hoverDie = undefined;\n };\n\n private readonly onMouseOut = (_event: MouseEvent): void => {\n this.wafermap.hoverDie = undefined;\n };\n\n private calculateDieCoordinates(\n mousePosition: PointCoordinates\n ): PointCoordinates | undefined {\n if (this.wafermap.isExperimentalUpdate()) {\n const originLocation = this.wafermap.originLocation;\n const xRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.topLeft\n ? Math.floor\n : Math.ceil;\n const yRoundFunction = originLocation === WaferMapOriginLocation.bottomLeft\n || originLocation === WaferMapOriginLocation.bottomRight\n ? Math.ceil\n : Math.floor;\n // go to x and y scale to get the x,y values of the die.\n const x = xRoundFunction(\n this.wafermap.computations.horizontalScale.invert(\n mousePosition.x - this.wafermap.computations.margin.left\n )\n );\n const y = yRoundFunction(\n this.wafermap.computations.verticalScale.invert(\n mousePosition.y - this.wafermap.computations.margin.top\n )\n );\n return { x, y };\n }\n return undefined;\n }\n\n private isDieInGrid(x: number, y: number): boolean {\n return (\n x >= this.wafermap.computations.gridMinX\n && x <= this.wafermap.computations.gridMaxX\n && y >= this.wafermap.computations.gridMinY\n && y <= this.wafermap.computations.gridMaxY\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"worker-renderer.js","sourceRoot":"","sources":["../../../../src/wafer-map/experimental/worker-renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Remote, transfer } from 'comlink';\nimport type { ZoomTransform } from 'd3-zoom';\nimport type { WaferMap } from '..';\nimport { HoverDieOpacity } from '../types';\nimport { createMatrixRenderer } from '../modules/create-matrix-renderer';\nimport type { MatrixRenderer } from '../workers/matrix-renderer';\nimport type { Dimensions, RenderConfig } from '../workers/types';\n\n/**\n * Responsible for drawing the dies inside the wafer map, adding dieText and scaling the canvas\n */\nexport class WorkerRenderer {\n /**\n * @internal\n */\n public matrixRenderer!: Remote<MatrixRenderer>;\n private readonly minDieDim = 100;\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public async setupWafer(snapshot: {\n canvasDimensions: Dimensions,\n renderConfig: RenderConfig,\n columnIndices: Int32Array,\n rowIndices: Int32Array,\n values: Float64Array\n }): Promise<void> {\n if (this.matrixRenderer === undefined) {\n const { matrixRenderer } = await createMatrixRenderer();\n this.matrixRenderer = matrixRenderer;\n const offscreenCanvas = this.wafermap.workerCanvas.transferControlToOffscreen();\n await this.matrixRenderer.setCanvas(\n transfer(offscreenCanvas, [offscreenCanvas])\n );\n }\n await this.matrixRenderer.setCanvasDimensions(\n snapshot.canvasDimensions\n );\n await this.matrixRenderer.setRenderConfig(snapshot.renderConfig);\n await this.matrixRenderer.setMatrixData(\n snapshot.columnIndices,\n snapshot.rowIndices,\n snapshot.values\n );\n }\n\n public async drawWafer(snapshot: {\n canvasDimensions: Dimensions,\n dieDimensions: Dimensions,\n transform: ZoomTransform,\n dieLabelsHidden: boolean\n }): Promise<void> {\n const topLeftCanvasCorner = snapshot.transform.invert([0, 0]);\n const bottomRightCanvasCorner = snapshot.transform.invert([\n snapshot.canvasDimensions.width,\n snapshot.canvasDimensions.height\n ]);\n await this.matrixRenderer.setTransformConfig({\n transform: snapshot.transform,\n topLeftCanvasCorner: {\n x: topLeftCanvasCorner[0] - snapshot.dieDimensions.width,\n y: topLeftCanvasCorner[1] - snapshot.dieDimensions.height\n },\n bottomRightCanvasCorner: {\n x: bottomRightCanvasCorner[0],\n y: bottomRightCanvasCorner[1]\n }\n });\n await this.matrixRenderer.drawWafer();\n if (\n !snapshot.dieLabelsHidden\n && snapshot.dieDimensions\n && snapshot.dieDimensions.width\n * snapshot.dieDimensions.height\n * (snapshot.transform.k || 1)\n >= this.minDieDim\n ) {\n await this.matrixRenderer.drawText();\n }\n }\n\n public renderHover(): void {\n if (\n this.wafermap.computations.dieDimensions === undefined\n || this.wafermap.transform === undefined\n ) {\n return;\n }\n this.wafermap.hoverWidth = this.wafermap.computations.dieDimensions.width\n * this.wafermap.transform.k;\n this.wafermap.hoverHeight = this.wafermap.computations.dieDimensions.height\n * this.wafermap.transform.k;\n this.wafermap.hoverOpacity = this.wafermap.hoverDie === undefined\n ? HoverDieOpacity.hide\n : HoverDieOpacity.show;\n this.wafermap.hoverTransform = this.calculateHoverTransform();\n }\n\n private calculateHoverTransform(): string {\n if (this.wafermap.hoverDie !== undefined) {\n const scaledX = this.wafermap.computations.horizontalScale(\n this.wafermap.hoverDie.x\n );\n if (scaledX === undefined) {\n return '';\n }\n const scaledY = this.wafermap.computations.verticalScale(\n this.wafermap.hoverDie.y\n );\n if (scaledY === undefined) {\n return '';\n }\n const transformedPoint = this.wafermap.transform.apply([\n scaledX + this.wafermap.computations.margin.left,\n scaledY + this.wafermap.computations.margin.top\n ]);\n return `translate(${transformedPoint[0]}, ${transformedPoint[1]})`;\n }\n return '';\n }\n}\n"]}
1
+ {"version":3,"file":"worker-renderer.js","sourceRoot":"","sources":["../../../../src/wafer-map/experimental/worker-renderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Remote, transfer } from 'comlink';\nimport type { ZoomTransform } from 'd3-zoom';\nimport type { WaferMap } from '..';\nimport { HoverDieOpacity } from '../types';\nimport { createMatrixRenderer } from '../modules/create-matrix-renderer';\nimport type { MatrixRenderer } from '../workers/matrix-renderer';\nimport type { Dimensions, RenderConfig } from '../workers/types';\n\n/**\n * Responsible for drawing the dies inside the wafer map, adding dieText and scaling the canvas\n */\nexport class WorkerRenderer {\n /**\n * @internal\n */\n public matrixRenderer!: Remote<MatrixRenderer>;\n private readonly minDieDim = 100;\n\n public constructor(private readonly wafermap: WaferMap) {}\n\n public async setupWafer(snapshot: {\n canvasDimensions: Dimensions,\n renderConfig: RenderConfig,\n columnIndices: Int32Array,\n rowIndices: Int32Array,\n values: Float64Array\n }): Promise<void> {\n if (this.matrixRenderer === undefined) {\n const { matrixRenderer } = await createMatrixRenderer();\n this.matrixRenderer = matrixRenderer;\n const offscreenCanvas = this.wafermap.workerCanvas.transferControlToOffscreen();\n await this.matrixRenderer.setCanvas(\n transfer(offscreenCanvas, [offscreenCanvas])\n );\n }\n await this.matrixRenderer.setCanvasDimensions(\n snapshot.canvasDimensions\n );\n await this.matrixRenderer.setRenderConfig(snapshot.renderConfig);\n await this.matrixRenderer.setMatrixData(\n snapshot.columnIndices,\n snapshot.rowIndices,\n snapshot.values\n );\n }\n\n public async drawWafer(snapshot: {\n canvasDimensions: Dimensions,\n dieDimensions: Dimensions,\n transform: ZoomTransform,\n dieLabelsHidden: boolean\n }): Promise<void> {\n const topLeftCanvasCorner = snapshot.transform.invert([0, 0]);\n const bottomRightCanvasCorner = snapshot.transform.invert([\n snapshot.canvasDimensions.width,\n snapshot.canvasDimensions.height\n ]);\n await this.matrixRenderer.setTransformConfig({\n transform: snapshot.transform,\n topLeftCanvasCorner: {\n x: topLeftCanvasCorner[0] - snapshot.dieDimensions.width,\n y: topLeftCanvasCorner[1] - snapshot.dieDimensions.height\n },\n bottomRightCanvasCorner: {\n x: bottomRightCanvasCorner[0],\n y: bottomRightCanvasCorner[1]\n }\n });\n await this.matrixRenderer.drawWafer();\n if (\n !snapshot.dieLabelsHidden\n && snapshot.dieDimensions\n && snapshot.dieDimensions.width\n * snapshot.dieDimensions.height\n * (snapshot.transform.k || 1)\n >= this.minDieDim\n ) {\n await this.matrixRenderer.drawText();\n }\n }\n\n public renderHover(): void {\n if (\n this.wafermap.computations.dieDimensions === undefined\n || this.wafermap.transform === undefined\n ) {\n return;\n }\n this.wafermap.hoverWidth = this.wafermap.computations.dieDimensions.width\n * this.wafermap.transform.k;\n this.wafermap.hoverHeight = this.wafermap.computations.dieDimensions.height\n * this.wafermap.transform.k;\n this.wafermap.hoverOpacity = this.wafermap.hoverDie === undefined\n ? HoverDieOpacity.hide\n : HoverDieOpacity.show;\n this.wafermap.hoverTransform = this.calculateHoverTransform();\n }\n\n private calculateHoverTransform(): string {\n if (this.wafermap.hoverDie !== undefined) {\n const scaledX = this.wafermap.computations.horizontalScale(\n this.wafermap.hoverDie.x\n );\n if (scaledX === undefined) {\n return '';\n }\n const scaledY = this.wafermap.computations.verticalScale(\n this.wafermap.hoverDie.y\n );\n if (scaledY === undefined) {\n return '';\n }\n const transformedPoint = this.wafermap.transform.apply([\n scaledX + this.wafermap.computations.margin.left,\n scaledY + this.wafermap.computations.margin.top\n ]);\n return `translate(${transformedPoint[0]}, ${transformedPoint[1]})`;\n }\n return '';\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wafer-map/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DOM,\n attr,\n nullableNumberConverter,\n observable\n} from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport { zoomIdentity, ZoomTransform } from 'd3-zoom';\nimport { type Table, tableFromIPC } from 'apache-arrow';\nimport { template } from './template';\nimport { styles } from './styles';\nimport { DataManager } from './modules/data-manager';\nimport { RenderingModule } from './modules/rendering';\nimport {\n HoverDie,\n HoverDieOpacity,\n WaferMapColorScale,\n WaferMapColorScaleMode,\n WaferMapDie,\n WaferMapOrientation,\n WaferMapOriginLocation,\n WaferMapValidity,\n type WaferRequiredFields\n} from './types';\nimport { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';\nimport { WaferMapValidator } from './modules/wafer-map-validator';\nimport { WorkerRenderer } from './experimental/worker-renderer';\nimport { HoverHandler } from './modules/hover-handler';\nimport { HoverHandler as ExperimentalHoverHandler } from './experimental/hover-handler';\nimport { ZoomHandler } from './modules/zoom-handler';\nimport { Computations } from './experimental/computations';\nimport type { Dimensions, RenderConfig } from './workers/types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-wafer-map': WaferMap;\n }\n}\n\n/**\n * A nimble-styled WaferMap\n */\nexport class WaferMap<\n T extends WaferRequiredFields = WaferRequiredFields\n> extends FoundationElement {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public static readonly Arrow = {\n tableFromIPC\n };\n\n /**\n * @internal\n * needs to be initialized before the properties trigger changes\n */\n public readonly waferMapUpdateTracker: WaferMapUpdateTracker = new WaferMapUpdateTracker(this.asRequiredFieldsWaferMap);\n\n @attr({ attribute: 'origin-location' })\n public originLocation: WaferMapOriginLocation = WaferMapOriginLocation.bottomLeft;\n\n @attr({ attribute: 'grid-min-x', converter: nullableNumberConverter })\n public gridMinX?: number = undefined;\n\n @attr({ attribute: 'grid-max-x', converter: nullableNumberConverter })\n public gridMaxX?: number = undefined;\n\n @attr({ attribute: 'grid-min-y', converter: nullableNumberConverter })\n public gridMinY?: number = undefined;\n\n @attr({ attribute: 'grid-max-y', converter: nullableNumberConverter })\n public gridMaxY?: number = undefined;\n\n @attr\n public orientation: WaferMapOrientation = WaferMapOrientation.top;\n\n @attr({ attribute: 'max-characters', converter: nullableNumberConverter })\n public maxCharacters = 4;\n\n @attr({ attribute: 'die-labels-hidden', mode: 'boolean' })\n public dieLabelsHidden = false;\n\n @attr({ attribute: 'die-labels-suffix' })\n public dieLabelsSuffix = '';\n\n @attr({ attribute: 'color-scale-mode' })\n public colorScaleMode: WaferMapColorScaleMode = WaferMapColorScaleMode.linear;\n\n /**\n * @internal\n */\n public currentTask: Promise<void> | undefined;\n\n /**\n * @internal\n */\n public workerCanvas!: HTMLCanvasElement;\n\n /**\n * @internal\n */\n public readonly canvas!: HTMLCanvasElement;\n\n /**\n * @internal\n */\n public canvasContext!: CanvasRenderingContext2D;\n\n /**\n * @internal\n */\n public readonly zoomContainer!: HTMLElement;\n\n public readonly computations: Computations = new Computations(\n this.asRequiredFieldsWaferMap\n );\n\n public dataManager: DataManager = new DataManager(\n this.asRequiredFieldsWaferMap\n );\n\n public readonly workerRenderer = new WorkerRenderer(\n this.asRequiredFieldsWaferMap\n );\n\n @observable\n public renderer: RenderingModule = new RenderingModule(\n this.asRequiredFieldsWaferMap\n );\n\n /**\n * @internal\n */\n public renderQueued = false;\n\n /**\n * @internal\n */\n @observable public canvasWidth!: number;\n\n /**\n * @internal\n */\n @observable public canvasHeight!: number;\n\n /**\n * @internal\n */\n @observable public transform: ZoomTransform = zoomIdentity;\n\n /**\n * @internal\n */\n @observable public hoverTransform = '';\n\n /**\n * @internal\n */\n @observable public hoverOpacity: HoverDieOpacity = HoverDieOpacity.hide;\n\n /**\n * @internal\n */\n @observable public hoverWidth = 0;\n\n /**\n * @internal\n */\n @observable public hoverHeight = 0;\n\n /**\n * @internal\n */\n @observable public hoverDie: WaferMapDie | HoverDie | undefined;\n\n @observable public highlightedTags: string[] = [];\n @observable public dies: WaferMapDie[] = [];\n @observable public diesTable: Table<T> | undefined;\n\n @observable public colorScale: WaferMapColorScale = {\n colors: [],\n values: []\n };\n\n private readonly hoverHandler: HoverHandler = new HoverHandler(\n this.asRequiredFieldsWaferMap\n );\n\n private readonly experimentalHoverHandler: ExperimentalHoverHandler = new ExperimentalHoverHandler(this.asRequiredFieldsWaferMap);\n\n private readonly zoomHandler: ZoomHandler = new ZoomHandler(\n this.asRequiredFieldsWaferMap\n );\n\n private readonly resizeObserver = this.createResizeObserver();\n private readonly waferMapValidator: WaferMapValidator = new WaferMapValidator(this.asRequiredFieldsWaferMap);\n\n public get validity(): WaferMapValidity {\n return this.waferMapValidator.getValidity();\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.canvasContext = this.canvas.getContext('2d', {\n willReadFrequently: true\n })!;\n this.hoverHandler.connect();\n this.experimentalHoverHandler.connect();\n this.zoomHandler.connect();\n this.resizeObserver.observe(this);\n this.waferMapUpdateTracker.trackAll();\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.hoverHandler.disconnect();\n this.experimentalHoverHandler.disconnect();\n this.zoomHandler.disconnect();\n this.resizeObserver.unobserve(this);\n }\n\n /**\n * @internal\n * Experimental update function called when an update is queued.\n */\n public async experimentalUpdate(): Promise<void> {\n if (this.validity.invalidDiesTableSchema) {\n return;\n }\n if (this.waferMapUpdateTracker.requiresEventsUpdate) {\n if (this.waferMapUpdateTracker.requiresComponentResizeUpdate) {\n this.computations.componentResizeUpdate();\n } else if (this.waferMapUpdateTracker.requiresInputDataUpdate) {\n this.computations.inputDataUpdate();\n } else if (this.waferMapUpdateTracker.requiresColorAndTextUpdate) {\n this.computations.colorAndTextUpdate();\n }\n const snapshot = this.createSnapshot();\n if (this.waferMapUpdateTracker.requiresWorkerWaferSetup) {\n await this.workerRenderer.setupWafer(snapshot);\n }\n await this.workerRenderer.drawWafer(snapshot);\n }\n this.workerRenderer.renderHover();\n }\n\n /**\n * @internal\n * Update function called when an update is queued.\n * It will check which updates are needed based on which properties have changed.\n * Each update represents a different starting point of the same sequential update flow.\n * The updates snowball one after the other, this function only choses the 'altitude'.\n * The hover does not require an event update, but it's also the last update in the sequence.\n */\n public update(): void {\n this.validate();\n if (this.isExperimentalUpdate()) {\n this.currentTask = this.experimentalUpdate();\n return;\n }\n if (this.waferMapUpdateTracker.requiresEventsUpdate) {\n if (this.waferMapUpdateTracker.requiresContainerDimensionsUpdate) {\n this.dataManager.updateContainerDimensions();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresScalesUpdate) {\n this.dataManager.updateScales();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresLabelsFontSizeUpdate\n ) {\n this.dataManager.updateLabelsFontSize();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresDiesRenderInfoUpdate\n ) {\n this.dataManager.updateDiesRenderInfo();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresDrawnWaferUpdate) {\n this.renderer.drawWafer();\n }\n } else if (this.waferMapUpdateTracker.requiresRenderHoverUpdate) {\n this.renderer.renderHover();\n }\n }\n\n /**\n * @internal\n */\n public isExperimentalUpdate(): boolean {\n return this.diesTable !== undefined;\n }\n\n public async setData(data: Table | WaferMapDie[]): Promise<void> {\n if (Array.isArray(data)) {\n this.dies = data;\n } else {\n this.diesTable = data;\n }\n await DOM.nextUpdate();\n if (this.currentTask !== undefined) {\n await this.currentTask;\n }\n }\n\n private createSnapshot(): {\n canvasDimensions: Dimensions,\n renderConfig: RenderConfig,\n dieDimensions: Dimensions,\n transform: ZoomTransform,\n dieLabelsHidden: boolean,\n columnIndices: Int32Array,\n rowIndices: Int32Array,\n values: Float64Array\n } {\n const canvasDimensions = {\n width: this.canvasWidth ?? 0,\n height: this.canvasHeight ?? 0\n };\n const renderConfig: RenderConfig = {\n dieDimensions: this.computations.dieDimensions,\n margin: this.computations.margin,\n verticalCoefficient: this.computations.verticalCoefficient,\n horizontalCoefficient: this.computations.horizontalCoefficient,\n horizontalConstant: this.computations.horizontalConstant,\n verticalConstant: this.computations.verticalConstant,\n gridMinX: this.computations.gridMinX,\n gridMaxX: this.computations.gridMaxX,\n gridMinY: this.computations.gridMinY,\n gridMaxY: this.computations.gridMaxY,\n labelsFontSize: this.computations.labelsFontSize,\n colorScale: this.computations.colorScale,\n dieLabelsSuffix: this.dieLabelsSuffix,\n maxCharacters: this.maxCharacters\n };\n const dieDimensions = this.computations.dieDimensions;\n const transform = this.transform;\n const dieLabelsHidden = this.dieLabelsHidden;\n if (this.diesTable === undefined) {\n return {\n canvasDimensions,\n renderConfig,\n dieDimensions,\n transform,\n dieLabelsHidden,\n columnIndices: Int32Array.from([]),\n rowIndices: Int32Array.from([]),\n values: Float64Array.from([])\n };\n }\n const columnIndices = this.diesTable.getChild('colIndex')!.toArray();\n const rowIndices = this.diesTable.getChild('rowIndex')!.toArray();\n const values = this.diesTable.getChild('value')!.toArray();\n return {\n canvasDimensions,\n renderConfig,\n columnIndices,\n rowIndices,\n values,\n dieDimensions,\n transform,\n dieLabelsHidden\n };\n }\n\n private validate(): void {\n this.waferMapValidator.validateGridDimensions();\n this.waferMapValidator.validateDiesTableSchema();\n }\n\n private createResizeObserver(): ResizeObserver {\n const resizeObserver = new ResizeObserver(entries => {\n const entry = entries[0];\n if (entry === undefined) {\n return;\n }\n const { height, width } = entry.contentRect;\n // Updating the canvas size clears its contents so update it explicitly instead of\n // via template bindings so we can confirm that it happens before render\n this.canvas.width = width;\n this.canvas.height = height;\n this.canvasWidth = width;\n this.canvasHeight = height;\n });\n return resizeObserver;\n }\n\n private originLocationChanged(): void {\n this.waferMapUpdateTracker.track('originLocation');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinXChanged(): void {\n this.waferMapUpdateTracker.track('gridMinX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxXChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinYChanged(): void {\n this.waferMapUpdateTracker.track('gridMinY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxYChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private maxCharactersChanged(): void {\n this.waferMapUpdateTracker.track('maxCharacters');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsHiddenChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsHidden');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsSuffixChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsSuffix');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleModeChanged(): void {\n this.waferMapUpdateTracker.track('colorScaleMode');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private highlightedTagsChanged(): void {\n this.waferMapUpdateTracker.track('highlightedTags');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesTableChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleChanged(): void {\n this.waferMapUpdateTracker.track('colorScale');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private transformChanged(): void {\n this.waferMapUpdateTracker.track('transform');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasWidthChanged(): void {\n this.waferMapUpdateTracker.track('canvasWidth');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasHeightChanged(): void {\n this.waferMapUpdateTracker.track('canvasHeight');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private hoverDieChanged(): void {\n this.$emit('die-hover', { currentDie: this.hoverDie });\n this.waferMapUpdateTracker.track('hoverDie');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private get asRequiredFieldsWaferMap(): WaferMap {\n return this as WaferMap;\n }\n}\n\nconst nimbleWaferMap = WaferMap.compose({\n baseName: 'wafer-map',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleWaferMap());\nexport const waferMapTag = 'nimble-wafer-map';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/wafer-map/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DOM,\n attr,\n nullableNumberConverter,\n observable\n} from '@microsoft/fast-element';\nimport { DesignSystem, FoundationElement } from '@microsoft/fast-foundation';\nimport { zoomIdentity, ZoomTransform } from 'd3-zoom';\nimport { type Table, tableFromIPC } from 'apache-arrow';\nimport { template } from './template';\nimport { styles } from './styles';\nimport { DataManager } from './modules/data-manager';\nimport { RenderingModule } from './modules/rendering';\nimport {\n HoverDie,\n HoverDieOpacity,\n WaferMapColorScale,\n WaferMapColorScaleMode,\n WaferMapDie,\n WaferMapOrientation,\n WaferMapOriginLocation,\n WaferMapValidity,\n type WaferRequiredFields\n} from './types';\nimport { WaferMapUpdateTracker } from './modules/wafer-map-update-tracker';\nimport { WaferMapValidator } from './modules/wafer-map-validator';\nimport { WorkerRenderer } from './experimental/worker-renderer';\nimport { HoverHandler } from './modules/hover-handler';\nimport { HoverHandler as ExperimentalHoverHandler } from './experimental/hover-handler';\nimport { ZoomHandler } from './modules/zoom-handler';\nimport { Computations } from './experimental/computations';\nimport type { Dimensions, RenderConfig } from './workers/types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-wafer-map': WaferMap;\n }\n}\n\n/**\n * A nimble-styled WaferMap\n */\nexport class WaferMap<\n T extends WaferRequiredFields = WaferRequiredFields\n> extends FoundationElement {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public static readonly Arrow = {\n tableFromIPC\n };\n\n /**\n * @internal\n * needs to be initialized before the properties trigger changes\n */\n public readonly waferMapUpdateTracker: WaferMapUpdateTracker = new WaferMapUpdateTracker(this.asRequiredFieldsWaferMap);\n\n @attr({ attribute: 'origin-location' })\n public originLocation: WaferMapOriginLocation = WaferMapOriginLocation.bottomLeft;\n\n @attr({ attribute: 'grid-min-x', converter: nullableNumberConverter })\n public gridMinX?: number = undefined;\n\n @attr({ attribute: 'grid-max-x', converter: nullableNumberConverter })\n public gridMaxX?: number = undefined;\n\n @attr({ attribute: 'grid-min-y', converter: nullableNumberConverter })\n public gridMinY?: number = undefined;\n\n @attr({ attribute: 'grid-max-y', converter: nullableNumberConverter })\n public gridMaxY?: number = undefined;\n\n @attr\n public orientation: WaferMapOrientation = WaferMapOrientation.top;\n\n @attr({ attribute: 'max-characters', converter: nullableNumberConverter })\n public maxCharacters = 4;\n\n @attr({ attribute: 'die-labels-hidden', mode: 'boolean' })\n public dieLabelsHidden = false;\n\n @attr({ attribute: 'die-labels-suffix' })\n public dieLabelsSuffix = '';\n\n @attr({ attribute: 'color-scale-mode' })\n public colorScaleMode: WaferMapColorScaleMode = WaferMapColorScaleMode.linear;\n\n /**\n * @internal\n */\n public currentTask: Promise<void> | undefined;\n\n /**\n * @internal\n */\n public workerCanvas!: HTMLCanvasElement;\n\n /**\n * @internal\n */\n public readonly canvas!: HTMLCanvasElement;\n\n /**\n * @internal\n */\n public canvasContext!: CanvasRenderingContext2D;\n\n /**\n * @internal\n */\n public readonly zoomContainer!: HTMLElement;\n\n public readonly computations: Computations = new Computations(\n this.asRequiredFieldsWaferMap\n );\n\n public dataManager: DataManager = new DataManager(\n this.asRequiredFieldsWaferMap\n );\n\n public readonly workerRenderer = new WorkerRenderer(\n this.asRequiredFieldsWaferMap\n );\n\n @observable\n public renderer: RenderingModule = new RenderingModule(\n this.asRequiredFieldsWaferMap\n );\n\n /**\n * @internal\n */\n public renderQueued = false;\n\n /**\n * @internal\n */\n @observable public canvasWidth!: number;\n\n /**\n * @internal\n */\n @observable public canvasHeight!: number;\n\n /**\n * @internal\n */\n @observable public transform: ZoomTransform = zoomIdentity;\n\n /**\n * @internal\n */\n @observable public hoverTransform = '';\n\n /**\n * @internal\n */\n @observable public hoverOpacity: HoverDieOpacity = HoverDieOpacity.hide;\n\n /**\n * @internal\n */\n @observable public hoverWidth = 0;\n\n /**\n * @internal\n */\n @observable public hoverHeight = 0;\n\n /**\n * @internal\n */\n @observable public hoverDie: WaferMapDie | HoverDie | undefined;\n\n @observable public highlightedTags: string[] = [];\n @observable public dies: WaferMapDie[] = [];\n @observable public diesTable: Table<T> | undefined;\n\n @observable public colorScale: WaferMapColorScale = {\n colors: [],\n values: []\n };\n\n private readonly hoverHandler: HoverHandler = new HoverHandler(\n this.asRequiredFieldsWaferMap\n );\n\n private readonly experimentalHoverHandler: ExperimentalHoverHandler = new ExperimentalHoverHandler(this.asRequiredFieldsWaferMap);\n\n private readonly zoomHandler: ZoomHandler = new ZoomHandler(\n this.asRequiredFieldsWaferMap\n );\n\n private readonly resizeObserver = this.createResizeObserver();\n private readonly waferMapValidator: WaferMapValidator = new WaferMapValidator(this.asRequiredFieldsWaferMap);\n\n public get validity(): WaferMapValidity {\n return this.waferMapValidator.getValidity();\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this.canvasContext = this.canvas.getContext('2d', {\n willReadFrequently: true\n })!;\n this.hoverHandler.connect();\n this.experimentalHoverHandler.connect();\n this.zoomHandler.connect();\n this.resizeObserver.observe(this);\n this.waferMapUpdateTracker.trackAll();\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.hoverHandler.disconnect();\n this.experimentalHoverHandler.disconnect();\n this.zoomHandler.disconnect();\n this.resizeObserver.unobserve(this);\n }\n\n /**\n * @internal\n * Experimental update function called when an update is queued.\n */\n public async experimentalUpdate(): Promise<void> {\n if (this.validity.invalidDiesTableSchema) {\n return;\n }\n if (this.waferMapUpdateTracker.requiresEventsUpdate) {\n if (this.waferMapUpdateTracker.requiresComponentResizeUpdate) {\n this.computations.componentResizeUpdate();\n } else if (this.waferMapUpdateTracker.requiresInputDataUpdate) {\n this.computations.inputDataUpdate();\n } else if (this.waferMapUpdateTracker.requiresColorAndTextUpdate) {\n this.computations.colorAndTextUpdate();\n }\n const snapshot = this.createSnapshot();\n if (this.waferMapUpdateTracker.requiresWorkerWaferSetup) {\n await this.workerRenderer.setupWafer(snapshot);\n }\n await this.workerRenderer.drawWafer(snapshot);\n }\n this.workerRenderer.renderHover();\n }\n\n /**\n * @internal\n * Update function called when an update is queued.\n * It will check which updates are needed based on which properties have changed.\n * Each update represents a different starting point of the same sequential update flow.\n * The updates snowball one after the other, this function only choses the 'altitude'.\n * The hover does not require an event update, but it's also the last update in the sequence.\n */\n public update(): void {\n this.validate();\n if (this.isExperimentalUpdate()) {\n this.currentTask = this.experimentalUpdate();\n return;\n }\n if (this.waferMapUpdateTracker.requiresEventsUpdate) {\n if (this.waferMapUpdateTracker.requiresContainerDimensionsUpdate) {\n this.dataManager.updateContainerDimensions();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresScalesUpdate) {\n this.dataManager.updateScales();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresLabelsFontSizeUpdate\n ) {\n this.dataManager.updateLabelsFontSize();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (\n this.waferMapUpdateTracker.requiresDiesRenderInfoUpdate\n ) {\n this.dataManager.updateDiesRenderInfo();\n this.renderer.updateSortedDiesAndDrawWafer();\n } else if (this.waferMapUpdateTracker.requiresDrawnWaferUpdate) {\n this.renderer.drawWafer();\n }\n } else if (this.waferMapUpdateTracker.requiresRenderHoverUpdate) {\n this.renderer.renderHover();\n }\n }\n\n /**\n * @internal\n */\n public isExperimentalUpdate(): boolean {\n return this.diesTable !== undefined;\n }\n\n public async setData(data: Table | WaferMapDie[]): Promise<void> {\n if (Array.isArray(data)) {\n this.dies = data;\n } else {\n this.diesTable = data;\n }\n await DOM.nextUpdate();\n if (this.currentTask !== undefined) {\n await this.currentTask;\n }\n }\n\n private createSnapshot(): {\n canvasDimensions: Dimensions,\n renderConfig: RenderConfig,\n dieDimensions: Dimensions,\n transform: ZoomTransform,\n dieLabelsHidden: boolean,\n columnIndices: Int32Array,\n rowIndices: Int32Array,\n values: Float64Array\n } {\n const canvasDimensions = {\n width: this.canvasWidth ?? 0,\n height: this.canvasHeight ?? 0\n };\n const renderConfig: RenderConfig = {\n dieDimensions: this.computations.dieDimensions,\n margin: this.computations.margin,\n verticalCoefficient: this.computations.verticalCoefficient,\n horizontalCoefficient: this.computations.horizontalCoefficient,\n horizontalConstant: this.computations.horizontalConstant,\n verticalConstant: this.computations.verticalConstant,\n gridMinX: this.computations.gridMinX,\n gridMaxX: this.computations.gridMaxX,\n gridMinY: this.computations.gridMinY,\n gridMaxY: this.computations.gridMaxY,\n labelsFontSize: this.computations.labelsFontSize,\n colorScale: this.computations.colorScale,\n dieLabelsSuffix: this.dieLabelsSuffix,\n maxCharacters: this.maxCharacters\n };\n const dieDimensions = this.computations.dieDimensions;\n const transform = this.transform;\n const dieLabelsHidden = this.dieLabelsHidden;\n if (this.diesTable === undefined) {\n return {\n canvasDimensions,\n renderConfig,\n dieDimensions,\n transform,\n dieLabelsHidden,\n columnIndices: Int32Array.from([]),\n rowIndices: Int32Array.from([]),\n values: Float64Array.from([])\n };\n }\n const columnIndices = this.diesTable.getChild('colIndex')!.toArray();\n const rowIndices = this.diesTable.getChild('rowIndex')!.toArray();\n const values = this.diesTable.getChild('value')!.toArray();\n return {\n canvasDimensions,\n renderConfig,\n columnIndices,\n rowIndices,\n values,\n dieDimensions,\n transform,\n dieLabelsHidden\n };\n }\n\n private validate(): void {\n this.waferMapValidator.validateGridDimensions();\n this.waferMapValidator.validateDiesTableSchema();\n }\n\n private createResizeObserver(): ResizeObserver {\n const resizeObserver = new ResizeObserver(entries => {\n const entry = entries[0];\n if (entry === undefined) {\n return;\n }\n const { height, width } = entry.contentRect;\n // Updating the canvas size clears its contents so update it explicitly instead of\n // via template bindings so we can confirm that it happens before render\n this.canvas.width = width;\n this.canvas.height = height;\n this.canvasWidth = width;\n this.canvasHeight = height;\n });\n return resizeObserver;\n }\n\n private originLocationChanged(): void {\n this.waferMapUpdateTracker.track('originLocation');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinXChanged(): void {\n this.waferMapUpdateTracker.track('gridMinX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxXChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxX');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMinYChanged(): void {\n this.waferMapUpdateTracker.track('gridMinY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private gridMaxYChanged(): void {\n this.waferMapUpdateTracker.track('gridMaxY');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private maxCharactersChanged(): void {\n this.waferMapUpdateTracker.track('maxCharacters');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsHiddenChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsHidden');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private dieLabelsSuffixChanged(): void {\n this.waferMapUpdateTracker.track('dieLabelsSuffix');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleModeChanged(): void {\n this.waferMapUpdateTracker.track('colorScaleMode');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private highlightedTagsChanged(): void {\n this.waferMapUpdateTracker.track('highlightedTags');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private diesTableChanged(): void {\n this.waferMapUpdateTracker.track('dies');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private colorScaleChanged(): void {\n this.waferMapUpdateTracker.track('colorScale');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private transformChanged(): void {\n this.waferMapUpdateTracker.track('transform');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasWidthChanged(): void {\n this.waferMapUpdateTracker.track('canvasWidth');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private canvasHeightChanged(): void {\n this.waferMapUpdateTracker.track('canvasHeight');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private hoverDieChanged(): void {\n this.$emit('die-hover', { currentDie: this.hoverDie });\n this.waferMapUpdateTracker.track('hoverDie');\n this.waferMapUpdateTracker.queueUpdate();\n }\n\n private get asRequiredFieldsWaferMap(): WaferMap {\n return this as WaferMap;\n }\n}\n\nconst nimbleWaferMap = WaferMap.compose({\n baseName: 'wafer-map',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleWaferMap());\nexport const waferMapTag = 'nimble-wafer-map';\n"]}