@devslab/dds-solid 0.28.0 → 0.29.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/README.ko.md +25 -0
- package/README.md +25 -0
- package/dist/console-shell.d.ts +12 -1
- package/dist/console-shell.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +391 -197
- package/dist/index.js.map +1 -1
- package/dist/layout.d.ts +19 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/left-nav.d.ts +14 -0
- package/dist/left-nav.d.ts.map +1 -0
- package/dist/server.js +310 -110
- package/dist/server.js.map +1 -1
- package/dist/top-nav.d.ts +5 -0
- package/dist/top-nav.d.ts.map +1 -0
- package/package.json +4 -4
package/README.ko.md
CHANGED
|
@@ -66,6 +66,26 @@ const reload = (key: "search" | "page") => list.run(key, async (signal) => {
|
|
|
66
66
|
}, { replace: true });
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
+
## ConsoleShell 탐색 그룹
|
|
70
|
+
|
|
71
|
+
기존 그룹은 기본으로 펼쳐집니다. 그룹에 `collapsible: true`를 지정하면 기본 HTML 버튼으로 접고 펼칠 수 있습니다. 펼침 상태에 사용할 안정적인 `id`를 지정하세요. 생략하면 `group-${index}`가 키가 됩니다. 초기에는 현재 경로에 해당하는 접이식 그룹만 열리며, 탐색 링크와 같은 경로 판정 및 항목의 `active` 재정의를 사용합니다.
|
|
72
|
+
|
|
73
|
+
`LeftNav`는 별도로 내보내므로 직접 만든 레이아웃에도 메뉴를 조합할 수 있습니다. `surface`, `activePath`, `nav`, `labels`의 `nav`·`badge`, 아래 펼침 상태 속성, 선택적인 `onNavigate`를 받습니다. `ConsoleShell` 안에 조합하려면 `navigation={<LeftNav ... />}`로 전달하세요. 이 슬롯이 기본 메뉴를 대체하므로 셸의 `nav`는 생략할 수 있습니다. 브랜드, 헤더, 본문과 모바일 서랍은 셸이 담당합니다. 사용자 정의 메뉴의 `onNavigate`에는 앱에서 필요한 서랍 동작을 연결하세요.
|
|
74
|
+
|
|
75
|
+
```tsx
|
|
76
|
+
const [expandedGroups, setExpandedGroups] = createSignal<readonly string[]>(["build"]);
|
|
77
|
+
<ConsoleShell
|
|
78
|
+
{...shellProps}
|
|
79
|
+
nav={[{ id: "build", label: "Build", collapsible: true, items: [
|
|
80
|
+
{ id: "projects", href: "/dashboard/projects", label: "Projects", icon: <svg viewBox="0 0 16 16"><path d="M2 3h5l2 2h5v8H2z" /></svg> },
|
|
81
|
+
] }]}
|
|
82
|
+
expandedGroups={expandedGroups()}
|
|
83
|
+
onExpandedGroupsChange={setExpandedGroups}
|
|
84
|
+
>Content</ConsoleShell>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
비제어 초기 상태는 `defaultExpandedGroups`로 지정합니다. `[]`를 전달하면 모든 접이식 그룹이 닫힙니다. 제어 상태는 `expandedGroups`와 `onExpandedGroupsChange`를 사용하세요. 이후 경로 변경에 따른 펼침과 상태 저장은 앱이 담당합니다. 항목의 `icon`은 장식이며, 링크 이름은 `label`이 제공하고 배지는 접근성 라벨을 유지합니다.
|
|
88
|
+
|
|
69
89
|
## DatePicker
|
|
70
90
|
|
|
71
91
|
```tsx
|
|
@@ -93,3 +113,8 @@ Input/InputGroup은 검색 전용이 아닌 일반 입력 기반이며 라벨
|
|
|
93
113
|
상세 import: `@devslab/dds-solid/input`, `/combobox`, `/select-picker`, `/dropdown-menu`, `/popover`, `/calendar`, `/date-picker`, `/time-picker`, `/segmented-control`, `/number-input`, `/date-range-picker`, `/month-picker`. 기존 루트 import와 `styles.css`는 유지합니다. [공통 사용 가이드](https://github.com/devslab-kr/dds/blob/main/docs/components-input-choice-calendar.ko.md)를 참고하세요.
|
|
94
114
|
Input/InputGroup은 검색 전용이 아닌 일반 입력 기반이며 라벨 배치·내용 지우기를 지원합니다. Combobox/SelectPicker는 가상화를, DropdownMenu/Popover는 접근 가능한 팝업을, Calendar/DatePicker는 공유 달력을 제공합니다. DateRangePicker(시작일~종료일 기간)와 MonthPicker(YYYY-MM 월)도 같은 달력을 씁니다.
|
|
95
115
|
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
## 공통 업무 화면
|
|
119
|
+
|
|
120
|
+
Layout·LeftNav·TopNav는 공통 간격과 타이포 규격을 사용합니다. [조립 방법과 수치](../../docs/layouts.ko.md)를 참고하세요.
|
package/README.md
CHANGED
|
@@ -63,6 +63,26 @@ const reload = (key: "search" | "page") => list.run(key, async (signal) => {
|
|
|
63
63
|
}, { replace: true });
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
+
## ConsoleShell navigation groups
|
|
67
|
+
|
|
68
|
+
Groups remain open by default. Set `collapsible: true` on a group to render a native disclosure button, and give it a stable `id` for expansion state (otherwise the key is `group-${index}`). Only active collapsible groups open initially, using the same route matching and item `active` override as the navigation links.
|
|
69
|
+
|
|
70
|
+
`LeftNav` is also exported separately for composing a menu in your own layout. It takes `surface`, `activePath`, `nav`, `labels` (`nav` and `badge`), the expansion props below, and optional `onNavigate`. To compose it inside `ConsoleShell`, pass it as `navigation={<LeftNav ... />}`; the slot replaces the built-in menu and the shell's `nav` can be omitted. The shell continues to own branding, the header, content and mobile drawer. For a custom menu, connect `onNavigate` to any application-specific drawer handling.
|
|
71
|
+
|
|
72
|
+
```tsx
|
|
73
|
+
const [expandedGroups, setExpandedGroups] = createSignal<readonly string[]>(["build"]);
|
|
74
|
+
<ConsoleShell
|
|
75
|
+
{...shellProps}
|
|
76
|
+
nav={[{ id: "build", label: "Build", collapsible: true, items: [
|
|
77
|
+
{ id: "projects", href: "/dashboard/projects", label: "Projects", icon: <svg viewBox="0 0 16 16"><path d="M2 3h5l2 2h5v8H2z" /></svg> },
|
|
78
|
+
] }]}
|
|
79
|
+
expandedGroups={expandedGroups()}
|
|
80
|
+
onExpandedGroupsChange={setExpandedGroups}
|
|
81
|
+
>Content</ConsoleShell>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Use `defaultExpandedGroups` for uncontrolled initial state; `[]` explicitly closes every collapsible group. Use `expandedGroups` and `onExpandedGroupsChange` for controlled state. Later route-driven expansion and persistence belong to the application. Item `icon` is decorative; `label` still supplies the link name and badges keep their accessible labels.
|
|
85
|
+
|
|
66
86
|
## DatePicker
|
|
67
87
|
|
|
68
88
|
```tsx
|
|
@@ -90,3 +110,8 @@ Input/InputGroup are general-purpose native inputs, not search-only, with label
|
|
|
90
110
|
Use explicit subpaths `@devslab/dds-solid/input`, `/combobox`, `/select-picker`, `/dropdown-menu`, `/popover`, `/calendar`, `/date-picker`, `/time-picker`, `/segmented-control`, `/number-input`, `/date-range-picker`, `/month-picker`, or the existing root exports. Keep importing `styles.css` once. See the [common usage guide](https://github.com/devslab-kr/dds/blob/main/docs/components-input-choice-calendar.md).
|
|
91
111
|
Input/InputGroup are general-purpose native inputs, not search-only, with label placement and clear actions. Combobox/SelectPicker support fixed-row virtualization; DropdownMenu/Popover provide accessible overlays; Calendar/DatePicker share a calendar view, which DateRangePicker (start ~ end period) and MonthPicker (YYYY-MM) also use.
|
|
92
112
|
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
## Shared application layouts
|
|
116
|
+
|
|
117
|
+
Layout, LeftNav and TopNav use the common geometry and typography rules. See [composition and exact dimensions](../../docs/layouts.md).
|
package/dist/console-shell.d.ts
CHANGED
|
@@ -9,10 +9,16 @@ export interface ConsoleNavItem {
|
|
|
9
9
|
id: string;
|
|
10
10
|
href: string;
|
|
11
11
|
label: string;
|
|
12
|
+
/** Decorative icon; the label supplies the accessible name. */
|
|
13
|
+
icon?: JSX.Element;
|
|
12
14
|
badge?: number;
|
|
13
15
|
active?: boolean;
|
|
14
16
|
}
|
|
15
17
|
export interface ConsoleNavGroup {
|
|
18
|
+
/** Stable key for expansion state. Falls back to `group-${index}`. */
|
|
19
|
+
id?: string;
|
|
20
|
+
/** Opt in to a disclosure button; legacy groups remain expanded. */
|
|
21
|
+
collapsible?: boolean;
|
|
16
22
|
label: string;
|
|
17
23
|
items: readonly ConsoleNavItem[];
|
|
18
24
|
}
|
|
@@ -50,7 +56,12 @@ export interface ConsoleShellProps {
|
|
|
50
56
|
label: string;
|
|
51
57
|
value: string;
|
|
52
58
|
}[];
|
|
53
|
-
nav
|
|
59
|
+
nav?: readonly ConsoleNavGroup[];
|
|
60
|
+
/** Custom menu content, such as a separately composed LeftNav. */
|
|
61
|
+
navigation?: JSX.Element;
|
|
62
|
+
expandedGroups?: readonly string[] | undefined;
|
|
63
|
+
defaultExpandedGroups?: readonly string[] | undefined;
|
|
64
|
+
onExpandedGroupsChange?: ((groupIds: string[]) => void) | undefined;
|
|
54
65
|
labels: ConsoleShellLabels;
|
|
55
66
|
header: ConsoleHeader;
|
|
56
67
|
/** Slot for the rail's bottom — DDS must not depend on site-kit, so a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console-shell.d.ts","sourceRoot":"","sources":["../src/console-shell.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"console-shell.d.ts","sourceRoot":"","sources":["../src/console-shell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAG/C;;;;;2CAK2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;qDAKiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ;kEAC8D;IAC9D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD;0BACsB;IACtB,OAAO,CAAC,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtD,GAAG,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACjC,kEAAkE;IAClE,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/C,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACtD,sBAAsB,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACpE,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB;;qCAEiC;IACjC,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACnB,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CA4DlE"}
|
package/dist/index.d.ts
CHANGED
|
@@ -22,4 +22,7 @@ export * from "./popover";
|
|
|
22
22
|
export * from "./calendar";
|
|
23
23
|
export { SegmentedControl, validateSegmentedItems, type SegmentedControlItem, type SegmentedControlProps, } from "./segmented-control";
|
|
24
24
|
export { NumberInput, normalizeNumberText, numberInputMessages, type NumberInputMessages, type NumberInputProps, } from "./number-input";
|
|
25
|
+
export { LeftNav, type LeftNavProps } from "./left-nav";
|
|
26
|
+
export { Layout, type LayoutProps } from "./layout";
|
|
27
|
+
export { TopNav, type TopNavProps } from "./top-nav";
|
|
25
28
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EACL,MAAM,EACN,QAAQ,EACR,KAAK,EACL,UAAU,EACV,KAAK,EACL,MAAM,EACN,MAAM,EACN,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC/J,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACzG,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3H,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEjF,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACpF,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAE/B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EACL,MAAM,EACN,QAAQ,EACR,KAAK,EACL,UAAU,EACV,KAAK,EACL,MAAM,EACN,MAAM,EACN,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC/J,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACzG,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3H,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEjF,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AACpF,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAE/B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC"}
|