@trdrs/quickcharts 2.1.0 → 2.2.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,16 @@ 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";
103
113
 
104
114
  // src/datafeed.ts
105
115
  function olderPageVerdict(page, askedTo, alreadyHopped) {
@@ -4949,7 +4959,8 @@ import {
4949
4959
  CrosshairMode,
4950
4960
  createChart as createRenderer,
4951
4961
  HistogramSeries as HistogramSeries2,
4952
- LineSeries as LineSeries4
4962
+ LineSeries as LineSeries4,
4963
+ TrackingModeExitMode
4953
4964
  } from "lightweight-charts";
4954
4965
 
4955
4966
  // src/overrides.ts
@@ -5003,145 +5014,6 @@ function coerceScaleMode(raw) {
5003
5014
  return SCALE_MODES.includes(raw ?? "") ? raw : "normal";
5004
5015
  }
5005
5016
 
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
5017
  // src/widget/baselineLevel.ts
5146
5018
  var BASELINE_SCREEN_PERCENT = 50;
5147
5019
  var BASELINE_DRIFT_PX = 0.5;
@@ -5211,6 +5083,10 @@ function createBaselineLevel(deps) {
5211
5083
  }
5212
5084
 
5213
5085
  // src/widget/ranges.ts
5086
+ var GLIDE_MS = 520;
5087
+ var GLIDE_JUMP_WIDTHS = 2;
5088
+ var GLIDE_FROM_WIDTHS = 1.5;
5089
+ var glideEase = (t) => 1 - (1 - t) ** 3;
5214
5090
  var mirrors = /* @__PURE__ */ new WeakMap();
5215
5091
  var chartRangeMirror = (handle) => mirrors.get(handle) ?? null;
5216
5092
  var registerChartRangeMirror = (handle, mirror) => {
@@ -5242,6 +5118,7 @@ function restoreTimelineContinuity(target, held, beforeWrite) {
5242
5118
  }
5243
5119
  function createRangeApi(deps) {
5244
5120
  const scale = () => deps.chart.timeScale();
5121
+ let glide = null;
5245
5122
  const api = {
5246
5123
  visibleRange() {
5247
5124
  if (deps.disposed()) return null;
@@ -5282,7 +5159,45 @@ function createRangeApi(deps) {
5282
5159
  },
5283
5160
  goLive() {
5284
5161
  if (deps.disposed()) return;
5285
- scale().scrollToRealTime();
5162
+ api.stopGlide();
5163
+ const s = scale();
5164
+ const target = s.options().rightOffset;
5165
+ const range2 = s.getVisibleLogicalRange();
5166
+ const width = range2 ? range2.to - range2.from : 0;
5167
+ let from = s.scrollPosition();
5168
+ const animate = typeof requestAnimationFrame === "function" && !(deps.reducedMotion?.() ?? false);
5169
+ if (!animate || !(width > 0) || Math.abs(target - from) < 0.01) {
5170
+ s.scrollToPosition(target, false);
5171
+ return;
5172
+ }
5173
+ if (Math.abs(target - from) > GLIDE_JUMP_WIDTHS * width) {
5174
+ from = target - Math.sign(target - from) * GLIDE_FROM_WIDTHS * width;
5175
+ s.scrollToPosition(from, false);
5176
+ }
5177
+ const start = performance.now();
5178
+ const step = (now) => {
5179
+ if (glide === null) return;
5180
+ if (deps.disposed()) {
5181
+ api.stopGlide();
5182
+ return;
5183
+ }
5184
+ const t = Math.min(1, Math.max(0, (now - start) / GLIDE_MS));
5185
+ s.scrollToPosition(from + (target - from) * glideEase(t), false);
5186
+ if (t >= 1) {
5187
+ api.stopGlide();
5188
+ return;
5189
+ }
5190
+ glide = requestAnimationFrame(step);
5191
+ };
5192
+ glide = requestAnimationFrame(step);
5193
+ deps.onGlide?.();
5194
+ },
5195
+ gliding: () => glide !== null,
5196
+ stopGlide() {
5197
+ if (glide === null) return;
5198
+ cancelAnimationFrame(glide);
5199
+ glide = null;
5200
+ deps.onGlide?.();
5286
5201
  },
5287
5202
  centerOn(time) {
5288
5203
  if (deps.disposed()) return;
@@ -5753,1853 +5668,6 @@ function attachSession(deps) {
5753
5668
  return layer;
5754
5669
  }
5755
5670
 
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
5671
  // src/drawings/emoji.ts
7604
5672
  var drawings = null;
7605
5673
  var artwork = null;
@@ -7640,7 +5708,54 @@ function bundledGlyphSource(glyph2) {
7640
5708
 
7641
5709
  // src/pointerInput.ts
7642
5710
  function pointerLock(locked) {
7643
- return locked ? { handleScroll: false, handleScale: false, touchAction: "none" } : { handleScroll: true, handleScale: true, touchAction: "" };
5711
+ const on = !locked;
5712
+ return {
5713
+ handleScroll: on,
5714
+ handleScale: { mouseWheel: on, pinch: false, axisPressedMouseMove: on, axisDoubleClickReset: on },
5715
+ touchAction: locked ? "none" : ""
5716
+ };
5717
+ }
5718
+ function scalingOpen(handleScale) {
5719
+ return typeof handleScale === "boolean" ? handleScale : handleScale.mouseWheel !== false;
5720
+ }
5721
+ function pinchSpacing(startSpacing, startDistance, distance) {
5722
+ if (!(startDistance > 0) || !(distance > 0)) return startSpacing;
5723
+ return startSpacing * (distance / startDistance);
5724
+ }
5725
+ function pinchStart(range2, width, x, distance) {
5726
+ const count2 = range2.to - range2.from + 1;
5727
+ if (!(count2 > 0) || !(width > 0) || !(distance > 0)) return null;
5728
+ const spacing = width / count2;
5729
+ return { spacing, anchor: range2.to + 0.5 - (width - 1 - x) / spacing, distance };
5730
+ }
5731
+ function pinchRange(start, x, distance, plot) {
5732
+ const spacing = Math.min(plot.maxSpacing, Math.max(plot.minSpacing, pinchSpacing(start.spacing, start.distance, distance)));
5733
+ const to = start.anchor - 0.5 + (plot.width - 1 - x) / spacing;
5734
+ return { from: to + 1 - plot.width / spacing, to };
5735
+ }
5736
+ var RENDERER_DRAG_START_PX = 5;
5737
+ var RENDERER_LONG_TAP_MS = 240;
5738
+ function scrollOpen(handleScroll) {
5739
+ return typeof handleScroll === "boolean" ? handleScroll : handleScroll.horzTouchDrag !== false;
5740
+ }
5741
+ var FLING_MAX_PX_PER_MS = 2;
5742
+ var FLING_DAMPING_PER_MS = 0.995;
5743
+ var FLING_REST_PX_PER_MS = 0.02;
5744
+ var FLING_RELEASE_MS = 50;
5745
+ var FLING_SAMPLE_MS = 80;
5746
+ function flingSpeed(samples, releasedAt, spacing) {
5747
+ const last = samples[samples.length - 1];
5748
+ if (!last || !(spacing > 0) || releasedAt - last.t > FLING_RELEASE_MS) return 0;
5749
+ const first = samples.find((s) => s.t >= last.t - FLING_SAMPLE_MS) ?? last;
5750
+ const elapsed = last.t - first.t;
5751
+ if (!(elapsed > 0)) return 0;
5752
+ const speed = (last.position - first.position) / elapsed;
5753
+ const max = FLING_MAX_PX_PER_MS / spacing;
5754
+ return Math.sign(speed) * Math.min(Math.abs(speed), max);
5755
+ }
5756
+ function flingStep(speed, elapsed) {
5757
+ const keep = Math.pow(FLING_DAMPING_PER_MS, elapsed);
5758
+ return { moved: speed * (keep - 1) / Math.log(FLING_DAMPING_PER_MS), speed: speed * keep };
7644
5759
  }
7645
5760
  var LONG_PRESS_MS = 450;
7646
5761
  var LONG_PRESS_DRIFT_PX = 10;
@@ -9614,23 +7729,6 @@ function visibilityRangeRow(t, icons, props) {
9614
7729
  }
9615
7730
 
9616
7731
  // 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
7732
  var KIND_LABEL = {
9635
7733
  emoji: "drawing.kindEmojis",
9636
7734
  sticker: "drawing.kindStickers",
@@ -9655,7 +7753,7 @@ function mountGlyphPicker(input) {
9655
7753
  const kinds = el("div", { class: "qc-drawing-glyph-kinds", role: "tablist" });
9656
7754
  root.append(strip, grid2, empty, kinds);
9657
7755
  const categories = () => kind === "icon" ? ICON_CATEGORIES : EMOJI_CATEGORIES;
9658
- const label2 = (c) => CATEGORY_LABEL[c.id] ? t(CATEGORY_LABEL[c.id]) : c.id;
7756
+ const label2 = (c) => t(c.heading);
9659
7757
  const art = (glyph2) => {
9660
7758
  const url = (deps.glyphSource ?? bundledGlyphSource)(glyph2);
9661
7759
  return url ? el("img", { class: "qc-drawing-glyph-art", src: url, alt: "", draggable: "false" }) : null;
@@ -15374,6 +13472,7 @@ function attachExtensionsPlane(deps) {
15374
13472
  deps.setTouchAction(state.touchAction);
15375
13473
  }
15376
13474
  };
13475
+ series2.lockPanZoom(false);
15377
13476
  const host2 = createExtensionHost(
15378
13477
  {
15379
13478
  chartId: deps.chartId,
@@ -16539,6 +14638,266 @@ function attachLegendPlane(deps) {
16539
14638
  };
16540
14639
  }
16541
14640
 
14641
+ // src/widget/fling.ts
14642
+ function attachFling(deps) {
14643
+ const scale = () => deps.chart.timeScale();
14644
+ let samples = [];
14645
+ let movedAt = null;
14646
+ let oneFinger = false;
14647
+ let frame = null;
14648
+ const stop = () => {
14649
+ if (frame !== null && typeof cancelAnimationFrame === "function") cancelAnimationFrame(frame);
14650
+ frame = null;
14651
+ };
14652
+ const record3 = (t) => {
14653
+ samples.push({ t, position: scale().scrollPosition() });
14654
+ while (samples.length > 2 && samples[0].t < t - 2 * FLING_SAMPLE_MS) samples.shift();
14655
+ };
14656
+ const coast = (speed) => {
14657
+ if (typeof requestAnimationFrame !== "function") return;
14658
+ let last = performance.now();
14659
+ let travelling = speed;
14660
+ let position = null;
14661
+ const step = (now) => {
14662
+ if (frame === null) return;
14663
+ const s = scale();
14664
+ position ??= s.scrollPosition();
14665
+ const next = flingStep(travelling, Math.max(0, now - last));
14666
+ last = now;
14667
+ travelling = next.speed;
14668
+ position += next.moved;
14669
+ s.scrollToPosition(position, false);
14670
+ if (Math.abs(travelling) * s.options().barSpacing < FLING_REST_PX_PER_MS) {
14671
+ frame = null;
14672
+ return;
14673
+ }
14674
+ frame = requestAnimationFrame(step);
14675
+ };
14676
+ frame = requestAnimationFrame(step);
14677
+ };
14678
+ const onStart = (event) => {
14679
+ stop();
14680
+ samples = [];
14681
+ movedAt = null;
14682
+ oneFinger = event.touches.length === 1;
14683
+ if (oneFinger) record3(performance.now());
14684
+ };
14685
+ const onMove = (event) => {
14686
+ if (event.touches.length !== 1) oneFinger = false;
14687
+ if (!oneFinger) return;
14688
+ if (movedAt !== null) record3(movedAt);
14689
+ movedAt = performance.now();
14690
+ };
14691
+ const onEnd = (event) => {
14692
+ const thrown = oneFinger && event.touches.length === 0;
14693
+ oneFinger = false;
14694
+ if (!thrown) return;
14695
+ if (movedAt !== null) record3(movedAt);
14696
+ const spacing = scale().options().barSpacing;
14697
+ const speed = flingSpeed(samples, performance.now(), spacing);
14698
+ samples = [];
14699
+ movedAt = null;
14700
+ if (Math.abs(speed) * spacing >= FLING_REST_PX_PER_MS) coast(speed);
14701
+ };
14702
+ const onCancel = () => {
14703
+ oneFinger = false;
14704
+ samples = [];
14705
+ movedAt = null;
14706
+ };
14707
+ deps.target.addEventListener("touchstart", onStart, { passive: true });
14708
+ deps.target.addEventListener("touchmove", onMove, { passive: true });
14709
+ deps.target.addEventListener("touchend", onEnd, { passive: true });
14710
+ deps.target.addEventListener("touchcancel", onCancel, { passive: true });
14711
+ return {
14712
+ stop,
14713
+ destroy() {
14714
+ stop();
14715
+ deps.target.removeEventListener("touchstart", onStart);
14716
+ deps.target.removeEventListener("touchmove", onMove);
14717
+ deps.target.removeEventListener("touchend", onEnd);
14718
+ deps.target.removeEventListener("touchcancel", onCancel);
14719
+ }
14720
+ };
14721
+ }
14722
+
14723
+ // src/widget/pinch.ts
14724
+ function attachPinch(deps) {
14725
+ const scale = () => deps.chart.timeScale();
14726
+ let pinch = null;
14727
+ let panned = false;
14728
+ const read = (touches) => {
14729
+ const a = touches[0];
14730
+ const b = touches[1];
14731
+ const left = deps.chart.chartElement().getBoundingClientRect().left + deps.chart.priceScale("left").width();
14732
+ return { distance: Math.hypot(a.clientX - b.clientX, a.clientY - b.clientY), x: (a.clientX + b.clientX) / 2 - left };
14733
+ };
14734
+ const begin = (event) => {
14735
+ pinch = null;
14736
+ if (event.touches.length === 1) panned = false;
14737
+ if (event.touches.length !== 2 || panned || !scalingOpen(deps.chart.options().handleScale)) return;
14738
+ const range2 = scale().getVisibleLogicalRange();
14739
+ if (range2 === null) return;
14740
+ const { distance, x } = read(event.touches);
14741
+ pinch = pinchStart(range2, scale().width(), x, distance);
14742
+ };
14743
+ const move = (event) => {
14744
+ if (event.touches.length === 1 && pinch === null) panned = true;
14745
+ if (pinch === null || event.touches.length !== 2) return;
14746
+ if (!scalingOpen(deps.chart.options().handleScale)) {
14747
+ pinch = null;
14748
+ return;
14749
+ }
14750
+ const { distance, x } = read(event.touches);
14751
+ const s = scale();
14752
+ const width = s.width();
14753
+ const options = s.options();
14754
+ const plot = { width, minSpacing: options.minBarSpacing, maxSpacing: options.maxBarSpacing > 0 ? options.maxBarSpacing : width / 2 };
14755
+ s.setVisibleLogicalRange(pinchRange(pinch, x, distance, plot));
14756
+ };
14757
+ const end = (event) => {
14758
+ if (event.touches.length === 1) panned = false;
14759
+ if (event.touches.length === 2) begin(event);
14760
+ else pinch = null;
14761
+ };
14762
+ deps.target.addEventListener("touchstart", begin, { passive: true });
14763
+ deps.target.addEventListener("touchmove", move, { passive: true });
14764
+ deps.target.addEventListener("touchend", end, { passive: true });
14765
+ deps.target.addEventListener("touchcancel", end, { passive: true });
14766
+ return {
14767
+ destroy() {
14768
+ pinch = null;
14769
+ deps.target.removeEventListener("touchstart", begin);
14770
+ deps.target.removeEventListener("touchmove", move);
14771
+ deps.target.removeEventListener("touchend", end);
14772
+ deps.target.removeEventListener("touchcancel", end);
14773
+ }
14774
+ };
14775
+ }
14776
+
14777
+ // src/widget/freePan.ts
14778
+ function attachFreePan(deps) {
14779
+ let landed = null;
14780
+ const onPlot = (clientX, clientY) => {
14781
+ const box = deps.chart.chartElement().getBoundingClientRect();
14782
+ const left = box.left + deps.chart.priceScale("left").width();
14783
+ const right = left + deps.chart.timeScale().width();
14784
+ return clientX >= left && clientX <= right && clientY >= box.top && clientY <= box.bottom - deps.chart.timeScale().height();
14785
+ };
14786
+ const release = () => {
14787
+ if (deps.framing()) deps.release();
14788
+ };
14789
+ const onStart = (event) => {
14790
+ landed = null;
14791
+ if (event.touches.length === 2) {
14792
+ if (scalingOpen(deps.chart.options().handleScale)) release();
14793
+ return;
14794
+ }
14795
+ const touch = event.touches[0];
14796
+ if (event.touches.length !== 1 || !touch || !onPlot(touch.clientX, touch.clientY)) return;
14797
+ landed = { x: touch.clientX, y: touch.clientY, at: performance.now() };
14798
+ };
14799
+ const onMove = (event) => {
14800
+ if (landed === null) return;
14801
+ const touch = event.touches[0];
14802
+ if (event.touches.length !== 1 || !touch) {
14803
+ landed = null;
14804
+ return;
14805
+ }
14806
+ if (Math.abs(touch.clientX - landed.x) + Math.abs(touch.clientY - landed.y) < RENDERER_DRAG_START_PX) return;
14807
+ const started = landed;
14808
+ landed = null;
14809
+ if (performance.now() - started.at >= RENDERER_LONG_TAP_MS) return;
14810
+ if (scrollOpen(deps.chart.options().handleScroll)) release();
14811
+ };
14812
+ const onEnd = () => {
14813
+ landed = null;
14814
+ };
14815
+ deps.target.addEventListener("touchstart", onStart, { passive: true });
14816
+ deps.target.addEventListener("touchmove", onMove, { passive: true });
14817
+ deps.target.addEventListener("touchend", onEnd, { passive: true });
14818
+ deps.target.addEventListener("touchcancel", onEnd, { passive: true });
14819
+ return {
14820
+ destroy() {
14821
+ landed = null;
14822
+ deps.target.removeEventListener("touchstart", onStart);
14823
+ deps.target.removeEventListener("touchmove", onMove);
14824
+ deps.target.removeEventListener("touchend", onEnd);
14825
+ deps.target.removeEventListener("touchcancel", onEnd);
14826
+ }
14827
+ };
14828
+ }
14829
+
14830
+ // src/widget/plotArea.ts
14831
+ function measurePlotArea(chart, host2) {
14832
+ const row2 = chart.panes()[0]?.getHTMLElement();
14833
+ if (!row2) return null;
14834
+ const size = chart.paneSize(0);
14835
+ if (!(size.width > 0) || !(size.height > 0)) return null;
14836
+ const outer = host2.getBoundingClientRect();
14837
+ const top = row2.getBoundingClientRect().top;
14838
+ const left = chart.chartElement().getBoundingClientRect().left + chart.priceScale("left").width();
14839
+ const round = (n) => Math.round(n * 100) / 100;
14840
+ return {
14841
+ top: round(top - outer.top),
14842
+ right: round(outer.right - (left + size.width)),
14843
+ bottom: round(outer.bottom - (top + size.height)),
14844
+ left: round(left - outer.left),
14845
+ width: round(size.width),
14846
+ height: round(size.height)
14847
+ };
14848
+ }
14849
+ 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;
14850
+ function watchPlotArea(deps) {
14851
+ let area = null;
14852
+ let frame = null;
14853
+ let destroyed = false;
14854
+ let row2 = null;
14855
+ const resize = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(() => schedule());
14856
+ const measure2 = () => {
14857
+ frame = null;
14858
+ if (destroyed) return;
14859
+ const nextRow = deps.chart.panes()[0]?.getHTMLElement() ?? null;
14860
+ if (nextRow !== row2) {
14861
+ if (row2) resize?.unobserve(row2);
14862
+ if (nextRow) resize?.observe(nextRow);
14863
+ row2 = nextRow;
14864
+ }
14865
+ const next = measurePlotArea(deps.chart, deps.host);
14866
+ if (next === null || sameArea(next, area)) return;
14867
+ area = next;
14868
+ deps.changed(next);
14869
+ };
14870
+ function schedule() {
14871
+ if (destroyed || frame !== null) return;
14872
+ if (typeof requestAnimationFrame !== "function") {
14873
+ measure2();
14874
+ return;
14875
+ }
14876
+ frame = requestAnimationFrame(measure2);
14877
+ }
14878
+ deps.chart.timeScale().subscribeSizeChange(schedule);
14879
+ resize?.observe(deps.host);
14880
+ resize?.observe(deps.chart.chartElement());
14881
+ schedule();
14882
+ return {
14883
+ current() {
14884
+ if (destroyed) return null;
14885
+ return area ?? measurePlotArea(deps.chart, deps.host);
14886
+ },
14887
+ destroy() {
14888
+ if (destroyed) return;
14889
+ destroyed = true;
14890
+ if (frame !== null && typeof cancelAnimationFrame === "function") cancelAnimationFrame(frame);
14891
+ frame = null;
14892
+ resize?.disconnect();
14893
+ try {
14894
+ deps.chart.timeScale().unsubscribeSizeChange(schedule);
14895
+ } catch {
14896
+ }
14897
+ }
14898
+ };
14899
+ }
14900
+
16542
14901
  // src/contextMenu.ts
16543
14902
  function chartContextMenuGroups(c) {
16544
14903
  const t = c.t ?? englishChartStrings();
@@ -16889,6 +15248,22 @@ for (const style of CHART_STYLES) ICON_OF.set(STYLE_ICONS[style], `style.${style
16889
15248
  for (const type of MINIATURE_TOOLS) ICON_OF.set(toolGlyphs.get(type), `tool.${type}`);
16890
15249
  for (const code of ARRANGEMENT_CODES) ICON_OF.set(arrangementGlyphs.get(code), `layout.${code}`);
16891
15250
  var iconOf = (mark) => ICON_OF.get(mark);
15251
+ var GLYPHS_OF = new Map([
15252
+ ...Object.entries(CONTROL_ICONS),
15253
+ ...CHART_STYLES.map((style) => [`style.${style}`, [STYLE_ICONS[style]]]),
15254
+ ...MINIATURE_TOOLS.map((type) => [`tool.${type}`, [toolGlyphs.get(type)]]),
15255
+ ...ARRANGEMENT_CODES.map((code) => [`layout.${code}`, [arrangementGlyphs.get(code)]])
15256
+ ]);
15257
+ var standsAlone = (mark) => !/var\(--|class=/.test(mark.body);
15258
+ function chartIconArtwork(id) {
15259
+ const glyphs = GLYPHS_OF.get(id) ?? [];
15260
+ if (!glyphs.every(standsAlone)) return [];
15261
+ return glyphs.map((mark) => ({
15262
+ viewBox: mark.viewBox,
15263
+ body: mark.body,
15264
+ svg: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="${mark.viewBox}" fill="none">${mark.body}</svg>`
15265
+ }));
15266
+ }
16892
15267
  function checkIcons(icons) {
16893
15268
  if (icons === void 0) return;
16894
15269
  if (typeof icons !== "object" || icons === null || Array.isArray(icons)) throw new TypeError("icons must be an object");
@@ -18409,6 +16784,12 @@ function createChartInstance(deps) {
18409
16784
  horzLines: { color: canvas().grid, visible: eff.appearance.grid }
18410
16785
  },
18411
16786
  crosshair: { mode: deps.features.crosshair ? CrosshairMode.Normal : CrosshairMode.Hidden },
16787
+ // A finger held on the plot scrubs the crosshair for as long as it stays down, and lifting it
16788
+ // takes the crosshair away, so the next one-finger drag pans: the way a native chart reads.
16789
+ trackingMode: { exitMode: TrackingModeExitMode.OnTouchEnd },
16790
+ // The renderer's own momentum throws a flick as fast as seven pixels a millisecond and coasts
16791
+ // it thousands of pixels; the chart coasts a flick itself, calmly.
16792
+ kineticScroll: { touch: false, mouse: false },
18412
16793
  rightPriceScale: { borderVisible: false, scaleMargins: { top: 0.08, bottom: 0.08 } },
18413
16794
  timeScale: { borderVisible: false, timeVisible: true, secondsVisible: false, rightOffset: 4, barSpacing: 8, minBarSpacing: 0.5 }
18414
16795
  });
@@ -18518,6 +16899,8 @@ function createChartInstance(deps) {
18518
16899
  const beginNavigation = () => {
18519
16900
  navigationEpoch++;
18520
16901
  maintenanceRange = null;
16902
+ ranges.stopGlide();
16903
+ fling.stop();
18521
16904
  releaseMirror();
18522
16905
  setRangePreset(null);
18523
16906
  };
@@ -18547,7 +16930,15 @@ function createChartInstance(deps) {
18547
16930
  const crosshairSubs = /* @__PURE__ */ new Set();
18548
16931
  const timeClickSubs = /* @__PURE__ */ new Set();
18549
16932
  const rangeSubs = /* @__PURE__ */ new Set();
18550
- const ranges = createRangeApi({ chart, disposed: disposedFn, muted, mirrored });
16933
+ const ranges = createRangeApi({
16934
+ chart,
16935
+ disposed: disposedFn,
16936
+ muted,
16937
+ mirrored,
16938
+ onGlide: () => followLiveEdge(),
16939
+ reducedMotion: () => gestures.ownerDocument.defaultView?.matchMedia?.("(prefers-reduced-motion: reduce)").matches ?? false
16940
+ });
16941
+ const fling = attachFling({ chart, target: gestures });
18551
16942
  let unregisterRangeMirror = () => void 0;
18552
16943
  function applyTimezone() {
18553
16944
  if (disposed) return;
@@ -18843,6 +17234,8 @@ function createChartInstance(deps) {
18843
17234
  }
18844
17235
  let nativeDragActive = false;
18845
17236
  const onNativeDragStart = (event) => {
17237
+ ranges.stopGlide();
17238
+ fling.stop();
18846
17239
  if (event.button === 0) nativeDragActive = true;
18847
17240
  };
18848
17241
  const onNativeDragMove = (event) => {
@@ -18867,6 +17260,14 @@ function createChartInstance(deps) {
18867
17260
  navigationRoot.addEventListener("mouseup", onNativeDragEnd, { passive: true });
18868
17261
  navigationRoot.addEventListener("pointerup", onNativeDragEnd, { passive: true });
18869
17262
  navigationRoot.addEventListener("pointercancel", onNativeDragEnd, { passive: true });
17263
+ const pinch = attachPinch({ chart, target: gestures });
17264
+ const freePan = deps.freePan ? attachFreePan({
17265
+ chart,
17266
+ target: gestures,
17267
+ framing: () => priceAxisPolicy() === "auto",
17268
+ // The same release a drag on the price scale makes, so the policy reads it the same way.
17269
+ release: () => chart.priceScale("right").applyOptions({ autoScale: false })
17270
+ }) : null;
18870
17271
  function maintainTimeline(write) {
18871
17272
  const continuity = captureTimelineContinuity(
18872
17273
  chart.timeScale(),
@@ -19144,7 +17545,28 @@ function createChartInstance(deps) {
19144
17545
  }
19145
17546
  });
19146
17547
  }
17548
+ const LIVE_EDGE_SLACK_BARS = 1;
17549
+ let awayFromLive = false;
17550
+ const readAwayFromLive = () => {
17551
+ if (disposed || ranges.gliding() || replay2.active()) return false;
17552
+ const s = chart.timeScale();
17553
+ if (s.getVisibleLogicalRange() === null) return false;
17554
+ return s.scrollPosition() < s.options().rightOffset - LIVE_EDGE_SLACK_BARS;
17555
+ };
17556
+ function followLiveEdge() {
17557
+ if (disposed) return;
17558
+ const away = readAwayFromLive();
17559
+ if (away === awayFromLive) return;
17560
+ awayFromLive = away;
17561
+ events.emit("liveEdge", away);
17562
+ }
17563
+ events.on("replay", () => {
17564
+ if (replay2.active()) ranges.stopGlide();
17565
+ followLiveEdge();
17566
+ });
17567
+ const plotArea = watchPlotArea({ chart, host: deps.hostContainer, changed: (area) => events.emit("plotArea", area) });
19147
17568
  chart.timeScale().subscribeVisibleLogicalRangeChange((reported) => {
17569
+ followLiveEdge();
19148
17570
  if (syncMuted) {
19149
17571
  const maintenance2 = currentMaintenance();
19150
17572
  if (maintenance2 && reported) finishMaintenanceReport("logical");
@@ -19349,8 +17771,14 @@ function createChartInstance(deps) {
19349
17771
  },
19350
17772
  goLive: () => {
19351
17773
  beginNavigation();
17774
+ if (deps.freePan) applyPriceAxisPolicy("auto");
19352
17775
  ranges.goLive();
19353
17776
  },
17777
+ awayFromLiveEdge: () => {
17778
+ followLiveEdge();
17779
+ return awayFromLive;
17780
+ },
17781
+ plotArea: () => plotArea.current(),
19354
17782
  scaleMode: () => scaleMode,
19355
17783
  setScaleMode(mode) {
19356
17784
  applyScaleMode(mode);
@@ -19609,6 +18037,11 @@ function createChartInstance(deps) {
19609
18037
  countdown = null;
19610
18038
  countdownClock.destroy();
19611
18039
  pointer?.destroy();
18040
+ ranges.stopGlide();
18041
+ fling.destroy();
18042
+ pinch.destroy();
18043
+ freePan?.destroy();
18044
+ plotArea.destroy();
19612
18045
  extensions.destroy();
19613
18046
  history2.destroy();
19614
18047
  menu2?.destroy();
@@ -24698,6 +23131,8 @@ function createChart(options) {
24698
23131
  contentChanged: pingSaveNeeded,
24699
23132
  id,
24700
23133
  container: element,
23134
+ hostContainer: options.container,
23135
+ freePan: options.touch?.freePan === true,
24701
23136
  layer,
24702
23137
  datafeed: options.datafeed,
24703
23138
  externalDrawingToolbar: !!options.drawingToolbarContainer,
@@ -25310,6 +23745,7 @@ export {
25310
23745
  canvasToBlob,
25311
23746
  chartContextMenu,
25312
23747
  chartDictionaries,
23748
+ chartIconArtwork,
25313
23749
  clipToWindow,
25314
23750
  coerceChartStyle,
25315
23751
  coerceScaleMode,