@cardenelabs/cdl 0.75.0 → 0.76.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
@@ -392,8 +392,14 @@ var en = {
392
392
  "paymentProvider.sign": "PAY",
393
393
  /** `shape-payment-provider` の状態の札 */
394
394
  "paymentProvider.status": "PROCESSING",
395
- /** `shape-brokerage` の株価の帯 */
396
- "brokerage.ticker": "\u25B2NKY 38,240 \u25B2AAPL 194",
395
+ /**
396
+ * `shape-brokerage` の株価の帯。
397
+ *
398
+ * **1 銘柄に絞る** (#888)。 電光掲示板の内側は幅 136 しか無く、2 銘柄を指定 11 で描くと
399
+ * 幅 181 になってビルの外へ出る。 板が流れている雰囲気は帯そのもの (黒地に緑の等幅) が
400
+ * 担うので、銘柄を減らしても絵は変わらない。
401
+ */
402
+ "brokerage.ticker": "\u25B2NKY 38,240",
397
403
  /** `shape-brokerage` の看板 */
398
404
  "brokerage.sign": "$ SECURITIES",
399
405
  /** `shape-exchange` の看板 */
@@ -596,7 +602,7 @@ var ja = {
596
602
  "trustBank.sign": "\u4FE1\u8A17",
597
603
  "paymentProvider.sign": "\u6C7A\u6E08",
598
604
  "paymentProvider.status": "\u51E6\u7406\u4E2D",
599
- "brokerage.ticker": "\u25B2\u65E5\u7D4C 38,240 \u25B2\u6771\u8A3C 2,710",
605
+ "brokerage.ticker": "\u25B2\u65E5\u7D4C 38,240",
600
606
  "brokerage.sign": "\xA5 \u8A3C\u5238",
601
607
  "exchange.sign": "\u53D6\u5F15\u6240",
602
608
  "exchange.sub": "\u6E05\u7B97",
@@ -28739,9 +28745,9 @@ function ShapeKanbanCardNode({ node, active, lang }) {
28739
28745
  const ID\u5B57 = 11;
28740
28746
  const ID\u5B57\u9593 = 1;
28741
28747
  const PILL\u4E0A = 20;
28742
- const PILL\u5E45 = 54;
28748
+ const PILL\u5E45 = 70;
28743
28749
  const PILL\u9AD8 = 16;
28744
- const PILL\u5B57 = 9;
28750
+ const PILL\u5B57 = 11;
28745
28751
  const FOOTER\u4E0B = 22;
28746
28752
  const AVATAR\u4E2D\u5FC3Y = 4;
28747
28753
  const AVATAR\u534A\u5F84 = 9;
@@ -29874,7 +29880,7 @@ var SMART_CONTRACT_H = 220;
29874
29880
  var BLOCK_W = 240;
29875
29881
  var BLOCK_H = 220;
29876
29882
  var \u898B\u51FA\u3057\u306E\u5B57 = 13;
29877
- var \u540D\u306E\u5B57 = 10.5;
29883
+ var \u540D\u306E\u5B57 = 11;
29878
29884
  var \u5024\u306E\u5B57 = 11;
29879
29885
  var \u884C\u306E\u9593\u9694 = 22;
29880
29886
  var \u898B\u51FA\u3057\u306E\u5E2F = 32;
@@ -29891,12 +29897,12 @@ var CHAIN_BLOCK_SW = 2.5;
29891
29897
  var CHAIN_HEAD_H = 16;
29892
29898
  var CHAIN_TEXT_W = CHAIN_BLOCK_W - 8;
29893
29899
  var CHAIN_ROW_GAP = 14;
29894
- var CHAIN_NO_SIZE = 10;
29900
+ var CHAIN_NO_SIZE = 11;
29895
29901
  var CONTRACT_CALL_SIZE = 11;
29896
29902
  var NFT_ID_SIZE = 15;
29897
- var CHAIN_HASH_SIZE = 7;
29898
- var BTC_NO_SIZE = 9;
29899
- var ETH_NO_SIZE = 9;
29903
+ var CHAIN_HASH_SIZE = 11;
29904
+ var BTC_NO_SIZE = 11;
29905
+ var ETH_NO_SIZE = 11;
29900
29906
  var NODE_HEX_R = 44;
29901
29907
  var NODE_PEER_R = 12;
29902
29908
  var NODE_PEER_GAP = 22;
@@ -30225,34 +30231,40 @@ function ShapeEthereumChainNode({ node, active }) {
30225
30231
  const linkW = CHAIN_LINK_W;
30226
30232
  const totalW = blockCount * blockW + (blockCount - 1) * linkW;
30227
30233
  const startX = cx - totalW / 2;
30228
- const art = /* @__PURE__ */ jsx("g", { children: Array.from({ length: blockCount }, (_, i) => i).map((i) => {
30229
- const bx = startX + i * (blockW + linkW);
30230
- const isCurrent = i === blockCount - 1;
30231
- const iconColors = isCurrent ? { light: "#ffffff", medium: "#e5e5f5", dark: "#c9c9e0", darker: "#a4a4c9", stroke: "#ffffff" } : { light: "#8a92b2", medium: "#62688f", dark: "#454a75", darker: "#3c3c3b", stroke: ethPurple };
30232
- return /* @__PURE__ */ jsxs("g", { children: [
30233
- i > 0 && /* @__PURE__ */ jsx("line", { x1: bx - linkW, y1: cy, x2: bx, y2: cy, stroke: ethPurple, strokeWidth: 3.5, strokeLinecap: "round" }),
30234
- /* @__PURE__ */ jsx("rect", { x: bx + 3, y: cy - blockH / 2 + 3, width: blockW, height: blockH, rx: 4, fill: frame.stroke, opacity: 0.18, stroke: "none" }),
30235
- /* @__PURE__ */ jsx(
30236
- "rect",
30237
- {
30238
- "data-cdl-role": i === 0 ? "node-body" : void 0,
30239
- x: bx,
30240
- y: cy - blockH / 2,
30241
- width: blockW,
30242
- height: blockH,
30243
- rx: 4,
30244
- fill: isCurrent ? ethPurple : "var(--cdl-node-fill, #ffffff)",
30245
- stroke: ethPurple,
30246
- strokeWidth: isCurrent ? 2.5 : 1.5
30247
- }
30248
- ),
30249
- /* @__PURE__ */ jsx(EthereumDiamond, { cx: bx + blockW / 2, cy: cy - 6, h: 16, colors: iconColors }),
30250
- /* @__PURE__ */ jsxs("text", { "data-cdl-counter-scaled": "0", x: bx + blockW / 2, y: cy + 22, fontSize: ETH_NO_SIZE, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-text-dim, #5a6270)", children: [
30251
- "#",
30252
- 21400 + i
30253
- ] })
30254
- ] }, i);
30255
- }) });
30234
+ const \u6253\u3061\u6D88\u3059\u5B57\u3089 = [
30235
+ { text: "#214", size: ETH_NO_SIZE, \u5E2F: { \u5E45: CHAIN_TEXT_W, \u9AD8\u3055: 20 } }
30236
+ ];
30237
+ const art = (\u500D\u7387) => {
30238
+ const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u6253\u3061\u6D88\u3059\u5B57\u3089);
30239
+ return /* @__PURE__ */ jsx("g", { children: Array.from({ length: blockCount }, (_, i) => i).map((i) => {
30240
+ const bx = startX + i * (blockW + linkW);
30241
+ const isCurrent = i === blockCount - 1;
30242
+ const iconColors = isCurrent ? { light: "#ffffff", medium: "#e5e5f5", dark: "#c9c9e0", darker: "#a4a4c9", stroke: "#ffffff" } : { light: "#8a92b2", medium: "#62688f", dark: "#454a75", darker: "#3c3c3b", stroke: ethPurple };
30243
+ return /* @__PURE__ */ jsxs("g", { children: [
30244
+ i > 0 && /* @__PURE__ */ jsx("line", { x1: bx - linkW, y1: cy, x2: bx, y2: cy, stroke: ethPurple, strokeWidth: 3.5, strokeLinecap: "round" }),
30245
+ /* @__PURE__ */ jsx("rect", { x: bx + 3, y: cy - blockH / 2 + 3, width: blockW, height: blockH, rx: 4, fill: frame.stroke, opacity: 0.18, stroke: "none" }),
30246
+ /* @__PURE__ */ jsx(
30247
+ "rect",
30248
+ {
30249
+ "data-cdl-role": i === 0 ? "node-body" : void 0,
30250
+ x: bx,
30251
+ y: cy - blockH / 2,
30252
+ width: blockW,
30253
+ height: blockH,
30254
+ rx: 4,
30255
+ fill: isCurrent ? ethPurple : "var(--cdl-node-fill, #ffffff)",
30256
+ stroke: ethPurple,
30257
+ strokeWidth: isCurrent ? 2.5 : 1.5
30258
+ }
30259
+ ),
30260
+ /* @__PURE__ */ jsx(EthereumDiamond, { cx: bx + blockW / 2, cy: cy - 6, h: 16, colors: iconColors }),
30261
+ /* @__PURE__ */ jsxs("text", { "data-cdl-counter-scaled": "1", x: bx + blockW / 2, y: cy + 22, fontSize: ETH_NO_SIZE * \u500D, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-text-dim, #5a6270)", children: [
30262
+ "#",
30263
+ 214 + i
30264
+ ] })
30265
+ ] }, i);
30266
+ }) });
30267
+ };
30256
30268
  return /* @__PURE__ */ jsxs("g", { children: [
30257
30269
  fitArt(r, chainExtent(), art),
30258
30270
  bottomLabel2(node, r.cx, r.label)
@@ -30703,7 +30715,7 @@ function ShapePaymentProviderNode({ node, active, lang }) {
30703
30715
  /* @__PURE__ */ jsx("circle", { cx, cy: cy + 4, r: 10, fill: "#e5c07b", stroke: accentDarker, strokeWidth: 1.5 }),
30704
30716
  /* @__PURE__ */ jsx("text", { x: cx, y: cy + 9, fontSize: 13, fontWeight: 700, textAnchor: "middle", fill: accentDarker, fontFamily: "Georgia, serif", children: "$" })
30705
30717
  ] }),
30706
- /* @__PURE__ */ jsx("text", { x: cx, y: y + boxH - 16, fontSize: 9, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("paymentProvider.status") }),
30718
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + boxH - 16, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("paymentProvider.status") }),
30707
30719
  bottomLabel3(node, r.cx, r.label)
