@pisell/materials 6.11.39 → 6.11.41

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 (184) 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 +1 -1
  6. package/build/lowcode/preview.js +8 -8
  7. package/build/lowcode/render/default/view.css +1 -1
  8. package/build/lowcode/render/default/view.js +16 -16
  9. package/build/lowcode/view.css +1 -1
  10. package/build/lowcode/view.js +16 -16
  11. package/es/components/PisellBasicGrid/PisellBasicGrid.d.ts +0 -1
  12. package/es/components/PisellCards/components/GraphicTextCard/GraphicTextCard.d.ts +0 -1
  13. package/es/components/PisellCards/components/MultilevelCard/hooks/useMultilevelCardExpand.d.ts +0 -1
  14. package/es/components/PisellCards/components/PisellImageCard/hooks/useImageLoad.d.ts +0 -1
  15. package/es/components/PisellCards/components/TabCard/TabCard.d.ts +0 -1
  16. package/es/components/PisellCards/components/TextCard/TextCard.d.ts +0 -1
  17. package/es/components/PisellCards/index.d.ts +0 -1
  18. package/es/components/cardPro/index.d.ts +0 -1
  19. package/es/components/colorPicker/index.d.ts +1 -0
  20. package/es/components/dataSourceComponents/dataSourceForm/utils.d.ts +1 -1
  21. package/es/components/dataSourceComponents/dataSourceTable/hooks/useTableProps.d.ts +3 -3
  22. package/es/components/dataSourceComponents/fields/Input.Subdomain/index.d.ts +1 -1
  23. package/es/components/dataSourceComponents/fields/RecordListWrapper/index.d.ts +1 -1
  24. package/es/components/dataSourceComponents/fields/Select/index.d.ts +1 -1
  25. package/es/components/dataSourceComponents/fields/Tabs/index.d.ts +1 -1
  26. package/es/components/dataSourceComponents/fields/Upload/utils.d.ts +1 -1
  27. package/es/components/dataSourceComponents/fields/index.d.ts +16 -16
  28. package/es/components/drag-sort-tree/TreeItem/index.d.ts +0 -1
  29. package/es/components/filter/components/items/index.d.ts +1 -0
  30. package/es/components/filter/components/items/text/Editor/index.d.ts +1 -0
  31. package/es/components/filter/components/items/text/Preview/index.d.ts +1 -0
  32. package/es/components/filter/components/items/text/index.d.ts +1 -0
  33. package/es/components/page/index.d.ts +0 -1
  34. package/es/components/pisellAdjustPrice/index.d.ts +0 -1
  35. package/es/components/pisellDatePicker/datePickerCpt.d.ts +0 -1
  36. package/es/components/pisellGridPro/GridView/index.d.ts +0 -1
  37. package/es/components/pisellGridPro/components/DataCard/index.d.ts +0 -1
  38. package/es/components/pisellInput/components/BankCard/index.d.ts +0 -1
  39. package/es/components/pisellInput/components/Copy/index.d.ts +0 -1
  40. package/es/components/pisellInput/components/SecurityCode/index.d.ts +0 -1
  41. package/es/components/pisellInput/index.d.ts +0 -1
  42. package/es/components/pisellRecordBoard/shellFrame/Calendar/utils/BookingCalendarStyle.d.ts +1 -1
  43. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/PisellRecordBoardResourceWallView.js +29 -7
  44. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.d.ts +3 -2
  45. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.js +169 -329
  46. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.less +335 -0
  47. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallCardPresentation.d.ts +35 -19
  48. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallCardPresentation.js +159 -79
  49. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.d.ts +1 -0
  50. package/es/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.js +7 -6
  51. package/es/components/pisellRecordBoard/types.d.ts +7 -0
  52. package/es/components/pisellSort/index.d.ts +0 -1
  53. package/es/components/pisellTooltip/index.d.ts +0 -1
  54. package/es/components/productCard/cartSkuCard/components/AmountFooter/index.d.ts +0 -1
  55. package/es/components/productCard/cartSkuCard/components/Gift/index.d.ts +0 -1
  56. package/es/components/productCard/cartSkuCard/components/MultiDay/index.d.ts +0 -1
  57. package/es/components/productCard/cartSkuCard/components/Note/index.d.ts +0 -1
  58. package/es/components/productCard/cartSkuCard/components/Promotion/index.d.ts +0 -1
  59. package/es/components/productCard/cartSkuCard/components/discountReason/index.d.ts +0 -1
  60. package/es/components/productCard/cartSkuCard/components/holders/index.d.ts +0 -1
  61. package/es/components/productCard/cartSkuCard/components/packages/index.d.ts +0 -1
  62. package/es/components/productCard/cartSkuCard/components/resources/index.d.ts +0 -1
  63. package/es/components/productCard/cartSkuCard/components/sales/index.d.ts +0 -1
  64. package/es/components/productCard/cartSkuCard/components/specs/index.d.ts +0 -1
  65. package/es/components/productCard/cartSkuCard/components/timeRange/index.d.ts +0 -1
  66. package/es/components/productCard/cartSkuCard/index.d.ts +0 -1
  67. package/es/components/productCard/components/Action/index.d.ts +0 -1
  68. package/es/components/productCard/components/Header/EditButton/index.d.ts +0 -1
  69. package/es/components/productCard/components/Header/index.d.ts +0 -1
  70. package/es/components/productCard/components/Sales/index.d.ts +0 -1
  71. package/es/components/productCard/components/Time/components/SelectHolder/index.d.ts +0 -1
  72. package/es/components/productCard/components/Time/components/SelectHolderModal/index.d.ts +0 -1
  73. package/es/components/productCard/components/Time/components/SelectHolderMultiple/index.d.ts +0 -1
  74. package/es/components/select-time/index.d.ts +0 -1
  75. package/es/components/table/Actions/component/ViewMode/index.d.ts +0 -1
  76. package/es/components/table/Table/SelectField/index.d.ts +1 -0
  77. package/es/components/table/Table/fields/index.d.ts +2 -2
  78. package/es/components/table/Table/fields/oldRangePicker/Show/index.d.ts +0 -1
  79. package/es/components/table/Table/fields/rangePicker/Show/index.d.ts +0 -1
  80. package/es/components/table/Table/fields/select/Show/index.d.ts +0 -1
  81. package/es/components/table/Table/fields/treeSelect/Show/index.d.ts +0 -1
  82. package/es/components/table/Table/tableConfig/summary/index.d.ts +1 -0
  83. package/es/components/table/Table/utils.d.ts +1 -1
  84. package/es/components/virtual-keyboard/Amount/index.d.ts +0 -1
  85. package/es/components/virtual-keyboard/Number/index.d.ts +0 -1
  86. package/es/hooks/useResponsive.d.ts +1 -1
  87. package/es/locales/en-US.d.ts +9 -0
  88. package/es/locales/en-US.js +12 -3
  89. package/es/locales/ja.d.ts +9 -0
  90. package/es/locales/ja.js +11 -2
  91. package/es/locales/pt.d.ts +9 -0
  92. package/es/locales/pt.js +11 -2
  93. package/es/locales/zh-CN.d.ts +9 -0
  94. package/es/locales/zh-CN.js +11 -2
  95. package/es/locales/zh-TW.d.ts +9 -0
  96. package/es/locales/zh-TW.js +11 -2
  97. package/lib/components/PisellBasicGrid/PisellBasicGrid.d.ts +0 -1
  98. package/lib/components/PisellCards/components/GraphicTextCard/GraphicTextCard.d.ts +0 -1
  99. package/lib/components/PisellCards/components/MultilevelCard/hooks/useMultilevelCardExpand.d.ts +0 -1
  100. package/lib/components/PisellCards/components/PisellImageCard/hooks/useImageLoad.d.ts +0 -1
  101. package/lib/components/PisellCards/components/TabCard/TabCard.d.ts +0 -1
  102. package/lib/components/PisellCards/components/TextCard/TextCard.d.ts +0 -1
  103. package/lib/components/PisellCards/index.d.ts +0 -1
  104. package/lib/components/cardPro/index.d.ts +0 -1
  105. package/lib/components/colorPicker/index.d.ts +1 -0
  106. package/lib/components/dataSourceComponents/dataSourceForm/utils.d.ts +1 -1
  107. package/lib/components/dataSourceComponents/dataSourceTable/hooks/useTableProps.d.ts +3 -3
  108. package/lib/components/dataSourceComponents/fields/Input.Subdomain/index.d.ts +1 -1
  109. package/lib/components/dataSourceComponents/fields/RecordListWrapper/index.d.ts +1 -1
  110. package/lib/components/dataSourceComponents/fields/Select/index.d.ts +1 -1
  111. package/lib/components/dataSourceComponents/fields/Tabs/index.d.ts +1 -1
  112. package/lib/components/dataSourceComponents/fields/Upload/utils.d.ts +1 -1
  113. package/lib/components/dataSourceComponents/fields/index.d.ts +16 -16
  114. package/lib/components/drag-sort-tree/TreeItem/index.d.ts +0 -1
  115. package/lib/components/filter/components/items/index.d.ts +1 -0
  116. package/lib/components/filter/components/items/text/Editor/index.d.ts +1 -0
  117. package/lib/components/filter/components/items/text/Preview/index.d.ts +1 -0
  118. package/lib/components/filter/components/items/text/index.d.ts +1 -0
  119. package/lib/components/page/index.d.ts +0 -1
  120. package/lib/components/pisellAdjustPrice/index.d.ts +0 -1
  121. package/lib/components/pisellDatePicker/datePickerCpt.d.ts +0 -1
  122. package/lib/components/pisellGridPro/GridView/index.d.ts +0 -1
  123. package/lib/components/pisellGridPro/components/DataCard/index.d.ts +0 -1
  124. package/lib/components/pisellInput/components/BankCard/index.d.ts +0 -1
  125. package/lib/components/pisellInput/components/Copy/index.d.ts +0 -1
  126. package/lib/components/pisellInput/components/SecurityCode/index.d.ts +0 -1
  127. package/lib/components/pisellInput/index.d.ts +0 -1
  128. package/lib/components/pisellRecordBoard/shellFrame/Calendar/utils/BookingCalendarStyle.d.ts +1 -1
  129. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/PisellRecordBoardResourceWallView.js +31 -3
  130. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.d.ts +3 -2
  131. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.js +186 -437
  132. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/VenueWallCard.less +335 -0
  133. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallCardPresentation.d.ts +35 -19
  134. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallCardPresentation.js +134 -80
  135. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.d.ts +1 -0
  136. package/lib/components/pisellRecordBoard/shellFrame/ResourceWall/venueWallUtils.js +8 -5
  137. package/lib/components/pisellRecordBoard/types.d.ts +7 -0
  138. package/lib/components/pisellSort/index.d.ts +0 -1
  139. package/lib/components/pisellTooltip/index.d.ts +0 -1
  140. package/lib/components/productCard/cartSkuCard/components/AmountFooter/index.d.ts +0 -1
  141. package/lib/components/productCard/cartSkuCard/components/Gift/index.d.ts +0 -1
  142. package/lib/components/productCard/cartSkuCard/components/MultiDay/index.d.ts +0 -1
  143. package/lib/components/productCard/cartSkuCard/components/Note/index.d.ts +0 -1
  144. package/lib/components/productCard/cartSkuCard/components/Promotion/index.d.ts +0 -1
  145. package/lib/components/productCard/cartSkuCard/components/discountReason/index.d.ts +0 -1
  146. package/lib/components/productCard/cartSkuCard/components/holders/index.d.ts +0 -1
  147. package/lib/components/productCard/cartSkuCard/components/packages/index.d.ts +0 -1
  148. package/lib/components/productCard/cartSkuCard/components/resources/index.d.ts +0 -1
  149. package/lib/components/productCard/cartSkuCard/components/sales/index.d.ts +0 -1
  150. package/lib/components/productCard/cartSkuCard/components/specs/index.d.ts +0 -1
  151. package/lib/components/productCard/cartSkuCard/components/timeRange/index.d.ts +0 -1
  152. package/lib/components/productCard/cartSkuCard/index.d.ts +0 -1
  153. package/lib/components/productCard/components/Action/index.d.ts +0 -1
  154. package/lib/components/productCard/components/Header/EditButton/index.d.ts +0 -1
  155. package/lib/components/productCard/components/Header/index.d.ts +0 -1
  156. package/lib/components/productCard/components/Sales/index.d.ts +0 -1
  157. package/lib/components/productCard/components/Time/components/SelectHolder/index.d.ts +0 -1
  158. package/lib/components/productCard/components/Time/components/SelectHolderModal/index.d.ts +0 -1
  159. package/lib/components/productCard/components/Time/components/SelectHolderMultiple/index.d.ts +0 -1
  160. package/lib/components/select-time/index.d.ts +0 -1
  161. package/lib/components/table/Actions/component/ViewMode/index.d.ts +0 -1
  162. package/lib/components/table/Table/SelectField/index.d.ts +1 -0
  163. package/lib/components/table/Table/fields/index.d.ts +2 -2
  164. package/lib/components/table/Table/fields/oldRangePicker/Show/index.d.ts +0 -1
  165. package/lib/components/table/Table/fields/rangePicker/Show/index.d.ts +0 -1
  166. package/lib/components/table/Table/fields/select/Show/index.d.ts +0 -1
  167. package/lib/components/table/Table/fields/treeSelect/Show/index.d.ts +0 -1
  168. package/lib/components/table/Table/tableConfig/summary/index.d.ts +1 -0
  169. package/lib/components/table/Table/utils.d.ts +1 -1
  170. package/lib/components/virtual-keyboard/Amount/index.d.ts +0 -1
  171. package/lib/components/virtual-keyboard/Number/index.d.ts +0 -1
  172. package/lib/hooks/useResponsive.d.ts +1 -1
  173. package/lib/locales/en-US.d.ts +9 -0
  174. package/lib/locales/en-US.js +12 -3
  175. package/lib/locales/ja.d.ts +9 -0
  176. package/lib/locales/ja.js +11 -2
  177. package/lib/locales/pt.d.ts +9 -0
  178. package/lib/locales/pt.js +11 -2
  179. package/lib/locales/zh-CN.d.ts +9 -0
  180. package/lib/locales/zh-CN.js +11 -2
  181. package/lib/locales/zh-TW.d.ts +9 -0
  182. package/lib/locales/zh-TW.js +11 -2
  183. package/lowcode/pisell-record-board-calendar-view/meta.ts +170 -3
  184. package/package.json +3 -3
