@pisell/materials 1.0.1063 → 1.0.1065

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 (112) 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 +26 -26
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +26 -26
  11. package/es/components/dataSourceComponents/dataSourceForm/utils.d.ts +1 -1
  12. package/es/components/dataSourceComponents/dataSourceTable/hooks/useTableProps.d.ts +3 -3
  13. package/es/components/dataSourceComponents/fields/RecordListWrapper/index.d.ts +1 -1
  14. package/es/components/dataSourceComponents/fields/Select/index.d.ts +1 -1
  15. package/es/components/dataSourceComponents/fields/Tabs/index.d.ts +1 -1
  16. package/es/components/dataSourceComponents/fields/index.d.ts +6 -6
  17. package/es/components/pisellFloorMapLayout/PisellFloorMapLayout.js +43 -31
  18. package/es/components/pisellFloorMapLayout/components/FloorMapEditPanel.js +60 -16
  19. package/es/components/pisellFloorMapLayout/components/FloorMapEditPanel.less +8 -0
  20. package/es/components/pisellFloorMapLayout/components/FloorMapToolbar.js +22 -12
  21. package/es/components/pisellFloorMapLayout/components/FloorMapToolbar.less +7 -5
  22. package/es/components/pisellFloorMapLayout/components/MapLayer.js +5 -2
  23. package/es/components/pisellFloorMapLayout/components/ViewControls.d.ts +4 -0
  24. package/es/components/pisellFloorMapLayout/components/ViewControls.js +29 -10
  25. package/es/components/pisellFloorMapLayout/components/ViewControls.less +36 -12
  26. package/es/components/pisellFloorMapLayout/components/ViewControlsWithZoom.d.ts +2 -0
  27. package/es/components/pisellFloorMapLayout/components/ViewControlsWithZoom.js +3 -1
  28. package/es/components/pisellFloorMapLayout/context/mergeFloorMapLayoutContext.js +2 -2
  29. package/es/components/pisellFloorMapLayout/hooks/useFloorMapEditState.d.ts +1 -0
  30. package/es/components/pisellFloorMapLayout/hooks/useFloorMapEditState.js +166 -43
  31. package/es/components/pisellFloorMapLayout/hooks/useFloorMapTransformMetrics.d.ts +1 -1
  32. package/es/components/pisellFloorMapLayout/hooks/useFloorMapTransformMetrics.js +90 -13
  33. package/es/components/pisellFloorMapLayout/index.d.ts +2 -0
  34. package/es/components/pisellFloorMapLayout/index.js +2 -0
  35. package/es/components/pisellFloorMapLayout/locales.d.ts +6 -0
  36. package/es/components/pisellFloorMapLayout/locales.js +9 -3
  37. package/es/components/pisellFloorMapLayout/types.d.ts +9 -2
  38. package/es/components/pisellFloorMapLayout/utils/floorMapDropUtils.d.ts +1 -0
  39. package/es/components/pisellFloorMapLayout/utils/floorMapDropUtils.js +10 -1
  40. package/es/components/pisellFloorMapLayout/utils/floorMapElementKindUtils.d.ts +11 -0
  41. package/es/components/pisellFloorMapLayout/utils/floorMapElementKindUtils.js +86 -0
  42. package/es/components/pisellFloorMapLayout/utils/floorMapFallbackRender.js +3 -2
  43. package/es/components/pisellRecordBoard/PisellRecordBoard.js +6 -3
  44. package/es/components/pisellRecordBoard/index.d.ts +1 -0
  45. package/es/components/pisellRecordBoard/index.js +2 -1
  46. package/es/components/pisellRecordBoard/shellFrame/ToolBar/index.d.ts +1 -0
  47. package/es/components/pisellRecordBoard/shellFrame/ToolBar/index.js +21 -10
  48. package/es/components/pisellRecordBoard/shellFrame/ToolBar/recordBoardToolbar.less +23 -0
  49. package/es/components/pisellRecordBoard/shellFrame/index.d.ts +2 -0
  50. package/es/components/pisellRecordBoard/shellFrame/index.js +9 -3
  51. package/es/components/pisellRecordBoard/shellFrame/shellFrameFloorMap.less +25 -0
  52. package/es/components/pisellRecordBoard/types.d.ts +6 -0
  53. package/es/components/pisellReservationScheduleBand/PisellReservationScheduleBand.js +4 -1
  54. package/es/components/pisellReservationScheduleBand/PisellReservationScheduleBand.less +18 -1
  55. package/es/components/pisellReservationScheduleBand/types.d.ts +4 -0
  56. package/es/components/pisellTimeNavigator/PisellTimeNavigator.js +180 -22
  57. package/es/components/pisellTimeNavigator/PisellTimeNavigator.less +11 -0
  58. package/es/components/pisellTimeNavigator/components/CursorLayer.js +4 -4
  59. package/es/components/pisellTimeNavigator/components/ScaleLayer.js +3 -3
  60. package/es/components/pisellTimeNavigator/types.d.ts +11 -0
  61. package/es/hooks/useResponsive.d.ts +1 -1
  62. package/es/index.d.ts +2 -2
  63. package/es/index.js +2 -2
  64. package/lib/components/pisellFloorMapLayout/PisellFloorMapLayout.js +39 -36
  65. package/lib/components/pisellFloorMapLayout/components/FloorMapEditPanel.js +56 -12
  66. package/lib/components/pisellFloorMapLayout/components/FloorMapEditPanel.less +8 -0
  67. package/lib/components/pisellFloorMapLayout/components/FloorMapToolbar.js +19 -10
  68. package/lib/components/pisellFloorMapLayout/components/FloorMapToolbar.less +7 -5
  69. package/lib/components/pisellFloorMapLayout/components/MapLayer.js +3 -1
  70. package/lib/components/pisellFloorMapLayout/components/ViewControls.d.ts +4 -0
  71. package/lib/components/pisellFloorMapLayout/components/ViewControls.js +28 -6
  72. package/lib/components/pisellFloorMapLayout/components/ViewControls.less +36 -12
  73. package/lib/components/pisellFloorMapLayout/components/ViewControlsWithZoom.d.ts +2 -0
  74. package/lib/components/pisellFloorMapLayout/components/ViewControlsWithZoom.js +3 -1
  75. package/lib/components/pisellFloorMapLayout/hooks/useFloorMapEditState.d.ts +1 -0
  76. package/lib/components/pisellFloorMapLayout/hooks/useFloorMapEditState.js +143 -29
  77. package/lib/components/pisellFloorMapLayout/hooks/useFloorMapTransformMetrics.d.ts +1 -1
  78. package/lib/components/pisellFloorMapLayout/hooks/useFloorMapTransformMetrics.js +86 -13
  79. package/lib/components/pisellFloorMapLayout/index.d.ts +2 -0
  80. package/lib/components/pisellFloorMapLayout/index.js +6 -0
  81. package/lib/components/pisellFloorMapLayout/locales.d.ts +6 -0
  82. package/lib/components/pisellFloorMapLayout/locales.js +9 -3
  83. package/lib/components/pisellFloorMapLayout/types.d.ts +9 -2
  84. package/lib/components/pisellFloorMapLayout/utils/floorMapDropUtils.d.ts +1 -0
  85. package/lib/components/pisellFloorMapLayout/utils/floorMapDropUtils.js +7 -1
  86. package/lib/components/pisellFloorMapLayout/utils/floorMapElementKindUtils.d.ts +11 -0
  87. package/lib/components/pisellFloorMapLayout/utils/floorMapElementKindUtils.js +69 -0
  88. package/lib/components/pisellFloorMapLayout/utils/floorMapFallbackRender.js +2 -1
  89. package/lib/components/pisellRecordBoard/PisellRecordBoard.js +5 -1
  90. package/lib/components/pisellRecordBoard/index.d.ts +1 -0
  91. package/lib/components/pisellRecordBoard/index.js +5 -2
  92. package/lib/components/pisellRecordBoard/shellFrame/ToolBar/index.d.ts +1 -0
  93. package/lib/components/pisellRecordBoard/shellFrame/ToolBar/index.js +13 -5
  94. package/lib/components/pisellRecordBoard/shellFrame/ToolBar/recordBoardToolbar.less +23 -0
  95. package/lib/components/pisellRecordBoard/shellFrame/index.d.ts +2 -0
  96. package/lib/components/pisellRecordBoard/shellFrame/index.js +11 -4
  97. package/lib/components/pisellRecordBoard/shellFrame/shellFrameFloorMap.less +25 -0
  98. package/lib/components/pisellRecordBoard/types.d.ts +6 -0
  99. package/lib/components/pisellReservationScheduleBand/PisellReservationScheduleBand.js +2 -1
  100. package/lib/components/pisellReservationScheduleBand/PisellReservationScheduleBand.less +18 -1
  101. package/lib/components/pisellReservationScheduleBand/types.d.ts +4 -0
  102. package/lib/components/pisellTimeNavigator/PisellTimeNavigator.js +177 -12
  103. package/lib/components/pisellTimeNavigator/PisellTimeNavigator.less +11 -0
  104. package/lib/components/pisellTimeNavigator/types.d.ts +11 -0
  105. package/lib/index.d.ts +2 -2
  106. package/lib/index.js +10 -0
  107. package/lowcode/floor-map-image-element/meta.ts +113 -0
  108. package/lowcode/floor-map-layout-provider/meta.ts +1 -1
  109. package/lowcode/pisell-floor-map-layout/meta.ts +37 -1
  110. package/lowcode/render-figma-style-round-table-card/meta.ts +1 -1
  111. package/lowcode/render-figma-style-table-card/meta.ts +1 -1
  112. package/package.json +3 -3