30708
30720
  ] });
30709
30721
  }
@@ -30732,12 +30744,12 @@ function ShapeCreditCardNode({ node, active }) {
30732
30744
  bottomLabel3(node, r.cx, r.label)
30733
30745
  ] });
30734
30746
  }
30735
- var BROKERAGE_TICK_H = 12;
30747
+ var BROKERAGE_TICK_H = 18;
30736
30748
  var BROKERAGE_LOGO_H = 26;
30737
- var BROKERAGE_TICK_INNER_H = 8;
30738
- var BROKERAGE_TICKER_SIZE = 5.5;
30749
+ var BROKERAGE_TICKER_SIZE = 11;
30750
+ var BROKERAGE_TICK_INNER_H = 14;
30739
30751
  var BROKERAGE_SIGN_SIZE = 12;
30740
- var BROKERAGE_GRID_TOP = 62;
30752
+ var BROKERAGE_GRID_TOP = 68;
30741
30753
  var BROKERAGE_CELL_W = 14;
30742
30754
  var BROKERAGE_CELL_H = 18;
30743
30755
  var BROKERAGE_GAP_X = 8;
@@ -30799,10 +30811,10 @@ function ShapeBrokerageNode({ node, active, lang }) {
30799
30811
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x, y, width: w, height: h, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth }),
30800
30812
  /* @__PURE__ */ jsx("rect", { x: x - BROKERAGE_SHADE_OUT, y, width: BROKERAGE_SHADE_OUT * 2, height: h, fill: accentDarker }),