@@ -38,6 +38,7 @@ var import_NoteTicker = require("./NoteTicker");
38
38
  var import_resourceWallConstants = require("./resourceWallConstants");
39
39
  var import_venueWallCardPresentation = require("./venueWallCardPresentation");
40
40
  var import_venueWallUtils = require("./venueWallUtils");
41
+ var import_VenueWallCard = require("./VenueWallCard.less");
41
42
  function useDriftMinutesFromEpoch(value, resourceId, now, allowNegative = false) {
42
43
  const [epoch, setEpoch] = (0, import_react.useState)(() => ({
43
44
  min: value ?? 0,
@@ -46,10 +47,14 @@ function useDriftMinutesFromEpoch(value, resourceId, now, allowNegative = false)
46
47
  (0, import_react.useEffect)(() => {
47
48
  setEpoch({ min: value ?? 0, at: Date.now() });
48
49
  }, [resourceId, value]);
49
- const drifted = epoch.min - Math.floor((now - epoch.at) / 6e4);
50
- return allowNegative ? drifted : Math.max(0, drifted);
50
+ const elapsedMs = now - epoch.at;
51
+ const precise = epoch.min - elapsedMs / 6e4;
52
+ const drifted = epoch.min - Math.floor(elapsedMs / 6e4);
53
+ const whole = allowNegative ? drifted : Math.max(0, drifted);
54
+ const preciseClamped = allowNegative ? precise : Math.max(0, precise);
55
+ return { whole, precise: preciseClamped };
51
56
  }
52
- function useDriftUpMinutesFromEpoch(value, resourceId, now) {
57
+ function useDriftAccumulatedMinutesFromEpoch(value, resourceId, now) {
53
58
  const [epoch, setEpoch] = (0, import_react.useState)(() => ({
54
59
  min: value ?? 0,
55
60
  at: Date.now()
@@ -57,52 +62,54 @@ function useDriftUpMinutesFromEpoch(value, resourceId, now) {
57
62
  (0, import_react.useEffect)(() => {
58
63
  setEpoch({ min: value ?? 0, at: Date.now() });
59
64
  }, [resourceId, value]);
60
- return Math.max(0, epoch.min + Math.floor((now - epoch.at) / 6e4));
65
+ return epoch.min + Math.floor((now - epoch.at) / 6e4);
66
+ }
67
+ var NEXT_LIST_PLACEHOLDER_VALUES = /* @__PURE__ */ new Set([
68
+ "",
69
+ "-",
70
+ "–",
71
+ "—",
72
+ "―",
73
+ "—",
74
+ "–"
75
+ ]);
76
+ function nextListFieldIsMeaningful(raw) {
77
+ const s = String(raw ?? "").trim();
78
+ if (!s) return false;
79
+ return !NEXT_LIST_PLACEHOLDER_VALUES.has(s);
61
80
  }
62
81
  var DEFAULT_OCCUPIED = "#6f4ae6";
63
- var DEFAULT_AVAILABLE = "#10b981";
82
+ var DEFAULT_AVAILABLE = "#94a3b8";
64
83
  function VenueWallCardInner({
65
84
  card,
66
85
  wallNowMs,
67
86
  boardingSoonBeforeMin = 10,
68
87
  occupiedCardColor = DEFAULT_OCCUPIED,
69
88
  availableCardColor = DEFAULT_AVAILABLE,
70
- heroMaxWidthRatio = 0.6,
71
89
  statusToneMap: statusToneMapProp,
72
90
  appearance = "light"
73
91
  }) {
74
- var _a, _b;
92
+ var _a;
75
93
  const toneMap = statusToneMapProp ?? (0, import_venueWallUtils.getVenueWallStatusToneMap)();
76
94
  const isDark = appearance === "dark";
77
95
  const idleMain = isDark ? "#e2e8f0" : "#0f172a";
78
96
  const idleSub = isDark ? "#94a3b8" : "#94a3b8";
79
- const cardRef = (0, import_react.useRef)(null);
80
- const [cardSize, setCardSize] = (0, import_react.useState)({ width: 420, height: 300 });
81
- (0, import_react.useEffect)(() => {
82
- if (!cardRef.current) return;
83
- const node = cardRef.current;
84
- const updateSize = () => {
85
- const rect = node.getBoundingClientRect();
86
- setCardSize({ width: rect.width, height: rect.height });
87
- };
88
- updateSize();
89
- const observer = new ResizeObserver(updateSize);
90
- observer.observe(node);
91
- return () => observer.disconnect();
92
- }, []);
93
- const liveRemainingMin = useDriftMinutesFromEpoch(
97
+ const {
98
+ whole: liveRemainingMin,
99
+ precise: liveRemainingPreciseMin
100
+ } = useDriftMinutesFromEpoch(
94
101
  card.remainingMin,
95
102
  card.resourceId,
96
103
  wallNowMs,
97
104
  true
98
105
  );
99
- const liveStartsInMin = useDriftMinutesFromEpoch(
106
+ const { whole: liveStartsInMin } = useDriftMinutesFromEpoch(
100
107
  card.startsInMin,
101
108
  card.resourceId,
102
109
  wallNowMs,
103
110
  false
104
111
  );
105
- const liveLateMin = useDriftUpMinutesFromEpoch(
112
+ const liveLateMin = useDriftAccumulatedMinutesFromEpoch(
106
113
  card.lateMin,
107
114
  card.resourceId,
108
115
  wallNowMs
@@ -111,7 +118,9 @@ function VenueWallCardInner({
111
118
  () => (0, import_venueWallCardPresentation.buildVenueWallCardPresentation)({
112
119
  card,
113
120
  toneMap,
121
+ wallNowMs,
114
122
  liveRemainingMin,
123
+ liveRemainingPreciseMin,
115
124
  liveStartsInMin,
116
125
  liveLateMin,
117
126
  boardingSoonBeforeMin,
@@ -123,7 +132,9 @@ function VenueWallCardInner({
123
132
  [
124
133
  card,
125
134
  toneMap,
135
+ wallNowMs,
126
136
  liveRemainingMin,
137
+ liveRemainingPreciseMin,
127
138
  liveStartsInMin,
128
139
  liveLateMin,
129
140
  boardingSoonBeforeMin,
@@ -134,492 +145,230 @@ function VenueWallCardInner({
134
145
  ]
135
146
  );
136
147
  const {
137
- statusKey,
138
- isOccupied,
139
- heroText,
140
- heroColor,
141
- noteText,
142
- noteTextColor,
143
- noteBg,
144
- subColor,
148
+ floorLikeStatus,
149
+ headerStatusKey,
150
+ headerStatusLabel,
151
+ headerStatusColor,
152
+ cardVariant,
145
153
  mainColor,
146
- currentLabel,
147
- currentTime,
148
- currentName,
149
- currentNameColor,
150
- nextNameColor,
154
+ subColor,
155
+ surfaceAccentColor,
156
+ primaryEmphasisLine,
157
+ primaryEmphasisColor,
158
+ timeRangeLine,
159
+ contactLine,
160
+ showProgress,
151
161
  progress,
152
162
  progressColor,
153
- rightTag,
154
- rightTagColor,
155
- rightTagBg,
156
- rightTagBorder,
157
- surfaceAccentColor
163
+ showEndingSoonMarquee,
164
+ marqueeText,
165
+ marqueeColor,
166
+ marqueeShellBackground
158
167
  } = presentation;
159
168
  const nextItem = (_a = card.nextList) == null ? void 0 : _a[0];
160
- const nextCountLabel = nextItem ? `1/${((_b = card.nextList) == null ? void 0 : _b.length) ?? 0}` : "";
161
- const cardBg = isOccupied ? `linear-gradient(180deg, ${(0, import_venueWallUtils.alphaColor)(occupiedCardColor, 0.96)} 0%, ${(0, import_venueWallUtils.alphaColor)(occupiedCardColor, 0.88)} 100%)` : (0, import_venueWallUtils.alphaColor)(
162
- surfaceAccentColor,
163
- statusKey === "boardingSoon" || statusKey === "late" ? 0.06 : 0.03
164
- );
165
- const cardBorder = isOccupied ? (0, import_venueWallUtils.alphaColor)(occupiedCardColor, 0.5) : (0, import_venueWallUtils.alphaColor)(surfaceAccentColor, 0.18);
166
- const moduleBorder = isOccupied ? "rgba(255,255,255,0.10)" : (0, import_venueWallUtils.alphaColor)(surfaceAccentColor, 0.2);
167
- const totalUnits = 1.5 + 4 + 2 + 1 + 0.4 * 2 + 0.2 * 3;
168
- const heightUnit = Math.max(4, cardSize.height / totalUnits);
169
- const widthScale = (0, import_venueWallUtils.clamp)(cardSize.width / 420, 0.42, 1.6);
170
- const heightScale = (0, import_venueWallUtils.clamp)(cardSize.height / 300, 0.42, 1.8);
171
- const fitScale = Math.min(widthScale, heightScale);
172
- const unit = heightUnit;
173
- const shellPad = unit * 0.4;
174
- const sectionGap = unit * 0.2;
175
- const blockPad = Math.max(unit * 0.2, Math.min(unit * 0.3, 20));
176
- const cardRadius = (0, import_venueWallUtils.clamp)(unit * 0.62 * fitScale, 4, 28);
177
- const blockRadius = (0, import_venueWallUtils.clamp)(unit * 0.48 * fitScale, 3, 24);
178
- const noteRadius = (0, import_venueWallUtils.clamp)(unit * 0.4 * fitScale, 3, 20);
179
- const tagRadius = (0, import_venueWallUtils.clamp)(unit * 0.34 * fitScale, 3, 999);
180
- const headerHeight = unit * 1.5;
181
- const currentHeight = unit * 4;
182
- const nextHeight = unit * 2;
183
- const noteHeight = unit * 1;
184
- const areaSize = (0, import_venueWallUtils.clamp)(headerHeight * 0.18 * fitScale, 9, 18);
185
- const resourceSize = (0, import_venueWallUtils.clamp)(headerHeight * 0.34 * fitScale, 16, 42);
186
- const tagSize = (0, import_venueWallUtils.clamp)(headerHeight * 0.12 * fitScale, 10, 14);
187
- const tagHeight = (0, import_venueWallUtils.clamp)(headerHeight * 0.42, 28, 36);
188
- const currentMetaSize = (0, import_venueWallUtils.clamp)(currentHeight * 0.09 * fitScale, 9, 16);
189
- const currentNameSize = (0, import_venueWallUtils.clamp)(currentHeight * 0.15 * fitScale, 12, 30);
190
- const heroTextMaxWidth = Math.max(
191
- 80,
192
- (cardSize.width - shellPad * 2 - blockPad * 2) * heroMaxWidthRatio
169
+ const nextTimeMeaningful = nextItem ? nextListFieldIsMeaningful(nextItem.time) : false;
170
+ const nextContactMeaningful = nextItem ? nextListFieldIsMeaningful(nextItem.booking) : false;
171
+ const hasNextWallSection = Boolean(
172
+ nextItem && (nextTimeMeaningful || nextContactMeaningful)
193
173
  );
194
- const heroMaxByName = currentNameSize * 2.5;
195
- const heroApproxFactor = Math.max(heroText.length * 0.58, 1);
196
- const heroFitByWidth = heroTextMaxWidth / heroApproxFactor;
197
- const heroSize = (0, import_venueWallUtils.clamp)(
198
- Math.min(heroFitByWidth, heroMaxByName),
199
- 18,
200
- heroMaxByName
174
+ const nextTimeSoloLarge = nextTimeMeaningful && !nextContactMeaningful;
175
+ const cardBg = cardVariant === "occupied" ? `linear-gradient(180deg, ${(0, import_venueWallUtils.alphaColor)(occupiedCardColor, 0.96)} 0%, ${(0, import_venueWallUtils.alphaColor)(occupiedCardColor, 0.88)} 100%)` : (0, import_venueWallUtils.alphaColor)(
176
+ surfaceAccentColor,
177
+ floorLikeStatus === "reserved" ? 0.06 : 0.03
201
178
  );
202
- const nextNameSize = (0, import_venueWallUtils.clamp)(nextHeight * 0.24 * fitScale, 12, 30);
203
- const nextMetaSize = (0, import_venueWallUtils.clamp)(
204
- currentMetaSize,
205
- 9,
206
- Math.max(10, nextNameSize * 0.68)
179
+ const cardBorder = cardVariant === "occupied" ? (0, import_venueWallUtils.alphaColor)(occupiedCardColor, 0.5) : (0, import_venueWallUtils.alphaColor)(surfaceAccentColor, 0.18);
180
+ const moduleBorder = cardVariant === "occupied" ? "rgba(255,255,255,0.10)" : (0, import_venueWallUtils.alphaColor)(surfaceAccentColor, 0.2);
181
+ const currentPanelBg = cardVariant === "occupied" ? "rgba(255,255,255,0.16)" : (0, import_venueWallUtils.alphaColor)(
182
+ surfaceAccentColor,
183
+ floorLikeStatus === "reserved" ? 0.18 : 0.2
207
184
  );
208
- const nextBlockPad = Math.max(unit * 0.16, Math.min(unit * 0.24, 16));
209
- const noteSize = (0, import_venueWallUtils.clamp)(noteHeight * 0.28 * fitScale, 10, 18);
210
- const tagFont = Math.max(8, tagSize * 0.68);
211
- const gridTemplateRows = `${headerHeight}px minmax(${Math.max(
212
- 120,
213
- currentHeight
214
- )}px, 4fr) minmax(${Math.max(72, nextHeight)}px, 2fr) ${noteHeight}px`;
185
+ const currentSectionInk = cardVariant === "occupied" ? "#ffffff" : floorLikeStatus === "reserved" ? (0, import_venueWallUtils.alphaColor)(idleMain, 0.78) : subColor;
186
+ const nextPanelBg = cardVariant === "occupied" ? "rgba(255,255,255,0.04)" : (0, import_venueWallUtils.alphaColor)(surfaceAccentColor, floorLikeStatus === "reserved" ? 0.1 : 0.08);
187
+ const nextSectionInk = cardVariant === "occupied" ? subColor : floorLikeStatus === "reserved" ? (0, import_venueWallUtils.alphaColor)(idleMain, 0.78) : subColor;
188
+ const resourceTitleLabel = String(card.resource ?? "").trim();
189
+ const resourceTypeLabel = String(card.area ?? "").trim();
190
+ const headerStatusClass = `pisell-resource-wall-card__header-status--${headerStatusKey}`;
191
+ const headerStatusStyle = (() => {
192
+ if (headerStatusKey === "empty") {
193
+ return { color: headerStatusColor };
194
+ }
195
+ if (headerStatusKey === "reserved" || headerStatusKey === "late") {
196
+ return { color: headerStatusColor };
197
+ }
198
+ if (headerStatusKey === "expired") {
199
+ return { color: "#ffffff", background: headerStatusColor };
200
+ }
201
+ return { color: "#ffffff" };
202
+ })();
215
203
  return /* @__PURE__ */ import_react.default.createElement(
216
204
  "div",
217
205
  {
218
- ref: cardRef,
219
206
  className: "pisell-resource-wall-card",
220
207
  style: {
221
- position: "relative",
222
- height: "100%",
223
- overflow: "hidden",
224
- display: "flex",
225
- flexDirection: "column",
226
- borderRadius: cardRadius,
227
208
  background: cardBg,
228
- borderWidth: 1,
229
- borderStyle: "solid",
230
209
  borderColor: cardBorder,
231
210
  boxShadow: isDark ? "0 18px 48px rgba(0,0,0,0.35)" : "0 18px 48px rgba(15,23,42,0.06)"
232
211
  }
233
212
  },
234
- /* @__PURE__ */ import_react.default.createElement(
213
+ /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-resource-wall-card__scale-root" }, /* @__PURE__ */ import_react.default.createElement(
235
214
  "div",
236
215
  {
237
- style: {
238
- flex: 1,
239
- display: "grid",
240
- minHeight: 0,
241
- height: "100%",
242
- padding: shellPad,
243
- gap: sectionGap,
244
- gridTemplateRows
245
- }
216
+ className: `pisell-resource-wall-card__grid ${hasNextWallSection ? "pisell-resource-wall-card__grid--with-next" : "pisell-resource-wall-card__grid--no-next"}`
246
217
  },
247
- /* @__PURE__ */ import_react.default.createElement(
218
+ /* @__PURE__ */ import_react.default.createElement("header", { className: "pisell-resource-wall-card__header" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-resource-wall-card__header-main" }, resourceTypeLabel ? /* @__PURE__ */ import_react.default.createElement(
219
+ "div",
220
+ {
221
+ className: "pisell-resource-wall-card__tier2 pisell-resource-wall-card__header-type",
222
+ style: { color: subColor }
223
+ },
224
+ resourceTypeLabel
225
+ ) : null, /* @__PURE__ */ import_react.default.createElement(
226
+ "div",
227
+ {
228
+ className: "pisell-resource-wall-card__header-name",
229
+ style: { color: mainColor }
230
+ },
231
+ resourceTitleLabel || " "
232
+ )), /* @__PURE__ */ import_react.default.createElement(
248
233
  "div",
249
234
  {
235
+ className: `pisell-resource-wall-card__header-status ${headerStatusClass}`,
236
+ style: headerStatusStyle
237
+ },
238
+ headerStatusLabel
239
+ )),
240
+ /* @__PURE__ */ import_react.default.createElement(
241
+ "section",
242
+ {
243
+ className: `pisell-resource-wall-card__panel${cardVariant === "occupied" ? " pisell-resource-wall-card__panel--occupied-current" : floorLikeStatus === "reserved" ? " pisell-resource-wall-card__panel--reserved-current" : ""}`,
250
244
  style: {
251
- display: "grid",
252
- minHeight: 0,
253
- gridTemplateRows: "1fr 2fr",
254
- rowGap: sectionGap
245
+ borderColor: cardVariant === "occupied" ? "rgba(255,255,255,0.28)" : moduleBorder,
246
+ background: currentPanelBg,
247
+ minHeight: 0
255
248
  }
256
249
  },
257
250
  /* @__PURE__ */ import_react.default.createElement(
258
251
  "div",
259
252
  {
260
- style: {
261
- textTransform: "uppercase",
262
- letterSpacing: "0.24em",
263
- fontSize: areaSize,
264
- color: subColor,
265
- overflow: "hidden",
266
- textOverflow: "ellipsis",
267
- whiteSpace: "nowrap",
268
- display: "flex",
269
- alignItems: "center"
270
- }
253
+ className: `pisell-resource-wall-card__section-title${cardVariant === "occupied" ? " pisell-resource-wall-card__section-title--occupied-current" : floorLikeStatus === "reserved" ? " pisell-resource-wall-card__section-title--reserved-current" : ""}`,
254
+ style: { color: currentSectionInk }
271
255
  },
272
- card.area
256
+ (0, import_locales.getText)("pisell-resource-wall-card-label-current")
273
257
  ),
274
- /* @__PURE__ */ import_react.default.createElement(
258
+ /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-resource-wall-card__current-body" }, /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-resource-wall-card__current-main" }, timeRangeLine ? /* @__PURE__ */ import_react.default.createElement(
275
259
  "div",
276
260
  {
277
- style: {
278
- display: "grid",
279
- alignItems: "center",
280
- minHeight: 0,
281
- gridTemplateColumns: "1fr auto",
282
- columnGap: 8
283
- }
261
+ className: "pisell-resource-wall-card__tier2",
262
+ style: { color: currentSectionInk }
284
263
  },
285
- /* @__PURE__ */ import_react.default.createElement(
286
- "div",
287
- {
288
- style: {
289
- fontWeight: 700,
290
- overflow: "hidden",
291
- textOverflow: "ellipsis",
292
- whiteSpace: "nowrap",
293
- minWidth: 0,
294
- fontSize: resourceSize,
295
- lineHeight: 0.96,
296
- color: mainColor
297
- }
298
- },
299
- card.resource
300
- ),
301
- /* @__PURE__ */ import_react.default.createElement(
302
- "div",
303
- {
304
- style: {
305
- display: "flex",
306
- alignItems: "center",
307
- gap: 8,
308
- flexShrink: 0
309
- }
310
- },
311
- /* @__PURE__ */ import_react.default.createElement(
312
- "div",
313
- {
314
- style: {
315
- borderWidth: 1,
316
- borderStyle: "solid",
317
- fontWeight: 600,
318
- display: "flex",
319
- alignItems: "center",
320
- justifyContent: "center",
321
- flexShrink: 0,
322
- fontSize: tagSize,
323
- lineHeight: 1,
324
- minHeight: tagHeight,
325
- borderRadius: tagRadius,
326
- padding: `0 ${Math.max(8, tagFont)}px`,
327
- color: rightTagColor,
328
- borderColor: rightTagBorder,
329
- background: rightTagBg
330
- }
331
- },
332
- rightTag
333
- )
334
- )
335
- )
336
- ),
337
- /* @__PURE__ */ import_react.default.createElement(
338
- "div",
339
- {
340
- style: {
341
- borderWidth: 1,
342
- borderStyle: "solid",
343
- position: "relative",
344
- minHeight: 0,
345
- borderRadius: blockRadius,
346
- borderColor: moduleBorder,
347
- background: isOccupied ? "rgba(255,255,255,0.10)" : (0, import_venueWallUtils.alphaColor)(
348
- surfaceAccentColor,
349
- statusKey === "boardingSoon" ? 0.18 : 0.2
350
- ),
351
- padding: blockPad
352
- }
353
- },
354
- /* @__PURE__ */ import_react.default.createElement(
264
+ timeRangeLine
265
+ ) : null, contactLine ? /* @__PURE__ */ import_react.default.createElement(
266
+ "div",
267
+ {
268
+ className: "pisell-resource-wall-card__tier2",
269
+ style: { color: currentSectionInk }
270
+ },
271
+ contactLine
272
+ ) : null), primaryEmphasisLine || showProgress || showEndingSoonMarquee && marqueeText || floorLikeStatus === "empty" ? /* @__PURE__ */ import_react.default.createElement("div", { className: "pisell-resource-wall-card__current-footer" }, floorLikeStatus === "empty" ? /* @__PURE__ */ import_react.default.createElement(
273
+ "div",
274
+ {
275
+ className: "pisell-resource-wall-card__current-footer-emphasis pisell-resource-wall-card__tier2",
276
+ style: { color: currentSectionInk }
277
+ },
278
+ (0, import_locales.getText)("pisell-resource-wall-card-current-not-in-use")
279
+ ) : null, primaryEmphasisLine ? /* @__PURE__ */ import_react.default.createElement(
280
+ "div",
281
+ {
282
+ className: "pisell-resource-wall-card__current-footer-emphasis pisell-resource-wall-card__tier1",
283
+ style: { color: primaryEmphasisColor }
284
+ },
285
+ primaryEmphasisLine
286
+ ) : null, showProgress ? /* @__PURE__ */ import_react.default.createElement(
355
287
  "div",
356
288
  {
289
+ className: "pisell-resource-wall-card__progress-wrap",
357
290
  style: {
358
- height: "100%",
359
- display: "grid",
360
- minHeight: 0,
361
- gridTemplateRows: "1.4fr 2.6fr auto",
362
- rowGap: sectionGap
291
+ background: cardVariant === "occupied" ? "rgba(255,255,255,0.14)" : "rgba(148,163,184,0.18)"
363
292
  }
364
293
  },
365
294
  /* @__PURE__ */ import_react.default.createElement(
366
295
  "div",
367
296
  {
297
+ className: "pisell-resource-wall-card__progress-fill",
368
298
  style: {
369
- display: "grid",
370
- minHeight: 0,
371
- gridTemplateColumns: "1fr auto",
372
- columnGap: 8,
373
- alignItems: "start"
374
- }
375
- },
376
- /* @__PURE__ */ import_react.default.createElement("div", { style: { minWidth: 0 } }, /* @__PURE__ */ import_react.default.createElement(
377
- "div",
378
- {
379
- style: {
380
- textTransform: "uppercase",
381
- letterSpacing: "0.22em",
382
- lineHeight: 1,
383
- fontSize: currentMetaSize,
384
- color: subColor
385
- }
386
- },
387
- currentLabel
388
- ), /* @__PURE__ */ import_react.default.createElement(
389
- "div",
390
- {
391
- style: {
392
- lineHeight: 1,
393
- marginTop: "0.2em",
394
- fontSize: currentMetaSize,
395
- color: subColor
396
- }
397
- },
398
- currentTime || " "
399
- )),
400
- /* @__PURE__ */ import_react.default.createElement(
401
- "div",
402
- {
403
- style: {
404
- fontWeight: 600,
405
- textAlign: "right",
406
- overflow: "hidden",
407
- textOverflow: "ellipsis",
408
- whiteSpace: "nowrap",
409
- minWidth: 0,
410
- alignSelf: "start",
411
- fontSize: currentNameSize,
412
- lineHeight: 1.08,
413
- color: currentNameColor,
414
- maxWidth: cardSize.width * 0.42,
415
- paddingTop: "0.04em",
416
- paddingBottom: "0.08em"
417
- }
418
- },
419
- currentName
420
- )
421
- ),
422
- /* @__PURE__ */ import_react.default.createElement(
423
- "div",
424
- {
425
- style: {
426
- display: "flex",
427
- alignItems: "flex-end",
428
- minHeight: 0,
429
- overflow: "hidden"
430
- }
431
- },
432
- /* @__PURE__ */ import_react.default.createElement(
433
- "div",
434
- {
435
- style: {
436
- fontWeight: 600,
437
- letterSpacing: "-0.02em",
438
- whiteSpace: "nowrap",
439
- fontSize: heroSize,
440
- lineHeight: 1.08,
441
- color: heroColor,
442
- maxWidth: heroTextMaxWidth
443
- }
444
- },
445
- heroText
446
- )
447
- ),
448
- statusKey === "boardingSoon" || isOccupied ? /* @__PURE__ */ import_react.default.createElement(
449
- "div",
450
- {
451
- style: {
452
- borderRadius: 9999,
453
- overflow: "hidden",
454
- height: Math.max(5, unit * 0.08),
455
- background: isOccupied ? "rgba(255,255,255,0.14)" : "rgba(148,163,184,0.18)"
456
- }
457
- },
458
- /* @__PURE__ */ import_react.default.createElement(
459
- "div",
460
- {
461
- style: {
462
- height: "100%",
463
- borderRadius: 9999,
464
- width: `${progress}%`,
465
- background: progressColor
466
- }
299
+ width: `${progress}%`,
300
+ background: progressColor
467
301
  }
468
- )
469
- ) : null
470
- )
471
- ),
472
- /* @__PURE__ */ import_react.default.createElement(
473
- "div",
474
- {
475
- style: {
476
- borderWidth: 1,
477
- borderStyle: "solid",
478
- minHeight: 0,
479
- borderRadius: blockRadius,
480
- borderColor: moduleBorder,
481
- background: isOccupied ? "rgba(255,255,255,0.04)" : (0, import_venueWallUtils.alphaColor)(
482
- surfaceAccentColor,
483
- statusKey === "boardingSoon" ? 0.1 : 0.08
484
- ),
485
- padding: nextBlockPad
486
- }
487
- },
488
- /* @__PURE__ */ import_react.default.createElement(
302
+ }
303
+ )
304
+ ) : null, showEndingSoonMarquee && marqueeText ? /* @__PURE__ */ import_react.default.createElement(
489
305
  "div",
490
306
  {
307
+ className: "pisell-resource-wall-card__marquee-shell",
491
308
  style: {
492
- height: "100%",
493
- minHeight: 0,
494
- display: "grid",
495
- gridTemplateRows: "1fr 2fr",
496
- rowGap: sectionGap
309
+ background: marqueeShellBackground
497
310
  }
498
311
  },
499
312
  /* @__PURE__ */ import_react.default.createElement(
500
313
  "div",
501
314
  {
502
- style: {
503
- display: "flex",
504
- alignItems: "flex-start",
505
- justifyContent: "space-between",
506
- gap: 8,
507
- minHeight: 0
508
- }
315
+ className: "pisell-resource-wall-card__tier3",
316
+ style: { color: marqueeColor }
509
317
  },
510
318
  /* @__PURE__ */ import_react.default.createElement(
511
- "div",
512
- {
513
- style: {
514
- textTransform: "uppercase",
515
- letterSpacing: "0.12em",
516
- lineHeight: 1,
517
- overflow: "hidden",
518
- textOverflow: "ellipsis",
519
- whiteSpace: "nowrap",
520
- fontSize: nextMetaSize,
521
- color: subColor
522
- }
523
- },
524
- (nextItem == null ? void 0 : nextItem.time) ? (0, import_locales.getText)("pisell-resource-wall-card-next-line").replace(
525
- "{time}",
526
- nextItem.time
527
- ) : (0, import_locales.getText)("pisell-resource-wall-card-label-next")
528
- ),
529
- /* @__PURE__ */ import_react.default.createElement(
530
- "div",
319
+ import_NoteTicker.NoteTicker,
531
320
  {
532
- style: {
533
- fontWeight: 600,
534
- flexShrink: 0,
535
- fontSize: nextMetaSize,
536
- color: subColor,
537
- lineHeight: 1
538
- }
539
- },
540
- nextCountLabel
541
- )
542
- ),
543
- /* @__PURE__ */ import_react.default.createElement(
544
- "div",
545
- {
546
- style: {
547
- display: "flex",
548
- alignItems: "flex-start",
549
- minWidth: 0,
550
- minHeight: 0
321
+ text: marqueeText,
322
+ color: marqueeColor,
323
+ duration: 24,
324
+ shouldMarquee: marqueeText.length > import_resourceWallConstants.RESOURCE_WALL_NOTE_MARQUEE_MIN_CHARS
551
325
  }
552
- },
553
- /* @__PURE__ */ import_react.default.createElement(
554
- "div",
555
- {
556
- style: {
557
- fontWeight: 600,
558
- overflow: "hidden",
559
- textOverflow: "ellipsis",
560
- whiteSpace: "nowrap",
561
- fontSize: nextNameSize,
562
- lineHeight: 1,
563
- color: nextNameColor,
564
- paddingTop: sectionGap
565
- }
566
- },
567
- (nextItem == null ? void 0 : nextItem.booking) ?? ""
568
326
  )
569
327
  )
570
- )
328
+ ) : null) : null)
571
329
  ),
572
- /* @__PURE__ */ import_react.default.createElement(
573
- "div",
330
+ hasNextWallSection ? /* @__PURE__ */ import_react.default.createElement(
331
+ "section",
574
332
  {
333
+ className: `pisell-resource-wall-card__panel${floorLikeStatus === "reserved" ? " pisell-resource-wall-card__panel--reserved-next" : ""}`,
575
334
  style: {
576
- display: "flex",
577
- alignItems: "center",
578
- gap: 12,
579
- overflow: "hidden",
580
- minHeight: 0,
581
- padding: Math.max(6, blockPad * 0.66),
582
- borderRadius: noteRadius,
583
- background: noteBg,
584
- border: "1px solid transparent"
335
+ borderColor: moduleBorder,
336
+ background: nextPanelBg,
337
+ minHeight: 0
585
338
  }
586
339
  },
587
340
  /* @__PURE__ */ import_react.default.createElement(
588
341
  "div",
589
342
  {
590
- style: {
591
- width: Math.max(8, unit * 0.12),
592
- height: Math.max(8, unit * 0.12),
593
- borderRadius: 999,
594
- background: heroColor,
595
- flex: "0 0 auto"
596
- }
597
- }
343
+ className: `pisell-resource-wall-card__section-title${floorLikeStatus === "reserved" ? " pisell-resource-wall-card__section-title--reserved-next" : ""}`,
344
+ style: { color: nextSectionInk }
345
+ },
346
+ (0, import_locales.getText)("pisell-resource-wall-card-label-next")
598
347
  ),
599
348
  /* @__PURE__ */ import_react.default.createElement(
600
349
  "div",
601
350
  {
602
- style: {
603
- fontSize: noteSize,
604
- color: noteTextColor,
605
- width: "100%",
606
- height: "100%",
607
- display: "flex",
608
- alignItems: "center"
609
- }
351
+ className: `pisell-resource-wall-card__next-stack${nextContactMeaningful && nextTimeMeaningful ? " pisell-resource-wall-card__next-stack--both-lines" : ""}`
610
352
  },
611
- /* @__PURE__ */ import_react.default.createElement(
612
- import_NoteTicker.NoteTicker,
353
+ nextContactMeaningful && nextItem ? /* @__PURE__ */ import_react.default.createElement(
354
+ "div",
613
355
  {
614
- text: noteText,
615
- color: noteTextColor,
616
- duration: 24,
617
- shouldMarquee: noteText.length > import_resourceWallConstants.RESOURCE_WALL_NOTE_MARQUEE_MIN_CHARS
618
- }
619
- )
356
+ className: "pisell-resource-wall-card__tier2",
357
+ style: { color: nextSectionInk }
358
+ },
359
+ String(nextItem.booking).trim()
360
+ ) : null,
361
+ nextTimeMeaningful && nextItem ? /* @__PURE__ */ import_react.default.createElement(
362
+ "div",
363
+ {
364
+ className: nextTimeSoloLarge ? "pisell-resource-wall-card__next-time-solo" : "pisell-resource-wall-card__tier2",
365
+ style: { color: nextSectionInk }
366
+ },
367
+ String(nextItem.time).trim()
368
+ ) : null
620
369
  )
621
- )
622
- )
370
+ ) : null
371
+ ))
623
372
  );
624
373
  }
625
374
  var VenueWallCard = import_react.default.memo(VenueWallCardInner);