@@ -21,9 +21,17 @@ var floorMapElementKindUtils_exports = {};
21
21
  __export(floorMapElementKindUtils_exports, {
22
22
  getElementKindConfig: () => getElementKindConfig,
23
23
  getSceneElementRenderIssue: () => getSceneElementRenderIssue,
24
+ getSwappableElementKindsInSameCategory: () => getSwappableElementKindsInSameCategory,
25
+ isFloorMapImageElementKind: () => isFloorMapImageElementKind,
26
+ patchSceneElementForKindSwitch: () => patchSceneElementForKindSwitch,
24
27
  resolveDataBindingPolicy: () => resolveDataBindingPolicy
25
28
  });
26
29
  module.exports = __toCommonJS(floorMapElementKindUtils_exports);
30
+ var import_types = require("../types");
31
+ var import_floorMapStageDefaults = require("./floorMapStageDefaults");
32
+ function isFloorMapImageElementKind(kind) {
33
+ return kind === import_types.FLOOR_MAP_IMAGE_ELEMENT_KIND;
34
+ }
27
35
  function resolveDataBindingPolicy(kind) {
28
36
  return (kind == null ? void 0 : kind.dataBindingPolicy) ?? "none";
29
37
  }
@@ -32,6 +40,64 @@ function getElementKindConfig(config, elementKind) {
32
40
  if (!elementKind || !((_a = config == null ? void 0 : config.elementKinds) == null ? void 0 : _a.length)) return void 0;
33
41
  return config.elementKinds.find((k) => k.value === elementKind);
34
42
  }