30801
30813
  /* @__PURE__ */ jsx("rect", { x, y, width: w, height: BROKERAGE_TICK_H, fill: "#0f1830", stroke: "none" }),
30802
- /* @__PURE__ */ jsx("rect", { x: x + 2, y: y + 2, width: w - 4, height: 8, fill: "#1a2340", stroke: "none" }),
30803
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "1", x: cx, y: y + 9, fontSize: BROKERAGE_TICKER_SIZE * \u500D, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: \u5B57\u5F15("brokerage.ticker") }),
30814
+ /* @__PURE__ */ jsx("rect", { x: x + 2, y: y + 2, width: w - 4, height: BROKERAGE_TICK_INNER_H, fill: "#1a2340", stroke: "none" }),
30815
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "1", x: cx, y: y + 12, fontSize: BROKERAGE_TICKER_SIZE * \u500D, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: \u5B57\u5F15("brokerage.ticker") }),
30804
30816
  /* @__PURE__ */ jsx("rect", { x, y: y + BROKERAGE_TICK_H, width: w, height: BROKERAGE_LOGO_H, fill: "#e5c07b", stroke: "none" }),
30805
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: cx, y: y + 30, fontSize: BROKERAGE_SIGN_SIZE, fontWeight: 700, letterSpacing: 2.5, textAnchor: "middle", fill: "#0f1830", children: \u5B57\u5F15("brokerage.sign") }),
30817
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: cx, y: y + BROKERAGE_TICK_H + 18, fontSize: BROKERAGE_SIGN_SIZE, fontWeight: 700, letterSpacing: 2.5, textAnchor: "middle", fill: "#0f1830", children: \u5B57\u5F15("brokerage.sign") }),
30806
30818
  Array.from({ length: rows }).map(
30807
30819
  (_, ri) => Array.from({ length: cols }).map((_2, ci) => {
30808
30820
  const wx = gridStartX + ci * (cellW + gapX);
@@ -30824,7 +30836,8 @@ function ShapeBrokerageNode({ node, active, lang }) {
30824
30836
  bottomLabel3(node, r.cx, r.label)
30825
30837
  ] });
30826
30838
  }
