@actdim/dynstruct-mui 1.5.15 → 1.7.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/AGENTS.md +156 -154
- package/LICENSE +1 -0
- package/README.md +4 -2
- package/docs/INDEX.md +49 -44
- package/docs/topic--architecture.md +3 -4
- package/docs/topic--domain-model.md +3 -4
- package/docs/topic--setup-and-workflow.md +3 -4
- package/llms-full.txt +166 -162
- package/package.json +23 -22
package/AGENTS.md
CHANGED
|
@@ -1,158 +1,160 @@
|
|
|
1
|
-
<!-- BEGIN ALONG-PROTOCOL ref=../../../AGENTS.md (managed by along-init - do not edit by hand) -->
|
|
2
|
-
This folder belongs to a repository that uses the ALONG structure. The full working
|
|
3
|
-
guidance + agent-context protocol live once in the nearest ancestor `AGENTS.md` (`../../../AGENTS.md`) -
|
|
4
|
-
read it there. This folder keeps its OWN `.along/` state; use the nearest one.
|
|
5
|
-
Only this folder's specifics follow.
|
|
6
|
-
<!-- END ALONG-PROTOCOL
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
import {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
- **`
|
|
61
|
-
-
|
|
62
|
-
- **`
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
//
|
|
76
|
-
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
|
91
|
-
|
|
92
|
-
|
|
|
93
|
-
|
|
|
94
|
-
|
|
|
95
|
-
|
|
|
96
|
-
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
- **`
|
|
101
|
-
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
- `
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
1
|
+
<!-- BEGIN ALONG-PROTOCOL ref=../../../AGENTS.md (managed by along-init - do not edit by hand) -->
|
|
2
|
+
This folder belongs to a repository that uses the ALONG structure. The full working
|
|
3
|
+
guidance + agent-context protocol live once in the nearest ancestor `AGENTS.md` (`../../../AGENTS.md`) -
|
|
4
|
+
read it there. This folder keeps its OWN `.along/` state; use the nearest one.
|
|
5
|
+
Only this folder's specifics follow.
|
|
6
|
+
<!-- END ALONG-PROTOCOL -->
|
|
7
|
+
|
|
8
|
+
# AI Agent Guide for `@actdim/dynstruct-mui`
|
|
9
|
+
|
|
10
|
+
MUI wrappers for `@actdim/dynstruct`. Each file wraps one MUI component into a dynstruct hook-constructor.
|
|
11
|
+
|
|
12
|
+
## Tech Stack
|
|
13
|
+
|
|
14
|
+
- TypeScript · React · MobX · `@actdim/dynstruct` · `@mui/material` · Vite
|
|
15
|
+
|
|
16
|
+
## Component Authoring Pattern
|
|
17
|
+
|
|
18
|
+
Every component follows this exact structure (see `src/Button.tsx` as the reference):
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import { type ComponentStruct, type ComponentDef, type ComponentParams,
|
|
22
|
+
type Component, type ComponentModel } from '@actdim/dynstruct/componentModel/contracts';
|
|
23
|
+
import { useComponent, toReact } from '@actdim/dynstruct/componentModel/react/hooks';
|
|
24
|
+
import { type BaseAppMsgStruct } from '@actdim/dynstruct/appDomain/appContracts';
|
|
25
|
+
|
|
26
|
+
// 1. Local Struct type - generic but private to file, default = BaseAppMsgStruct
|
|
27
|
+
type Struct<TMsgStruct extends BaseAppMsgStruct = BaseAppMsgStruct> = ComponentStruct<
|
|
28
|
+
TMsgStruct,
|
|
29
|
+
{
|
|
30
|
+
props: { /* ... */ };
|
|
31
|
+
}
|
|
32
|
+
>;
|
|
33
|
+
|
|
34
|
+
// 2. Hook-constructor - NOT generic, uses Struct with default
|
|
35
|
+
export const useXxx = (params: ComponentParams<Struct>): Component<Struct> => {
|
|
36
|
+
let c: Component<Struct>;
|
|
37
|
+
let m: ComponentModel<Struct>;
|
|
38
|
+
|
|
39
|
+
const def: ComponentDef<Struct> = {
|
|
40
|
+
regType: 'Xxx',
|
|
41
|
+
props: { /* defaults */ },
|
|
42
|
+
view: () => ( /* JSX using m.* and m.$.* */ ),
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
c = useComponent(def, params);
|
|
46
|
+
m = c.model;
|
|
47
|
+
return c;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// 3. Exported type - concrete (non-generic) alias
|
|
51
|
+
export type XxxStruct = Struct;
|
|
52
|
+
|
|
53
|
+
// 4. React adapter - no explicit type params needed
|
|
54
|
+
export const Xxx = toReact(useXxx);
|
|
55
|
+
Xxx.displayName = 'Xxx';
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Rules
|
|
59
|
+
|
|
60
|
+
- **`Struct` stays local** - generic with `TMsgStruct` default, never exported directly.
|
|
61
|
+
- **Hook-constructor is non-generic** - `useXxx(params: ComponentParams<Struct>): Component<Struct>`.
|
|
62
|
+
- **`XxxStruct` export is non-generic** - `export type XxxStruct = Struct`.
|
|
63
|
+
- **`toReact` needs no type params** - `toReact(useXxx)` works because the hook is non-generic.
|
|
64
|
+
- **`displayName`** - always set `Xxx.displayName = 'Xxx'` after `toReact(...)` so Storybook and React DevTools show the correct name.
|
|
65
|
+
- **Disabled state** - use `m.$.isDisabled` (from `ComponentState`), not a dedicated `disabled` prop.
|
|
66
|
+
- **Loading state** - use explicit `loading?: boolean` prop or wire to `m.$.pendingRequestCount > 0`.
|
|
67
|
+
- **`m.$.isVisible`** - hide/show via component state, not a prop.
|
|
68
|
+
|
|
69
|
+
## Import Paths
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
// Contracts (types only)
|
|
73
|
+
import { ... } from '@actdim/dynstruct/componentModel/contracts';
|
|
74
|
+
|
|
75
|
+
// React utilities (useComponent, toReact)
|
|
76
|
+
import { ... } from '@actdim/dynstruct/componentModel/react/hooks';
|
|
77
|
+
// ^^^^^^^^^^^
|
|
78
|
+
// Note: the file lives at dist/componentModel/react/react.d.ts
|
|
79
|
+
// NOT dist/componentModel/react.d.ts - that file does not exist
|
|
80
|
+
|
|
81
|
+
// App domain
|
|
82
|
+
import { ... } from '@actdim/dynstruct/appDomain/appContracts';
|
|
83
|
+
import { ... } from '@actdim/dynstruct/appDomain/commonContracts';
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## MUI Composition Rules
|
|
87
|
+
|
|
88
|
+
Always follow the **official MUI website patterns** - use composable building blocks, not convenience shorthands:
|
|
89
|
+
|
|
90
|
+
| Component | Correct pattern |
|
|
91
|
+
|---|---|
|
|
92
|
+
| Select | `FormControl` + `InputLabel` + `Select` + `FormHelperText` |
|
|
93
|
+
| Checkbox (with label/error) | `FormControl` + `FormControlLabel` wrapping `Checkbox` + `FormHelperText` |
|
|
94
|
+
| Switch (with label/error) | `FormControl` + `FormControlLabel` wrapping `Switch` + `FormHelperText` |
|
|
95
|
+
| TextField | `TextField` (this IS the official atomic component, not a shorthand) |
|
|
96
|
+
| Button / IconButton | Use directly |
|
|
97
|
+
| Dialog | `Dialog` + `DialogTitle` + `DialogContent` + `DialogActions` |
|
|
98
|
+
| Alert | `Alert` directly (`onClose` for close button) |
|
|
99
|
+
|
|
100
|
+
- **`disabled`** always goes on the outermost container (`FormControl`, `Button`, etc.) - not inside, not as a duplicate.
|
|
101
|
+
- **`error`** and **`helperText`** always use `FormControl error={}` + `FormHelperText` - not ad-hoc inline text.
|
|
102
|
+
- **`sx`** type: when `FormControl` is the root, use `FormControlProps['sx']`, otherwise `MuiXxxProps['sx']`.
|
|
103
|
+
- For `labelId` (Select, etc.) use `c.id` from the dynstruct component instance to ensure uniqueness.
|
|
104
|
+
|
|
105
|
+
## Props Convention
|
|
106
|
+
|
|
107
|
+
- Map MUI prop types via `MuiXxxProps['propName']` - e.g. `MuiButtonProps['variant']`.
|
|
108
|
+
- Include `sx?` typed from the **outermost MUI element** (see MUI Composition Rules above).
|
|
109
|
+
- Reactive `ReactNode` props (icons, content, `React.FC`) are fine - MobX handles them as observable refs.
|
|
110
|
+
- Provide sensible defaults for all props in `def.props`.
|
|
111
|
+
|
|
112
|
+
## Storybook Stories
|
|
113
|
+
|
|
114
|
+
Every story file uses `AppContextProvider` + `StorageService` as the decorator. See `src/_stories/Button.stories.tsx` as the reference.
|
|
115
|
+
|
|
116
|
+
```tsx
|
|
117
|
+
import { AppContextProvider, appMsgBus } from './bootstrap';
|
|
118
|
+
import { StorageService } from '@actdim/dynstruct/services/react/StorageService';
|
|
119
|
+
|
|
120
|
+
const meta: Meta<typeof Xxx> = {
|
|
121
|
+
title: 'Controls/Xxx',
|
|
122
|
+
component: Xxx,
|
|
123
|
+
decorators: [
|
|
124
|
+
(Story) => (
|
|
125
|
+
<AppContextProvider value={{ msgBus: appMsgBus }}>
|
|
126
|
+
<StorageService storeName={'test'} />
|
|
127
|
+
<Story />
|
|
128
|
+
</AppContextProvider>
|
|
129
|
+
),
|
|
130
|
+
],
|
|
131
|
+
// ...
|
|
132
|
+
};
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
- Always use `Meta<typeof Xxx>` explicit annotation (not `satisfies`) - avoids TS2742 from pnpm MUI path references.
|
|
136
|
+
- `argTypes` for `startIcon`, `endIcon`, `sx`: set `control: false` (not Storybook-controllable).
|
|
137
|
+
- `FullWidth` story should use `parameters: { layout: 'padded' }`.
|
|
138
|
+
|
|
139
|
+
## File Layout
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
src/
|
|
143
|
+
Button.tsx ← one file per MUI component
|
|
144
|
+
TextField.tsx
|
|
145
|
+
...
|
|
146
|
+
_stories/
|
|
147
|
+
bootstrap.ts ← AppMsgStruct, appMsgBus, AppContextProvider
|
|
148
|
+
Button.stories.tsx
|
|
149
|
+
...
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Import from the package: `import { useButton, ButtonStruct } from '@actdim/dynstruct-mui/Button'`.
|
|
153
|
+
|
|
154
|
+
## Project specifics
|
|
155
|
+
|
|
154
156
|
<!-- BEGIN ALONG-RULES -->
|
|
155
157
|
See the following engineering guidelines:
|
|
156
158
|
- `[languages/typescript.md](.along/rules/languages/typescript.md)`
|
|
157
159
|
- `[platforms/web.md](.along/rules/platforms/web.md)`
|
|
158
|
-
<!-- END ALONG-RULES -->
|
|
160
|
+
<!-- END ALONG-RULES -->
|
package/LICENSE
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
3
|
Copyright (c) 2025 Pavel Borodaev (@actdim/msgmesh)
|
|
4
|
+
Copyright (c) 2025 Pavel Borodaev (@actdim/dynstruct-mui)
|
|
4
5
|
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
7
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# @actdim/dynstruct-mui
|
|
2
2
|
|
|
3
|
-
MUI component wrappers for [@actdim/dynstruct](https://github.com/actdim/dynstruct). Each component is a dynstruct hook-constructor
|
|
3
|
+
MUI component wrappers for [@actdim/dynstruct](https://github.com/actdim/dynstruct). Each component is a dynstruct hook-constructor - observable props, reactive rendering, MobX-backed state out of the box.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@actdim/dynstruct-mui)
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
7
|
[](LICENSE)
|
|
8
|
+
[](LICENSE)
|
|
8
9
|
|
|
9
10
|
## Components
|
|
10
11
|
|
|
@@ -50,7 +51,7 @@ MUI component wrappers for [@actdim/dynstruct](https://github.com/actdim/dynstru
|
|
|
50
51
|
npm install @actdim/dynstruct-mui
|
|
51
52
|
```
|
|
52
53
|
|
|
53
|
-
Peer dependencies: `@actdim/dynstruct`, `@mui/material`, `react`, `mobx`, `mobx-react-lite`
|
|
54
|
+
Peer dependencies: `@actdim/dynstruct`, `@mui/material`, `react`, `mobx`, `mobx-react-lite` - see `package.json` for full list.
|
|
54
55
|
|
|
55
56
|
## Usage
|
|
56
57
|
|
|
@@ -89,6 +90,7 @@ Developed with [Along](https://github.com/actdim/along) - a provider-agnostic co
|
|
|
89
90
|
## License
|
|
90
91
|
|
|
91
92
|
Proprietary - see [LICENSE](LICENSE) for details.
|
|
93
|
+
MIT License. See [LICENSE](LICENSE) for details.
|
|
92
94
|
|
|
93
95
|
## Author
|
|
94
96
|
|
package/docs/INDEX.md
CHANGED
|
@@ -1,44 +1,49 @@
|
|
|
1
|
-
---
|
|
2
|
-
protocol: along
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
T_ARCHITECTURE
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
1
|
+
---
|
|
2
|
+
protocol: along
|
|
3
|
+
slug: INDEX
|
|
4
|
+
title: Knowledge Base Topic Index
|
|
5
|
+
type: index
|
|
6
|
+
created: 2026-09-10
|
|
7
|
+
updated: 2026-09-10
|
|
8
|
+
tags: [index, kb, topics, map]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Knowledge Base Topic Index
|
|
12
|
+
|
|
13
|
+
Central entry point and cross-linked topic catalog for project documentation:
|
|
14
|
+
|
|
15
|
+
## Knowledge Graph & Topic Map
|
|
16
|
+
|
|
17
|
+
```mermaid
|
|
18
|
+
flowchart TD
|
|
19
|
+
INDEX["Knowledge Base (INDEX)"]
|
|
20
|
+
T_ARCHITECTURE["01 Architecture"]
|
|
21
|
+
INDEX --> T_ARCHITECTURE
|
|
22
|
+
T_DOMAIN_MODEL["02 Domain Model"]
|
|
23
|
+
INDEX --> T_DOMAIN_MODEL
|
|
24
|
+
T_SETUP_AND_WORKFLOW["03 Setup And Workflow"]
|
|
25
|
+
INDEX --> T_SETUP_AND_WORKFLOW
|
|
26
|
+
T_ARCHITECTURE -.->|references| T_DOMAIN_MODEL
|
|
27
|
+
T_ARCHITECTURE -.->|references| T_SETUP_AND_WORKFLOW
|
|
28
|
+
T_DOMAIN_MODEL -.->|references| T_ARCHITECTURE
|
|
29
|
+
T_DOMAIN_MODEL -.->|references| T_SETUP_AND_WORKFLOW
|
|
30
|
+
T_SETUP_AND_WORKFLOW -.->|references| T_ARCHITECTURE
|
|
31
|
+
T_SETUP_AND_WORKFLOW -.->|references| T_DOMAIN_MODEL
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Articles
|
|
37
|
+
|
|
38
|
+
- **[01 Architecture](./topic--architecture.md)** (topic) `architecture`
|
|
39
|
+
- **[02 Domain Model](./topic--domain-model.md)** (topic) `domain-model`
|
|
40
|
+
- **[03 Setup And Workflow](./topic--setup-and-workflow.md)** (topic) `setup-and-workflow`
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Related Context
|
|
45
|
+
|
|
46
|
+
- [AGENTS.md](../AGENTS.md): Active protocol conventions and rules.
|
|
47
|
+
- [.along/DECISIONS.md](../.along/DECISIONS.md): Architectural Decision Records.
|
|
48
|
+
- [.along/ISSUES.md](../.along/ISSUES.md): Active issue tracking board.
|
|
49
|
+
- [.along/HISTORY.md](../.along/HISTORY.md): Append-only project history log.
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
protocol: along
|
|
3
|
-
protocol_version: "2.2.5"
|
|
4
3
|
slug: architecture
|
|
5
4
|
title: 01 Architecture
|
|
6
5
|
type: topic
|
|
7
6
|
created: 2026-08-27
|
|
8
|
-
updated: 2026-09-
|
|
7
|
+
updated: 2026-09-10
|
|
9
8
|
tags: [architecture]
|
|
10
9
|
---
|
|
11
10
|
|
|
@@ -35,5 +34,5 @@ tags: [architecture]
|
|
|
35
34
|
|
|
36
35
|
## 2. Cross-Links
|
|
37
36
|
- [[INDEX.md]] - Knowledge Base Root
|
|
38
|
-
- [[02-domain-model.md]] - Domain Model & Component Catalog
|
|
39
|
-
- [[03-setup-and-workflow.md]] - Setup, Build & Storybook Workflow
|
|
37
|
+
- [[02-[domain-model](./topic--domain-model.md).md]] - Domain Model & Component Catalog
|
|
38
|
+
- [[03-[setup-and-workflow](./topic--setup-and-workflow.md).md]] - Setup, Build & Storybook Workflow
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
protocol: along
|
|
3
|
-
protocol_version: "2.2.5"
|
|
4
3
|
slug: domain-model
|
|
5
4
|
title: 02 Domain Model
|
|
6
5
|
type: topic
|
|
7
6
|
created: 2026-08-27
|
|
8
|
-
updated: 2026-09-
|
|
7
|
+
updated: 2026-09-10
|
|
9
8
|
tags: [domain-model]
|
|
10
9
|
---
|
|
11
10
|
|
|
@@ -52,5 +51,5 @@ tags: [domain-model]
|
|
|
52
51
|
|
|
53
52
|
## 3. Cross-Links
|
|
54
53
|
- [[INDEX.md]] - Knowledge Base Root
|
|
55
|
-
- [[01-architecture.md]] - System Architecture
|
|
56
|
-
- [[03-setup-and-workflow.md]] - Setup, Build & Storybook Workflow
|
|
54
|
+
- [[01-[architecture](./topic--architecture.md).md]] - System Architecture
|
|
55
|
+
- [[03-[setup-and-workflow](./topic--setup-and-workflow.md).md]] - Setup, Build & Storybook Workflow
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
protocol: along
|
|
3
|
-
protocol_version: "2.2.5"
|
|
4
3
|
slug: setup-and-workflow
|
|
5
4
|
title: 03 Setup And Workflow
|
|
6
5
|
type: topic
|
|
7
6
|
created: 2026-08-27
|
|
8
|
-
updated: 2026-09-
|
|
7
|
+
updated: 2026-09-10
|
|
9
8
|
tags: [setup-and-workflow]
|
|
10
9
|
---
|
|
11
10
|
|
|
@@ -44,5 +43,5 @@ Interactive stories exist for every wrapped Material UI component: `Button.stori
|
|
|
44
43
|
|
|
45
44
|
## 4. Cross-Links
|
|
46
45
|
- [[INDEX.md]] - Knowledge Base Root
|
|
47
|
-
- [[01-architecture.md]] - Architecture
|
|
48
|
-
- [[02-domain-model.md]] - Domain Model
|
|
46
|
+
- [[01-[architecture](./topic--architecture.md).md]] - Architecture
|
|
47
|
+
- [[02-[domain-model](./topic--domain-model.md).md]] - Domain Model
|
package/llms-full.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @actdim/dynstruct-mui - Full Documentation Context
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> MUI component wrappers for [@actdim/dynstruct](https://github.com/actdim/dynstruct). Each component is a dynstruct hook-constructor - observable props, reactive rendering, MobX-backed state out of the box.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -8,11 +8,12 @@
|
|
|
8
8
|
|
|
9
9
|
# @actdim/dynstruct-mui
|
|
10
10
|
|
|
11
|
-
MUI component wrappers for [@actdim/dynstruct](https://github.com/actdim/dynstruct). Each component is a dynstruct hook-constructor
|
|
11
|
+
MUI component wrappers for [@actdim/dynstruct](https://github.com/actdim/dynstruct). Each component is a dynstruct hook-constructor - observable props, reactive rendering, MobX-backed state out of the box.
|
|
12
12
|
|
|
13
13
|
[](https://www.npmjs.com/package/@actdim/dynstruct-mui)
|
|
14
14
|
[](https://www.typescriptlang.org/)
|
|
15
15
|
[](LICENSE)
|
|
16
|
+
[](LICENSE)
|
|
16
17
|
|
|
17
18
|
## Components
|
|
18
19
|
|
|
@@ -58,7 +59,7 @@ MUI component wrappers for [@actdim/dynstruct](https://github.com/actdim/dynstru
|
|
|
58
59
|
npm install @actdim/dynstruct-mui
|
|
59
60
|
```
|
|
60
61
|
|
|
61
|
-
Peer dependencies: `@actdim/dynstruct`, `@mui/material`, `react`, `mobx`, `mobx-react-lite`
|
|
62
|
+
Peer dependencies: `@actdim/dynstruct`, `@mui/material`, `react`, `mobx`, `mobx-react-lite` - see `package.json` for full list.
|
|
62
63
|
|
|
63
64
|
## Usage
|
|
64
65
|
|
|
@@ -97,6 +98,7 @@ Developed with [Along](https://github.com/actdim/along) - a provider-agnostic co
|
|
|
97
98
|
## License
|
|
98
99
|
|
|
99
100
|
Proprietary - see [LICENSE](LICENSE) for details.
|
|
101
|
+
MIT License. See [LICENSE](LICENSE) for details.
|
|
100
102
|
|
|
101
103
|
## Author
|
|
102
104
|
|
|
@@ -106,159 +108,161 @@ Pavel Borodaev - [github.com/actdim/dynstruct-mui](https://github.com/actdim/dyn
|
|
|
106
108
|
|
|
107
109
|
## Document: AGENTS.md (Agent Conventions & Protocol)
|
|
108
110
|
|
|
109
|
-
<!-- BEGIN ALONG-PROTOCOL ref=../../../AGENTS.md (managed by along-init - do not edit by hand) -->
|
|
110
|
-
This folder belongs to a repository that uses the ALONG structure. The full working
|
|
111
|
-
guidance + agent-context protocol live once in the nearest ancestor `AGENTS.md` (`../../../AGENTS.md`) -
|
|
112
|
-
read it there. This folder keeps its OWN `.along/` state; use the nearest one.
|
|
113
|
-
Only this folder's specifics follow.
|
|
114
|
-
<!-- END ALONG-PROTOCOL
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
import {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
- **`
|
|
169
|
-
-
|
|
170
|
-
- **`
|
|
171
|
-
-
|
|
172
|
-
-
|
|
173
|
-
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
//
|
|
184
|
-
|
|
185
|
-
//
|
|
186
|
-
|
|
187
|
-
//
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
|
199
|
-
|
|
200
|
-
|
|
|
201
|
-
|
|
|
202
|
-
|
|
|
203
|
-
|
|
|
204
|
-
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
- **`
|
|
209
|
-
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
-
|
|
216
|
-
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
- `
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
111
|
+
<!-- BEGIN ALONG-PROTOCOL ref=../../../AGENTS.md (managed by along-init - do not edit by hand) -->
|
|
112
|
+
This folder belongs to a repository that uses the ALONG structure. The full working
|
|
113
|
+
guidance + agent-context protocol live once in the nearest ancestor `AGENTS.md` (`../../../AGENTS.md`) -
|
|
114
|
+
read it there. This folder keeps its OWN `.along/` state; use the nearest one.
|
|
115
|
+
Only this folder's specifics follow.
|
|
116
|
+
<!-- END ALONG-PROTOCOL -->
|
|
117
|
+
|
|
118
|
+
# AI Agent Guide for `@actdim/dynstruct-mui`
|
|
119
|
+
|
|
120
|
+
MUI wrappers for `@actdim/dynstruct`. Each file wraps one MUI component into a dynstruct hook-constructor.
|
|
121
|
+
|
|
122
|
+
## Tech Stack
|
|
123
|
+
|
|
124
|
+
- TypeScript · React · MobX · `@actdim/dynstruct` · `@mui/material` · Vite
|
|
125
|
+
|
|
126
|
+
## Component Authoring Pattern
|
|
127
|
+
|
|
128
|
+
Every component follows this exact structure (see `src/Button.tsx` as the reference):
|
|
129
|
+
|
|
130
|
+
```tsx
|
|
131
|
+
import { type ComponentStruct, type ComponentDef, type ComponentParams,
|
|
132
|
+
type Component, type ComponentModel } from '@actdim/dynstruct/componentModel/contracts';
|
|
133
|
+
import { useComponent, toReact } from '@actdim/dynstruct/componentModel/react/hooks';
|
|
134
|
+
import { type BaseAppMsgStruct } from '@actdim/dynstruct/appDomain/appContracts';
|
|
135
|
+
|
|
136
|
+
// 1. Local Struct type - generic but private to file, default = BaseAppMsgStruct
|
|
137
|
+
type Struct<TMsgStruct extends BaseAppMsgStruct = BaseAppMsgStruct> = ComponentStruct<
|
|
138
|
+
TMsgStruct,
|
|
139
|
+
{
|
|
140
|
+
props: { /* ... */ };
|
|
141
|
+
}
|
|
142
|
+
>;
|
|
143
|
+
|
|
144
|
+
// 2. Hook-constructor - NOT generic, uses Struct with default
|
|
145
|
+
export const useXxx = (params: ComponentParams<Struct>): Component<Struct> => {
|
|
146
|
+
let c: Component<Struct>;
|
|
147
|
+
let m: ComponentModel<Struct>;
|
|
148
|
+
|
|
149
|
+
const def: ComponentDef<Struct> = {
|
|
150
|
+
regType: 'Xxx',
|
|
151
|
+
props: { /* defaults */ },
|
|
152
|
+
view: () => ( /* JSX using m.* and m.$.* */ ),
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
c = useComponent(def, params);
|
|
156
|
+
m = c.model;
|
|
157
|
+
return c;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
// 3. Exported type - concrete (non-generic) alias
|
|
161
|
+
export type XxxStruct = Struct;
|
|
162
|
+
|
|
163
|
+
// 4. React adapter - no explicit type params needed
|
|
164
|
+
export const Xxx = toReact(useXxx);
|
|
165
|
+
Xxx.displayName = 'Xxx';
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Rules
|
|
169
|
+
|
|
170
|
+
- **`Struct` stays local** - generic with `TMsgStruct` default, never exported directly.
|
|
171
|
+
- **Hook-constructor is non-generic** - `useXxx(params: ComponentParams<Struct>): Component<Struct>`.
|
|
172
|
+
- **`XxxStruct` export is non-generic** - `export type XxxStruct = Struct`.
|
|
173
|
+
- **`toReact` needs no type params** - `toReact(useXxx)` works because the hook is non-generic.
|
|
174
|
+
- **`displayName`** - always set `Xxx.displayName = 'Xxx'` after `toReact(...)` so Storybook and React DevTools show the correct name.
|
|
175
|
+
- **Disabled state** - use `m.$.isDisabled` (from `ComponentState`), not a dedicated `disabled` prop.
|
|
176
|
+
- **Loading state** - use explicit `loading?: boolean` prop or wire to `m.$.pendingRequestCount > 0`.
|
|
177
|
+
- **`m.$.isVisible`** - hide/show via component state, not a prop.
|
|
178
|
+
|
|
179
|
+
## Import Paths
|
|
180
|
+
|
|
181
|
+
```ts
|
|
182
|
+
// Contracts (types only)
|
|
183
|
+
import { ... } from '@actdim/dynstruct/componentModel/contracts';
|
|
184
|
+
|
|
185
|
+
// React utilities (useComponent, toReact)
|
|
186
|
+
import { ... } from '@actdim/dynstruct/componentModel/react/hooks';
|
|
187
|
+
// ^^^^^^^^^^^
|
|
188
|
+
// Note: the file lives at dist/componentModel/react/react.d.ts
|
|
189
|
+
// NOT dist/componentModel/react.d.ts - that file does not exist
|
|
190
|
+
|
|
191
|
+
// App domain
|
|
192
|
+
import { ... } from '@actdim/dynstruct/appDomain/appContracts';
|
|
193
|
+
import { ... } from '@actdim/dynstruct/appDomain/commonContracts';
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## MUI Composition Rules
|
|
197
|
+
|
|
198
|
+
Always follow the **official MUI website patterns** - use composable building blocks, not convenience shorthands:
|
|
199
|
+
|
|
200
|
+
| Component | Correct pattern |
|
|
201
|
+
|---|---|
|
|
202
|
+
| Select | `FormControl` + `InputLabel` + `Select` + `FormHelperText` |
|
|
203
|
+
| Checkbox (with label/error) | `FormControl` + `FormControlLabel` wrapping `Checkbox` + `FormHelperText` |
|
|
204
|
+
| Switch (with label/error) | `FormControl` + `FormControlLabel` wrapping `Switch` + `FormHelperText` |
|
|
205
|
+
| TextField | `TextField` (this IS the official atomic component, not a shorthand) |
|
|
206
|
+
| Button / IconButton | Use directly |
|
|
207
|
+
| Dialog | `Dialog` + `DialogTitle` + `DialogContent` + `DialogActions` |
|
|
208
|
+
| Alert | `Alert` directly (`onClose` for close button) |
|
|
209
|
+
|
|
210
|
+
- **`disabled`** always goes on the outermost container (`FormControl`, `Button`, etc.) - not inside, not as a duplicate.
|
|
211
|
+
- **`error`** and **`helperText`** always use `FormControl error={}` + `FormHelperText` - not ad-hoc inline text.
|
|
212
|
+
- **`sx`** type: when `FormControl` is the root, use `FormControlProps['sx']`, otherwise `MuiXxxProps['sx']`.
|
|
213
|
+
- For `labelId` (Select, etc.) use `c.id` from the dynstruct component instance to ensure uniqueness.
|
|
214
|
+
|
|
215
|
+
## Props Convention
|
|
216
|
+
|
|
217
|
+
- Map MUI prop types via `MuiXxxProps['propName']` - e.g. `MuiButtonProps['variant']`.
|
|
218
|
+
- Include `sx?` typed from the **outermost MUI element** (see MUI Composition Rules above).
|
|
219
|
+
- Reactive `ReactNode` props (icons, content, `React.FC`) are fine - MobX handles them as observable refs.
|
|
220
|
+
- Provide sensible defaults for all props in `def.props`.
|
|
221
|
+
|
|
222
|
+
## Storybook Stories
|
|
223
|
+
|
|
224
|
+
Every story file uses `AppContextProvider` + `StorageService` as the decorator. See `src/_stories/Button.stories.tsx` as the reference.
|
|
225
|
+
|
|
226
|
+
```tsx
|
|
227
|
+
import { AppContextProvider, appMsgBus } from './bootstrap';
|
|
228
|
+
import { StorageService } from '@actdim/dynstruct/services/react/StorageService';
|
|
229
|
+
|
|
230
|
+
const meta: Meta<typeof Xxx> = {
|
|
231
|
+
title: 'Controls/Xxx',
|
|
232
|
+
component: Xxx,
|
|
233
|
+
decorators: [
|
|
234
|
+
(Story) => (
|
|
235
|
+
<AppContextProvider value={{ msgBus: appMsgBus }}>
|
|
236
|
+
<StorageService storeName={'test'} />
|
|
237
|
+
<Story />
|
|
238
|
+
</AppContextProvider>
|
|
239
|
+
),
|
|
240
|
+
],
|
|
241
|
+
// ...
|
|
242
|
+
};
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
- Always use `Meta<typeof Xxx>` explicit annotation (not `satisfies`) - avoids TS2742 from pnpm MUI path references.
|
|
246
|
+
- `argTypes` for `startIcon`, `endIcon`, `sx`: set `control: false` (not Storybook-controllable).
|
|
247
|
+
- `FullWidth` story should use `parameters: { layout: 'padded' }`.
|
|
248
|
+
|
|
249
|
+
## File Layout
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
src/
|
|
253
|
+
Button.tsx ← one file per MUI component
|
|
254
|
+
TextField.tsx
|
|
255
|
+
...
|
|
256
|
+
_stories/
|
|
257
|
+
bootstrap.ts ← AppMsgStruct, appMsgBus, AppContextProvider
|
|
258
|
+
Button.stories.tsx
|
|
259
|
+
...
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Import from the package: `import { useButton, ButtonStruct } from '@actdim/dynstruct-mui/Button'`.
|
|
263
|
+
|
|
264
|
+
## Project specifics
|
|
265
|
+
|
|
262
266
|
<!-- BEGIN ALONG-RULES -->
|
|
263
267
|
See the following engineering guidelines:
|
|
264
268
|
- `[languages/typescript.md](.along/rules/languages/typescript.md)`
|
|
@@ -295,8 +299,8 @@ See the following engineering guidelines:
|
|
|
295
299
|
|
|
296
300
|
## 2. Cross-Links
|
|
297
301
|
- [[INDEX.md]] - Knowledge Base Root
|
|
298
|
-
- [[02-domain-model.md]] - Domain Model & Component Catalog
|
|
299
|
-
- [[03-setup-and-workflow.md]] - Setup, Build & Storybook Workflow
|
|
302
|
+
- [[02-[domain-model](./topic--domain-model.md).md]] - Domain Model & Component Catalog
|
|
303
|
+
- [[03-[setup-and-workflow](./topic--setup-and-workflow.md).md]] - Setup, Build & Storybook Workflow
|
|
300
304
|
|
|
301
305
|
---
|
|
302
306
|
|
|
@@ -345,8 +349,8 @@ See the following engineering guidelines:
|
|
|
345
349
|
|
|
346
350
|
## 3. Cross-Links
|
|
347
351
|
- [[INDEX.md]] - Knowledge Base Root
|
|
348
|
-
- [[01-architecture.md]] - System Architecture
|
|
349
|
-
- [[03-setup-and-workflow.md]] - Setup, Build & Storybook Workflow
|
|
352
|
+
- [[01-[architecture](./topic--architecture.md).md]] - System Architecture
|
|
353
|
+
- [[03-[setup-and-workflow](./topic--setup-and-workflow.md).md]] - Setup, Build & Storybook Workflow
|
|
350
354
|
|
|
351
355
|
---
|
|
352
356
|
|
|
@@ -387,5 +391,5 @@ Interactive stories exist for every wrapped Material UI component: `Button.stori
|
|
|
387
391
|
|
|
388
392
|
## 4. Cross-Links
|
|
389
393
|
- [[INDEX.md]] - Knowledge Base Root
|
|
390
|
-
- [[01-architecture.md]] - Architecture
|
|
391
|
-
- [[02-domain-model.md]] - Domain Model
|
|
394
|
+
- [[01-[architecture](./topic--architecture.md).md]] - Architecture
|
|
395
|
+
- [[02-[domain-model](./topic--domain-model.md).md]] - Domain Model
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actdim/dynstruct-mui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "MUI component wrappers for @actdim/dynstruct",
|
|
5
5
|
"author": "Pavel Borodaev",
|
|
6
6
|
"license": "MIT",
|
|
@@ -68,9 +68,9 @@
|
|
|
68
68
|
},
|
|
69
69
|
"sideEffects": false,
|
|
70
70
|
"peerDependencies": {
|
|
71
|
-
"@actdim/dynstruct": ">=1.
|
|
72
|
-
"@actdim/msgmesh": ">=1.
|
|
73
|
-
"@actdim/utico": ">=1.
|
|
71
|
+
"@actdim/dynstruct": ">=1.7.0",
|
|
72
|
+
"@actdim/msgmesh": ">=1.7.0",
|
|
73
|
+
"@actdim/utico": ">=1.7.0",
|
|
74
74
|
"@emotion/react": ">=11.14.0",
|
|
75
75
|
"@emotion/styled": ">=11.14.1",
|
|
76
76
|
"@mui/material": ">=9.0.1",
|
|
@@ -88,37 +88,38 @@
|
|
|
88
88
|
"uuid": ">=13.0.0"
|
|
89
89
|
},
|
|
90
90
|
"devDependencies": {
|
|
91
|
+
"@eslint/js": "^9.39.5",
|
|
91
92
|
"@faker-js/faker": "^10.4.0",
|
|
92
|
-
"@storybook/addon-docs": "10.0
|
|
93
|
-
"@storybook/addon-onboarding": "10.0
|
|
94
|
-
"@storybook/react-vite": "10.0
|
|
95
|
-
"@swc/core": "^1.
|
|
93
|
+
"@storybook/addon-docs": "10.6.0",
|
|
94
|
+
"@storybook/addon-onboarding": "10.6.0",
|
|
95
|
+
"@storybook/react-vite": "10.6.0",
|
|
96
|
+
"@swc/core": "^1.16.2",
|
|
96
97
|
"@types/chai": "^5.2.3",
|
|
97
98
|
"@types/mocha": "^10.0.10",
|
|
98
99
|
"@types/node": "^24.10.0",
|
|
99
|
-
"@types/react": "^19.2.
|
|
100
|
-
"@types/react-dom": "^19.2.
|
|
101
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
102
|
-
"@typescript-eslint/parser": "^8.
|
|
103
|
-
"@vitejs/plugin-react-swc": "^4.
|
|
100
|
+
"@types/react": "^19.2.18",
|
|
101
|
+
"@types/react-dom": "^19.2.7",
|
|
102
|
+
"@typescript-eslint/eslint-plugin": "^8.70.0",
|
|
103
|
+
"@typescript-eslint/parser": "^8.70.0",
|
|
104
|
+
"@vitejs/plugin-react-swc": "^4.3.3",
|
|
104
105
|
"chai": "^6.2.0",
|
|
105
|
-
"eslint": "^9.39.
|
|
106
|
+
"eslint": "^9.39.5",
|
|
106
107
|
"eslint-config-prettier": "^10.1.8",
|
|
107
108
|
"eslint-formatter-visualstudio": "^9.0.1",
|
|
108
|
-
"eslint-plugin-prettier": "^5.5.
|
|
109
|
+
"eslint-plugin-prettier": "^5.5.6",
|
|
109
110
|
"eslint-plugin-react": "^7.37.5",
|
|
110
|
-
"eslint-plugin-react-hooks": "^7.
|
|
111
|
-
"eslint-plugin-react-refresh": "^0.
|
|
112
|
-
"eslint-plugin-storybook": "10.0
|
|
111
|
+
"eslint-plugin-react-hooks": "^7.1.1",
|
|
112
|
+
"eslint-plugin-react-refresh": "^0.5.6",
|
|
113
|
+
"eslint-plugin-storybook": "10.6.0",
|
|
113
114
|
"globals": "^16.5.0",
|
|
114
115
|
"mocha": "^11.7.5",
|
|
115
116
|
"npm-check-updates": "^19.1.2",
|
|
116
|
-
"prettier": "^3.6
|
|
117
|
+
"prettier": "^3.9.6",
|
|
117
118
|
"prettier-plugin-classnames": "^0.8.5",
|
|
118
119
|
"shx": "^0.4.0",
|
|
119
|
-
"storybook": "10.0
|
|
120
|
+
"storybook": "10.6.0",
|
|
120
121
|
"typescript": "^5.9.3",
|
|
121
|
-
"typescript-eslint": "^8.
|
|
122
|
+
"typescript-eslint": "^8.70.0",
|
|
122
123
|
"vite": "^7.2.2",
|
|
123
124
|
"vite-plugin-dts": "^4.5.4",
|
|
124
125
|
"vite-tsconfig-paths": "^5.1.4",
|
|
@@ -129,7 +130,7 @@
|
|
|
129
130
|
"test": "npx vitest --config=vitest.node.config.ts --no-cache",
|
|
130
131
|
"test:w": "npx vitest --config=vitest.node.config.ts --watch",
|
|
131
132
|
"test:v8": "npx vite",
|
|
132
|
-
"lint": "eslint \"./**/*.{ts,tsx}\" -f visualstudio --
|
|
133
|
+
"lint": "eslint \"./**/*.{ts,tsx}\" -f visualstudio --report-unused-disable-directives --max-warnings 0",
|
|
133
134
|
"build": "tsc -b tsconfig.json --noEmit && vite build",
|
|
134
135
|
"pnpm:u": "pnpm update",
|
|
135
136
|
"pnpm:ou": "pnpm outdated",
|