43
+ function getSwappableElementKindsInSameCategory(config, elementKind) {
44
+ var _a, _b;
45
+ if (!elementKind || !((_a = config.elementKinds) == null ? void 0 : _a.length)) return [];
46
+ const rawCats = config.elementKindCategories ?? [];
47
+ const sorted = [...rawCats].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
48
+ const fallbackId = ((_b = sorted[0]) == null ? void 0 : _b.id) ?? "_uncat";
49
+ const self = config.elementKinds.find((k) => k.value === elementKind);
50
+ if (!self) return [];
51
+ const cid = self.categoryId ?? fallbackId;
52
+ return config.elementKinds.filter((k) => {
53
+ if (k.showInPalette === false) return false;
54
+ if (k.value === import_types.FLOOR_MAP_STAGE_ELEMENT_KIND) return false;
55
+ if (k.value === import_types.FLOOR_MAP_IMAGE_ELEMENT_KIND) return false;
56
+ return (k.categoryId ?? fallbackId) === cid;
57
+ });
58
+ }
59
+ var DEFAULT_PLACE_W = 180;
60
+ var DEFAULT_PLACE_H = 120;
61
+ var IMAGE_PLACE_W = 400;
62
+ var IMAGE_PLACE_H = 240;
63
+ var DECO_SIZE = 48;
64
+ function patchSceneElementForKindSwitch(config, element, nextKindValue) {
65
+ var _a, _b;
66
+ const nextCfg = getElementKindConfig(config, nextKindValue);
67
+ const nextPol = resolveDataBindingPolicy(nextCfg);
68
+ const binding = element.dataBinding;
69
+ const isNextImage = isFloorMapImageElementKind(nextKindValue);
70
+ const isNextStage = nextKindValue === import_types.FLOOR_MAP_STAGE_ELEMENT_KIND;
71
+ let clearBinding = false;
72
+ if (nextPol === "none") {
73
+ clearBinding = true;
74
+ } else if (binding && ((_a = nextCfg == null ? void 0 : nextCfg.allowedDataSourceKeys) == null ? void 0 : _a.length)) {
75
+ if (!nextCfg.allowedDataSourceKeys.includes(binding.dataSourceKey)) {
76
+ clearBinding = true;
77
+ }
78
+ }
79
+ const nextW = isNextImage ? IMAGE_PLACE_W : isNextStage ? import_floorMapStageDefaults.STAGE_DECO_DEFAULT.width : DEFAULT_PLACE_W;
80
+ const nextH = isNextImage ? IMAGE_PLACE_H : isNextStage ? import_floorMapStageDefaults.STAGE_DECO_DEFAULT.height : DEFAULT_PLACE_H;
81
+ const useDecoSize = nextPol === "none" && nextKindValue !== import_types.FLOOR_MAP_STAGE_ELEMENT_KIND && !isNextImage;
82
+ const width = useDecoSize ? Math.max(element.width ?? DECO_SIZE, DECO_SIZE) : Math.max(element.width ?? nextW, nextW);
83
+ const height = useDecoSize ? Math.max(element.height ?? DECO_SIZE, DECO_SIZE) : Math.max(element.height ?? nextH, nextH);
84
+ const patch = {
85
+ elementKind: nextKindValue,
86
+ shape: isNextStage || isNextImage ? "rect" : nextCfg == null ? void 0 : nextCfg.defaultShape,
87
+ width,
88
+ height,
89
+ name: ((_b = nextCfg == null ? void 0 : nextCfg.defaultPresentation) == null ? void 0 : _b.title) != null && String(nextCfg.defaultPresentation.title).trim() !== "" ? String(nextCfg.defaultPresentation.title) : element.name
90
+ };
91
+ if (clearBinding) {
92
+ patch.dataBinding = void 0;
93
+ }
94
+ if (isNextImage) {
95
+ patch.imageUrl = element.imageUrl ?? "";
96
+ } else {
97
+ patch.imageUrl = void 0;
98
+ }
99
+ return patch;
100
+ }
35
101
  function getSceneElementRenderIssue(element, kind, dataSources) {
36
102
  const policy = resolveDataBindingPolicy(kind);
37
103
  const binding = element.dataBinding;
@@ -66,5 +132,8 @@ function getSceneElementRenderIssue(element, kind, dataSources) {
66
132
  0 && (module.exports = {
67
133
  getElementKindConfig,
68
134
  getSceneElementRenderIssue,
135
+ getSwappableElementKindsInSameCategory,
136
+ isFloorMapImageElementKind,
137
+ patchSceneElementForKindSwitch,
69
138
  resolveDataBindingPolicy
70
139
  });
@@ -35,6 +35,7 @@ __export(floorMapFallbackRender_exports, {
35
35
  module.exports = __toCommonJS(floorMapFallbackRender_exports);
36
36
  var import_react = __toESM(require("react"));
37
37
  var import_types = require("../types");
38
+ var import_floorMapElementKindUtils = require("./floorMapElementKindUtils");
38
39
  var import_FloorMapImageElement = require("../components/FloorMapImageElement");
39
40
  var import_floorMapStageDefaults = require("./floorMapStageDefaults");
40
41
  function renderFloorMapRenderError(message) {
@@ -67,7 +68,7 @@ function renderFloorMapFallbackPlaceholder(item) {
67
68
  const isStage = kind === import_types.FLOOR_MAP_STAGE_ELEMENT_KIND;
68
69
  const nameText = (item == null ? void 0 : item.name) != null ? String(item.name).trim() : "";
69
70
  const fallbackLabel = nameText || kind;
70
- if (kind === import_types.FLOOR_MAP_IMAGE_ELEMENT_KIND) {
71
+ if ((0, import_floorMapElementKindUtils.isFloorMapImageElementKind)(kind)) {
71
72
  const url = (_a = item._sceneElement) == null ? void 0 : _a.imageUrl;
72
73
  return /* @__PURE__ */ import_react.default.createElement(
73
74
  import_FloorMapImageElement.FloorMapImageElement,
@@ -92,6 +92,7 @@ function getDefaultRecordBoardContext(layoutType, selection, rowKey) {
92
92
  floorMapLayoutContext: void 0,
93
93
  defaultBodyView: void 0,
94
94
  floorMapLayoutRef: void 0,
95
+ floorMapFooter: void 0,
95
96
  dataSources: void 0,
96
97
  gridDataSourceKey: void 0
97
98
  };
@@ -116,6 +117,7 @@ var PisellRecordBoard = (props) => {
116
117
  defaultBodyView,
117
118
  bodyViewStorageKey,
118
119
  floorMapLayoutRef,
120
+ floorMapFooter,
119
121
  className: classNameProp,
120
122
  style: styleProp,
121
123
  ...rest
@@ -285,7 +287,8 @@ var PisellRecordBoard = (props) => {
285
287
  floorMapProps: floorMapProp,
286
288
  floorMapLayoutContext: floorMapLayoutContextProp,
287
289
  defaultBodyView,
288
- floorMapLayoutRef
290
+ floorMapLayoutRef,
291
+ floorMapFooter
289
292
  };
290
293
  }, [
291
294
  layoutType,
@@ -315,6 +318,7 @@ var PisellRecordBoard = (props) => {
315
318
  floorMapLayoutContextProp,
316
319
  defaultBodyView,
317
320
  floorMapLayoutRef,
321
+ floorMapFooter,
318
322
  bodyView,
319
323
  setBodyView
320
324
  ]);
@@ -38,3 +38,4 @@ declare const PisellRecordBoard: PisellRecordBoardType;
38
38
  export default PisellRecordBoard;
39
39
  export type { RecordBoardProps, RecordBoardLayoutType, RecordBoardContextValue, RecordBoardChildComponentProps, RecordBoardGridProps, RecordBoardColumnType, RecordBoardFieldType, RecordBoardColumnFilterConfig, RecordBoardOptionItem, RecordBoardGetOptions, RecordBoardBodyView, RecordBoardFloorMapProps, RecordBoardToolBarProps, } from './types';
40
40
  export { useRecordBoardContext } from './hooks/useRecordBoardContext';
41
+ export { useRecordBoardShellBodyMeta } from './shellFrame';
@@ -30,7 +30,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  var pisellRecordBoard_exports = {};
31
31
  __export(pisellRecordBoard_exports, {
32
32
  default: () => pisellRecordBoard_default,
33
- useRecordBoardContext: () => import_useRecordBoardContext2.useRecordBoardContext
33
+ useRecordBoardContext: () => import_useRecordBoardContext2.useRecordBoardContext,
34
+ useRecordBoardShellBodyMeta: () => import_shellFrame2.useRecordBoardShellBodyMeta
34
35
  });
35
36
  module.exports = __toCommonJS(pisellRecordBoard_exports);
36
37
  var import_PisellRecordBoard = __toESM(require("./PisellRecordBoard"));
@@ -41,6 +42,7 @@ var import_Grid = __toESM(require("./layouts/GridLayout/Grid"));
41
42
  var import_CardList = __toESM(require("./layouts/CardLayout/CardList"));
42
43
  var import_useRecordBoardContext = require("./hooks/useRecordBoardContext");
43
44
  var import_useRecordBoardContext2 = require("./hooks/useRecordBoardContext");
45
+ var import_shellFrame2 = require("./shellFrame");
44
46
  var PisellRecordBoard = import_PisellRecordBoard.default;
45
47
  PisellRecordBoard.ShellFrame = import_shellFrame.default;
46
48
  PisellRecordBoard.GridLayout = import_GridLayout.default;
@@ -56,5 +58,6 @@ PisellRecordBoard.useRecordBoardContext = import_useRecordBoardContext.useRecord
56
58
  var pisellRecordBoard_default = PisellRecordBoard;
57
59
  // Annotate the CommonJS export names for ESM import in node:
58
60
  0 && (module.exports = {
59
- useRecordBoardContext
61
+ useRecordBoardContext,
62
+ useRecordBoardShellBodyMeta
60
63
  });
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import type { RecordBoardToolBarProps as ToolBarPropsType } from '../../types';
3
3
  import './ToolBarFilter.less';
4
+ import './recordBoardToolbar.less';
4
5
  /**
5
6
  * RecordBoard 下的工具栏:使用 PisellToolBar。
6
7
  * 左侧默认 PisellFind(inline);右侧默认 PisellFilter。通过 childComponentProps.toolBar.search / toolBar.filter 为对象时透传对应组件 props,为 false 时不渲染。
@@ -33,6 +33,7 @@ __export(ToolBar_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(ToolBar_exports);
35
35
  var import_react = __toESM(require("react"));
36
+ var import_classnames = __toESM(require("classnames"));
36
37
  var import_antd = require("antd");
37
38
  var import_SwitchVertical01 = __toESM(require("@pisell/icon/es/SwitchVertical01"));
38
39
  var import_ToolBar = __toESM(require("../../../pisellGridPro/ToolBar"));
@@ -47,6 +48,7 @@ var import_useRecordBoardContext = require("../../hooks/useRecordBoardContext");
47
48
  var import_utils = require("@pisell/utils");
48
49
  var import_locales = require("../../../../locales");
49
50
  var import_ToolBarFilter = require("./ToolBarFilter.less");
51
+ var import_recordBoardToolbar = require("./recordBoardToolbar.less");
50
52
  var import_recordBoardColumns = require("../../utils/recordBoardColumns");
51
53
  function getSortButtonText() {
52
54
  const key = "pisell2.recordBoard.toolbar.sort";
@@ -155,7 +157,9 @@ var RecordBoardToolBar = (props) => {
155
157
  style: { marginRight: 8 }
156
158
  }
157
159
  ) : null;
158
- const topLeft = /* @__PURE__ */ import_react.default.createElement("div", { className: "record-board-toolbar-top-left" }, bodyViewToggle, quickFilterNode, searchNode ? /* @__PURE__ */ import_react.default.createElement("div", { className: "record-board-toolbar-find-wrap" }, searchNode) : null, slots.topLeft);
160
+ const compactFloorMapToolbar = bodyView === "floorMap" && showTableFloorToggle;
161
+ const hideBodyViewToggleInToolbarRow = showTableFloorToggle && Boolean(slots.tabs) && bodyView === "floorMap";
162
+ const topLeft = compactFloorMapToolbar ? null : /* @__PURE__ */ import_react.default.createElement("div", { className: "record-board-toolbar-top-left" }, !hideBodyViewToggleInToolbarRow ? bodyViewToggle : null, quickFilterNode, searchNode ? /* @__PURE__ */ import_react.default.createElement("div", { className: "record-board-toolbar-find-wrap" }, searchNode) : null, slots.topLeft);
159
163
  const sortConfig = slots.sort;
160
164
  const hideSort = sortConfig === false;
161
165
  const sortValue = searchParams == null ? void 0 : searchParams[SORT_PARAMS_FIELD];
@@ -273,17 +277,21 @@ var RecordBoardToolBar = (props) => {
273
277
  }
274
278
  );
275
279
  const showColumnSetting = slots.columnSetting !== false && Array.isArray(gridColumns) && gridColumns.length > 0;
276
- const topRight = /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, showColumnSetting ? /* @__PURE__ */ import_react.default.createElement(import_ColumnSetting.default, null) : null, sortNode, filterNode, /* @__PURE__ */ import_react.default.createElement(import_ToolBarReset.default, { size: "large" }), slots.topRight);
280
+ const topRight = compactFloorMapToolbar ? null : /* @__PURE__ */ import_react.default.createElement(import_antd.Space, null, showColumnSetting ? /* @__PURE__ */ import_react.default.createElement(import_ColumnSetting.default, null) : null, sortNode, filterNode, /* @__PURE__ */ import_react.default.createElement(import_ToolBarReset.default, { size: "large" }), slots.topRight);
277
281
  return /* @__PURE__ */ import_react.default.createElement(
278
282
  import_ToolBar.default,
279
283
  {
280
- className: slots.className,
284
+ className: (0, import_classnames.default)(
285
+ bodyView === "floorMap" && "pisell-record-board-toolbar--floor-map",
286
+ bodyView === "grid" && "pisell-record-board-toolbar--grid",
287
+ slots.className
288
+ ),
281
289
  style: slots.style,
282
290
  tabs: slots.tabs,
283
291
  topLeft,
284
292
  topRight,
285
- bottomLeft: slots.bottomLeft,
286
- bottomRight: slots.bottomRight
293
+ bottomLeft: compactFloorMapToolbar ? null : slots.bottomLeft,
294
+ bottomRight: compactFloorMapToolbar ? null : slots.bottomRight
287
295
  }
288
296
  );
289
297
  };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 平面视图:工具栏常仅一行(ScheduleBand),去掉 GridPro 默认底内边距。
3
+ * 不用仅依赖 #body:Story/本地预览可能没有 id=body,低代码若再包一层 #body 会导致双前缀失效。
4
+ * !important:确保晚于 @pisellGridPro/ToolBar 中单类 .pisell-grid-pro-toolbar 的 padding-bottom。
5
+ */
6
+ .pisell-grid-pro-toolbar.pisell-record-board-toolbar--floor-map {
7
+ padding-bottom: 0 !important;
8
+ }
9
+
10
+ #body .pisell-grid-pro-toolbar.pisell-record-board-toolbar--floor-map {
11
+ padding-bottom: 0 !important;
12
+ }
13
+
14
+ /* 表格态工具栏与内容对齐:左右留白 16;平面图态不加此内边距 */
15
+ .pisell-grid-pro-toolbar.pisell-record-board-toolbar--grid {
16
+ padding-left: 16px;
17
+ padding-right: 16px;
18
+ }
19
+
20
+ #body .pisell-grid-pro-toolbar.pisell-record-board-toolbar--grid {
21
+ padding-left: 16px;
22
+ padding-right: 16px;
23
+ }
@@ -3,6 +3,7 @@ import RecordBoardToolBar from './ToolBar';
3
3
  import RecordBoardBatchActionBar from './BatchActionBar';
4
4
  import RecordBoardPagination from './Pagination';
5
5
  import RecordBoardSearch from './Search';
6
+ import './shellFrameFloorMap.less';
6
7
  import ToolBarReset from './ToolBarReset';
7
8
  import ToolBarQuickFilter from './ToolBarQuickFilter';
8
9
  import RecordBoardFloorMap from './FloorMap';
@@ -18,3 +19,4 @@ declare const RecordBoardShellFrame: React.FC<{
18
19
  }>;
19
20
  export default RecordBoardShellFrame;
20
21
  export { RecordBoardToolBar, RecordBoardBatchActionBar, RecordBoardPagination, RecordBoardSearch, ToolBarReset, ToolBarQuickFilter, RecordBoardFloorMap };
22
+ export { useRecordBoardShellBodyMeta } from './ShellBodyMetaContext';
@@ -36,7 +36,8 @@ __export(shellFrame_exports, {
36
36
  RecordBoardToolBar: () => import_ToolBar.default,
37
37
  ToolBarQuickFilter: () => import_ToolBarQuickFilter.default,
38
38
  ToolBarReset: () => import_ToolBarReset.default,
39
- default: () => shellFrame_default
39
+ default: () => shellFrame_default,
40
+ useRecordBoardShellBodyMeta: () => import_ShellBodyMetaContext2.useRecordBoardShellBodyMeta
40
41
  });
41
42
  module.exports = __toCommonJS(shellFrame_exports);
42
43
  var import_react = __toESM(require("react"));
@@ -48,10 +49,12 @@ var import_ToolBar = __toESM(require("./ToolBar"));
48
49
  var import_BatchActionBar = __toESM(require("./BatchActionBar"));
49
50
  var import_Pagination = __toESM(require("./Pagination"));
50
51
  var import_Search = __toESM(require("./Search"));
52
+ var import_shellFrameFloorMap = require("./shellFrameFloorMap.less");
51
53
  var import_ToolBarReset = __toESM(require("./ToolBarReset"));
52
54
  var import_ToolBarQuickFilter = __toESM(require("./ToolBarQuickFilter"));
53
55
  var import_FloorMap = __toESM(require("./FloorMap"));
54
56
  var import_ShellBodyMetaContext = require("./ShellBodyMetaContext");
57
+ var import_ShellBodyMetaContext2 = require("./ShellBodyMetaContext");
55
58
  var FILL_HEIGHT_SCROLL_STYLE = {
56
59
  flex: 1,
57
60
  minHeight: 0,
@@ -152,12 +155,14 @@ var RecordBoardShellFrame = ({ children, className, style }) => {
152
155
  const floorMapNode = effectiveFloorMapProps && !showGrid ? /* @__PURE__ */ import_react.default.createElement(
153
156
  "div",
154
157
  {
158
+ className: "pisell-record-board-floor-map-viewport",
155
159
  style: {
156
160
  flex: 1,
157
161
  minHeight: 0,
158
162
  display: "flex",
159
163
  flexDirection: "column",
160
- overflow: "hidden"
164
+ overflow: "hidden",
165
+ position: "relative"
161
166
  }
162
167
  },
163
168
  /* @__PURE__ */ import_react.default.createElement(import_pisellFloorMapLayout.FloorMapLayoutProvider, { value: floorMapLayoutProviderValue }, /* @__PURE__ */ import_react.default.createElement(
@@ -174,7 +179,8 @@ var RecordBoardShellFrame = ({ children, className, style }) => {
174
179
  ...effectiveFloorMapProps.style ?? {}
175
180
  }
176
181
  }
177
- ))
182
+ )),
183
+ ctx.floorMapFooter ? /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-record-board-floor-map-floating-slot" }, ctx.floorMapFooter) : null
178
184
  ) : null;
179
185
  const bodyContent = fillHeight ? /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, showGrid ? /* @__PURE__ */ import_react.default.createElement(
180
186
  ScrollAreaMeasurer,
@@ -215,5 +221,6 @@ var shellFrame_default = RecordBoardShellFrame;
215
221
  RecordBoardSearch,
216
222
  RecordBoardToolBar,
217
223
  ToolBarQuickFilter,
218
- ToolBarReset
224
+ ToolBarReset,
225
+ useRecordBoardShellBodyMeta
219
226
  });
@@ -0,0 +1,25 @@
1
+ /** 平面图区域:画布 + 悬浮层共用,便于底部按钮叠在画布上 */
2
+ .pisell-record-board-floor-map-viewport {
3
+ box-sizing: border-box;
4
+ }
5
+
6
+ /**
7
+ * 画布内底部居中悬浮插槽(如「编辑平面图」)。
8
+ * 容器不接收指针事件,避免挡画布拖拽/缩放;子节点恢复可点。
9
+ */
10
+ .pisell-record-board-floor-map-floating-slot {
11
+ position: absolute;
12
+ left: 0;
13
+ right: 0;
14
+ bottom: 20px;
15
+ display: flex;
16
+ justify-content: center;
17
+ align-items: center;
18
+ pointer-events: none;
19
+ /* 高于 PisellFloorMapLayout 内 ViewControls(20),避免与左下角控件叠次序模糊 */
20
+ z-index: 25;
21
+
22
+ > * {
23
+ pointer-events: auto;
24
+ }
25
+ }
@@ -204,6 +204,10 @@ export interface RecordBoardContextValue {
204
204
  defaultBodyView?: RecordBoardBodyView;
205
205
  /** 挂到 ShellFrame 内 PisellFloorMapLayout,供外部 imperative 调用(如 saveLayout / fitBounds) */
206
206
  floorMapLayoutRef?: Ref<PisellFloorMapLayoutRef | null>;
207
+ /**
208
+ * 平面图视图下叠在画布内的底部居中悬浮区(如「编辑平面图」),不单独占一行 footer。
209
+ */
210
+ floorMapFooter?: ReactNode;
207
211
  }
208
212
  /**
209
213
  * 各 layout 下子组件的可选透传配置(类似 ChildComponentProps)
@@ -370,6 +374,8 @@ export interface RecordBoardProps {
370
374
  bodyViewStorageKey?: string;
371
375
  /** 平面图 Layout 实例 ref,由 ShellFrame 注入 */
372
376
  floorMapLayoutRef?: Ref<PisellFloorMapLayoutRef | null>;
377
+ /** 平面图画布内底部悬浮插槽(如编辑入口),注入 Context 供 ShellFrame 渲染 */
378
+ floorMapFooter?: ReactNode;
373
379
  /** 其他 */
374
380
  [key: string]: any;
375
381
  }
@@ -53,6 +53,7 @@ function PisellReservationScheduleBand(props) {
53
53
  timeNavigatorProps,
54
54
  scheduleStartSlot,
55
55
  scheduleEndSlot,
56
+ scheduleAfterDateSlot,
56
57
  className,
57
58
  style
58
59
  } = props;
@@ -108,7 +109,7 @@ function PisellReservationScheduleBand(props) {
108
109
  onChange: handleDateChange,
109
110
  ...scheduleProps
110
111
  }
111
- )), /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-reservation-schedule-band-slot-end" }, scheduleEndSlot)),
112
+ ), scheduleAfterDateSlot ? /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-reservation-schedule-band-after-date" }, scheduleAfterDateSlot) : null), /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-reservation-schedule-band-slot-end" }, scheduleEndSlot)),
112
113
  /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-reservation-schedule-band-navigator" }, /* @__PURE__ */ import_react.default.createElement(