30827
- var EXCHANGE_SUB_SIZE = 8;
30839
+ var EXCHANGE_SUB_SIZE = 11;
30840
+ var EXCHANGE_HEX_R = 52;
30828
30841
  function ShapeExchangeNode({ node, active, lang }) {
30829
30842
  const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30830
30843
  const frame = commonFrame5(active);
@@ -30844,7 +30857,8 @@ function ShapeExchangeNode({ node, active, lang }) {
30844
30857
  idx: i
30845
30858
  };
30846
30859
  });
30847
- const hexR = 45;
30860
+ const hexR = EXCHANGE_HEX_R;
30861
+ const \u516D\u89D2\u306E\u6A2A\u5E45 = (d) => hexR * Math.sqrt(3) * Math.min(1, Math.max(0, (hexR - Math.abs(d)) / (hexR / 2)));
30848
30862
  const hexPoints = [-90, -30, 30, 90, 150, 210].map((deg) => {
30849
30863
  const rad = deg * Math.PI / 180;
30850
30864
  return { x: cx + Math.cos(rad) * hexR, y: cy + Math.sin(rad) * hexR };
@@ -30852,7 +30866,7 @@ function ShapeExchangeNode({ node, active, lang }) {
30852
30866
  const hexPath = hexPoints.map((p, i) => `${i === 0 ? "M" : "L"} ${p.x} ${p.y}`).join(" ") + " Z";
30853
30867
  const \u7BC0\u70B9 = Math.max(0, nodeR) + 8 + 1.5 / 2;
30854
30868
  const \u516D\u89D2 = hexR + frame.strokeWidth / 2;
30855
- const \u5B57\u4E0B = 26 + EXCHANGE_SUB_SIZE * 0.25;
30869
+ const \u5B57\u4E0B = 28 + EXCHANGE_SUB_SIZE * 0.25;
30856
30870
  const \u5916 = Math.max(\u7BC0\u70B9, \u516D\u89D2);
30857
30871
  const \u305A\u308C = cy - r.cy;
30858
30872
  const \u5E83\u304C\u308A = {
@@ -30862,7 +30876,11 @@ function ShapeExchangeNode({ node, active, lang }) {
30862
30876
  \u53F3: \u5916
30863
30877
  };
30864
30878
  const \u6253\u3061\u6D88\u3059\u5B57\u3089 = [
30865
- { text: \u5B57\u5F15("exchange.sub"), size: EXCHANGE_SUB_SIZE, \u5E2F: { \u5E45: \u5916 * 2, \u9AD8\u3055: 14 } }
30879
+ {
30880
+ text: \u5B57\u5F15("exchange.sub"),
30881
+ size: EXCHANGE_SUB_SIZE,
30882
+ \u5E2F: { \u5E45: \u516D\u89D2\u306E\u6A2A\u5E45(\u5B57\u4E0B), \u9AD8\u3055: 14 }
30883
+ }
30866
30884
  ];
30867
30885
  const \u7D75 = (\u500D\u7387) => {
30868
30886
  const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u6253\u3061\u6D88\u3059\u5B57\u3089);
@@ -30876,9 +30894,9 @@ function ShapeExchangeNode({ node, active, lang }) {
30876
30894
  ] }, `d${i}`);
30877
30895
  }),
