@pisell/materials 1.0.1055 → 1.0.1057

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/index.js +1 -1
  5. package/build/lowcode/meta.js +7 -7
  6. package/build/lowcode/preview.js +9 -9
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +20 -20
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +24 -24
  11. package/es/components/PisellLayouts/index.d.ts +9 -5
  12. package/es/components/PisellLayouts/index.js +5 -3
  13. package/es/components/dataSourceComponents/dataSourceSubForm/index.js +18 -5
  14. package/es/components/dataSourceComponents/dataSourceSubForm/schema-full-example.json +38 -32
  15. package/es/components/dataSourceComponents/fields/RecordListWrapper/WithMode.js +58 -26
  16. package/es/components/dataSourceComponents/fields/Tabs/Tabs.js +1 -1
  17. package/es/components/dataSourceComponents/fields/Tabs/Tabs.less +2 -1
  18. package/es/components/pisellFloorMapLayout/PisellFloorMapLayout.d.ts +12 -0
  19. package/es/components/pisellFloorMapLayout/PisellFloorMapLayout.js +264 -0
  20. package/es/components/pisellFloorMapLayout/PisellFloorMapLayout.less +7 -0
  21. package/es/components/pisellFloorMapLayout/PisellFloorMapLayout.stories.d.ts +42 -0
  22. package/es/components/pisellFloorMapLayout/PisellFloorMapLayout.stories.js +1234 -0
  23. package/es/components/pisellFloorMapLayout/components/ItemLayer.d.ts +36 -0
  24. package/es/components/pisellFloorMapLayout/components/ItemLayer.js +121 -0
  25. package/es/components/pisellFloorMapLayout/components/ItemLayer.less +19 -0
  26. package/es/components/pisellFloorMapLayout/components/MapLayer.d.ts +23 -0
  27. package/es/components/pisellFloorMapLayout/components/MapLayer.js +74 -0
  28. package/es/components/pisellFloorMapLayout/components/MapLayer.less +7 -0
  29. package/es/components/pisellFloorMapLayout/components/ViewControls.d.ts +22 -0
  30. package/es/components/pisellFloorMapLayout/components/ViewControls.js +59 -0
  31. package/es/components/pisellFloorMapLayout/components/ViewControls.less +76 -0
  32. package/es/components/pisellFloorMapLayout/components/index.d.ts +7 -0
  33. package/es/components/pisellFloorMapLayout/components/index.js +6 -0
  34. package/es/components/pisellFloorMapLayout/index.d.ts +6 -0
  35. package/es/components/pisellFloorMapLayout/index.js +5 -0
  36. package/es/components/pisellFloorMapLayout/types.d.ts +197 -0
  37. package/es/components/pisellFloorMapLayout/types.js +1 -0
  38. package/es/components/pisellMultipleSelect/components/EditView.js +3 -3
  39. package/es/index.d.ts +4 -3
  40. package/es/index.js +1 -0
  41. package/lib/components/PisellLayouts/index.d.ts +9 -5
  42. package/lib/components/PisellLayouts/index.js +2 -0
  43. package/lib/components/dataSourceComponents/dataSourceSubForm/index.js +16 -3
  44. package/lib/components/dataSourceComponents/dataSourceSubForm/schema-full-example.json +38 -32
  45. package/lib/components/dataSourceComponents/fields/RecordListWrapper/WithMode.js +49 -21
  46. package/lib/components/dataSourceComponents/fields/Tabs/Tabs.js +1 -1
  47. package/lib/components/dataSourceComponents/fields/Tabs/Tabs.less +2 -1
  48. package/lib/components/pisellFloorMapLayout/PisellFloorMapLayout.d.ts +12 -0
  49. package/lib/components/pisellFloorMapLayout/PisellFloorMapLayout.js +257 -0
  50. package/lib/components/pisellFloorMapLayout/PisellFloorMapLayout.less +7 -0
  51. package/lib/components/pisellFloorMapLayout/PisellFloorMapLayout.stories.d.ts +42 -0
  52. package/lib/components/pisellFloorMapLayout/PisellFloorMapLayout.stories.js +755 -0
  53. package/lib/components/pisellFloorMapLayout/components/ItemLayer.d.ts +36 -0
  54. package/lib/components/pisellFloorMapLayout/components/ItemLayer.js +153 -0
  55. package/lib/components/pisellFloorMapLayout/components/ItemLayer.less +19 -0
  56. package/lib/components/pisellFloorMapLayout/components/MapLayer.d.ts +23 -0
  57. package/lib/components/pisellFloorMapLayout/components/MapLayer.js +103 -0
  58. package/lib/components/pisellFloorMapLayout/components/MapLayer.less +7 -0
  59. package/lib/components/pisellFloorMapLayout/components/ViewControls.d.ts +22 -0
  60. package/lib/components/pisellFloorMapLayout/components/ViewControls.js +89 -0
  61. package/lib/components/pisellFloorMapLayout/components/ViewControls.less +76 -0
  62. package/lib/components/pisellFloorMapLayout/components/index.d.ts +7 -0
  63. package/lib/components/pisellFloorMapLayout/components/index.js +35 -0
  64. package/lib/components/pisellFloorMapLayout/index.d.ts +6 -0
  65. package/lib/components/pisellFloorMapLayout/index.js +29 -0
  66. package/lib/components/pisellFloorMapLayout/types.d.ts +197 -0
  67. package/lib/components/pisellFloorMapLayout/types.js +17 -0
  68. package/lib/index.d.ts +4 -3
  69. package/lib/index.js +3 -0
  70. package/lowcode/data-source-form/utils.ts +3 -0
  71. package/lowcode/pisell-floor-map-layout/meta.ts +1511 -0
  72. package/package.json +4 -3
