@wipco/sdui 0.47.0 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import React__default, { CSSProperties, ReactNode, ComponentType } from 'react';
3
- import { S as SduiPage, a as SduiAction, b as SduiPropValue, c as SduiRule } from './types-C6cOUNPz.js';
4
- export { d as SduiArgRef, e as SduiCalcRef, f as SduiChild, g as SduiIndexRef, h as SduiItemRef, i as SduiNode, j as SduiPageQuery, k as SduiScalar, l as SduiStateRef } from './types-C6cOUNPz.js';
3
+ import { S as SduiPage, a as SduiAction, b as SduiPropValue, c as SduiRule } from './types-D14eqLpf.js';
4
+ export { d as SduiArgRef, e as SduiCalcRef, f as SduiChild, g as SduiIndexRef, h as SduiItemRef, i as SduiNode, j as SduiPageQuery, k as SduiScalar, l as SduiStateRef } from './types-D14eqLpf.js';
5
5
  import { S as SduiBoxProps, a as SduiContainerLayoutProps, b as SduiColumnsScale, c as SduiGapScale, d as SduiWeightScale, e as SduiTextAlignScale } from './layout-C3nRXMwb.js';
6
6
  export { C as CHILD_LAYOUT_PROPS, L as LAYOUT_CSS, f as SduiAlignScale, g as SduiChildLayoutProps, h as SduiSizeScale, i as SduiSpanScale, j as childLayoutFrom, k as columnsClass, l as containerLayoutStyle, m as joinClass, n as mergeStyle, t as typographyStyle } from './layout-C3nRXMwb.js';
7
7
  import { D as DatePickerProps, a as DateRangePickerProps, T as TimePickerProps } from './DatePicker-BK_jsV7i.js';
package/dist/index.js CHANGED
@@ -1660,7 +1660,14 @@ function isEmptyValue(v) {
1660
1660
  function fieldOf(row, field) {
1661
1661
  if (!field) return row;
1662
1662
  if (!isPlainObject(row)) return void 0;
1663
- return Object.hasOwn(row, field) ? row[field] : void 0;
1663
+ if (Object.hasOwn(row, field)) return row[field];
1664
+ if (!field.includes(".")) return void 0;
1665
+ let current = row;
1666
+ for (const segment of field.split(".")) {
1667
+ if (!isPlainObject(current) || !Object.hasOwn(current, segment)) return void 0;
1668
+ current = current[segment];
1669
+ }
1670
+ return current;
1664
1671
  }
1665
1672
  var FIELD_OPS = /* @__PURE__ */ new Set([
1666
1673
  "eq",
package/dist/meta.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { b as SduiPropValue, i as SduiNode } from './types-C6cOUNPz.js';
1
+ import { b as SduiPropValue, i as SduiNode } from './types-D14eqLpf.js';
2
2
 
3
3
  /**
4
4
  * 시각 빌더용 컴포넌트 메타데이터 스키마.
@@ -188,9 +188,15 @@ type SduiAction = {
188
188
  *
189
189
  * ```json
190
190
  * { "action": "setState", "key": "gdRules", "fromEvent": true,
191
- * "path": [{ "$index": true }, "limits", { "$item": true }, "count"] }
191
+ * "path": [{ "$arg": "ri" }, "limits", { "$item": true }, "count"] }
192
192
  * ```
193
193
  *
194
+ * ⚠ 중첩 반복에서 **바깥 번호는 `$index` 가 아니다.** `$index` 는 가장 안쪽 행
195
+ * 프레임을 읽으므로, 규칙 루프 안 등급 루프에서 `$index` 는 등급 번호다. 바깥
196
+ * 번호는 그 자리에 Fragment 를 놓고 `args: { ri: {"$index": true} }` 로 날라
197
+ * `{"$arg":"ri"}` 로 읽는다 — `$arg` 는 item 프레임을 건너뛰고 원본 값을 호출부
198
+ * 스코프로 다시 풀기 때문이다(`test/fragment.test.ts` 가 고정한다).
199
+ *
194
200
  * 이것이 없으면 **동적 키**(등급 이름처럼 사용자가 런타임에 타이핑하는 키)와
195
201
  * **중첩 쓰기**(`arrayUpdate`는 최상위 배열의 평탄 필드 하나만 바꾼다)를 스펙으로
196
202
  * 말할 수 없었다. 규칙과 거절 조건은 `state-path.ts` 머리말에 있다.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipco/sdui",
3
- "version": "0.47.0",
3
+ "version": "0.48.0",
4
4
  "description": "WIPCO 서버 주도 UI(SDUI) 렌더러 — JSON 페이지 스펙을 React 컴포넌트로 렌더링",
5
5
  "keywords": [
6
6
  "sdui",