@trdrs/quickcharts 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -100,6 +100,19 @@ import {
100
100
  reviseDrawingDocument,
101
101
  sameDrawingContext
102
102
  } from "./chunk-KLPTCWA2.js";
103
+ import {
104
+ createPriceFormatter,
105
+ parseTickBands,
106
+ tickBandFor
107
+ } from "./chunk-6OLK55Q2.js";
108
+ import {
109
+ EMOJI_CATEGORIES,
110
+ ICON_CATEGORIES,
111
+ isEmojiGlyph
112
+ } from "./chunk-QYGSDD2Q.js";
113
+ import {
114
+ symbolNames
115
+ } from "./chunk-GFQQSY47.js";
103
116
 
104
117
  // src/datafeed.ts
105
118
  function olderPageVerdict(page, askedTo, alreadyHopped) {
@@ -4949,7 +4962,8 @@ import {
4949
4962
  CrosshairMode,
4950
4963
  createChart as createRenderer,
4951
4964
  HistogramSeries as HistogramSeries2,
4952
- LineSeries as LineSeries4
4965
+ LineSeries as LineSeries4,
4966
+ TrackingModeExitMode
4953
4967
  } from "lightweight-charts";
4954
4968
 
4955
4969
  // src/overrides.ts
@@ -5003,145 +5017,6 @@ function coerceScaleMode(raw) {
5003
5017
  return SCALE_MODES.includes(raw ?? "") ? raw : "normal";
5004
5018
  }
5005
5019
 
5006
- // src/symbology.ts
5007
- function parseTickBands(variableTickSize) {
5008
- const parts = variableTickSize.trim().split(/\s+/).filter(Boolean);
5009
- if (parts.length === 0 || parts.length % 2 === 0) return [];
5010
- const bands = [];
5011
- for (let i = 0; i < parts.length; i += 2) {
5012
- const size = Number(parts[i]);
5013
- if (!Number.isFinite(size) || size <= 0) return [];
5014
- const raw = parts[i + 1];
5015
- if (raw === void 0) {
5016
- bands.push({ size, below: Number.POSITIVE_INFINITY });
5017
- break;
5018
- }
5019
- const below = Number(raw);
5020
- if (!Number.isFinite(below)) return [];
5021
- if (bands.length > 0 && below <= bands[bands.length - 1].below) return [];
5022
- bands.push({ size, below });
5023
- }
5024
- return bands;
5025
- }
5026
- function tickBandFor(bands, price) {
5027
- const at = Math.abs(price);
5028
- for (const band of bands) if (at < band.below) return band;
5029
- return bands.length > 0 ? bands[bands.length - 1] : null;
5030
- }
5031
-
5032
- // src/priceFormatter.ts
5033
- var FRACTION_SIGN = "'";
5034
- function decimalsOfPriceScale(pricescale) {
5035
- if (!Number.isFinite(pricescale) || pricescale <= 1) return 0;
5036
- return Math.min(16, Math.ceil(Math.log10(pricescale) - 1e-9));
5037
- }
5038
- function localeDecimalSign(locale) {
5039
- try {
5040
- const part = new Intl.NumberFormat(locale).formatToParts(1.1).find((p) => p.type === "decimal");
5041
- return part?.value ?? ".";
5042
- } catch {
5043
- return ".";
5044
- }
5045
- }
5046
- function groupDigits(digits, groupSign) {
5047
- if (!groupSign) return digits;
5048
- let out = "";
5049
- for (let i = 0; i < digits.length; i++) {
5050
- if (i > 0 && (digits.length - i) % 3 === 0) out += groupSign;
5051
- out += digits[i];
5052
- }
5053
- return out;
5054
- }
5055
- function fixedText(value, decimals) {
5056
- return Math.abs(value).toFixed(Math.min(20, decimals));
5057
- }
5058
- function writeDecimal(price, decimals, punctuation) {
5059
- const fixed = fixedText(price, decimals);
5060
- const dot = fixed.indexOf(".");
5061
- const whole = dot < 0 ? fixed : fixed.slice(0, dot);
5062
- const frac = dot < 0 ? "" : fixed.slice(dot + 1);
5063
- const sign = price < 0 && Number(fixed) !== 0 ? "-" : "";
5064
- const body = groupDigits(whole, punctuation.groupSign);
5065
- return frac ? `${sign}${body}${punctuation.decimalSign}${frac}` : `${sign}${body}`;
5066
- }
5067
- function writeFractional(price, format2, punctuation) {
5068
- const scale = format2.pricescale;
5069
- const second = format2.minmove2 && format2.minmove2 > 1 ? format2.minmove2 : 1;
5070
- const at = Math.abs(price);
5071
- const total2 = Math.round(at * scale);
5072
- const whole = Math.floor(total2 / scale);
5073
- const units = total2 - whole * scale;
5074
- const outer = Math.floor(units / second);
5075
- const inner = units - outer * second;
5076
- const outerWidth = String(Math.ceil(scale / second) - 1).length;
5077
- const sign = price < 0 && total2 !== 0 ? "-" : "";
5078
- const body = groupDigits(String(whole), punctuation.groupSign);
5079
- const outerText = String(outer).padStart(outerWidth, "0");
5080
- return second > 1 ? `${sign}${body}${FRACTION_SIGN}${outerText}${FRACTION_SIGN}${inner}` : `${sign}${body}${FRACTION_SIGN}${outerText}`;
5081
- }
5082
- function parseFractional(text2, format2) {
5083
- const scale = format2.pricescale;
5084
- const second = format2.minmove2 && format2.minmove2 > 1 ? format2.minmove2 : 1;
5085
- const parts = text2.split(FRACTION_SIGN);
5086
- if (parts.length < 2 || parts.length > 3) return null;
5087
- const negative = parts[0].trim().startsWith("-");
5088
- const whole = Number(parts[0].replace(/[^0-9]/g, ""));
5089
- const outer = Number(parts[1].trim());
5090
- const inner = parts.length === 3 ? Number(parts[2].trim()) : 0;
5091
- if (!Number.isInteger(whole) || !Number.isInteger(outer) || !Number.isInteger(inner)) return null;
5092
- if (outer < 0 || inner < 0 || inner >= second) return null;
5093
- if (outer * second + inner >= scale) return null;
5094
- const value = whole + (outer * second + inner) / scale;
5095
- return negative ? -value : value;
5096
- }
5097
- function createPriceFormatter(format2, options) {
5098
- const explicit = options?.numericPunctuation;
5099
- const punctuation = {
5100
- decimalSign: explicit?.decimalSign ?? (options?.locale ? localeDecimalSign(options.locale) : "."),
5101
- groupSign: explicit?.groupSign ?? ""
5102
- };
5103
- const fractional = format2.fractional === true;
5104
- const bands = format2.variableTickSize ? parseTickBands(format2.variableTickSize) : [];
5105
- const bandDecimals = (band) => {
5106
- const text2 = decimalText(band.size);
5107
- const dot = text2.indexOf(".");
5108
- return dot < 0 ? 0 : text2.length - dot - 1;
5109
- };
5110
- const fixedDecimals = decimalsOfPriceScale(format2.pricescale);
5111
- const widest = bands.length > 0 ? Math.max(...bands.map(bandDecimals)) : fixedDecimals;
5112
- const decimalsFor = (price) => {
5113
- if (bands.length === 0) return fixedDecimals;
5114
- const band = tickBandFor(bands, price);
5115
- return band ? bandDecimals(band) : fixedDecimals;
5116
- };
5117
- return {
5118
- format(price) {
5119
- if (!Number.isFinite(price)) return "";
5120
- return fractional ? writeFractional(price, format2, punctuation) : writeDecimal(price, decimalsFor(price), punctuation);
5121
- },
5122
- parse(text2) {
5123
- const trimmed = text2.trim();
5124
- if (trimmed === "") return null;
5125
- if (fractional) return parseFractional(trimmed, format2);
5126
- let plain = trimmed;
5127
- if (punctuation.groupSign) plain = plain.split(punctuation.groupSign).join("");
5128
- if (punctuation.decimalSign !== ".") plain = plain.split(punctuation.decimalSign).join(".");
5129
- if (!/^[+-]?(\d+(\.\d*)?|\.\d+)$/.test(plain)) return null;
5130
- const value = Number(plain);
5131
- return Number.isFinite(value) ? value : null;
5132
- },
5133
- precision: () => fractional ? 0 : widest
5134
- };
5135
- }
5136
- function decimalText(value) {
5137
- const text2 = String(value);
5138
- const exp = /^(-?)(\d)(?:\.(\d+))?e-(\d+)$/.exec(text2);
5139
- if (!exp) return text2;
5140
- const [, sign, lead, rest = "", power] = exp;
5141
- const zeros = Number(power) - 1;
5142
- return `${sign}0.${"0".repeat(zeros)}${lead}${rest}`;
5143
- }
5144
-
5145
5020
  // src/widget/baselineLevel.ts
5146
5021
  var BASELINE_SCREEN_PERCENT = 50;
5147
5022
  var BASELINE_DRIFT_PX = 0.5;
@@ -5211,6 +5086,10 @@ function createBaselineLevel(deps) {
5211
5086
  }
5212
5087
 
5213
5088
  // src/widget/ranges.ts
5089
+ var GLIDE_MS = 520;
5090
+ var GLIDE_JUMP_WIDTHS = 2;
5091
+ var GLIDE_FROM_WIDTHS = 1.5;
5092
+ var glideEase = (t) => 1 - (1 - t) ** 3;
5214
5093
  var mirrors = /* @__PURE__ */ new WeakMap();
5215
5094
  var chartRangeMirror = (handle) => mirrors.get(handle) ?? null;
5216
5095
  var registerChartRangeMirror = (handle, mirror) => {
@@ -5242,6 +5121,7 @@ function restoreTimelineContinuity(target, held, beforeWrite) {
5242
5121
  }
5243
5122
  function createRangeApi(deps) {
5244
5123
  const scale = () => deps.chart.timeScale();
5124
+ let glide = null;
5245
5125
  const api = {
5246
5126
  visibleRange() {
5247
5127
  if (deps.disposed()) return null;
@@ -5282,7 +5162,45 @@ function createRangeApi(deps) {
5282
5162
  },
5283
5163
  goLive() {
5284
5164
  if (deps.disposed()) return;
5285
- scale().scrollToRealTime();
5165
+ api.stopGlide();
5166
+ const s = scale();
5167
+ const target = s.options().rightOffset;
5168
+ const range2 = s.getVisibleLogicalRange();
5169
+ const width = range2 ? range2.to - range2.from : 0;
5170
+ let from = s.scrollPosition();
5171
+ const animate = typeof requestAnimationFrame === "function" && !(deps.reducedMotion?.() ?? false);
5172
+ if (!animate || !(width > 0) || Math.abs(target - from) < 0.01) {
5173
+ s.scrollToPosition(target, false);
5174
+ return;
5175
+ }
5176
+ if (Math.abs(target - from) > GLIDE_JUMP_WIDTHS * width) {
5177
+ from = target - Math.sign(target - from) * GLIDE_FROM_WIDTHS * width;
5178
+ s.scrollToPosition(from, false);
5179
+ }
5180
+ const start = performance.now();
5181
+ const step = (now) => {
5182
+ if (glide === null) return;
5183
+ if (deps.disposed()) {
5184
+ api.stopGlide();
5185
+ return;
5186
+ }
5187
+ const t = Math.min(1, Math.max(0, (now - start) / GLIDE_MS));
5188
+ s.scrollToPosition(from + (target - from) * glideEase(t), false);
5189
+ if (t >= 1) {
5190
+ api.stopGlide();
5191
+ return;
5192
+ }
5193
+ glide = requestAnimationFrame(step);
5194
+ };
5195
+ glide = requestAnimationFrame(step);
5196
+ deps.onGlide?.();
5197
+ },
5198
+ gliding: () => glide !== null,
5199
+ stopGlide() {
5200
+ if (glide === null) return;
5201
+ cancelAnimationFrame(glide);
5202
+ glide = null;
5203
+ deps.onGlide?.();
5286
5204
  },
5287
5205
  centerOn(time) {
5288
5206
  if (deps.disposed()) return;
@@ -5753,1853 +5671,6 @@ function attachSession(deps) {
5753
5671
  return layer;
5754
5672
  }
5755
5673
 
5756
- // src/drawings/glyphs.ts
5757
- var EMOJI_CATEGORIES = [
5758
- {
5759
- id: "smileys",
5760
- face: "\u{1F600}",
5761
- glyphs: [
5762
- "\u{1F600}",
5763
- "\u{1F603}",
5764
- "\u{1F604}",
5765
- "\u{1F601}",
5766
- "\u{1F606}",
5767
- "\u{1F605}",
5768
- "\u{1F923}",
5769
- "\u{1F602}",
5770
- "\u{1F642}",
5771
- "\u{1F643}",
5772
- "\u{1F609}",
5773
- "\u{1F60A}",
5774
- "\u{1F607}",
5775
- "\u{1F970}",
5776
- "\u{1F60D}",
5777
- "\u{1F929}",
5778
- "\u{1F618}",
5779
- "\u{1F617}",
5780
- "\u{1F61A}",
5781
- "\u{1F619}",
5782
- "\u{1F972}",
5783
- "\u{1F60B}",
5784
- "\u{1F61B}",
5785
- "\u{1F61C}",
5786
- "\u{1F92A}",
5787
- "\u{1F61D}",
5788
- "\u{1F911}",
5789
- "\u{1F917}",
5790
- "\u{1F92D}",
5791
- "\u{1F92B}",
5792
- "\u{1F914}",
5793
- "\u{1F910}",
5794
- "\u{1F928}",
5795
- "\u{1F610}",
5796
- "\u{1F611}",
5797
- "\u{1F636}",
5798
- "\u{1F60F}",
5799
- "\u{1F612}",
5800
- "\u{1F644}",
5801
- "\u{1F62C}",
5802
- "\u{1F925}",
5803
- "\u{1F60C}",
5804
- "\u{1F614}",
5805
- "\u{1F62A}",
5806
- "\u{1F924}",
5807
- "\u{1F634}",
5808
- "\u{1F637}",
5809
- "\u{1F912}",
5810
- "\u{1F915}",
5811
- "\u{1F922}",
5812
- "\u{1F92E}",
5813
- "\u{1F927}",
5814
- "\u{1F975}",
5815
- "\u{1F976}",
5816
- "\u{1F974}",
5817
- "\u{1F635}",
5818
- "\u{1F92F}",
5819
- "\u{1F920}",
5820
- "\u{1F973}",
5821
- "\u{1F978}",
5822
- "\u{1F60E}",
5823
- "\u{1F913}",
5824
- "\u{1F9D0}",
5825
- "\u{1F615}",
5826
- "\u{1F61F}",
5827
- "\u{1F641}",
5828
- "\u2639\uFE0F",
5829
- "\u{1F62E}",
5830
- "\u{1F62F}",
5831
- "\u{1F632}",
5832
- "\u{1F633}",
5833
- "\u{1F97A}",
5834
- "\u{1F626}",
5835
- "\u{1F627}",
5836
- "\u{1F628}",
5837
- "\u{1F630}",
5838
- "\u{1F625}",
5839
- "\u{1F622}",
5840
- "\u{1F62D}",
5841
- "\u{1F631}",
5842
- "\u{1F616}",
5843
- "\u{1F623}",
5844
- "\u{1F61E}",
5845
- "\u{1F613}",
5846
- "\u{1F629}",
5847
- "\u{1F62B}",
5848
- "\u{1F971}",
5849
- "\u{1F624}",
5850
- "\u{1F621}",
5851
- "\u{1F620}",
5852
- "\u{1F92C}",
5853
- "\u{1F608}",
5854
- "\u{1F47F}",
5855
- "\u{1F480}",
5856
- "\u2620\uFE0F",
5857
- "\u{1F4A9}",
5858
- "\u{1F921}",
5859
- "\u{1F479}",
5860
- "\u{1F47A}",
5861
- "\u{1F47B}",
5862
- "\u{1F47D}",
5863
- "\u{1F47E}",
5864
- "\u{1F916}",
5865
- "\u{1F63A}",
5866
- "\u{1F638}",
5867
- "\u{1F639}",
5868
- "\u{1F63B}",
5869
- "\u{1F63C}",
5870
- "\u{1F63D}",
5871
- "\u{1F640}",
5872
- "\u{1F63F}",
5873
- "\u{1F63E}",
5874
- "\u{1F648}",
5875
- "\u{1F649}",
5876
- "\u{1F64A}",
5877
- "\u{1F48B}",
5878
- "\u{1F48C}",
5879
- "\u{1F498}",
5880
- "\u{1F49D}",
5881
- "\u{1F496}",
5882
- "\u{1F497}",
5883
- "\u{1F493}",
5884
- "\u{1F49E}",
5885
- "\u{1F495}",
5886
- "\u{1F49F}",
5887
- "\u2763\uFE0F",
5888
- "\u{1F494}",
5889
- "\u2764\uFE0F",
5890
- "\u{1F9E1}",
5891
- "\u{1F49B}",
5892
- "\u{1F49A}",
5893
- "\u{1F499}",
5894
- "\u{1F49C}",
5895
- "\u{1F90E}",
5896
- "\u{1F5A4}",
5897
- "\u{1F90D}",
5898
- "\u{1F4AF}",
5899
- "\u{1F4A2}",
5900
- "\u{1F4A5}",
5901
- "\u{1F4AB}",
5902
- "\u{1F4A6}",
5903
- "\u{1F4A8}",
5904
- "\u{1F573}\uFE0F",
5905
- "\u{1F4A3}",
5906
- "\u{1F4AC}",
5907
- "\u{1F5E8}\uFE0F",
5908
- "\u{1F5EF}\uFE0F",
5909
- "\u{1F4AD}",
5910
- "\u{1F4A4}",
5911
- "\u{1F44B}",
5912
- "\u{1F91A}",
5913
- "\u{1F590}\uFE0F",
5914
- "\u270B",
5915
- "\u{1F596}",
5916
- "\u{1F44C}",
5917
- "\u{1F90C}",
5918
- "\u{1F90F}",
5919
- "\u270C\uFE0F",
5920
- "\u{1F91E}",
5921
- "\u{1F91F}",
5922
- "\u{1F918}",
5923
- "\u{1F919}",
5924
- "\u{1F448}",
5925
- "\u{1F449}",
5926
- "\u{1F446}",
5927
- "\u{1F595}",
5928
- "\u{1F447}",
5929
- "\u261D\uFE0F",
5930
- "\u{1F44D}",
5931
- "\u{1F44E}",
5932
- "\u270A",
5933
- "\u{1F44A}",
5934
- "\u{1F91B}",
5935
- "\u{1F91C}",
5936
- "\u{1F44F}",
5937
- "\u{1F64C}",
5938
- "\u{1F450}",
5939
- "\u{1F932}",
5940
- "\u{1F91D}",
5941
- "\u{1F64F}",
5942
- "\u270D\uFE0F",
5943
- "\u{1F485}",
5944
- "\u{1F933}",
5945
- "\u{1F4AA}",
5946
- "\u{1F9BE}",
5947
- "\u{1F9BF}",
5948
- "\u{1F9B5}",
5949
- "\u{1F9B6}",
5950
- "\u{1F442}",
5951
- "\u{1F9BB}",
5952
- "\u{1F443}",
5953
- "\u{1F9E0}",
5954
- "\u{1FAC0}",
5955
- "\u{1FAC1}",
5956
- "\u{1F9B7}",
5957
- "\u{1F9B4}",
5958
- "\u{1F440}",
5959
- "\u{1F441}\uFE0F",
5960
- "\u{1F445}",
5961
- "\u{1F444}",
5962
- "\u{1F476}",
5963
- "\u{1F9D2}",
5964
- "\u{1F466}",
5965
- "\u{1F467}",
5966
- "\u{1F9D1}",
5967
- "\u{1F468}",
5968
- "\u{1F9D4}",
5969
- "\u{1F469}",
5970
- "\u{1F9D3}",
5971
- "\u{1F474}",
5972
- "\u{1F475}",
5973
- "\u{1F64D}",
5974
- "\u{1F64E}",
5975
- "\u{1F645}",
5976
- "\u{1F646}",
5977
- "\u{1F481}",
5978
- "\u{1F64B}",
5979
- "\u{1F9CF}",
5980
- "\u{1F647}",
5981
- "\u{1F926}",
5982
- "\u{1F937}",
5983
- "\u{1F46E}",
5984
- "\u{1F575}\uFE0F",
5985
- "\u{1F482}",
5986
- "\u{1F977}",
5987
- "\u{1F477}",
5988
- "\u{1F934}",
5989
- "\u{1F478}",
5990
- "\u{1F473}",
5991
- "\u{1F472}",
5992
- "\u{1F9D5}",
5993
- "\u{1F935}",
5994
- "\u{1F470}",
5995
- "\u{1F930}",
5996
- "\u{1F931}",
5997
- "\u{1F47C}",
5998
- "\u{1F385}",
5999
- "\u{1F936}",
6000
- "\u{1F9B8}",
6001
- "\u{1F9B9}",
6002
- "\u{1F9D9}",
6003
- "\u{1F9DA}",
6004
- "\u{1F9DB}",
6005
- "\u{1F9DC}",
6006
- "\u{1F9DD}",
6007
- "\u{1F9DE}",
6008
- "\u{1F9DF}",
6009
- "\u{1F486}",
6010
- "\u{1F487}",
6011
- "\u{1F6B6}",
6012
- "\u{1F9CD}",
6013
- "\u{1F9CE}",
6014
- "\u{1F3C3}",
6015
- "\u{1F483}",
6016
- "\u{1F57A}",
6017
- "\u{1F574}\uFE0F",
6018
- "\u{1F46F}",
6019
- "\u{1F9D6}",
6020
- "\u{1F9D7}",
6021
- "\u{1F93A}",
6022
- "\u{1F3C7}",
6023
- "\u26F7\uFE0F",
6024
- "\u{1F3C2}",
6025
- "\u{1F3CC}\uFE0F",
6026
- "\u{1F3C4}",
6027
- "\u{1F6A3}",
6028
- "\u{1F3CA}",
6029
- "\u26F9\uFE0F",
6030
- "\u{1F3CB}\uFE0F",
6031
- "\u{1F6B4}",
6032
- "\u{1F6B5}",
6033
- "\u{1F938}",
6034
- "\u{1F93C}",
6035
- "\u{1F93D}",
6036
- "\u{1F93E}",
6037
- "\u{1F939}",
6038
- "\u{1F9D8}",
6039
- "\u{1F6C0}",
6040
- "\u{1F6CC}",
6041
- "\u{1F9D1}\u200D\u{1F91D}\u200D\u{1F9D1}",
6042
- "\u{1F48F}",
6043
- "\u{1F491}",
6044
- "\u{1F46A}",
6045
- "\u{1FAC2}",
6046
- "\u{1F463}"
6047
- ]
6048
- },
6049
- {
6050
- id: "nature",
6051
- face: "\u{1F43B}",
6052
- glyphs: [
6053
- "\u{1F435}",
6054
- "\u{1F412}",
6055
- "\u{1F98D}",
6056
- "\u{1F9A7}",
6057
- "\u{1F436}",
6058
- "\u{1F415}",
6059
- "\u{1F9AE}",
6060
- "\u{1F415}\u200D\u{1F9BA}",
6061
- "\u{1F429}",
6062
- "\u{1F43A}",
6063
- "\u{1F98A}",
6064
- "\u{1F99D}",
6065
- "\u{1F431}",
6066
- "\u{1F408}",
6067
- "\u{1F408}\u200D\u2B1B",
6068
- "\u{1F981}",
6069
- "\u{1F42F}",
6070
- "\u{1F405}",
6071
- "\u{1F406}",
6072
- "\u{1F434}",
6073
- "\u{1F40E}",
6074
- "\u{1F984}",
6075
- "\u{1F993}",
6076
- "\u{1F98C}",
6077
- "\u{1F9AC}",
6078
- "\u{1F42E}",
6079
- "\u{1F402}",
6080
- "\u{1F403}",
6081
- "\u{1F404}",
6082
- "\u{1F437}",
6083
- "\u{1F416}",
6084
- "\u{1F417}",
6085
- "\u{1F43D}",
6086
- "\u{1F40F}",
6087
- "\u{1F411}",
6088
- "\u{1F410}",
6089
- "\u{1F42A}",
6090
- "\u{1F42B}",
6091
- "\u{1F999}",
6092
- "\u{1F992}",
6093
- "\u{1F418}",
6094
- "\u{1F9A3}",
6095
- "\u{1F98F}",
6096
- "\u{1F99B}",
6097
- "\u{1F42D}",
6098
- "\u{1F401}",
6099
- "\u{1F400}",
6100
- "\u{1F439}",
6101
- "\u{1F430}",
6102
- "\u{1F407}",
6103
- "\u{1F43F}\uFE0F",
6104
- "\u{1F9AB}",
6105
- "\u{1F994}",
6106
- "\u{1F987}",
6107
- "\u{1F43B}",
6108
- "\u{1F43B}\u200D\u2744\uFE0F",
6109
- "\u{1F428}",
6110
- "\u{1F43C}",
6111
- "\u{1F9A5}",
6112
- "\u{1F9A6}",
6113
- "\u{1F9A8}",
6114
- "\u{1F998}",
6115
- "\u{1F9A1}",
6116
- "\u{1F43E}",
6117
- "\u{1F983}",
6118
- "\u{1F414}",
6119
- "\u{1F413}",
6120
- "\u{1F423}",
6121
- "\u{1F424}",
6122
- "\u{1F425}",
6123
- "\u{1F426}",
6124
- "\u{1F427}",
6125
- "\u{1F54A}\uFE0F",
6126
- "\u{1F985}",
6127
- "\u{1F986}",
6128
- "\u{1F9A2}",
6129
- "\u{1F989}",
6130
- "\u{1F9A4}",
6131
- "\u{1FAB6}",
6132
- "\u{1F9A9}",
6133
- "\u{1F99A}",
6134
- "\u{1F99C}",
6135
- "\u{1F438}",
6136
- "\u{1F40A}",
6137
- "\u{1F422}",
6138
- "\u{1F98E}",
6139
- "\u{1F40D}",
6140
- "\u{1F432}",
6141
- "\u{1F409}",
6142
- "\u{1F995}",
6143
- "\u{1F996}",
6144
- "\u{1F433}",
6145
- "\u{1F40B}",
6146
- "\u{1F42C}",
6147
- "\u{1F9AD}",
6148
- "\u{1F41F}",
6149
- "\u{1F420}",
6150
- "\u{1F421}",
6151
- "\u{1F988}",
6152
- "\u{1F419}",
6153
- "\u{1F41A}",
6154
- "\u{1F40C}",
6155
- "\u{1F98B}",
6156
- "\u{1F41B}",
6157
- "\u{1F41C}",
6158
- "\u{1F41D}",
6159
- "\u{1FAB2}",
6160
- "\u{1F41E}",
6161
- "\u{1F997}",
6162
- "\u{1FAB3}",
6163
- "\u{1F577}\uFE0F",
6164
- "\u{1F578}\uFE0F",
6165
- "\u{1F982}",
6166
- "\u{1F99F}",
6167
- "\u{1FAB0}",
6168
- "\u{1FAB1}",
6169
- "\u{1F9A0}",
6170
- "\u{1F490}",
6171
- "\u{1F338}",
6172
- "\u{1F4AE}",
6173
- "\u{1F3F5}\uFE0F",
6174
- "\u{1F339}",
6175
- "\u{1F940}",
6176
- "\u{1F33A}",
6177
- "\u{1F33B}",
6178
- "\u{1F33C}",
6179
- "\u{1F337}",
6180
- "\u{1F331}",
6181
- "\u{1FAB4}",
6182
- "\u{1F332}",
6183
- "\u{1F333}",
6184
- "\u{1F334}",
6185
- "\u{1F335}",
6186
- "\u{1F33E}",
6187
- "\u{1F33F}",
6188
- "\u2618\uFE0F",
6189
- "\u{1F340}",
6190
- "\u{1F341}",
6191
- "\u{1F342}",
6192
- "\u{1F343}"
6193
- ]
6194
- },
6195
- {
6196
- id: "food",
6197
- face: "\u{1F354}",
6198
- glyphs: [
6199
- "\u{1F347}",
6200
- "\u{1F348}",
6201
- "\u{1F349}",
6202
- "\u{1F34A}",
6203
- "\u{1F34B}",
6204
- "\u{1F34C}",
6205
- "\u{1F34D}",
6206
- "\u{1F96D}",
6207
- "\u{1F34E}",
6208
- "\u{1F34F}",
6209
- "\u{1F350}",
6210
- "\u{1F351}",
6211
- "\u{1F352}",
6212
- "\u{1F353}",
6213
- "\u{1FAD0}",
6214
- "\u{1F95D}",
6215
- "\u{1F345}",
6216
- "\u{1FAD2}",
6217
- "\u{1F965}",
6218
- "\u{1F951}",
6219
- "\u{1F346}",
6220
- "\u{1F954}",
6221
- "\u{1F955}",
6222
- "\u{1F33D}",
6223
- "\u{1F336}\uFE0F",
6224
- "\u{1FAD1}",
6225
- "\u{1F952}",
6226
- "\u{1F96C}",
6227
- "\u{1F966}",
6228
- "\u{1F9C4}",
6229
- "\u{1F9C5}",
6230
- "\u{1F344}",
6231
- "\u{1F95C}",
6232
- "\u{1F330}",
6233
- "\u{1F35E}",
6234
- "\u{1F950}",
6235
- "\u{1F956}",
6236
- "\u{1FAD3}",
6237
- "\u{1F968}",
6238
- "\u{1F96F}",
6239
- "\u{1F95E}",
6240
- "\u{1F9C7}",
6241
- "\u{1F9C0}",
6242
- "\u{1F356}",
6243
- "\u{1F357}",
6244
- "\u{1F969}",
6245
- "\u{1F953}",
6246
- "\u{1F354}",
6247
- "\u{1F35F}",
6248
- "\u{1F355}",
6249
- "\u{1F32D}",
6250
- "\u{1F96A}",
6251
- "\u{1F32E}",
6252
- "\u{1F32F}",
6253
- "\u{1FAD4}",
6254
- "\u{1F959}",
6255
- "\u{1F9C6}",
6256
- "\u{1F95A}",
6257
- "\u{1F373}",
6258
- "\u{1F958}",
6259
- "\u{1F372}",
6260
- "\u{1FAD5}",
6261
- "\u{1F963}",
6262
- "\u{1F957}",
6263
- "\u{1F37F}",
6264
- "\u{1F9C8}",
6265
- "\u{1F9C2}",
6266
- "\u{1F96B}",
6267
- "\u{1F371}",
6268
- "\u{1F358}",
6269
- "\u{1F359}",
6270
- "\u{1F35A}",
6271
- "\u{1F35B}",
6272
- "\u{1F35C}",
6273
- "\u{1F35D}",
6274
- "\u{1F360}",
6275
- "\u{1F362}",
6276
- "\u{1F363}",
6277
- "\u{1F364}",
6278
- "\u{1F365}",
6279
- "\u{1F96E}",
6280
- "\u{1F361}",
6281
- "\u{1F95F}",
6282
- "\u{1F960}",
6283
- "\u{1F961}",
6284
- "\u{1F980}",
6285
- "\u{1F99E}",
6286
- "\u{1F990}",
6287
- "\u{1F991}",
6288
- "\u{1F9AA}",
6289
- "\u{1F366}",
6290
- "\u{1F367}",
6291
- "\u{1F368}",
6292
- "\u{1F369}",
6293
- "\u{1F36A}",
6294
- "\u{1F382}",
6295
- "\u{1F370}",
6296
- "\u{1F9C1}",
6297
- "\u{1F967}",
6298
- "\u{1F36B}",
6299
- "\u{1F36C}",
6300
- "\u{1F36D}",
6301
- "\u{1F36E}",
6302
- "\u{1F36F}",
6303
- "\u{1F37C}",
6304
- "\u{1F95B}",
6305
- "\u2615",
6306
- "\u{1FAD6}",
6307
- "\u{1F375}",
6308
- "\u{1F376}",
6309
- "\u{1F37E}",
6310
- "\u{1F377}",
6311
- "\u{1F378}",
6312
- "\u{1F379}",
6313
- "\u{1F37A}",
6314
- "\u{1F37B}",
6315
- "\u{1F942}",
6316
- "\u{1F943}",
6317
- "\u{1F964}",
6318
- "\u{1F9CB}",
6319
- "\u{1F9C3}",
6320
- "\u{1F9C9}",
6321
- "\u{1F9CA}",
6322
- "\u{1F962}",
6323
- "\u{1F37D}\uFE0F",
6324
- "\u{1F374}",
6325
- "\u{1F944}",
6326
- "\u{1F52A}",
6327
- "\u{1F3FA}"
6328
- ]
6329
- },
6330
- {
6331
- id: "activity",
6332
- face: "\u26BD",
6333
- glyphs: [
6334
- "\u{1F383}",
6335
- "\u{1F384}",
6336
- "\u{1F386}",
6337
- "\u{1F387}",
6338
- "\u{1F9E8}",
6339
- "\u2728",
6340
- "\u{1F388}",
6341
- "\u{1F389}",
6342
- "\u{1F38A}",
6343
- "\u{1F38B}",
6344
- "\u{1F38D}",
6345
- "\u{1F38E}",
6346
- "\u{1F38F}",
6347
- "\u{1F390}",
6348
- "\u{1F391}",
6349
- "\u{1F9E7}",
6350
- "\u{1F380}",
6351
- "\u{1F381}",
6352
- "\u{1F397}\uFE0F",
6353
- "\u{1F39F}\uFE0F",
6354
- "\u{1F3AB}",
6355
- "\u{1F396}\uFE0F",
6356
- "\u{1F3C6}",
6357
- "\u{1F3C5}",
6358
- "\u{1F947}",
6359
- "\u{1F948}",
6360
- "\u{1F949}",
6361
- "\u26BD",
6362
- "\u26BE",
6363
- "\u{1F94E}",
6364
- "\u{1F3C0}",
6365
- "\u{1F3D0}",
6366
- "\u{1F3C8}",
6367
- "\u{1F3C9}",
6368
- "\u{1F3BE}",
6369
- "\u{1F94F}",
6370
- "\u{1F3B3}",
6371
- "\u{1F3CF}",
6372
- "\u{1F3D1}",
6373
- "\u{1F3D2}",
6374
- "\u{1F94D}",
6375
- "\u{1F3D3}",
6376
- "\u{1F3F8}",
6377
- "\u{1F94A}",
6378
- "\u{1F94B}",
6379
- "\u{1F945}",
6380
- "\u26F3",
6381
- "\u26F8\uFE0F",
6382
- "\u{1F3A3}",
6383
- "\u{1F93F}",
6384
- "\u{1F3BD}",
6385
- "\u{1F3BF}",
6386
- "\u{1F6F7}",
6387
- "\u{1F94C}",
6388
- "\u{1F3AF}",
6389
- "\u{1FA80}",
6390
- "\u{1FA81}",
6391
- "\u{1F3B1}",
6392
- "\u{1F52E}",
6393
- "\u{1FA84}",
6394
- "\u{1F9FF}",
6395
- "\u{1F3AE}",
6396
- "\u{1F579}\uFE0F",
6397
- "\u{1F3B0}",
6398
- "\u{1F3B2}",
6399
- "\u{1F9E9}",
6400
- "\u{1F9F8}",
6401
- "\u{1FA85}",
6402
- "\u{1FA86}",
6403
- "\u2660\uFE0F",
6404
- "\u2665\uFE0F",
6405
- "\u2666\uFE0F",
6406
- "\u2663\uFE0F",
6407
- "\u265F\uFE0F",
6408
- "\u{1F0CF}",
6409
- "\u{1F004}",
6410
- "\u{1F3B4}",
6411
- "\u{1F3AD}",
6412
- "\u{1F5BC}\uFE0F",
6413
- "\u{1F3A8}",
6414
- "\u{1F9F5}",
6415
- "\u{1FAA1}",
6416
- "\u{1F9F6}",
6417
- "\u{1FAA2}"
6418
- ]
6419
- },
6420
- {
6421
- id: "travel",
6422
- face: "\u{1F680}",
6423
- glyphs: [
6424
- "\u{1F30D}",
6425
- "\u{1F30E}",
6426
- "\u{1F30F}",
6427
- "\u{1F310}",
6428
- "\u{1F5FA}\uFE0F",
6429
- "\u{1F5FE}",
6430
- "\u{1F9ED}",
6431
- "\u{1F3D4}\uFE0F",
6432
- "\u26F0\uFE0F",
6433
- "\u{1F30B}",
6434
- "\u{1F5FB}",
6435
- "\u{1F3D5}\uFE0F",
6436
- "\u{1F3D6}\uFE0F",
6437
- "\u{1F3DC}\uFE0F",
6438
- "\u{1F3DD}\uFE0F",
6439
- "\u{1F3DE}\uFE0F",
6440
- "\u{1F3DF}\uFE0F",
6441
- "\u{1F3DB}\uFE0F",
6442
- "\u{1F3D7}\uFE0F",
6443
- "\u{1F9F1}",
6444
- "\u{1FAA8}",
6445
- "\u{1FAB5}",
6446
- "\u{1F6D6}",
6447
- "\u{1F3D8}\uFE0F",
6448
- "\u{1F3DA}\uFE0F",
6449
- "\u{1F3E0}",
6450
- "\u{1F3E1}",
6451
- "\u{1F3E2}",
6452
- "\u{1F3E3}",
6453
- "\u{1F3E4}",
6454
- "\u{1F3E5}",
6455
- "\u{1F3E6}",
6456
- "\u{1F3E8}",
6457
- "\u{1F3E9}",
6458
- "\u{1F3EA}",
6459
- "\u{1F3EB}",
6460
- "\u{1F3EC}",
6461
- "\u{1F3ED}",
6462
- "\u{1F3EF}",
6463
- "\u{1F3F0}",
6464
- "\u{1F492}",
6465
- "\u{1F5FC}",
6466
- "\u{1F5FD}",
6467
- "\u26EA",
6468
- "\u{1F54C}",
6469
- "\u{1F6D5}",
6470
- "\u{1F54D}",
6471
- "\u26E9\uFE0F",
6472
- "\u{1F54B}",
6473
- "\u26F2",
6474
- "\u26FA",
6475
- "\u{1F301}",
6476
- "\u{1F303}",
6477
- "\u{1F3D9}\uFE0F",
6478
- "\u{1F304}",
6479
- "\u{1F305}",
6480
- "\u{1F306}",
6481
- "\u{1F307}",
6482
- "\u{1F309}",
6483
- "\u2668\uFE0F",
6484
- "\u{1F3A0}",
6485
- "\u{1F3A1}",
6486
- "\u{1F3A2}",
6487
- "\u{1F488}",
6488
- "\u{1F3AA}",
6489
- "\u{1F682}",
6490
- "\u{1F683}",
6491
- "\u{1F684}",
6492
- "\u{1F685}",
6493
- "\u{1F686}",
6494
- "\u{1F687}",
6495
- "\u{1F688}",
6496
- "\u{1F689}",
6497
- "\u{1F68A}",
6498
- "\u{1F69D}",
6499
- "\u{1F69E}",
6500
- "\u{1F68B}",
6501
- "\u{1F68C}",
6502
- "\u{1F68D}",
6503
- "\u{1F68E}",
6504
- "\u{1F690}",
6505
- "\u{1F691}",
6506
- "\u{1F692}",
6507
- "\u{1F693}",
6508
- "\u{1F694}",
6509
- "\u{1F695}",
6510
- "\u{1F696}",
6511
- "\u{1F697}",
6512
- "\u{1F698}",
6513
- "\u{1F699}",
6514
- "\u{1F6FB}",
6515
- "\u{1F69A}",
6516
- "\u{1F69B}",
6517
- "\u{1F69C}",
6518
- "\u{1F3CE}\uFE0F",
6519
- "\u{1F3CD}\uFE0F",
6520
- "\u{1F6F5}",
6521
- "\u{1F9BD}",
6522
- "\u{1F9BC}",
6523
- "\u{1F6FA}",
6524
- "\u{1F6B2}",
6525
- "\u{1F6F4}",
6526
- "\u{1F6F9}",
6527
- "\u{1F6FC}",
6528
- "\u{1F68F}",
6529
- "\u{1F6E3}\uFE0F",
6530
- "\u{1F6E4}\uFE0F",
6531
- "\u{1F6E2}\uFE0F",
6532
- "\u26FD",
6533
- "\u{1F6A8}",
6534
- "\u{1F6A5}",
6535
- "\u{1F6A6}",
6536
- "\u{1F6D1}",
6537
- "\u{1F6A7}",
6538
- "\u2693",
6539
- "\u26F5",
6540
- "\u{1F6F6}",
6541
- "\u{1F6A4}",
6542
- "\u{1F6F3}\uFE0F",
6543
- "\u26F4\uFE0F",
6544
- "\u{1F6E5}\uFE0F",
6545
- "\u{1F6A2}",
6546
- "\u2708\uFE0F",
6547
- "\u{1F6E9}\uFE0F",
6548
- "\u{1F6EB}",
6549
- "\u{1F6EC}",
6550
- "\u{1FA82}",
6551
- "\u{1F4BA}",
6552
- "\u{1F681}",
6553
- "\u{1F69F}",
6554
- "\u{1F6A0}",
6555
- "\u{1F6A1}",
6556
- "\u{1F6F0}\uFE0F",
6557
- "\u{1F680}",
6558
- "\u{1F6F8}",
6559
- "\u{1F6CE}\uFE0F",
6560
- "\u{1F9F3}",
6561
- "\u231B",
6562
- "\u23F3",
6563
- "\u231A",
6564
- "\u23F0",
6565
- "\u23F1\uFE0F",
6566
- "\u23F2\uFE0F",
6567
- "\u{1F570}\uFE0F",
6568
- "\u{1F311}",
6569
- "\u{1F312}",
6570
- "\u{1F313}",
6571
- "\u{1F314}",
6572
- "\u{1F315}",
6573
- "\u{1F316}",
6574
- "\u{1F317}",
6575
- "\u{1F318}",
6576
- "\u{1F319}",
6577
- "\u{1F31A}",
6578
- "\u{1F31B}",
6579
- "\u{1F31C}",
6580
- "\u{1F321}\uFE0F",
6581
- "\u2600\uFE0F",
6582
- "\u{1F31D}",
6583
- "\u{1F31E}",
6584
- "\u{1FA90}",
6585
- "\u2B50",
6586
- "\u{1F31F}",
6587
- "\u{1F320}",
6588
- "\u{1F30C}",
6589
- "\u2601\uFE0F",
6590
- "\u26C5",
6591
- "\u26C8\uFE0F",
6592
- "\u{1F324}\uFE0F",
6593
- "\u{1F325}\uFE0F",
6594
- "\u{1F326}\uFE0F",
6595
- "\u{1F327}\uFE0F",
6596
- "\u{1F328}\uFE0F",
6597
- "\u{1F329}\uFE0F",
6598
- "\u{1F32A}\uFE0F",
6599
- "\u{1F32B}\uFE0F",
6600
- "\u{1F32C}\uFE0F",
6601
- "\u{1F300}",
6602
- "\u{1F308}",
6603
- "\u{1F302}",
6604
- "\u2602\uFE0F",
6605
- "\u2614",
6606
- "\u26F1\uFE0F",
6607
- "\u26A1",
6608
- "\u2744\uFE0F",
6609
- "\u2603\uFE0F",
6610
- "\u26C4",
6611
- "\u2604\uFE0F",
6612
- "\u{1F525}",
6613
- "\u{1F4A7}",
6614
- "\u{1F30A}"
6615
- ]
6616
- },
6617
- {
6618
- id: "objects",
6619
- face: "\u{1F4A1}",
6620
- glyphs: [
6621
- "\u{1F453}",
6622
- "\u{1F576}\uFE0F",
6623
- "\u{1F97D}",
6624
- "\u{1F97C}",
6625
- "\u{1F9BA}",
6626
- "\u{1F454}",
6627
- "\u{1F455}",
6628
- "\u{1F456}",
6629
- "\u{1F9E3}",
6630
- "\u{1F9E4}",
6631
- "\u{1F9E5}",
6632
- "\u{1F9E6}",
6633
- "\u{1F457}",
6634
- "\u{1F458}",
6635
- "\u{1F97B}",
6636
- "\u{1FA71}",
6637
- "\u{1FA72}",
6638
- "\u{1FA73}",
6639
- "\u{1F459}",
6640
- "\u{1F45A}",
6641
- "\u{1F45B}",
6642
- "\u{1F45C}",
6643
- "\u{1F45D}",
6644
- "\u{1F6CD}\uFE0F",
6645
- "\u{1F392}",
6646
- "\u{1FA74}",
6647
- "\u{1F45E}",
6648
- "\u{1F45F}",
6649
- "\u{1F97E}",
6650
- "\u{1F97F}",
6651
- "\u{1F460}",
6652
- "\u{1F461}",
6653
- "\u{1FA70}",
6654
- "\u{1F462}",
6655
- "\u{1F451}",
6656
- "\u{1F452}",
6657
- "\u{1F3A9}",
6658
- "\u{1F393}",
6659
- "\u{1F9E2}",
6660
- "\u26D1\uFE0F",
6661
- "\u{1F4FF}",
6662
- "\u{1F484}",
6663
- "\u{1F48D}",
6664
- "\u{1F48E}",
6665
- "\u{1F507}",
6666
- "\u{1F508}",
6667
- "\u{1F509}",
6668
- "\u{1F50A}",
6669
- "\u{1F4E2}",
6670
- "\u{1F4E3}",
6671
- "\u{1F4EF}",
6672
- "\u{1F514}",
6673
- "\u{1F515}",
6674
- "\u{1F3BC}",
6675
- "\u{1F3B5}",
6676
- "\u{1F3B6}",
6677
- "\u{1F399}\uFE0F",
6678
- "\u{1F39A}\uFE0F",
6679
- "\u{1F39B}\uFE0F",
6680
- "\u{1F3A4}",
6681
- "\u{1F3A7}",
6682
- "\u{1F4FB}",
6683
- "\u{1F3B7}",
6684
- "\u{1FA97}",
6685
- "\u{1F3B8}",
6686
- "\u{1F3B9}",
6687
- "\u{1F3BA}",
6688
- "\u{1F3BB}",
6689
- "\u{1FA95}",
6690
- "\u{1F941}",
6691
- "\u{1FA98}",
6692
- "\u{1F4F1}",
6693
- "\u{1F4F2}",
6694
- "\u260E\uFE0F",
6695
- "\u{1F4DE}",
6696
- "\u{1F4DF}",
6697
- "\u{1F4E0}",
6698
- "\u{1F50B}",
6699
- "\u{1F50C}",
6700
- "\u{1F4BB}",
6701
- "\u{1F5A5}\uFE0F",
6702
- "\u{1F5A8}\uFE0F",
6703
- "\u2328\uFE0F",
6704
- "\u{1F5B1}\uFE0F",
6705
- "\u{1F5B2}\uFE0F",
6706
- "\u{1F4BD}",
6707
- "\u{1F4BE}",
6708
- "\u{1F4BF}",
6709
- "\u{1F4C0}",
6710
- "\u{1F9EE}",
6711
- "\u{1F3A5}",
6712
- "\u{1F39E}\uFE0F",
6713
- "\u{1F4FD}\uFE0F",
6714
- "\u{1F3AC}",
6715
- "\u{1F4FA}",
6716
- "\u{1F4F7}",
6717
- "\u{1F4F8}",
6718
- "\u{1F4F9}",
6719
- "\u{1F4FC}",
6720
- "\u{1F50D}",
6721
- "\u{1F50E}",
6722
- "\u{1F56F}\uFE0F",
6723
- "\u{1F4A1}",
6724
- "\u{1F526}",
6725
- "\u{1F3EE}",
6726
- "\u{1FA94}",
6727
- "\u{1F4D4}",
6728
- "\u{1F4D5}",
6729
- "\u{1F4D6}",
6730
- "\u{1F4D7}",
6731
- "\u{1F4D8}",
6732
- "\u{1F4D9}",
6733
- "\u{1F4DA}",
6734
- "\u{1F4D3}",
6735
- "\u{1F4D2}",
6736
- "\u{1F4C3}",
6737
- "\u{1F4DC}",
6738
- "\u{1F4C4}",
6739
- "\u{1F4F0}",
6740
- "\u{1F5DE}\uFE0F",
6741
- "\u{1F4D1}",
6742
- "\u{1F516}",
6743
- "\u{1F3F7}\uFE0F",
6744
- "\u{1F4B0}",
6745
- "\u{1FA99}",
6746
- "\u{1F4B4}",
6747
- "\u{1F4B5}",
6748
- "\u{1F4B6}",
6749
- "\u{1F4B7}",
6750
- "\u{1F4B8}",
6751
- "\u{1F4B3}",
6752
- "\u{1F9FE}",
6753
- "\u{1F4B9}",
6754
- "\u2709\uFE0F",
6755
- "\u{1F4E7}",
6756
- "\u{1F4E8}",
6757
- "\u{1F4E9}",
6758
- "\u{1F4E4}",
6759
- "\u{1F4E5}",
6760
- "\u{1F4E6}",
6761
- "\u{1F4EB}",
6762
- "\u{1F4EA}",
6763
- "\u{1F4EC}",
6764
- "\u{1F4ED}",
6765
- "\u{1F4EE}",
6766
- "\u{1F5F3}\uFE0F",
6767
- "\u270F\uFE0F",
6768
- "\u2712\uFE0F",
6769
- "\u{1F58B}\uFE0F",
6770
- "\u{1F58A}\uFE0F",
6771
- "\u{1F58C}\uFE0F",
6772
- "\u{1F58D}\uFE0F",
6773
- "\u{1F4DD}",
6774
- "\u{1F4BC}",
6775
- "\u{1F4C1}",
6776
- "\u{1F4C2}",
6777
- "\u{1F5C2}\uFE0F",
6778
- "\u{1F4C5}",
6779
- "\u{1F4C6}",
6780
- "\u{1F5D2}\uFE0F",
6781
- "\u{1F5D3}\uFE0F",
6782
- "\u{1F4C7}",
6783
- "\u{1F4C8}",
6784
- "\u{1F4C9}",
6785
- "\u{1F4CA}",
6786
- "\u{1F4CB}",
6787
- "\u{1F4CC}",
6788
- "\u{1F4CD}",
6789
- "\u{1F4CE}",
6790
- "\u{1F587}\uFE0F",
6791
- "\u{1F4CF}",
6792
- "\u{1F4D0}",
6793
- "\u2702\uFE0F",
6794
- "\u{1F5C3}\uFE0F",
6795
- "\u{1F5C4}\uFE0F",
6796
- "\u{1F5D1}\uFE0F",
6797
- "\u{1F512}",
6798
- "\u{1F513}",
6799
- "\u{1F50F}",
6800
- "\u{1F510}",
6801
- "\u{1F511}",
6802
- "\u{1F5DD}\uFE0F",
6803
- "\u{1F528}",
6804
- "\u{1FA93}",
6805
- "\u26CF\uFE0F",
6806
- "\u2692\uFE0F",
6807
- "\u{1F6E0}\uFE0F",
6808
- "\u{1F5E1}\uFE0F",
6809
- "\u2694\uFE0F",
6810
- "\u{1F52B}",
6811
- "\u{1FA83}",
6812
- "\u{1F3F9}",
6813
- "\u{1F6E1}\uFE0F",
6814
- "\u{1FA9A}",
6815
- "\u{1F527}",
6816
- "\u{1FA9B}",
6817
- "\u{1F529}",
6818
- "\u2699\uFE0F",
6819
- "\u{1F5DC}\uFE0F",
6820
- "\u2696\uFE0F",
6821
- "\u{1F9AF}",
6822
- "\u{1F517}",
6823
- "\u26D3\uFE0F",
6824
- "\u{1FA9D}",
6825
- "\u{1F9F0}",
6826
- "\u{1F9F2}",
6827
- "\u{1FA9C}",
6828
- "\u2697\uFE0F",
6829
- "\u{1F9EA}",
6830
- "\u{1F9EB}",
6831
- "\u{1F9EC}",
6832
- "\u{1F52C}",
6833
- "\u{1F52D}",
6834
- "\u{1F4E1}",
6835
- "\u{1F489}",
6836
- "\u{1FA78}",
6837
- "\u{1F48A}",
6838
- "\u{1FA79}",
6839
- "\u{1FA7A}",
6840
- "\u{1F6AA}",
6841
- "\u{1F6D7}",
6842
- "\u{1FA9E}",
6843
- "\u{1FA9F}",
6844
- "\u{1F6CF}\uFE0F",
6845
- "\u{1F6CB}\uFE0F",
6846
- "\u{1FA91}",
6847
- "\u{1F6BD}",
6848
- "\u{1FAA0}",
6849
- "\u{1F6BF}",
6850
- "\u{1F6C1}",
6851
- "\u{1FAA4}",
6852
- "\u{1FA92}",
6853
- "\u{1F9F4}",
6854
- "\u{1F9F7}",
6855
- "\u{1F9F9}",
6856
- "\u{1F9FA}",
6857
- "\u{1F9FB}",
6858
- "\u{1FAA3}",
6859
- "\u{1F9FC}",
6860
- "\u{1FAA5}",
6861
- "\u{1F9FD}",
6862
- "\u{1F9EF}",
6863
- "\u{1F6D2}",
6864
- "\u{1F6AC}",
6865
- "\u26B0\uFE0F",
6866
- "\u{1FAA6}",
6867
- "\u26B1\uFE0F",
6868
- "\u{1F5FF}",
6869
- "\u{1FAA7}"
6870
- ]
6871
- },
6872
- {
6873
- id: "symbols",
6874
- face: "\u2764\uFE0F",
6875
- glyphs: [
6876
- "\u{1F3E7}",
6877
- "\u{1F6AE}",
6878
- "\u{1F6B0}",
6879
- "\u267F",
6880
- "\u{1F6B9}",
6881
- "\u{1F6BA}",
6882
- "\u{1F6BB}",
6883
- "\u{1F6BC}",
6884
- "\u{1F6BE}",
6885
- "\u{1F6C2}",
6886
- "\u{1F6C3}",
6887
- "\u{1F6C4}",
6888
- "\u{1F6C5}",
6889
- "\u26A0\uFE0F",
6890
- "\u{1F6B8}",
6891
- "\u26D4",
6892
- "\u{1F6AB}",
6893
- "\u{1F6B3}",
6894
- "\u{1F6AD}",
6895
- "\u{1F6AF}",
6896
- "\u{1F6B1}",
6897
- "\u{1F6B7}",
6898
- "\u{1F4F5}",
6899
- "\u{1F51E}",
6900
- "\u2622\uFE0F",
6901
- "\u2623\uFE0F",
6902
- "\u2B06\uFE0F",
6903
- "\u2197\uFE0F",
6904
- "\u27A1\uFE0F",
6905
- "\u2198\uFE0F",
6906
- "\u2B07\uFE0F",
6907
- "\u2199\uFE0F",
6908
- "\u2B05\uFE0F",
6909
- "\u2196\uFE0F",
6910
- "\u2195\uFE0F",
6911
- "\u2194\uFE0F",
6912
- "\u21A9\uFE0F",
6913
- "\u21AA\uFE0F",
6914
- "\u2934\uFE0F",
6915
- "\u2935\uFE0F",
6916
- "\u{1F503}",
6917
- "\u{1F504}",
6918
- "\u{1F519}",
6919
- "\u{1F51A}",
6920
- "\u{1F51B}",
6921
- "\u{1F51C}",
6922
- "\u{1F51D}",
6923
- "\u{1F6D0}",
6924
- "\u269B\uFE0F",
6925
- "\u{1F549}\uFE0F",
6926
- "\u2721\uFE0F",
6927
- "\u2638\uFE0F",
6928
- "\u262F\uFE0F",
6929
- "\u271D\uFE0F",
6930
- "\u2626\uFE0F",
6931
- "\u262A\uFE0F",
6932
- "\u262E\uFE0F",
6933
- "\u{1F54E}",
6934
- "\u{1F52F}",
6935
- "\u2648",
6936
- "\u2649",
6937
- "\u264A",
6938
- "\u264B",
6939
- "\u264C",
6940
- "\u264D",
6941
- "\u264E",
6942
- "\u264F",
6943
- "\u2650",
6944
- "\u2651",
6945
- "\u2652",
6946
- "\u2653",
6947
- "\u26CE",
6948
- "\u{1F500}",
6949
- "\u{1F501}",
6950
- "\u{1F502}",
6951
- "\u25B6\uFE0F",
6952
- "\u23E9",
6953
- "\u23ED\uFE0F",
6954
- "\u23EF\uFE0F",
6955
- "\u25C0\uFE0F",
6956
- "\u23EA",
6957
- "\u23EE\uFE0F",
6958
- "\u{1F53C}",
6959
- "\u23EB",
6960
- "\u{1F53D}",
6961
- "\u23EC",
6962
- "\u23F8\uFE0F",
6963
- "\u23F9\uFE0F",
6964
- "\u23FA\uFE0F",
6965
- "\u23CF\uFE0F",
6966
- "\u{1F3A6}",
6967
- "\u{1F505}",
6968
- "\u{1F506}",
6969
- "\u{1F4F6}",
6970
- "\u{1F4F3}",
6971
- "\u{1F4F4}",
6972
- "\u2640\uFE0F",
6973
- "\u2642\uFE0F",
6974
- "\u26A7\uFE0F",
6975
- "\u2716\uFE0F",
6976
- "\u2795",
6977
- "\u2796",
6978
- "\u2797",
6979
- "\u{1F7F0}",
6980
- "\u267E\uFE0F",
6981
- "\u203C\uFE0F",
6982
- "\u2049\uFE0F",
6983
- "\u2753",
6984
- "\u2754",
6985
- "\u2755",
6986
- "\u2757",
6987
- "\u3030\uFE0F",
6988
- "\u{1F4B1}",
6989
- "\u{1F4B2}",
6990
- "\u2695\uFE0F",
6991
- "\u267B\uFE0F",
6992
- "\u269C\uFE0F",
6993
- "\u{1F531}",
6994
- "\u{1F4DB}",
6995
- "\u{1F530}",
6996
- "\u2B55",
6997
- "\u2705",
6998
- "\u2611\uFE0F",
6999
- "\u2714\uFE0F",
7000
- "\u274C",
7001
- "\u274E",
7002
- "\u27B0",
7003
- "\u27BF",
7004
- "\u303D\uFE0F",
7005
- "\u2733\uFE0F",
7006
- "\u2734\uFE0F",
7007
- "\u2747\uFE0F",
7008
- "\xA9\uFE0F",
7009
- "\xAE\uFE0F",
7010
- "\u2122\uFE0F",
7011
- "#\uFE0F\u20E3",
7012
- "*\uFE0F\u20E3",
7013
- "0\uFE0F\u20E3",
7014
- "1\uFE0F\u20E3",
7015
- "2\uFE0F\u20E3",
7016
- "3\uFE0F\u20E3",
7017
- "4\uFE0F\u20E3",
7018
- "5\uFE0F\u20E3",
7019
- "6\uFE0F\u20E3",
7020
- "7\uFE0F\u20E3",
7021
- "8\uFE0F\u20E3",
7022
- "9\uFE0F\u20E3",
7023
- "\u{1F51F}",
7024
- "\u{1F520}",
7025
- "\u{1F521}",
7026
- "\u{1F522}",
7027
- "\u{1F523}",
7028
- "\u{1F524}",
7029
- "\u{1F170}\uFE0F",
7030
- "\u{1F18E}",
7031
- "\u{1F171}\uFE0F",
7032
- "\u{1F191}",
7033
- "\u{1F192}",
7034
- "\u{1F193}",
7035
- "\u2139\uFE0F",
7036
- "\u{1F194}",
7037
- "\u24C2\uFE0F",
7038
- "\u{1F195}",
7039
- "\u{1F196}",
7040
- "\u{1F17E}\uFE0F",
7041
- "\u{1F197}",
7042
- "\u{1F17F}\uFE0F",
7043
- "\u{1F198}",
7044
- "\u{1F199}",
7045
- "\u{1F19A}",
7046
- "\u{1F201}",
7047
- "\u{1F202}\uFE0F",
7048
- "\u{1F237}\uFE0F",
7049
- "\u{1F236}",
7050
- "\u{1F22F}",
7051
- "\u{1F250}",
7052
- "\u{1F239}",
7053
- "\u{1F21A}",
7054
- "\u{1F232}",
7055
- "\u{1F251}",
7056
- "\u{1F238}",
7057
- "\u{1F234}",
7058
- "\u{1F233}",
7059
- "\u3297\uFE0F",
7060
- "\u3299\uFE0F",
7061
- "\u{1F23A}",
7062
- "\u{1F235}",
7063
- "\u{1F534}",
7064
- "\u{1F7E0}",
7065
- "\u{1F7E1}",
7066
- "\u{1F7E2}",
7067
- "\u{1F535}",
7068
- "\u{1F7E3}",
7069
- "\u{1F7E4}",
7070
- "\u26AB",
7071
- "\u26AA",
7072
- "\u{1F7E5}",
7073
- "\u{1F7E7}",
7074
- "\u{1F7E8}",
7075
- "\u{1F7E9}",
7076
- "\u{1F7E6}",
7077
- "\u{1F7EA}",
7078
- "\u{1F7EB}",
7079
- "\u2B1B",
7080
- "\u2B1C",
7081
- "\u25FC\uFE0F",
7082
- "\u25FB\uFE0F",
7083
- "\u25FE",
7084
- "\u25FD",
7085
- "\u25AA\uFE0F",
7086
- "\u25AB\uFE0F",
7087
- "\u{1F536}",
7088
- "\u{1F537}",
7089
- "\u{1F538}",
7090
- "\u{1F539}",
7091
- "\u{1F53A}",
7092
- "\u{1F53B}",
7093
- "\u{1F4A0}",
7094
- "\u{1F518}",
7095
- "\u{1F533}",
7096
- "\u{1F532}"
7097
- ]
7098
- },
7099
- {
7100
- id: "flags",
7101
- face: "\u{1F3C1}",
7102
- glyphs: [
7103
- "\u{1F3C1}",
7104
- "\u{1F6A9}",
7105
- "\u{1F38C}",
7106
- "\u{1F3F4}",
7107
- "\u{1F3F3}\uFE0F",
7108
- "\u{1F3F3}\uFE0F\u200D\u{1F308}",
7109
- "\u{1F3F3}\uFE0F\u200D\u26A7\uFE0F",
7110
- "\u{1F3F4}\u200D\u2620\uFE0F",
7111
- "\u{1F1EA}\u{1F1FA}",
7112
- "\u{1F1FA}\u{1F1F3}",
7113
- "\u{1F1E6}\u{1F1E8}",
7114
- "\u{1F1F9}\u{1F1E6}",
7115
- "\u{1F1E9}\u{1F1EC}",
7116
- "\u{1F1EA}\u{1F1E6}",
7117
- "\u{1F1EE}\u{1F1E8}",
7118
- "\u{1F1E6}\u{1F1E9}",
7119
- "\u{1F1E6}\u{1F1EA}",
7120
- "\u{1F1E6}\u{1F1EB}",
7121
- "\u{1F1E6}\u{1F1EC}",
7122
- "\u{1F1E6}\u{1F1EE}",
7123
- "\u{1F1E6}\u{1F1F1}",
7124
- "\u{1F1E6}\u{1F1F2}",
7125
- "\u{1F1E6}\u{1F1F4}",
7126
- "\u{1F1E6}\u{1F1F6}",
7127
- "\u{1F1E6}\u{1F1F7}",
7128
- "\u{1F1E6}\u{1F1F8}",
7129
- "\u{1F1E6}\u{1F1F9}",
7130
- "\u{1F1E6}\u{1F1FA}",
7131
- "\u{1F1E6}\u{1F1FC}",
7132
- "\u{1F1E6}\u{1F1FD}",
7133
- "\u{1F1E6}\u{1F1FF}",
7134
- "\u{1F1E7}\u{1F1E6}",
7135
- "\u{1F1E7}\u{1F1E7}",
7136
- "\u{1F1E7}\u{1F1E9}",
7137
- "\u{1F1E7}\u{1F1EA}",
7138
- "\u{1F1E7}\u{1F1EB}",
7139
- "\u{1F1E7}\u{1F1EC}",
7140
- "\u{1F1E7}\u{1F1ED}",
7141
- "\u{1F1E7}\u{1F1EE}",
7142
- "\u{1F1E7}\u{1F1EF}",
7143
- "\u{1F1E7}\u{1F1F1}",
7144
- "\u{1F1E7}\u{1F1F2}",
7145
- "\u{1F1E7}\u{1F1F3}",
7146
- "\u{1F1E7}\u{1F1F4}",
7147
- "\u{1F1E7}\u{1F1F6}",
7148
- "\u{1F1E7}\u{1F1F7}",
7149
- "\u{1F1E7}\u{1F1F8}",
7150
- "\u{1F1E7}\u{1F1F9}",
7151
- "\u{1F1E7}\u{1F1FB}",
7152
- "\u{1F1E7}\u{1F1FC}",
7153
- "\u{1F1E7}\u{1F1FE}",
7154
- "\u{1F1E7}\u{1F1FF}",
7155
- "\u{1F1E8}\u{1F1E6}",
7156
- "\u{1F1E8}\u{1F1E8}",
7157
- "\u{1F1E8}\u{1F1E9}",
7158
- "\u{1F1E8}\u{1F1EB}",
7159
- "\u{1F1E8}\u{1F1EC}",
7160
- "\u{1F1E8}\u{1F1ED}",
7161
- "\u{1F1E8}\u{1F1EE}",
7162
- "\u{1F1E8}\u{1F1F0}",
7163
- "\u{1F1E8}\u{1F1F1}",
7164
- "\u{1F1E8}\u{1F1F2}",
7165
- "\u{1F1E8}\u{1F1F3}",
7166
- "\u{1F1E8}\u{1F1F4}",
7167
- "\u{1F1E8}\u{1F1F7}",
7168
- "\u{1F1E8}\u{1F1FA}",
7169
- "\u{1F1E8}\u{1F1FB}",
7170
- "\u{1F1E8}\u{1F1FC}",
7171
- "\u{1F1E8}\u{1F1FD}",
7172
- "\u{1F1E8}\u{1F1FE}",
7173
- "\u{1F1E8}\u{1F1FF}",
7174
- "\u{1F1E9}\u{1F1EA}",
7175
- "\u{1F1E9}\u{1F1EF}",
7176
- "\u{1F1E9}\u{1F1F0}",
7177
- "\u{1F1E9}\u{1F1F2}",
7178
- "\u{1F1E9}\u{1F1F4}",
7179
- "\u{1F1E9}\u{1F1FF}",
7180
- "\u{1F1EA}\u{1F1E8}",
7181
- "\u{1F1EA}\u{1F1EA}",
7182
- "\u{1F1EA}\u{1F1EC}",
7183
- "\u{1F1EA}\u{1F1ED}",
7184
- "\u{1F1EA}\u{1F1F7}",
7185
- "\u{1F1EA}\u{1F1F8}",
7186
- "\u{1F1EA}\u{1F1F9}",
7187
- "\u{1F1EB}\u{1F1EE}",
7188
- "\u{1F1EB}\u{1F1EF}",
7189
- "\u{1F1EB}\u{1F1F0}",
7190
- "\u{1F1EB}\u{1F1F2}",
7191
- "\u{1F1EB}\u{1F1F4}",
7192
- "\u{1F1EB}\u{1F1F7}",
7193
- "\u{1F1EC}\u{1F1E6}",
7194
- "\u{1F1EC}\u{1F1E7}",
7195
- "\u{1F1EC}\u{1F1E9}",
7196
- "\u{1F1EC}\u{1F1EA}",
7197
- "\u{1F1EC}\u{1F1EB}",
7198
- "\u{1F1EC}\u{1F1EC}",
7199
- "\u{1F1EC}\u{1F1ED}",
7200
- "\u{1F1EC}\u{1F1EE}",
7201
- "\u{1F1EC}\u{1F1F1}",
7202
- "\u{1F1EC}\u{1F1F2}",
7203
- "\u{1F1EC}\u{1F1F3}",
7204
- "\u{1F1EC}\u{1F1F5}",
7205
- "\u{1F1EC}\u{1F1F6}",
7206
- "\u{1F1EC}\u{1F1F7}",
7207
- "\u{1F1EC}\u{1F1F8}",
7208
- "\u{1F1EC}\u{1F1F9}",
7209
- "\u{1F1EC}\u{1F1FA}",
7210
- "\u{1F1EC}\u{1F1FC}",
7211
- "\u{1F1EC}\u{1F1FE}",
7212
- "\u{1F1ED}\u{1F1F0}",
7213
- "\u{1F1ED}\u{1F1F2}",
7214
- "\u{1F1ED}\u{1F1F3}",
7215
- "\u{1F1ED}\u{1F1F7}",
7216
- "\u{1F1ED}\u{1F1F9}",
7217
- "\u{1F1ED}\u{1F1FA}",
7218
- "\u{1F1EE}\u{1F1E9}",
7219
- "\u{1F1EE}\u{1F1EA}",
7220
- "\u{1F1EE}\u{1F1F1}",
7221
- "\u{1F1EE}\u{1F1F2}",
7222
- "\u{1F1EE}\u{1F1F3}",
7223
- "\u{1F1EE}\u{1F1F4}",
7224
- "\u{1F1EE}\u{1F1F6}",
7225
- "\u{1F1EE}\u{1F1F7}",
7226
- "\u{1F1EE}\u{1F1F8}",
7227
- "\u{1F1EE}\u{1F1F9}",
7228
- "\u{1F1EF}\u{1F1EA}",
7229
- "\u{1F1EF}\u{1F1F2}",
7230
- "\u{1F1EF}\u{1F1F4}",
7231
- "\u{1F1EF}\u{1F1F5}",
7232
- "\u{1F1F0}\u{1F1EA}",
7233
- "\u{1F1F0}\u{1F1EC}",
7234
- "\u{1F1F0}\u{1F1ED}",
7235
- "\u{1F1F0}\u{1F1EE}",
7236
- "\u{1F1F0}\u{1F1F2}",
7237
- "\u{1F1F0}\u{1F1F3}",
7238
- "\u{1F1F0}\u{1F1F5}",
7239
- "\u{1F1F0}\u{1F1F7}",
7240
- "\u{1F1F0}\u{1F1FC}",
7241
- "\u{1F1F0}\u{1F1FE}",
7242
- "\u{1F1F0}\u{1F1FF}",
7243
- "\u{1F1F1}\u{1F1E6}",
7244
- "\u{1F1F1}\u{1F1E7}",
7245
- "\u{1F1F1}\u{1F1E8}",
7246
- "\u{1F1F1}\u{1F1EE}",
7247
- "\u{1F1F1}\u{1F1F0}",
7248
- "\u{1F1F1}\u{1F1F7}",
7249
- "\u{1F1F1}\u{1F1F8}",
7250
- "\u{1F1F1}\u{1F1F9}",
7251
- "\u{1F1F1}\u{1F1FA}",
7252
- "\u{1F1F1}\u{1F1FB}",
7253
- "\u{1F1F1}\u{1F1FE}",
7254
- "\u{1F1F2}\u{1F1E6}",
7255
- "\u{1F1F2}\u{1F1E8}",
7256
- "\u{1F1F2}\u{1F1E9}",
7257
- "\u{1F1F2}\u{1F1EA}",
7258
- "\u{1F1F2}\u{1F1EB}",
7259
- "\u{1F1F2}\u{1F1EC}",
7260
- "\u{1F1F2}\u{1F1ED}",
7261
- "\u{1F1F2}\u{1F1F0}",
7262
- "\u{1F1F2}\u{1F1F1}",
7263
- "\u{1F1F2}\u{1F1F2}",
7264
- "\u{1F1F2}\u{1F1F3}",
7265
- "\u{1F1F2}\u{1F1F4}",
7266
- "\u{1F1F2}\u{1F1F5}",
7267
- "\u{1F1F2}\u{1F1F6}",
7268
- "\u{1F1F2}\u{1F1F7}",
7269
- "\u{1F1F2}\u{1F1F8}",
7270
- "\u{1F1F2}\u{1F1F9}",
7271
- "\u{1F1F2}\u{1F1FA}",
7272
- "\u{1F1F2}\u{1F1FB}",
7273
- "\u{1F1F2}\u{1F1FC}",
7274
- "\u{1F1F2}\u{1F1FD}",
7275
- "\u{1F1F2}\u{1F1FE}",
7276
- "\u{1F1F2}\u{1F1FF}",
7277
- "\u{1F1F3}\u{1F1E6}",
7278
- "\u{1F1F3}\u{1F1E8}",
7279
- "\u{1F1F3}\u{1F1EA}",
7280
- "\u{1F1F3}\u{1F1EB}",
7281
- "\u{1F1F3}\u{1F1EC}",
7282
- "\u{1F1F3}\u{1F1EE}",
7283
- "\u{1F1F3}\u{1F1F1}",
7284
- "\u{1F1F3}\u{1F1F4}",
7285
- "\u{1F1F3}\u{1F1F5}",
7286
- "\u{1F1F3}\u{1F1F7}",
7287
- "\u{1F1F3}\u{1F1FA}",
7288
- "\u{1F1F3}\u{1F1FF}",
7289
- "\u{1F1F4}\u{1F1F2}",
7290
- "\u{1F1F5}\u{1F1E6}",
7291
- "\u{1F1F5}\u{1F1EA}",
7292
- "\u{1F1F5}\u{1F1EB}",
7293
- "\u{1F1F5}\u{1F1EC}",
7294
- "\u{1F1F5}\u{1F1ED}",
7295
- "\u{1F1F5}\u{1F1F0}",
7296
- "\u{1F1F5}\u{1F1F1}",
7297
- "\u{1F1F5}\u{1F1F2}",
7298
- "\u{1F1F5}\u{1F1F3}",
7299
- "\u{1F1F5}\u{1F1F7}",
7300
- "\u{1F1F5}\u{1F1F8}",
7301
- "\u{1F1F5}\u{1F1F9}",
7302
- "\u{1F1F5}\u{1F1FC}",
7303
- "\u{1F1F5}\u{1F1FE}",
7304
- "\u{1F1F6}\u{1F1E6}",
7305
- "\u{1F1F7}\u{1F1EA}",
7306
- "\u{1F1F7}\u{1F1F4}",
7307
- "\u{1F1F7}\u{1F1F8}",
7308
- "\u{1F1F7}\u{1F1FA}",
7309
- "\u{1F1F7}\u{1F1FC}",
7310
- "\u{1F1F8}\u{1F1E6}",
7311
- "\u{1F1F8}\u{1F1E7}",
7312
- "\u{1F1F8}\u{1F1E8}",
7313
- "\u{1F1F8}\u{1F1E9}",
7314
- "\u{1F1F8}\u{1F1EA}",
7315
- "\u{1F1F8}\u{1F1EC}",
7316
- "\u{1F1F8}\u{1F1ED}",
7317
- "\u{1F1F8}\u{1F1EE}",
7318
- "\u{1F1F8}\u{1F1EF}",
7319
- "\u{1F1F8}\u{1F1F0}",
7320
- "\u{1F1F8}\u{1F1F1}",
7321
- "\u{1F1F8}\u{1F1F2}",
7322
- "\u{1F1F8}\u{1F1F3}",
7323
- "\u{1F1F8}\u{1F1F4}",
7324
- "\u{1F1F8}\u{1F1F7}",
7325
- "\u{1F1F8}\u{1F1F8}",
7326
- "\u{1F1F8}\u{1F1F9}",
7327
- "\u{1F1F8}\u{1F1FB}",
7328
- "\u{1F1F8}\u{1F1FD}",
7329
- "\u{1F1F8}\u{1F1FE}",
7330
- "\u{1F1F8}\u{1F1FF}",
7331
- "\u{1F1F9}\u{1F1E8}",
7332
- "\u{1F1F9}\u{1F1E9}",
7333
- "\u{1F1F9}\u{1F1EB}",
7334
- "\u{1F1F9}\u{1F1EC}",
7335
- "\u{1F1F9}\u{1F1ED}",
7336
- "\u{1F1F9}\u{1F1EF}",
7337
- "\u{1F1F9}\u{1F1F0}",
7338
- "\u{1F1F9}\u{1F1F1}",
7339
- "\u{1F1F9}\u{1F1F2}",
7340
- "\u{1F1F9}\u{1F1F3}",
7341
- "\u{1F1F9}\u{1F1F4}",
7342
- "\u{1F1F9}\u{1F1F7}",
7343
- "\u{1F1F9}\u{1F1F9}",
7344
- "\u{1F1F9}\u{1F1FB}",
7345
- "\u{1F1F9}\u{1F1FC}",
7346
- "\u{1F1F9}\u{1F1FF}",
7347
- "\u{1F1FA}\u{1F1E6}",
7348
- "\u{1F1FA}\u{1F1EC}",
7349
- "\u{1F1FA}\u{1F1F2}",
7350
- "\u{1F1FA}\u{1F1F8}",
7351
- "\u{1F1FA}\u{1F1FE}",
7352
- "\u{1F1FA}\u{1F1FF}",
7353
- "\u{1F1FB}\u{1F1E6}",
7354
- "\u{1F1FB}\u{1F1E8}",
7355
- "\u{1F1FB}\u{1F1EA}",
7356
- "\u{1F1FB}\u{1F1EC}",
7357
- "\u{1F1FB}\u{1F1EE}",
7358
- "\u{1F1FB}\u{1F1F3}",
7359
- "\u{1F1FB}\u{1F1FA}",
7360
- "\u{1F1FC}\u{1F1EB}",
7361
- "\u{1F1FC}\u{1F1F8}",
7362
- "\u{1F1FE}\u{1F1EA}",
7363
- "\u{1F1FE}\u{1F1F9}",
7364
- "\u{1F1FF}\u{1F1E6}",
7365
- "\u{1F1FF}\u{1F1F2}",
7366
- "\u{1F1FF}\u{1F1FC}",
7367
- "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}",
7368
- "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}",
7369
- "\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}"
7370
- ]
7371
- }
7372
- ];
7373
- var ICON_CATEGORIES = [
7374
- {
7375
- id: "icon-arrows",
7376
- face: "\u2192",
7377
- glyphs: [
7378
- "\u2039",
7379
- "\u203A",
7380
- "\xAB",
7381
- "\xBB",
7382
- "\u2190",
7383
- "\u2192",
7384
- "\u2191",
7385
- "\u2193",
7386
- "\u2196",
7387
- "\u2197",
7388
- "\u2198",
7389
- "\u2199",
7390
- "\u2194",
7391
- "\u2195",
7392
- "\u21D0",
7393
- "\u21D2",
7394
- "\u21D1",
7395
- "\u21D3",
7396
- "\u21C4",
7397
- "\u21C5",
7398
- "\u21C6",
7399
- "\u21F5",
7400
- "\u21A9",
7401
- "\u21AA",
7402
- "\u2934",
7403
- "\u2935",
7404
- "\u21B6",
7405
- "\u21B7",
7406
- "\u25B2",
7407
- "\u25BC",
7408
- "\u25C0\uFE0E",
7409
- "\u25B6\uFE0E",
7410
- "\u27F5",
7411
- "\u27F6",
7412
- "\u27F7",
7413
- "\u21BA",
7414
- "\u21BB"
7415
- ]
7416
- },
7417
- {
7418
- id: "icon-currency",
7419
- face: "$",
7420
- glyphs: [
7421
- "\u20AC",
7422
- "\xA3",
7423
- "$",
7424
- "\u20B9",
7425
- "\xA5",
7426
- "\u20BD",
7427
- "\u20A9",
7428
- "\u20BF",
7429
- "\u20BA"
7430
- ]
7431
- },
7432
- {
7433
- id: "icon-gestures",
7434
- face: "\u263A\uFE0E",
7435
- glyphs: [
7436
- "\u263A\uFE0E",
7437
- "\u2639\uFE0E",
7438
- "\u263B",
7439
- "\u{1F44D}\uFE0E",
7440
- "\u{1F44E}\uFE0E",
7441
- "\u261D\uFE0E",
7442
- "\u261E",
7443
- "\u261C",
7444
- "\u261F",
7445
- "\u270C\uFE0E",
7446
- "\u270D\uFE0E",
7447
- "\u270B\uFE0E",
7448
- "\u{1F6B9}\uFE0E",
7449
- "\u{1F6BA}\uFE0E"
7450
- ]
7451
- },
7452
- {
7453
- id: "icon-nature",
7454
- face: "\u2740",
7455
- glyphs: [
7456
- "\u2618\uFE0E",
7457
- "\u2740",
7458
- "\u273F",
7459
- "\u2600\uFE0E",
7460
- "\u263E",
7461
- "\u2744\uFE0E",
7462
- "\u2767"
7463
- ]
7464
- },
7465
- {
7466
- id: "icon-objects",
7467
- face: "\u2699\uFE0E",
7468
- glyphs: [
7469
- "\u2302",
7470
- "\u2699\uFE0E",
7471
- "\u231A\uFE0E",
7472
- "\u23F3\uFE0E",
7473
- "\u231B\uFE0E",
7474
- "\u2602\uFE0E",
7475
- "\u2615\uFE0E",
7476
- "\u260E\uFE0E",
7477
- "\u2328\uFE0E",
7478
- "\u{1F5A5}\uFE0E",
7479
- "\u{1F4BB}\uFE0E",
7480
- "\u{1F4F1}\uFE0E",
7481
- "\u{1F4F7}\uFE0E",
7482
- "\u{1F3A5}\uFE0E",
7483
- "\u{1F5BC}\uFE0E",
7484
- "\u{1F50D}\uFE0E",
7485
- "\u2315",
7486
- "\u{1F4A1}\uFE0E",
7487
- "\u{1F526}\uFE0E",
7488
- "\u{1F56F}\uFE0E",
7489
- "\u{1F4E1}\uFE0E",
7490
- "\u{1F50B}\uFE0E",
7491
- "\u{1F50C}\uFE0E",
7492
- "\u{1F4C5}\uFE0E",
7493
- "\u{1F4CA}\uFE0E",
7494
- "\u{1F4C1}\uFE0E",
7495
- "\u{1F4CC}\uFE0E",
7496
- "\u{1F4CE}\uFE0E",
7497
- "\u2702\uFE0E",
7498
- "\u{1F5D1}\uFE0E",
7499
- "\u2709\uFE0E",
7500
- "\u270E",
7501
- "\u{1F4DD}\uFE0E",
7502
- "\u{1F4D6}\uFE0E",
7503
- "\u{1F3F7}\uFE0E",
7504
- "\u{1F511}\uFE0E",
7505
- "\u{1F5DD}\uFE0E",
7506
- "\u{1F512}\uFE0E",
7507
- "\u{1F514}\uFE0E",
7508
- "\u{1F381}\uFE0E",
7509
- "\u{1F4BC}\uFE0E",
7510
- "\u{1F9EA}\uFE0E",
7511
- "\u2697\uFE0E",
7512
- "\u{1F52C}\uFE0E",
7513
- "\u{1F52D}\uFE0E",
7514
- "\u{1F9F2}\uFE0E",
7515
- "\u2693\uFE0E",
7516
- "\u{1F528}\uFE0E",
7517
- "\u{1F527}\uFE0E",
7518
- "\u{1F6E1}\uFE0E",
7519
- "\u{1F680}\uFE0E",
7520
- "\u2696\uFE0E",
7521
- "\u2694\uFE0E"
7522
- ]
7523
- },
7524
- {
7525
- id: "icon-special",
7526
- face: "\u{1F4A9}\uFE0E",
7527
- glyphs: [
7528
- "\u{1F4A9}\uFE0E"
7529
- ]
7530
- },
7531
- {
7532
- id: "icon-symbols",
7533
- face: "\u2605",
7534
- glyphs: [
7535
- "\u2665",
7536
- "\u2764\uFE0E",
7537
- "\u2661",
7538
- "\u2605",
7539
- "\u2606",
7540
- "\u2726",
7541
- "\u2727",
7542
- "\u2713",
7543
- "\u2714",
7544
- "\u2717",
7545
- "\u2718",
7546
- "\u2611\uFE0E",
7547
- "\u2612",
7548
- "\u27F3",
7549
- "\u27F2",
7550
- "\u2691",
7551
- "\u2690",
7552
- "\u2295",
7553
- "\u2296",
7554
- "\u2297",
7555
- "\u271A",
7556
- "\u262F\uFE0E",
7557
- "\u262E\uFE0E",
7558
- "\u267B\uFE0E",
7559
- "\u269B\uFE0E",
7560
- "\u2622\uFE0E",
7561
- "\u2623\uFE0E",
7562
- "\u2620\uFE0E",
7563
- "\u26A0\uFE0E",
7564
- "\u2139\uFE0E",
7565
- "\u2316",
7566
- "\u25CE",
7567
- "\u25C9",
7568
- "\u25CF",
7569
- "\u23FA\uFE0E",
7570
- "\u{1F441}\uFE0E",
7571
- "\u{1F4AC}\uFE0E",
7572
- "\u26A1\uFE0E",
7573
- "\u21AF",
7574
- "\u266A",
7575
- "\u266B",
7576
- "\u266C",
7577
- "\u2682",
7578
- "\u265E",
7579
- "\u2660",
7580
- "\u2663",
7581
- "\u2666",
7582
- "\u221E",
7583
- "\xB0",
7584
- "\xA7",
7585
- "\xA9",
7586
- "\xAE",
7587
- "\u2122",
7588
- "\u23FB",
7589
- "\u2642",
7590
- "\u2640",
7591
- "\u26A5",
7592
- "\u2733\uFE0E",
7593
- "\u203C\uFE0E",
7594
- "\u2756"
7595
- ]
7596
- }
7597
- ];
7598
- function isEmojiGlyph(glyph2) {
7599
- if (glyph2.includes("\uFE0E")) return false;
7600
- return /\p{Extended_Pictographic}|\p{Regional_Indicator}|⃣/u.test(glyph2);
7601
- }
7602
-
7603
5674
  // src/drawings/emoji.ts
7604
5675
  var drawings = null;
7605
5676
  var artwork = null;
@@ -7640,7 +5711,54 @@ function bundledGlyphSource(glyph2) {
7640
5711
 
7641
5712
  // src/pointerInput.ts
7642
5713
  function pointerLock(locked) {
7643
- return locked ? { handleScroll: false, handleScale: false, touchAction: "none" } : { handleScroll: true, handleScale: true, touchAction: "" };
5714
+ const on = !locked;
5715
+ return {
5716
+ handleScroll: on,
5717
+ handleScale: { mouseWheel: on, pinch: false, axisPressedMouseMove: on, axisDoubleClickReset: on },
5718
+ touchAction: locked ? "none" : ""
5719
+ };
5720
+ }
5721
+ function scalingOpen(handleScale) {
5722
+ return typeof handleScale === "boolean" ? handleScale : handleScale.mouseWheel !== false;
5723
+ }
5724
+ function pinchSpacing(startSpacing, startDistance, distance) {
5725
+ if (!(startDistance > 0) || !(distance > 0)) return startSpacing;
5726
+ return startSpacing * (distance / startDistance);
5727
+ }
5728
+ function pinchStart(range2, width, x, distance) {
5729
+ const count2 = range2.to - range2.from + 1;
5730
+ if (!(count2 > 0) || !(width > 0) || !(distance > 0)) return null;
5731
+ const spacing = width / count2;
5732
+ return { spacing, anchor: range2.to + 0.5 - (width - 1 - x) / spacing, distance };
5733
+ }
5734
+ function pinchRange(start, x, distance, plot) {
5735
+ const spacing = Math.min(plot.maxSpacing, Math.max(plot.minSpacing, pinchSpacing(start.spacing, start.distance, distance)));
5736
+ const to = start.anchor - 0.5 + (plot.width - 1 - x) / spacing;
5737
+ return { from: to + 1 - plot.width / spacing, to };
5738
+ }
5739
+ var RENDERER_DRAG_START_PX = 5;
5740
+ var RENDERER_LONG_TAP_MS = 240;
5741
+ function scrollOpen(handleScroll) {
5742
+ return typeof handleScroll === "boolean" ? handleScroll : handleScroll.horzTouchDrag !== false;
5743
+ }
5744
+ var FLING_MAX_PX_PER_MS = 2;
5745
+ var FLING_DAMPING_PER_MS = 0.995;
5746
+ var FLING_REST_PX_PER_MS = 0.02;
5747
+ var FLING_RELEASE_MS = 50;
5748
+ var FLING_SAMPLE_MS = 80;
5749
+ function flingSpeed(samples, releasedAt, spacing) {
5750
+ const last = samples[samples.length - 1];
5751
+ if (!last || !(spacing > 0) || releasedAt - last.t > FLING_RELEASE_MS) return 0;
5752
+ const first = samples.find((s) => s.t >= last.t - FLING_SAMPLE_MS) ?? last;
5753
+ const elapsed = last.t - first.t;
5754
+ if (!(elapsed > 0)) return 0;
5755
+ const speed = (last.position - first.position) / elapsed;
5756
+ const max = FLING_MAX_PX_PER_MS / spacing;
5757
+ return Math.sign(speed) * Math.min(Math.abs(speed), max);
5758
+ }
5759
+ function flingStep(speed, elapsed) {
5760
+ const keep = Math.pow(FLING_DAMPING_PER_MS, elapsed);
5761
+ return { moved: speed * (keep - 1) / Math.log(FLING_DAMPING_PER_MS), speed: speed * keep };
7644
5762
  }
7645
5763
  var LONG_PRESS_MS = 450;
7646
5764
  var LONG_PRESS_DRIFT_PX = 10;
@@ -9614,23 +7732,6 @@ function visibilityRangeRow(t, icons, props) {
9614
7732
  }
9615
7733
 
9616
7734
  // src/ui/drawings/glyphPicker.ts
9617
- var CATEGORY_LABEL = {
9618
- smileys: "drawing.glyphCatSmileys",
9619
- nature: "drawing.glyphCatNature",
9620
- food: "drawing.glyphCatFood",
9621
- activity: "drawing.glyphCatActivity",
9622
- travel: "drawing.glyphCatTravel",
9623
- objects: "drawing.glyphCatObjects",
9624
- symbols: "drawing.glyphCatSymbols",
9625
- flags: "drawing.glyphCatFlags",
9626
- "icon-arrows": "drawing.glyphCatIconArrows",
9627
- "icon-currency": "drawing.glyphCatIconCurrency",
9628
- "icon-gestures": "drawing.glyphCatIconGestures",
9629
- "icon-nature": "drawing.glyphCatIconNature",
9630
- "icon-objects": "drawing.glyphCatObjects",
9631
- "icon-special": "drawing.glyphCatIconSpecial",
9632
- "icon-symbols": "drawing.glyphCatIconSymbols"
9633
- };
9634
7735
  var KIND_LABEL = {
9635
7736
  emoji: "drawing.kindEmojis",
9636
7737
  sticker: "drawing.kindStickers",
@@ -9655,7 +7756,7 @@ function mountGlyphPicker(input) {
9655
7756
  const kinds = el("div", { class: "qc-drawing-glyph-kinds", role: "tablist" });
9656
7757
  root.append(strip, grid2, empty, kinds);
9657
7758
  const categories = () => kind === "icon" ? ICON_CATEGORIES : EMOJI_CATEGORIES;
9658
- const label2 = (c) => CATEGORY_LABEL[c.id] ? t(CATEGORY_LABEL[c.id]) : c.id;
7759
+ const label2 = (c) => t(c.heading);
9659
7760
  const art = (glyph2) => {
9660
7761
  const url = (deps.glyphSource ?? bundledGlyphSource)(glyph2);
9661
7762
  return url ? el("img", { class: "qc-drawing-glyph-art", src: url, alt: "", draggable: "false" }) : null;
@@ -14486,42 +12587,6 @@ function attachCompare(chart, deps) {
14486
12587
  return handle;
14487
12588
  }
14488
12589
 
14489
- // src/symbolLabel.ts
14490
- function bareTicker(symbol) {
14491
- return /^[A-Za-z][A-Za-z0-9._-]*:([A-Za-z0-9][A-Za-z0-9._!]*)$/.exec(symbol)?.[1] ?? symbol;
14492
- }
14493
- var SLASH_PAIR = /^[A-Za-z][A-Za-z0-9.]*\/[A-Za-z][A-Za-z0-9.]*$/;
14494
- function symbolLabel(symbol) {
14495
- const ticker = bareTicker(symbol);
14496
- return SLASH_PAIR.test(ticker) ? ticker.replace("/", "") : ticker;
14497
- }
14498
- var PAIR_MARKETS = /* @__PURE__ */ new Set(["crypto", "forex"]);
14499
- function pairLabel(ticker, type, currencyCode) {
14500
- const quote = currencyCode?.trim();
14501
- if (!quote || !PAIR_MARKETS.has(type.toLowerCase())) return null;
14502
- const bare = bareTicker(ticker);
14503
- const base = bare.length > quote.length && bare.toUpperCase().endsWith(quote.toUpperCase()) ? bare.slice(0, -quote.length) : bare;
14504
- return base && base.toUpperCase() !== quote.toUpperCase() ? `${base} / ${quote}` : null;
14505
- }
14506
- function factsOf(symbol) {
14507
- if (typeof symbol === "string") return { ticker: symbol, type: "", shortName: "", longName: "", currencyCode: void 0 };
14508
- if ("symbol" in symbol) return { ticker: symbol.symbol, type: symbol.type, shortName: "", longName: symbol.name.trim(), currencyCode: symbol.currencyCode };
14509
- const name2 = symbol.name.trim();
14510
- const description = symbol.description.trim();
14511
- return { ticker: symbol.ticker, type: symbol.type, shortName: name2 !== description ? name2 : "", longName: description, currencyCode: symbol.currencyCode };
14512
- }
14513
- function symbolNames(symbol) {
14514
- const facts = factsOf(symbol);
14515
- if (facts.type.toLowerCase() === "spread") return { mark: facts.ticker, title: facts.ticker, description: facts.ticker };
14516
- const bare = bareTicker(facts.ticker);
14517
- const pair = pairLabel(facts.ticker, facts.type, facts.currencyCode) ?? (SLASH_PAIR.test(bare) ? bare.replace("/", " / ") : null);
14518
- return {
14519
- mark: pair ? pair.replace(" / ", "") : symbolLabel(facts.ticker),
14520
- title: pair ?? (facts.shortName || bare),
14521
- description: pair ?? (facts.longName || bare)
14522
- };
14523
- }
14524
-
14525
12590
  // src/widget/compare.ts
14526
12591
  var CHIP_THROTTLE_MS = 250;
14527
12592
  function attachComparePlane(deps) {
@@ -15374,6 +13439,7 @@ function attachExtensionsPlane(deps) {
15374
13439
  deps.setTouchAction(state.touchAction);
15375
13440
  }
15376
13441
  };
13442
+ series2.lockPanZoom(false);
15377
13443
  const host2 = createExtensionHost(
15378
13444
  {
15379
13445
  chartId: deps.chartId,
@@ -16539,6 +14605,266 @@ function attachLegendPlane(deps) {
16539
14605
  };
16540
14606
  }
16541
14607
 
14608
+ // src/widget/fling.ts
14609
+ function attachFling(deps) {
14610
+ const scale = () => deps.chart.timeScale();
14611
+ let samples = [];
14612
+ let movedAt = null;
14613
+ let oneFinger = false;
14614
+ let frame = null;
14615
+ const stop = () => {
14616
+ if (frame !== null && typeof cancelAnimationFrame === "function") cancelAnimationFrame(frame);
14617
+ frame = null;
14618
+ };
14619
+ const record3 = (t) => {
14620
+ samples.push({ t, position: scale().scrollPosition() });
14621
+ while (samples.length > 2 && samples[0].t < t - 2 * FLING_SAMPLE_MS) samples.shift();
14622
+ };
14623
+ const coast = (speed) => {
14624
+ if (typeof requestAnimationFrame !== "function") return;
14625
+ let last = performance.now();
14626
+ let travelling = speed;
14627
+ let position = null;
14628
+ const step = (now) => {
14629
+ if (frame === null) return;
14630
+ const s = scale();
14631
+ position ??= s.scrollPosition();
14632
+ const next = flingStep(travelling, Math.max(0, now - last));
14633
+ last = now;
14634
+ travelling = next.speed;
14635
+ position += next.moved;
14636
+ s.scrollToPosition(position, false);
14637
+ if (Math.abs(travelling) * s.options().barSpacing < FLING_REST_PX_PER_MS) {
14638
+ frame = null;
14639
+ return;
14640
+ }
14641
+ frame = requestAnimationFrame(step);
14642
+ };
14643
+ frame = requestAnimationFrame(step);
14644
+ };
14645
+ const onStart = (event) => {
14646
+ stop();
14647
+ samples = [];
14648
+ movedAt = null;
14649
+ oneFinger = event.touches.length === 1;
14650
+ if (oneFinger) record3(performance.now());
14651
+ };
14652
+ const onMove = (event) => {
14653
+ if (event.touches.length !== 1) oneFinger = false;
14654
+ if (!oneFinger) return;
14655
+ if (movedAt !== null) record3(movedAt);
14656
+ movedAt = performance.now();
14657
+ };
14658
+ const onEnd = (event) => {
14659
+ const thrown = oneFinger && event.touches.length === 0;
14660
+ oneFinger = false;
14661
+ if (!thrown) return;
14662
+ if (movedAt !== null) record3(movedAt);
14663
+ const spacing = scale().options().barSpacing;
14664
+ const speed = flingSpeed(samples, performance.now(), spacing);
14665
+ samples = [];
14666
+ movedAt = null;
14667
+ if (Math.abs(speed) * spacing >= FLING_REST_PX_PER_MS) coast(speed);
14668
+ };
14669
+ const onCancel = () => {
14670
+ oneFinger = false;
14671
+ samples = [];
14672
+ movedAt = null;
14673
+ };
14674
+ deps.target.addEventListener("touchstart", onStart, { passive: true });
14675
+ deps.target.addEventListener("touchmove", onMove, { passive: true });
14676
+ deps.target.addEventListener("touchend", onEnd, { passive: true });
14677
+ deps.target.addEventListener("touchcancel", onCancel, { passive: true });
14678
+ return {
14679
+ stop,
14680
+ destroy() {
14681
+ stop();
14682
+ deps.target.removeEventListener("touchstart", onStart);
14683
+ deps.target.removeEventListener("touchmove", onMove);
14684
+ deps.target.removeEventListener("touchend", onEnd);
14685
+ deps.target.removeEventListener("touchcancel", onCancel);
14686
+ }
14687
+ };
14688
+ }
14689
+
14690
+ // src/widget/pinch.ts
14691
+ function attachPinch(deps) {
14692
+ const scale = () => deps.chart.timeScale();
14693
+ let pinch = null;
14694
+ let panned = false;
14695
+ const read = (touches) => {
14696
+ const a = touches[0];
14697
+ const b = touches[1];
14698
+ const left = deps.chart.chartElement().getBoundingClientRect().left + deps.chart.priceScale("left").width();
14699
+ return { distance: Math.hypot(a.clientX - b.clientX, a.clientY - b.clientY), x: (a.clientX + b.clientX) / 2 - left };
14700
+ };
14701
+ const begin = (event) => {
14702
+ pinch = null;
14703
+ if (event.touches.length === 1) panned = false;
14704
+ if (event.touches.length !== 2 || panned || !scalingOpen(deps.chart.options().handleScale)) return;
14705
+ const range2 = scale().getVisibleLogicalRange();
14706
+ if (range2 === null) return;
14707
+ const { distance, x } = read(event.touches);
14708
+ pinch = pinchStart(range2, scale().width(), x, distance);
14709
+ };
14710
+ const move = (event) => {
14711
+ if (event.touches.length === 1 && pinch === null) panned = true;
14712
+ if (pinch === null || event.touches.length !== 2) return;
14713
+ if (!scalingOpen(deps.chart.options().handleScale)) {
14714
+ pinch = null;
14715
+ return;
14716
+ }
14717
+ const { distance, x } = read(event.touches);
14718
+ const s = scale();
14719
+ const width = s.width();
14720
+ const options = s.options();
14721
+ const plot = { width, minSpacing: options.minBarSpacing, maxSpacing: options.maxBarSpacing > 0 ? options.maxBarSpacing : width / 2 };
14722
+ s.setVisibleLogicalRange(pinchRange(pinch, x, distance, plot));
14723
+ };
14724
+ const end = (event) => {
14725
+ if (event.touches.length === 1) panned = false;
14726
+ if (event.touches.length === 2) begin(event);
14727
+ else pinch = null;
14728
+ };
14729
+ deps.target.addEventListener("touchstart", begin, { passive: true });
14730
+ deps.target.addEventListener("touchmove", move, { passive: true });
14731
+ deps.target.addEventListener("touchend", end, { passive: true });
14732
+ deps.target.addEventListener("touchcancel", end, { passive: true });
14733
+ return {
14734
+ destroy() {
14735
+ pinch = null;
14736
+ deps.target.removeEventListener("touchstart", begin);
14737
+ deps.target.removeEventListener("touchmove", move);
14738
+ deps.target.removeEventListener("touchend", end);
14739
+ deps.target.removeEventListener("touchcancel", end);
14740
+ }
14741
+ };
14742
+ }
14743
+
14744
+ // src/widget/freePan.ts
14745
+ function attachFreePan(deps) {
14746
+ let landed = null;
14747
+ const onPlot = (clientX, clientY) => {
14748
+ const box = deps.chart.chartElement().getBoundingClientRect();
14749
+ const left = box.left + deps.chart.priceScale("left").width();
14750
+ const right = left + deps.chart.timeScale().width();
14751
+ return clientX >= left && clientX <= right && clientY >= box.top && clientY <= box.bottom - deps.chart.timeScale().height();
14752
+ };
14753
+ const release = () => {
14754
+ if (deps.framing()) deps.release();
14755
+ };
14756
+ const onStart = (event) => {
14757
+ landed = null;
14758
+ if (event.touches.length === 2) {
14759
+ if (scalingOpen(deps.chart.options().handleScale)) release();
14760
+ return;
14761
+ }
14762
+ const touch = event.touches[0];
14763
+ if (event.touches.length !== 1 || !touch || !onPlot(touch.clientX, touch.clientY)) return;
14764
+ landed = { x: touch.clientX, y: touch.clientY, at: performance.now() };
14765
+ };
14766
+ const onMove = (event) => {
14767
+ if (landed === null) return;
14768
+ const touch = event.touches[0];
14769
+ if (event.touches.length !== 1 || !touch) {
14770
+ landed = null;
14771
+ return;
14772
+ }
14773
+ if (Math.abs(touch.clientX - landed.x) + Math.abs(touch.clientY - landed.y) < RENDERER_DRAG_START_PX) return;
14774
+ const started = landed;
14775
+ landed = null;
14776
+ if (performance.now() - started.at >= RENDERER_LONG_TAP_MS) return;
14777
+ if (scrollOpen(deps.chart.options().handleScroll)) release();
14778
+ };
14779
+ const onEnd = () => {
14780
+ landed = null;
14781
+ };
14782
+ deps.target.addEventListener("touchstart", onStart, { passive: true });
14783
+ deps.target.addEventListener("touchmove", onMove, { passive: true });
14784
+ deps.target.addEventListener("touchend", onEnd, { passive: true });
14785
+ deps.target.addEventListener("touchcancel", onEnd, { passive: true });
14786
+ return {
14787
+ destroy() {
14788
+ landed = null;
14789
+ deps.target.removeEventListener("touchstart", onStart);
14790
+ deps.target.removeEventListener("touchmove", onMove);
14791
+ deps.target.removeEventListener("touchend", onEnd);
14792
+ deps.target.removeEventListener("touchcancel", onEnd);
14793
+ }
14794
+ };
14795
+ }
14796
+
14797
+ // src/widget/plotArea.ts
14798
+ function measurePlotArea(chart, host2) {
14799
+ const row2 = chart.panes()[0]?.getHTMLElement();
14800
+ if (!row2) return null;
14801
+ const size = chart.paneSize(0);
14802
+ if (!(size.width > 0) || !(size.height > 0)) return null;
14803
+ const outer = host2.getBoundingClientRect();
14804
+ const top = row2.getBoundingClientRect().top;
14805
+ const left = chart.chartElement().getBoundingClientRect().left + chart.priceScale("left").width();
14806
+ const round = (n) => Math.round(n * 100) / 100;
14807
+ return {
14808
+ top: round(top - outer.top),
14809
+ right: round(outer.right - (left + size.width)),
14810
+ bottom: round(outer.bottom - (top + size.height)),
14811
+ left: round(left - outer.left),
14812
+ width: round(size.width),
14813
+ height: round(size.height)
14814
+ };
14815
+ }
14816
+ var sameArea = (a, b) => b !== null && a.top === b.top && a.right === b.right && a.bottom === b.bottom && a.left === b.left && a.width === b.width && a.height === b.height;
14817
+ function watchPlotArea(deps) {
14818
+ let area = null;
14819
+ let frame = null;
14820
+ let destroyed = false;
14821
+ let row2 = null;
14822
+ const resize = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(() => schedule());
14823
+ const measure2 = () => {
14824
+ frame = null;
14825
+ if (destroyed) return;
14826
+ const nextRow = deps.chart.panes()[0]?.getHTMLElement() ?? null;
14827
+ if (nextRow !== row2) {
14828
+ if (row2) resize?.unobserve(row2);
14829
+ if (nextRow) resize?.observe(nextRow);
14830
+ row2 = nextRow;
14831
+ }
14832
+ const next = measurePlotArea(deps.chart, deps.host);
14833
+ if (next === null || sameArea(next, area)) return;
14834
+ area = next;
14835
+ deps.changed(next);
14836
+ };
14837
+ function schedule() {
14838
+ if (destroyed || frame !== null) return;
14839
+ if (typeof requestAnimationFrame !== "function") {
14840
+ measure2();
14841
+ return;
14842
+ }
14843
+ frame = requestAnimationFrame(measure2);
14844
+ }
14845
+ deps.chart.timeScale().subscribeSizeChange(schedule);
14846
+ resize?.observe(deps.host);
14847
+ resize?.observe(deps.chart.chartElement());
14848
+ schedule();
14849
+ return {
14850
+ current() {
14851
+ if (destroyed) return null;
14852
+ return area ?? measurePlotArea(deps.chart, deps.host);
14853
+ },
14854
+ destroy() {
14855
+ if (destroyed) return;
14856
+ destroyed = true;
14857
+ if (frame !== null && typeof cancelAnimationFrame === "function") cancelAnimationFrame(frame);
14858
+ frame = null;
14859
+ resize?.disconnect();
14860
+ try {
14861
+ deps.chart.timeScale().unsubscribeSizeChange(schedule);
14862
+ } catch {
14863
+ }
14864
+ }
14865
+ };
14866
+ }
14867
+
16542
14868
  // src/contextMenu.ts
16543
14869
  function chartContextMenuGroups(c) {
16544
14870
  const t = c.t ?? englishChartStrings();
@@ -16889,6 +15215,22 @@ for (const style of CHART_STYLES) ICON_OF.set(STYLE_ICONS[style], `style.${style
16889
15215
  for (const type of MINIATURE_TOOLS) ICON_OF.set(toolGlyphs.get(type), `tool.${type}`);
16890
15216
  for (const code of ARRANGEMENT_CODES) ICON_OF.set(arrangementGlyphs.get(code), `layout.${code}`);
16891
15217
  var iconOf = (mark) => ICON_OF.get(mark);
15218
+ var GLYPHS_OF = new Map([
15219
+ ...Object.entries(CONTROL_ICONS),
15220
+ ...CHART_STYLES.map((style) => [`style.${style}`, [STYLE_ICONS[style]]]),
15221
+ ...MINIATURE_TOOLS.map((type) => [`tool.${type}`, [toolGlyphs.get(type)]]),
15222
+ ...ARRANGEMENT_CODES.map((code) => [`layout.${code}`, [arrangementGlyphs.get(code)]])
15223
+ ]);
15224
+ var standsAlone = (mark) => !/var\(--|class=/.test(mark.body);
15225
+ function chartIconArtwork(id) {
15226
+ const glyphs = GLYPHS_OF.get(id) ?? [];
15227
+ if (!glyphs.every(standsAlone)) return [];
15228
+ return glyphs.map((mark) => ({
15229
+ viewBox: mark.viewBox,
15230
+ body: mark.body,
15231
+ svg: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="${mark.viewBox}" fill="none">${mark.body}</svg>`
15232
+ }));
15233
+ }
16892
15234
  function checkIcons(icons) {
16893
15235
  if (icons === void 0) return;
16894
15236
  if (typeof icons !== "object" || icons === null || Array.isArray(icons)) throw new TypeError("icons must be an object");
@@ -18409,6 +16751,12 @@ function createChartInstance(deps) {
18409
16751
  horzLines: { color: canvas().grid, visible: eff.appearance.grid }
18410
16752
  },
18411
16753
  crosshair: { mode: deps.features.crosshair ? CrosshairMode.Normal : CrosshairMode.Hidden },
16754
+ // A finger held on the plot scrubs the crosshair for as long as it stays down, and lifting it
16755
+ // takes the crosshair away, so the next one-finger drag pans: the way a native chart reads.
16756
+ trackingMode: { exitMode: TrackingModeExitMode.OnTouchEnd },
16757
+ // The renderer's own momentum throws a flick as fast as seven pixels a millisecond and coasts
16758
+ // it thousands of pixels; the chart coasts a flick itself, calmly.
16759
+ kineticScroll: { touch: false, mouse: false },
18412
16760
  rightPriceScale: { borderVisible: false, scaleMargins: { top: 0.08, bottom: 0.08 } },
18413
16761
  timeScale: { borderVisible: false, timeVisible: true, secondsVisible: false, rightOffset: 4, barSpacing: 8, minBarSpacing: 0.5 }
18414
16762
  });
@@ -18518,6 +16866,8 @@ function createChartInstance(deps) {
18518
16866
  const beginNavigation = () => {
18519
16867
  navigationEpoch++;
18520
16868
  maintenanceRange = null;
16869
+ ranges.stopGlide();
16870
+ fling.stop();
18521
16871
  releaseMirror();
18522
16872
  setRangePreset(null);
18523
16873
  };
@@ -18547,7 +16897,15 @@ function createChartInstance(deps) {
18547
16897
  const crosshairSubs = /* @__PURE__ */ new Set();
18548
16898
  const timeClickSubs = /* @__PURE__ */ new Set();
18549
16899
  const rangeSubs = /* @__PURE__ */ new Set();
18550
- const ranges = createRangeApi({ chart, disposed: disposedFn, muted, mirrored });
16900
+ const ranges = createRangeApi({
16901
+ chart,
16902
+ disposed: disposedFn,
16903
+ muted,
16904
+ mirrored,
16905
+ onGlide: () => followLiveEdge(),
16906
+ reducedMotion: () => gestures.ownerDocument.defaultView?.matchMedia?.("(prefers-reduced-motion: reduce)").matches ?? false
16907
+ });
16908
+ const fling = attachFling({ chart, target: gestures });
18551
16909
  let unregisterRangeMirror = () => void 0;
18552
16910
  function applyTimezone() {
18553
16911
  if (disposed) return;
@@ -18843,6 +17201,8 @@ function createChartInstance(deps) {
18843
17201
  }
18844
17202
  let nativeDragActive = false;
18845
17203
  const onNativeDragStart = (event) => {
17204
+ ranges.stopGlide();
17205
+ fling.stop();
18846
17206
  if (event.button === 0) nativeDragActive = true;
18847
17207
  };
18848
17208
  const onNativeDragMove = (event) => {
@@ -18867,6 +17227,14 @@ function createChartInstance(deps) {
18867
17227
  navigationRoot.addEventListener("mouseup", onNativeDragEnd, { passive: true });
18868
17228
  navigationRoot.addEventListener("pointerup", onNativeDragEnd, { passive: true });
18869
17229
  navigationRoot.addEventListener("pointercancel", onNativeDragEnd, { passive: true });
17230
+ const pinch = attachPinch({ chart, target: gestures });
17231
+ const freePan = deps.freePan ? attachFreePan({
17232
+ chart,
17233
+ target: gestures,
17234
+ framing: () => priceAxisPolicy() === "auto",
17235
+ // The same release a drag on the price scale makes, so the policy reads it the same way.
17236
+ release: () => chart.priceScale("right").applyOptions({ autoScale: false })
17237
+ }) : null;
18870
17238
  function maintainTimeline(write) {
18871
17239
  const continuity = captureTimelineContinuity(
18872
17240
  chart.timeScale(),
@@ -19144,7 +17512,28 @@ function createChartInstance(deps) {
19144
17512
  }
19145
17513
  });
19146
17514
  }
17515
+ const LIVE_EDGE_SLACK_BARS = 1;
17516
+ let awayFromLive = false;
17517
+ const readAwayFromLive = () => {
17518
+ if (disposed || ranges.gliding() || replay2.active()) return false;
17519
+ const s = chart.timeScale();
17520
+ if (s.getVisibleLogicalRange() === null) return false;
17521
+ return s.scrollPosition() < s.options().rightOffset - LIVE_EDGE_SLACK_BARS;
17522
+ };
17523
+ function followLiveEdge() {
17524
+ if (disposed) return;
17525
+ const away = readAwayFromLive();
17526
+ if (away === awayFromLive) return;
17527
+ awayFromLive = away;
17528
+ events.emit("liveEdge", away);
17529
+ }
17530
+ events.on("replay", () => {
17531
+ if (replay2.active()) ranges.stopGlide();
17532
+ followLiveEdge();
17533
+ });
17534
+ const plotArea = watchPlotArea({ chart, host: deps.hostContainer, changed: (area) => events.emit("plotArea", area) });
19147
17535
  chart.timeScale().subscribeVisibleLogicalRangeChange((reported) => {
17536
+ followLiveEdge();
19148
17537
  if (syncMuted) {
19149
17538
  const maintenance2 = currentMaintenance();
19150
17539
  if (maintenance2 && reported) finishMaintenanceReport("logical");
@@ -19349,8 +17738,14 @@ function createChartInstance(deps) {
19349
17738
  },
19350
17739
  goLive: () => {
19351
17740
  beginNavigation();
17741
+ if (deps.freePan) applyPriceAxisPolicy("auto");
19352
17742
  ranges.goLive();
19353
17743
  },
17744
+ awayFromLiveEdge: () => {
17745
+ followLiveEdge();
17746
+ return awayFromLive;
17747
+ },
17748
+ plotArea: () => plotArea.current(),
19354
17749
  scaleMode: () => scaleMode,
19355
17750
  setScaleMode(mode) {
19356
17751
  applyScaleMode(mode);
@@ -19609,6 +18004,11 @@ function createChartInstance(deps) {
19609
18004
  countdown = null;
19610
18005
  countdownClock.destroy();
19611
18006
  pointer?.destroy();
18007
+ ranges.stopGlide();
18008
+ fling.destroy();
18009
+ pinch.destroy();
18010
+ freePan?.destroy();
18011
+ plotArea.destroy();
19612
18012
  extensions.destroy();
19613
18013
  history2.destroy();
19614
18014
  menu2?.destroy();
@@ -24698,6 +23098,8 @@ function createChart(options) {
24698
23098
  contentChanged: pingSaveNeeded,
24699
23099
  id,
24700
23100
  container: element,
23101
+ hostContainer: options.container,
23102
+ freePan: options.touch?.freePan === true,
24701
23103
  layer,
24702
23104
  datafeed: options.datafeed,
24703
23105
  externalDrawingToolbar: !!options.drawingToolbarContainer,
@@ -25310,6 +23712,7 @@ export {
25310
23712
  canvasToBlob,
25311
23713
  chartContextMenu,
25312
23714
  chartDictionaries,
23715
+ chartIconArtwork,
25313
23716
  clipToWindow,
25314
23717
  coerceChartStyle,
25315
23718
  coerceScaleMode,