30878
30896
  /* @__PURE__ */ jsx("path", { d: hexPath, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
30879
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("exchange.sign") }),
30897
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: cx, y: cy - 10, fontSize: 11, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("exchange.sign") }),
30880
30898
  /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", "data-cdl-role": "node-body", x: cx, y: cy + 12, fontSize: 22, fontWeight: 700, textAnchor: "middle", fill: "#e5c07b", children: "\u21C4" }),
30881
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "1", x: cx, y: cy + 26, fontSize: EXCHANGE_SUB_SIZE * \u500D, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("exchange.sub") }),
30899
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "1", x: cx, y: cy + 28, fontSize: EXCHANGE_SUB_SIZE * \u500D, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("exchange.sub") }),
30882
30900
  nodes.map((n, i) => /* @__PURE__ */ jsx("circle", { cx: n.cx, cy: n.cy, r: 8, fill: n.fill, stroke: accentDarker, strokeWidth: 1.5 }, `n${i}`))
30883
30901
  ] });
30884
30902
  };
@@ -30896,10 +30914,10 @@ var ATM_SHADOW_RX_RATIO = 0.6;
30896
30914
  var ATM_FLOOR_UP = 6;
30897
30915
  var ATM_FLOOR_H = 10;
30898
30916
  var ATM_FLOOR_RESERVE = 12;
30899
- var ATM_PANEL_W = 140;
30917
+ var ATM_PANEL_W = 152;
30900
30918
  var ATM_PANEL_H = 146;
30901
30919
  var ATM_W_MIN = 100;
30902
- var ATM_W_MAX = 140;
30920
+ var ATM_W_MAX = ATM_PANEL_W;
30903
30921
  var ATM_H_MIN = ATM_SIGN_H + ATM_SIGN_GAP + 30 + ATM_FLOOR_RESERVE;
30904
30922
  function ShapeAtmNode({ node, active, lang }) {
30905
30923
  const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
@@ -30940,9 +30958,9 @@ function ShapeAtmNode({ node, active, lang }) {
30940
30958
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x: atmX, y: atmY, width: atmW, height: atmH, rx: 6, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth }),
30941
30959
  /* @__PURE__ */ jsxs("g", { transform: `translate(${centerX} ${atmY}) scale(${\u9762})`, children: [
30942
30960
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 8, y: 10, width: ATM_PANEL_W - 16, height: 52, rx: 3, fill: "#0f1830", stroke: "#000", strokeWidth: 1.5 }),
30943
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 30, fontSize: 10, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "\u304A\u5F15\u51FA\u3057" }),
30944
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("atm.screen") }),
30945
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 56, fontSize: 10, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", children: "\xA5 20,000" }),
30961
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 28, fontSize: 11, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "\u304A\u5F15\u51FA\u3057" }),
30962
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 42, fontSize: 11, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("atm.screen") }),
30963
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 56, fontSize: 11, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", children: "\xA5 20,000" }),
30946
30964
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 8, y: 68, width: ATM_PANEL_W - 16, height: 42, rx: 2, fill: "#8b949e", stroke: "#5a6270", strokeWidth: 1 }),
30947
30965
  (() => {
30948
30966
  const keys = [
@@ -30960,7 +30978,7 @@ function ShapeAtmNode({ node, active, lang }) {
30960
30978
  const keyW = 18;
30961
30979
  const keyH = 10;
30962
30980
  const keyGap = 4;
30963
- const startX = \u9762\u5DE6 + 14;
30981
+ const startX = \u9762\u5DE6 + (ATM_PANEL_W - (5 * keyW + 4 * keyGap)) / 2;
30964
30982
  return keys.map((k, i) => {
30965
30983
  const row = Math.floor(i / 5);
30966
30984
  const col = i % 5;
@@ -30977,7 +30995,7 @@ function ShapeAtmNode({ node, active, lang }) {
30977
30995
  })(),
30978
30996
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 12, y: 116, width: ATM_PANEL_W - 24, height: 8, rx: 1.5, fill: "#0f1830", stroke: accentDarker, strokeWidth: 1 }),
30979
30997
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 15, y: 118, width: ATM_PANEL_W - 30, height: 4, rx: 0.5, fill: "#e5c07b" }),
30980
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.cardSlot") }),
30998
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 132, fontSize: 11, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.cardSlot") }),
30981
30999
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 12, y: 136, width: ATM_PANEL_W - 24, height: 4, rx: 1, fill: "#0f1830" })
30982
31000
  ] }),