113
114
  import_pisellTimeNavigator.PisellTimeNavigator,
114
115
  {
@@ -3,7 +3,7 @@
3
3
  flex-direction: column;
4
4
  align-items: stretch;
5
5
  width: 100%;
6
- gap: 12px;
6
+ gap: 0;
7
7
  box-sizing: border-box;
8
8
  }
9
9
 
@@ -40,7 +40,24 @@
40
40
  justify-self: center;
41
41
  min-width: 0;
42
42
  display: flex;
43
+ flex-direction: row;
44
+ flex-wrap: nowrap;
45
+ align-items: center;
43
46
  justify-content: center;
47
+ gap: 8px;
48
+ }
49
+
50
+ /** 日程组件根节点默认 width:100%,在中间栏会与「日期右侧」插槽分两行;此处收窄为内容宽,保证与 after-date 同一行 */
51
+ .pisell-reservation-schedule-band-schedule > .pisell-reservation-schedule {
52
+ width: auto;
53
+ flex: 0 0 auto;
54
+ min-width: 0;
55
+ }
56
+
57
+ .pisell-reservation-schedule-band-after-date {
58
+ display: flex;
59
+ align-items: center;
60
+ flex-shrink: 0;
44
61
  }
45
62
 
46
63
  .pisell-reservation-schedule-band-navigator {
@@ -40,6 +40,10 @@ export interface PisellReservationScheduleBandProps {
40
40
  * 顶栏日程行:PisellReservationSchedule 右侧自定义内容(如状态、主按钮)
41
41
  */
42
42
  scheduleEndSlot?: ReactNode;
43
+ /**
44
+ * 顶栏日程行:紧挨在选日组件之后(如「跟随当前」),与中间列同一 flex 区
45
+ */
46
+ scheduleAfterDateSlot?: ReactNode;
43
47
  className?: string;
44
48
  style?: CSSProperties;
45
49
  }