@@ -0,0 +1,755 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/components/pisellFloorMapLayout/PisellFloorMapLayout.stories.tsx
20
+ var PisellFloorMapLayout_stories_exports = {};
21
+ __export(PisellFloorMapLayout_stories_exports, {
22
+ ControlsHidden: () => ControlsHidden,
23
+ Default: () => Default,
24
+ FigmaDesign: () => FigmaDesign,
25
+ PixelUnits: () => PixelUnits,
26
+ WithEvents: () => WithEvents,
27
+ WithGrid: () => WithGrid,
28
+ WithPan: () => WithPan,
29
+ WithRefControls: () => WithRefControls,
30
+ WithShapes: () => WithShapes,
31
+ WithVariableSizes: () => WithVariableSizes,
32
+ default: () => PisellFloorMapLayout_stories_default
33
+ });
34
+ module.exports = __toCommonJS(PisellFloorMapLayout_stories_exports);
35
+ var import_react = require("react");
36
+ var import_antd = require("antd");
37
+ var import_icons = require("@ant-design/icons");
38
+ var import_PisellFloorMapLayout = require("./PisellFloorMapLayout");
39
+ var FIGMA = {
40
+ white: "#FFFFFF",
41
+ gray50: "#F9FAFB",
42
+ gray100: "#F2F4F7",
43
+ gray200: "#EAECF0",
44
+ gray300: "#D0D5DD",
45
+ gray400: "#98A2B3",
46
+ gray500: "#667085",
47
+ gray700: "#344054",
48
+ gray900: "#101828",
49
+ shadowSm: "0 1px 2px rgba(16, 24, 40, 0.06), 0 1px 3px rgba(16, 24, 40, 0.1)",
50
+ fontFamily: 'Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
51
+ // 状态色(与图例、卡片边框及小条一致)
52
+ available: "#EAECF0",
53
+ reserved: "#9254de",
54
+ waiting: "#fa8c16",
55
+ dining: "#1890ff",
56
+ billed: "#52c41a",
57
+ availableSoon: "#f5222d",
58
+ /** 选中 Tab 背景(node 13998:648) */
59
+ tabActiveBg: "#1890ff",
60
+ /** 矩形外小条:Available 用灰,有状态用对应边框色 */
61
+ barFillAvailable: "#EAECF0",
62
+ /** 图例圆点色(Figma 14131:6266 设计 token) */
63
+ legendReserved: "#D6BBFB",
64
+ legendWaiting: "#FEC84B",
65
+ legendDining: "#84CAFF",
66
+ legendBilled: "#75E0A7",
67
+ legendAvailableSoon: "#FDA29B"
68
+ };
69
+ var meta = {
70
+ title: "Data Display/PisellFloorMapLayout",
71
+ component: import_PisellFloorMapLayout.PisellFloorMapLayout,
72
+ parameters: {
73
+ layout: "padded",
74
+ docs: {
75
+ description: {
76
+ component: "在二维平面按坐标渲染资源,状态由外部通过 item 与 renderItem 传入。支持 itemUnit:cell(格子数)或 pixel(像素);格子模式下可用 mapLayer.gap 控制 item 间距。支持底层背景/网格、缩放/平移、内置视图控制按钮。"
77
+ }
78
+ }
79
+ },
80
+ tags: ["autodocs"],
81
+ argTypes: {
82
+ itemUnit: {
83
+ control: "select",
84
+ options: ["cell", "pixel"],
85
+ description: "item 坐标与尺寸单位:cell 格子数,pixel 像素"
86
+ },
87
+ layoutMode: {
88
+ control: "select",
89
+ options: ["free", "grid"],
90
+ description: "布局模式"
91
+ },
92
+ enableHover: {
93
+ control: "boolean",
94
+ description: "是否开启 hover"
95
+ }
96
+ }
97
+ };
98
+ var PisellFloorMapLayout_stories_default = meta;
99
+ var defaultItems = [
100
+ { id: "S-1", x: 0, y: 0 },
101
+ { id: "S-2", x: 1, y: 0 },
102
+ { id: "S-3", x: 2, y: 0 },
103
+ { id: "S-4", x: 3, y: 0 },
104
+ { id: "M-1", x: 0, y: 1 },
105
+ { id: "M-2", x: 1, y: 1 },
106
+ { id: "M-3", x: 2, y: 1 },
107
+ { id: "M-4", x: 3, y: 1 },
108
+ { id: "L-1", x: 0, y: 2 },
109
+ { id: "L-2", x: 1, y: 2 },
110
+ { id: "L-3", x: 2, y: 2 },
111
+ { id: "X-1", x: 0, y: 3 },
112
+ { id: "X-2", x: 1, y: 3 },
113
+ { id: "X-3", x: 2, y: 3 },
114
+ { id: "X-4", x: 3, y: 3 }
115
+ ];
116
+ function renderSimpleItem(item) {
117
+ return /* @__PURE__ */ React.createElement(
118
+ "div",
119
+ {
120
+ style: {
121
+ width: "100%",
122
+ height: "100%",
123
+ display: "flex",
124
+ alignItems: "center",
125
+ justifyContent: "center",
126
+ background: "#fff",
127
+ border: "4px solid #d9d9d9",
128
+ borderRadius: 4,
129
+ fontSize: 12
130
+ }
131
+ },
132
+ item.id
133
+ );
134
+ }
135
+ var Default = {
136
+ args: {
137
+ items: defaultItems,
138
+ renderItem: (item) => renderSimpleItem(item),
139
+ itemUnit: "cell",
140
+ mapLayer: {
141
+ backgroundType: "color",
142
+ backgroundColor: "#f5f5f5",
143
+ padding: 16,
144
+ gap: 8
145
+ },
146
+ zoom: { defaultScale: 1, min: 0.5, max: 2 },
147
+ pan: { enabled: false },
148
+ enableHover: true
149
+ }
150
+ };
151
+ var WithGrid = {
152
+ args: {
153
+ items: defaultItems,
154
+ renderItem: (item) => renderSimpleItem(item),
155
+ itemUnit: "cell",
156
+ mapLayer: {
157
+ backgroundType: "color",
158
+ backgroundColor: "#fafafa",
159
+ showGrid: true,
160
+ padding: 16,
161
+ gap: 8
162
+ },
163
+ zoom: { defaultScale: 1 },
164
+ pan: { enabled: true }
165
+ }
166
+ };
167
+ var WithPan = {
168
+ args: {
169
+ items: defaultItems,
170
+ renderItem: (item) => renderSimpleItem(item),
171
+ itemUnit: "cell",
172
+ mapLayer: {
173
+ backgroundType: "color",
174
+ backgroundColor: "#f0f5ff",
175
+ showGrid: true,
176
+ padding: 16,
177
+ gap: 8
178
+ },
179
+ zoom: { defaultScale: 1 },
180
+ pan: { enabled: true },
181
+ controls: { showZoom: true, showReset: true, showFitBounds: true }
182
+ }
183
+ };
184
+ var shapeItems = [
185
+ { id: "rect", x: 0, y: 0, shape: "rect" },
186
+ { id: "circle", x: 2, y: 0, shape: "circle" },
187
+ { id: "triangle", x: 4, y: 0, shape: "triangle" },
188
+ { id: "rect2", x: 0, y: 2, width: 2, height: 1 }
189
+ ];
190
+ var WithShapes = {
191
+ args: {
192
+ items: shapeItems,
193
+ renderItem: (item) => renderSimpleItem(item),
194
+ itemUnit: "cell",
195
+ mapLayer: {
196
+ backgroundType: "color",
197
+ backgroundColor: "#f5f5f5",
198
+ showGrid: true,
199
+ padding: 16,
200
+ gap: 8
201
+ },
202
+ zoom: { defaultScale: 1 },
203
+ pan: { enabled: true }
204
+ }
205
+ };
206
+ var variableSizeItems = [
207
+ { id: "1x1", x: 0, y: 0 },
208
+ { id: "2x1", x: 1, y: 0, width: 2, height: 1 },
209
+ { id: "1x2", x: 3, y: 0, width: 1, height: 2 },
210
+ { id: "2x2", x: 0, y: 2, width: 2, height: 2 },
211
+ { id: "3x1", x: 2, y: 2, width: 3, height: 1 }
212
+ ];
213
+ var WithVariableSizes = {
214
+ parameters: {
215
+ docs: {
216
+ description: {
217
+ story: "itemUnit 为 cell 时,每条数据可设置 width/height(格子数),实现不同大小的格子。"
218
+ }
219
+ }
220
+ },
221
+ args: {
222
+ items: variableSizeItems,
223
+ renderItem: (item) => renderSimpleItem(item),
224
+ itemUnit: "cell",
225
+ cellSize: 72,
226
+ mapLayer: {
227
+ backgroundType: "color",
228
+ backgroundColor: "#f5f5f5",
229
+ showGrid: true,
230
+ padding: 16,
231
+ gap: 8
232
+ },
233
+ zoom: { defaultScale: 1 },
234
+ pan: { enabled: true }
235
+ }
236
+ };
237
+ var pixelItems = [
238
+ { id: "A", x: 20, y: 20, width: 100, height: 80 },
239
+ { id: "B", x: 140, y: 20, width: 200, height: 80 },
240
+ { id: "C", x: 20, y: 120, width: 80, height: 100 },
241
+ { id: "D", x: 120, y: 120, width: 150, height: 120 },
242
+ { id: "E", x: 290, y: 120 }
243
+ // 不写 width/height 时使用 cellSize 作为默认尺寸
244
+ ];
245
+ var PixelUnits = {
246
+ parameters: {
247
+ docs: {
248
+ description: {
249
+ story: "itemUnit 为 pixel 时,item 的 x、y、width、height 均为像素;不写 width/height 时以 cellSize 为默认宽高。"
250
+ }
251
+ }
252
+ },
253
+ args: {
254
+ items: pixelItems,
255
+ renderItem: (item) => renderSimpleItem(item),
256
+ itemUnit: "pixel",
257
+ cellSize: 64,
258
+ mapLayer: {
259
+ backgroundType: "color",
260
+ backgroundColor: "#f5f5f5",
261
+ padding: 16
262
+ },
263
+ zoom: { defaultScale: 1 },
264
+ pan: { enabled: true }
265
+ }
266
+ };
267
+ var WithEvents = {
268
+ args: {
269
+ items: defaultItems.slice(0, 6),
270
+ renderItem: (item) => renderSimpleItem(item),
271
+ itemUnit: "cell",
272
+ mapLayer: {
273
+ backgroundType: "color",
274
+ backgroundColor: "#f5f5f5",
275
+ padding: 16,
276
+ gap: 8
277
+ },
278
+ enableHover: true,
279
+ onItemClick: (item) => {
280
+ console.log("click", item.id);
281
+ alert(`点击了 ${item.id}`);
282
+ },
283
+ onItemHover: (item) => console.log("hover", item.id),
284
+ onItemLeave: (item) => console.log("leave", item.id)
285
+ }
286
+ };
287
+ var WithRefControls = {
288
+ render: function WithRefControlsRender() {
289
+ const ref = (0, import_react.useRef)(null);
290
+ return /* @__PURE__ */ React.createElement(import_antd.Space, { direction: "vertical", style: { width: "100%" }, size: "middle" }, /* @__PURE__ */ React.createElement(import_antd.Space, null, /* @__PURE__ */ React.createElement(import_antd.Button, { onClick: () => {
291
+ var _a;
292
+ return (_a = ref.current) == null ? void 0 : _a.zoomIn();
293
+ } }, "放大"), /* @__PURE__ */ React.createElement(import_antd.Button, { onClick: () => {
294
+ var _a;
295
+ return (_a = ref.current) == null ? void 0 : _a.zoomOut();
296
+ } }, "缩小"), /* @__PURE__ */ React.createElement(import_antd.Button, { onClick: () => {
297
+ var _a;
298
+ return (_a = ref.current) == null ? void 0 : _a.reset();
299
+ } }, "复位"), /* @__PURE__ */ React.createElement(import_antd.Button, { onClick: () => {
300
+ var _a;
301
+ return (_a = ref.current) == null ? void 0 : _a.fitBounds();
302
+ } }, "区域定位")), /* @__PURE__ */ React.createElement("div", { style: { height: 400 } }, /* @__PURE__ */ React.createElement(
303
+ import_PisellFloorMapLayout.PisellFloorMapLayout,
304
+ {
305
+ ref,
306
+ items: defaultItems,
307
+ renderItem: (item) => renderSimpleItem(item),
308
+ itemUnit: "cell",
309
+ mapLayer: {
310
+ backgroundType: "color",
311
+ backgroundColor: "#fafafa",
312
+ showGrid: true,
313
+ padding: 16,
314
+ gap: 8
315
+ },
316
+ zoom: { defaultScale: 1 },
317
+ pan: { enabled: true },
318
+ style: { height: 400 }
319
+ }
320
+ )));
321
+ }
322
+ };
323
+ var ControlsHidden = {
324
+ args: {
325
+ items: defaultItems.slice(0, 4),
326
+ renderItem: (item) => renderSimpleItem(item),
327
+ itemUnit: "cell",
328
+ mapLayer: {
329
+ backgroundType: "color",
330
+ backgroundColor: "#f5f5f5",
331
+ padding: 16,
332
+ gap: 8
333
+ },
334
+ controls: {
335
+ showZoom: false,
336
+ showReset: true,
337
+ showFitBounds: false
338
+ }
339
+ }
340
+ };
341
+ var STATUS_BORDER = {
342
+ available: FIGMA.gray200,
343
+ reserved: FIGMA.reserved,
344
+ waiting: FIGMA.waiting,
345
+ dining: FIGMA.dining,
346
+ billed: FIGMA.billed,
347
+ availableSoon: FIGMA.availableSoon
348
+ };
349
+ var GAP = 50;
350
+ var SMALL_W = 160;
351
+ var MED_W = 240;
352
+ var LARGE_W = 350;
353
+ var XL_W = 460;
354
+ var H = 160;
355
+ var figma13998PixelItems = [
356
+ // Row 0: S-1, S-2, M-1, L-0(大格带内容,Figma 14000:335)
357
+ { id: "S-1", x: 0, y: 0, width: SMALL_W, height: H, status: "reserved", customerName: "Carolino", reserveTime: "13:00" },
358
+ { id: "S-2", x: SMALL_W + GAP, y: 0, width: SMALL_W, height: H, status: "available" },
359
+ { id: "M-1", x: (SMALL_W + GAP) * 2, y: 0, width: MED_W, height: H, status: "available" },
360
+ { id: "L-0", x: (SMALL_W + GAP) * 2 + MED_W + GAP, y: 0, width: LARGE_W, height: H, status: "dining", guests: 4, dishes: "5/5 Dishes", duration: "18m20s" },
361
+ { id: "M-0", x: (SMALL_W + GAP) * 2 + MED_W + GAP + LARGE_W + GAP, y: 0, width: MED_W, height: H, status: "available" },
362
+ // Row 1: S-3, M-4, S-5, S-6, XL-0(第二个改成 m,最后添加 xl)
363
+ { id: "S-3", x: 0, y: H + GAP, width: SMALL_W, height: H, status: "availableSoon", guests: 7, dishes: "5/5 Dishes", duration: "35m30s" },
364
+ { id: "M-4", x: SMALL_W + GAP, y: H + GAP, width: MED_W, height: H, status: "available" },
365
+ { id: "S-5", x: SMALL_W + GAP + MED_W + GAP, y: H + GAP, width: SMALL_W, height: H, status: "dining", guests: 2, dishes: "3/5 Dishes", duration: "15m30s" },
366
+ { id: "S-6", x: SMALL_W + GAP + MED_W + GAP + SMALL_W + GAP, y: H + GAP, width: SMALL_W, height: H, status: "reserved", customerName: "Alex", reserveTime: "14:00" },
367
+ { id: "XL-0", x: (SMALL_W + GAP) * 2 + MED_W + GAP + SMALL_W + GAP, y: H + GAP, width: XL_W, height: H, status: "available" },
368
+ // Row 2: L-1(MED), L-2(LARGE), L-5(LARGE), S-7, S-10(S-7 紧接 L-5 右边界 + GAP,避免与 L-5 重叠)
369
+ { id: "L-1", x: 0, y: (H + GAP) * 2, width: MED_W, height: H, status: "available" },
370
+ { id: "L-2", x: MED_W + GAP, y: (H + GAP) * 2, width: LARGE_W, height: H, status: "billed", guests: 5, dishes: "5/5 Dishes", duration: "25m30s" },
371
+ { id: "L-5", x: MED_W + GAP + LARGE_W + GAP, y: (H + GAP) * 2, width: LARGE_W, height: H, status: "available" },
372
+ { id: "S-7", x: MED_W + GAP + LARGE_W + GAP + LARGE_W + GAP, y: (H + GAP) * 2, width: SMALL_W, height: H, status: "reserved", customerName: "Carolino", reserveTime: "13:00" },
373
+ { id: "S-10", x: MED_W + GAP + LARGE_W + GAP + LARGE_W + GAP + SMALL_W + GAP, y: (H + GAP) * 2, width: SMALL_W, height: H, status: "available" },
374
+ // Row 3: M-3, L-3, S-8, M-5(第四格 = S-8 右边界 + GAP,避免重叠)
375
+ { id: "M-3", x: 0, y: (H + GAP) * 3, width: MED_W, height: H, status: "waiting", guests: 2, dishes: "3/5 Dishes", duration: "15m30s" },
376
+ { id: "L-3", x: MED_W + GAP, y: (H + GAP) * 3, width: LARGE_W, height: H, status: "available" },
377
+ { id: "S-8", x: MED_W + GAP + LARGE_W + GAP, y: (H + GAP) * 3, width: SMALL_W, height: H, status: "dining", guests: 6, dishes: "4/5 Dishes", duration: "24m30s" },
378
+ { id: "M-5", x: MED_W + GAP + LARGE_W + GAP + SMALL_W + GAP, y: (H + GAP) * 3, width: MED_W, height: H, status: "available" },
379
+ // Row 4: X-1, S-9, X-2, L-4
380
+ { id: "X-1", x: 0, y: (H + GAP) * 4, width: LARGE_W, height: H, status: "available" },
381
+ { id: "S-9", x: LARGE_W + GAP, y: (H + GAP) * 4, width: SMALL_W, height: H, status: "available" },
382
+ { id: "X-2", x: LARGE_W + GAP + SMALL_W + GAP, y: (H + GAP) * 4, width: LARGE_W, height: H, status: "waiting", guests: 2, dishes: "3/5 Dishes", duration: "15m30s" },
383
+ { id: "L-4", x: LARGE_W + GAP + SMALL_W + GAP + LARGE_W + GAP, y: (H + GAP) * 4, width: LARGE_W, height: H, status: "billed", guests: 5, dishes: "5/5 Dishes", duration: "25m30s" },
384
+ // Row 5: XL-1 超大格
385
+ { id: "XL-1", x: 0, y: (H + GAP) * 5, width: XL_W, height: H, status: "dining", guests: 12, dishes: "8/8 Dishes", duration: "45m00s" }
386
+ ];
387
+ function FigmaCardRow({
388
+ icon,
389
+ children
390
+ }) {
391
+ return /* @__PURE__ */ React.createElement(
392
+ "div",
393
+ {
394
+ style: {
395
+ display: "flex",
396
+ alignItems: "center",
397
+ gap: 4,
398
+ fontFamily: FIGMA.fontFamily,
399
+ fontSize: 14,
400
+ lineHeight: "20px",
401
+ fontWeight: 400,
402
+ color: FIGMA.gray700,
403
+ flexShrink: 0,
404
+ minHeight: "20px"
405
+ }
406
+ },
407
+ /* @__PURE__ */ React.createElement("span", { style: { flexShrink: 0, color: FIGMA.gray400, fontSize: 14 } }, icon),
408
+ /* @__PURE__ */ React.createElement("span", { style: { flexShrink: 0 } }, children)
409
+ );
410
+ }
411
+ function getBarCountFromItemId(id) {
412
+ const upper = id.toUpperCase();
413
+ if (upper.startsWith("XL-")) return 4;
414
+ if (upper.startsWith("L-") || upper.startsWith("X-")) return 3;
415
+ if (upper.startsWith("M-")) return 2;
416
+ return 1;
417
+ }
418
+ var CARD_BAR_WIDTH = 80;
419
+ var CARD_BAR_HEIGHT = 12;
420
+ function CardBars({
421
+ count,
422
+ position,
423
+ barColor
424
+ }) {
425
+ return /* @__PURE__ */ React.createElement(
426
+ "div",
427
+ {
428
+ style: {
429
+ display: "flex",
430
+ flexDirection: "row",
431
+ gap: 30,
432
+ justifyContent: "center",
433
+ flexShrink: 0,
434
+ padding: position === "top" ? "0 0 4px 0" : "4px 0 0 0"
435
+ }
436
+ },
437
+ Array.from({ length: count }, (_, i) => /* @__PURE__ */ React.createElement(
438
+ "div",
439
+ {
440
+ key: i,
441
+ style: {
442
+ width: CARD_BAR_WIDTH,
443
+ height: CARD_BAR_HEIGHT,
444
+ borderRadius: 6,
445
+ background: barColor
446
+ }
447
+ }
448
+ ))
449
+ );
450
+ }
451
+ function renderFigmaTableCard(item) {
452
+ const status = item.status ?? "available";
453
+ const borderColor = STATUS_BORDER[status];
454
+ const isAvailable = status === "available";
455
+ return /* @__PURE__ */ React.createElement(
456
+ "div",
457
+ {
458
+ className: "figma-table-card",
459
+ style: {
460
+ width: "100%",
461
+ height: "100%",
462
+ boxSizing: "border-box",
463
+ display: "flex",
464
+ flexDirection: "column",
465
+ justifyContent: "flex-start",
466
+ gap: 0,
467
+ fontFamily: FIGMA.fontFamily,
468
+ overflow: "hidden"
469
+ }
470
+ },
471
+ /* @__PURE__ */ React.createElement(
472
+ CardBars,
473
+ {
474
+ count: getBarCountFromItemId(item.id),
475
+ position: "top",
476
+ barColor: isAvailable ? FIGMA.barFillAvailable : borderColor
477
+ }
478
+ ),
479
+ /* @__PURE__ */ React.createElement(
480
+ "div",
481
+ {
482
+ style: {
483
+ flex: 1,
484
+ minHeight: 0,
485
+ padding: 8,
486
+ boxSizing: "border-box",
487
+ background: FIGMA.white,
488
+ border: isAvailable ? `4px solid ${FIGMA.gray200}` : `4px solid ${borderColor}`,
489
+ borderRadius: 8,
490
+ boxShadow: FIGMA.shadowSm,
491
+ display: "flex",
492
+ flexDirection: "column",
493
+ justifyContent: isAvailable ? "flex-start" : "center",
494
+ alignItems: isAvailable ? "stretch" : "center",
495
+ gap: 4
496
+ }
497
+ },
498
+ isAvailable ? (
499
+ /* 空闲:仅 ID 居中 */
500
+ /* @__PURE__ */ React.createElement(
501
+ "div",
502
+ {
503
+ style: {
504
+ flex: 1,
505
+ display: "flex",
506
+ alignItems: "center",
507
+ justifyContent: "center",
508
+ minHeight: 0,
509
+ fontWeight: 600,
510
+ fontSize: 18,
511
+ lineHeight: "24px",
512
+ color: FIGMA.gray400,
513
+ letterSpacing: 0
514
+ }
515
+ },
516
+ item.id
517
+ )
518
+ ) : (
519
+ /* 有内容:ID + 状态行整体居中 */
520
+ /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
521
+ "div",
522
+ {
523
+ style: {
524
+ fontWeight: 600,
525
+ fontSize: 18,
526
+ lineHeight: "24px",
527
+ color: FIGMA.gray900,
528
+ letterSpacing: 0,
529
+ textAlign: "center"
530
+ }
531
+ },
532
+ item.id
533
+ ), status === "reserved" && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
534
+ FigmaCardRow,
535
+ {
536
+ icon: /* @__PURE__ */ React.createElement(
537
+ import_antd.Avatar,
538
+ {
539
+ size: 16,
540
+ icon: /* @__PURE__ */ React.createElement(import_icons.UserOutlined, null),
541
+ style: { backgroundColor: FIGMA.gray200 }
542
+ }
543
+ )
544
+ },
545
+ /* @__PURE__ */ React.createElement("span", null, item.customerName ?? "")
546
+ ), /* @__PURE__ */ React.createElement(FigmaCardRow, { icon: /* @__PURE__ */ React.createElement(import_icons.ClockCircleOutlined, null) }, /* @__PURE__ */ React.createElement("span", null, item.reserveTime ?? ""))), (status === "dining" || status === "waiting" || status === "billed" || status === "availableSoon") && item.guests != null && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(FigmaCardRow, { icon: /* @__PURE__ */ React.createElement(import_icons.TeamOutlined, null) }, /* @__PURE__ */ React.createElement("span", null, item.guests)), item.dishes && /* @__PURE__ */ React.createElement(FigmaCardRow, { icon: /* @__PURE__ */ React.createElement(import_icons.AuditOutlined, null) }, /* @__PURE__ */ React.createElement("span", null, item.dishes)), item.duration && /* @__PURE__ */ React.createElement(FigmaCardRow, { icon: /* @__PURE__ */ React.createElement(import_icons.FieldTimeOutlined, null) }, /* @__PURE__ */ React.createElement("span", null, item.duration))))
547
+ )
548
+ ),
549
+ /* @__PURE__ */ React.createElement(
550
+ CardBars,
551
+ {
552
+ count: getBarCountFromItemId(item.id),
553
+ position: "bottom",
554
+ barColor: isAvailable ? FIGMA.barFillAvailable : borderColor
555
+ }
556
+ )
557
+ );
558
+ }
559
+ function LegendItem14131({
560
+ color,
561
+ label,
562
+ fill = false
563
+ }) {
564
+ return /* @__PURE__ */ React.createElement(
565
+ "span",
566
+ {
567
+ style: {
568
+ display: "inline-flex",
569
+ alignItems: "center",
570
+ gap: 6,
571
+ fontFamily: FIGMA.fontFamily,
572
+ fontSize: 14,
573
+ fontWeight: 500,
574
+ lineHeight: "20px",
575
+ color: "#000000"
576
+ }
577
+ },
578
+ /* @__PURE__ */ React.createElement(
579
+ "span",
580
+ {
581
+ style: {
582
+ width: 16,
583
+ height: 16,
584
+ borderRadius: "50%",
585
+ background: fill ? color : FIGMA.white,
586
+ border: fill ? "none" : `1px solid ${FIGMA.gray200}`,
587
+ flexShrink: 0
588
+ }
589
+ }
590
+ ),
591
+ label
592
+ );
593
+ }
594
+ var FigmaDesign = {
595
+ parameters: {
596
+ docs: {
597
+ description: {
598
+ story: "Figma node 14131:6266 还原:顶部 Tabs 灰底容器、选中白底+阴影、16px Semibold;图例 16px 圆点(Available 白底灰边/其余实心)、14px Medium 黑字、gap 12px 40px。内容区未改。"
599
+ }
600
+ }
601
+ },
602
+ render: function FigmaDesignRender() {
603
+ return /* @__PURE__ */ React.createElement(
604
+ "div",
605
+ {
606
+ style: {
607
+ display: "flex",
608
+ flexDirection: "column",
609
+ gap: 20,
610
+ background: FIGMA.gray50,
611
+ padding: 24,
612
+ borderRadius: 12,
613
+ fontFamily: FIGMA.fontFamily
614
+ }
615
+ },
616
+ /* @__PURE__ */ React.createElement(
617
+ "div",
618
+ {
619
+ className: "figma-story-header-14131",
620
+ style: {
621
+ display: "flex",
622
+ flexDirection: "row",
623
+ alignItems: "center",
624
+ justifyContent: "space-between",
625
+ flexWrap: "nowrap",
626
+ gap: 24
627
+ }
628
+ },
629
+ /* @__PURE__ */ React.createElement(
630
+ "div",
631
+ {
632
+ className: "figma-story-tabs-wrap-14131",
633
+ style: {
634
+ flexShrink: 0,
635
+ background: FIGMA.gray50,
636
+ border: `1px solid ${FIGMA.gray200}`,
637
+ padding: 6,
638
+ borderRadius: 8,
639
+ display: "inline-flex",
640
+ gap: 8
641
+ }
642
+ },
643
+ /* @__PURE__ */ React.createElement(
644
+ import_antd.Tabs,
645
+ {
646
+ defaultActiveKey: "main",
647
+ size: "middle",
648
+ style: { marginBottom: 0 },
649
+ items: [
650
+ { key: "main", label: "Main Area" },
651
+ { key: "secondary", label: "Secondary Area" },
652
+ { key: "vip", label: "VIP Area" }
653
+ ],
654
+ className: "figma-story-tabs figma-story-tabs-14131"
655
+ }
656
+ )
657
+ ),
658
+ /* @__PURE__ */ React.createElement("div", { className: "figma-story-legend-14131", style: { display: "flex", flexWrap: "wrap", gap: "12px 40px", alignItems: "center", justifyContent: "flex-end", minWidth: 0 } }, /* @__PURE__ */ React.createElement(LegendItem14131, { color: FIGMA.gray200, label: "Available (4)", fill: false }), /* @__PURE__ */ React.createElement(LegendItem14131, { color: FIGMA.legendReserved, label: "Reserved (2)", fill: true }), /* @__PURE__ */ React.createElement(LegendItem14131, { color: FIGMA.legendWaiting, label: "Waiting (3)", fill: true }), /* @__PURE__ */ React.createElement(LegendItem14131, { color: FIGMA.legendDining, label: "Dining (1)", fill: true }), /* @__PURE__ */ React.createElement(LegendItem14131, { color: FIGMA.legendBilled, label: "Billed (2)", fill: true }), /* @__PURE__ */ React.createElement(LegendItem14131, { color: FIGMA.legendAvailableSoon, label: "Available Soon (1)", fill: true }))
659
+ ),
660
+ /* @__PURE__ */ React.createElement(
661
+ "div",
662
+ {
663
+ className: "figma-story-map-wrap",
664
+ style: {
665
+ height: 520,
666
+ background: FIGMA.white,
667
+ border: `4px solid ${FIGMA.gray200}`,
668
+ borderRadius: 8,
669
+ overflow: "hidden",
670
+ boxShadow: FIGMA.shadowSm
671
+ }
672
+ },
673
+ /* @__PURE__ */ React.createElement(
674
+ import_PisellFloorMapLayout.PisellFloorMapLayout,
675
+ {
676
+ className: "figma-story-map",
677
+ items: figma13998PixelItems,
678
+ renderItem: (item) => renderFigmaTableCard(item),
679
+ itemUnit: "pixel",
680
+ cellSize: 64,
681
+ mapLayer: {
682
+ showGrid: false,
683
+ padding: 20
684
+ },
685
+ zoom: { defaultScale: 0.8, min: 0.5, max: 2 },
686
+ pan: { enabled: true },
687
+ controls: { showZoom: true },
688
+ style: { height: "100%" }
689
+ }
690
+ )
691
+ ),
692
+ /* @__PURE__ */ React.createElement("style", null, `
693
+ .figma-story-tabs-wrap-14131 .ant-tabs-nav {
694
+ margin: 0;
695
+ }
696
+ .figma-story-tabs-wrap-14131 .ant-tabs-nav-list {
697
+ gap: 8px;
698
+ }
699
+ .figma-story-tabs.figma-story-tabs-14131 .ant-tabs-tab {
700
+ font-family: ${FIGMA.fontFamily};
701
+ padding: 10px 14px;
702
+ margin: 0;
703
+ font-size: 16px;
704
+ font-weight: 600;
705
+ line-height: 24px;
706
+ color: ${FIGMA.gray500};
707
+ border-radius: 6px;
708
+ }
709
+ .figma-story-tabs.figma-story-tabs-14131 .ant-tabs-tab.ant-tabs-tab-active {
710
+ background: ${FIGMA.white};
711
+ box-shadow: ${FIGMA.shadowSm};
712
+ }
713
+ .figma-story-tabs.figma-story-tabs-14131 .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
714
+ color: ${FIGMA.gray700};
715
+ }
716
+ .figma-story-tabs.figma-story-tabs-14131 .ant-tabs-ink-bar {
717
+ display: none;
718
+ }
719
+ .figma-story-tabs.figma-story-tabs-14131 .ant-tabs-nav::before {
720
+ display: none;
721
+ }
722
+ .figma-story-map-wrap [class*="react-transform-wrapper"],
723
+ .figma-story-map-wrap [class*="react-transform-element"] {
724
+ overflow: visible !important;
725
+ }
726
+ .figma-story-map-wrap .pisell-floor-map-layout {
727
+ overflow: visible !important;
728
+ }
729
+ .figma-table-card,
730
+ .figma-table-card * {
731
+ visibility: visible !important;
732
+ }
733
+ .figma-table-card {
734
+ color: ${FIGMA.gray900};
735
+ }
736
+ .figma-table-card .ant-avatar {
737
+ flex-shrink: 0;
738
+ }
739
+ `)
740
+ );
741
+ }
742
+ };
743
+ // Annotate the CommonJS export names for ESM import in node:
744
+ 0 && (module.exports = {
745
+ ControlsHidden,
746
+ Default,
747
+ FigmaDesign,
748
+ PixelUnits,
749
+ WithEvents,
750
+ WithGrid,
751
+ WithPan,
752
+ WithRefControls,
753
+ WithShapes,
754
+ WithVariableSizes
755
+ });