30983
31001
  /* @__PURE__ */ jsx("rect", { x: centerX - totalW / 2, y: floorY, width: totalW, height: 6, fill: "#8b949e", stroke: "none" }),
@@ -31086,6 +31104,7 @@ function ShapeStorefrontNode({ node, active, lang }) {
31086
31104
  const doorH = facadeH - 30;
31087
31105
  const doorX = x + bw - doorW - 12;
31088
31106
  const doorY = facadeY + 20;
31107
+ const \u672D\u5E45 = Math.min(doorW - 6, 50);
31089
31108
  return /* @__PURE__ */ jsxs("g", { children: [
31090
31109
  /* @__PURE__ */ jsx("ellipse", { cx, cy: y + bh + 8, rx: bw * 0.5, ry: 5, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
31091
31110
  /* @__PURE__ */ jsx("rect", { x, y, width: bw, height: signH, fill: accent, stroke: accentDark, strokeWidth: 2 }),
@@ -31102,8 +31121,8 @@ function ShapeStorefrontNode({ node, active, lang }) {
31102
31121
  /* @__PURE__ */ jsx("rect", { x: doorX + 4, y: doorY + 4, width: doorW - 8, height: doorH - 8, fill: "#8b949e", stroke: accentDarker, strokeWidth: 1.5 }),
31103
31122
  /* @__PURE__ */ jsx("line", { x1: doorX + 4, y1: doorY + doorH * 0.38, x2: doorX + doorW - 4, y2: doorY + doorH * 0.38, stroke: accentDarker, strokeWidth: 1 }),
31104
31123
  /* @__PURE__ */ jsx("line", { x1: doorX + 4, y1: doorY + doorH * 0.72, x2: doorX + doorW - 4, y2: doorY + doorH * 0.72, stroke: accentDarker, strokeWidth: 1 }),
31105
- /* @__PURE__ */ jsx("rect", { x: doorX + doorW / 2 - 20, y: doorY + doorH * 0.85, width: 40, height: 12, fill: "#e5c07b", stroke: "#a67c00", strokeWidth: 1.5 }),
31106
- /* @__PURE__ */ jsx("text", { x: doorX + doorW / 2, y: doorY + doorH * 0.85 + 9, fontSize: 8, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#5a3a10", children: \u5B57\u5F15("storefront.open") }),
31124
+ /* @__PURE__ */ jsx("rect", { x: doorX + doorW / 2 - \u672D\u5E45 / 2, y: doorY + doorH * 0.85, width: \u672D\u5E45, height: 16, fill: "#e5c07b", stroke: "#a67c00", strokeWidth: 1.5 }),
31125
+ /* @__PURE__ */ jsx("text", { x: doorX + doorW / 2, y: doorY + doorH * 0.85 + 11, fontSize: 11, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#5a3a10", children: \u5B57\u5F15("storefront.open") }),
31107
31126
  /* @__PURE__ */ jsx("circle", { cx: doorX + 6, cy: doorY + doorH * 0.55, r: 1.5, fill: "#c15a4a" }),
31108
31127
  /* @__PURE__ */ jsx("rect", { x: x - 6, y: y + bh - 6, width: bw + 12, height: 8, fill: "#5a6270", stroke: "none" }),
31109
31128
  bottomLabel4(node, r.cx, r.label)