@janbox/storefront-builder 1.0.5 → 1.0.7

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 (48) hide show
  1. package/README.md +47 -44
  2. package/dist/countdown-timer.node-CGKz1DZI.js +8252 -0
  3. package/dist/editor/hooks/use-editor-state.d.ts +13 -1
  4. package/dist/editor/lib/index.d.ts +4 -1
  5. package/dist/editor.js +461 -418
  6. package/dist/index-Bvy64nrI.js +4 -0
  7. package/dist/index-Du5uN6Rq.js +6015 -0
  8. package/dist/index.js +110 -5732
  9. package/dist/style.css +1 -1
  10. package/dist/templates.js +95 -71
  11. package/dist/{tooltip-CqfT80iK.js → tooltip-Coblboaw.js} +6 -6
  12. package/package.json +2 -7
  13. package/dist/countdown-timer.node-CAsCNVin.js +0 -2718
  14. package/dist/editor/lib/events.d.ts +0 -5
  15. package/dist/index-BxuniYfy.js +0 -4
  16. package/dist/index-DrJkOkbq.js +0 -5610
  17. package/dist/minus-C82LyzQP.js +0 -6
  18. package/lib/accordion/README.md +0 -39
  19. package/lib/accordion-content/README.md +0 -36
  20. package/lib/accordion-group/README.md +0 -106
  21. package/lib/accordion-summary/README.md +0 -37
  22. package/lib/box/README.md +0 -107
  23. package/lib/button/README.md +0 -94
  24. package/lib/cell/README.md +0 -119
  25. package/lib/countdown-timer/README.md +0 -157
  26. package/lib/flex-item/README.md +0 -111
  27. package/lib/flexbox/README.md +0 -120
  28. package/lib/grid/README.md +0 -133
  29. package/lib/heading/README.md +0 -53
  30. package/lib/icon/README.md +0 -98
  31. package/lib/image/README.md +0 -107
  32. package/lib/link/README.md +0 -111
  33. package/lib/list-item/README.md +0 -31
  34. package/lib/marquee/README.md +0 -111
  35. package/lib/marquee-item/README.md +0 -31
  36. package/lib/paragraph/README.md +0 -82
  37. package/lib/root/README.md +0 -33
  38. package/lib/swiper/README.md +0 -108
  39. package/lib/swiper-slide/README.md +0 -32
  40. package/lib/tab/README.md +0 -35
  41. package/lib/tab-content/README.md +0 -35
  42. package/lib/tab-list/README.md +0 -35
  43. package/lib/tab-panel/README.md +0 -35
  44. package/lib/tabs/README.md +0 -90
  45. package/lib/text/README.md +0 -90
  46. package/lib/unknown/README.md +0 -48
  47. package/lib/unordered-list/README.md +0 -82
  48. package/lib/video/README.md +0 -91
@@ -1,90 +0,0 @@
1
- # TabsNode
2
-
3
- Root container cho tabs component. Quản lý active state và chứa `TabListNode` (headers) + `TabContentNode` (panels).
4
-
5
- ## Resolved name
6
-
7
- `Tabs`
8
-
9
- ## Configurable props
10
-
11
- ### Top-level props
12
-
13
- | Prop | Type | Description |
14
- | --- | --- | --- |
15
- | `defaultActiveIndex` | `number` | Index của tab active mặc định (0-based) |
16
-
17
- ### `sx` props
18
-
19
- ```ts
20
- sx?: {
21
- // size
22
- width?: number | string
23
-
24
- // spacing
25
- paddingTop?: number
26
- paddingRight?: number
27
- paddingBottom?: number
28
- paddingLeft?: number
29
- marginTop?: number
30
- marginRight?: number
31
- marginBottom?: number
32
- marginLeft?: number
33
-
34
- // border
35
- borderStyle?: string
36
- borderColor?: string
37
- borderTopWidth?: number
38
- borderRightWidth?: number
39
- borderBottomWidth?: number
40
- borderLeftWidth?: number
41
- borderTopLeftRadius?: number | string
42
- borderTopRightRadius?: number | string
43
- borderBottomRightRadius?: number | string
44
- borderBottomLeftRadius?: number | string
45
-
46
- // background
47
- backgroundColor?: string
48
- backgroundImage?: string
49
- backgroundPosition?: string
50
- backgroundRepeat?: string
51
- backgroundSize?: string
52
- backgroundAttachment?: string
53
- background?: string
54
-
55
- // responsive overrides
56
- sm?: { /* same keys above */ }
57
- md?: { /* same keys above */ }
58
- lg?: { /* same keys above */ }
59
- }
60
- ```
61
-
62
- ## Usage
63
-
64
- ```tsx
65
- import { TabsNode } from '@janbox/storefront-builder';
66
-
67
- <TabsNode
68
- defaultActiveIndex={0}
69
- sx={{
70
- width: '100%',
71
- paddingTop: 16,
72
- paddingBottom: 16,
73
- }}
74
- >
75
- {/* TabListNode và TabContentNode tự động được thêm bởi editor */}
76
- </TabsNode>
77
- ```
78
-
79
- ## Rules
80
-
81
- - **Canvas**: no.
82
- - **Children**: phải có `TabListNode` và `TabContentNode`.
83
- - Inspector có "Items management" để add/remove/reorder tabs — sync giữa `TabNode` và `TabPanelNode`.
84
-
85
- ## Related nodes
86
-
87
- - [`TabListNode`](../tab-list/README.md) — container cho tab headers
88
- - [`TabNode`](../tab/README.md) — mỗi tab header button
89
- - [`TabContentNode`](../tab-content/README.md) — container cho tab panels
90
- - [`TabPanelNode`](../tab-panel/README.md) — nội dung của mỗi tab
@@ -1,90 +0,0 @@
1
- # TextNode
2
-
3
- Inline/block text node có thể chỉnh typography. Render ra bất kỳ HTML tag nào qua prop `as`. Hỗ trợ inline editing trong canvas.
4
-
5
- ## Resolved name
6
-
7
- `Text`
8
-
9
- ## Configurable props
10
-
11
- ### Top-level props
12
-
13
- | Prop | Type | Description |
14
- | --- | --- | --- |
15
- | `as` | `HTMLElementType` | HTML tag render ra (mặc định `p`) |
16
- | `sizeVariant` | `TypographySizeVariant` | Preset typography size từ theme |
17
-
18
- `sizeVariant` hỗ trợ responsive: `sizeVariant="base"` xs, `md={{ sizeVariant: 'lg' }}` desktop.
19
-
20
- **`TypographySizeVariant`:** `'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl' | '6xl'`
21
-
22
- ### `sx` props
23
-
24
- ```ts
25
- sx?: {
26
- // typography (áp dụng toàn breakpoint — không responsive)
27
- color?: string
28
- fontStyle?: 'normal' | 'italic'
29
- fontWeight?: number | string
30
- textDecorationLine?: 'none' | 'underline' | 'line-through'
31
- textAlign?: 'left' | 'center' | 'right' | 'justify'
32
- textTransform?: 'none' | 'uppercase' | 'lowercase' | 'capitalize'
33
-
34
- // size
35
- width?: number | string
36
-
37
- // spacing
38
- paddingTop?: number
39
- paddingRight?: number
40
- paddingBottom?: number
41
- paddingLeft?: number
42
- marginTop?: number
43
- marginRight?: number
44
- marginBottom?: number
45
- marginLeft?: number
46
-
47
- // responsive overrides
48
- sm?: { /* same keys above */ }
49
- md?: { /* same keys above */ }
50
- lg?: { /* same keys above */ }
51
- }
52
- ```
53
-
54
- > `color`, `fontStyle`, `textDecorationLine`, `textAlign`, `textTransform` được editor set ở breakpoint `xs` (áp dụng toàn bộ). `fontWeight` và `sizeVariant` hỗ trợ responsive.
55
-
56
- ## Usage
57
-
58
- ```tsx
59
- import { TextNode } from '@janbox/storefront-builder';
60
-
61
- // Text đơn giản
62
- <TextNode>Hello world</TextNode>
63
-
64
- // Đổi tag, size variant
65
- <TextNode as="span" sizeVariant="sm">
66
- Small label
67
- </TextNode>
68
-
69
- // sizeVariant responsive
70
- <TextNode sizeVariant="base" md={{ sizeVariant: 'lg' }}>
71
- Body text
72
- </TextNode>
73
-
74
- // Màu, căn giữa, font weight responsive
75
- <TextNode
76
- sx={{
77
- color: '#333333',
78
- textAlign: 'center',
79
- fontWeight: 400,
80
- md: { fontWeight: 600 },
81
- }}
82
- >
83
- Styled text
84
- </TextNode>
85
- ```
86
-
87
- ## Rules
88
-
89
- - **Canvas**: no — không chứa node con.
90
- - **Inline editing**: có thể double-click để chỉnh nội dung trực tiếp trong canvas.
@@ -1,48 +0,0 @@
1
- # UnknownNode
2
-
3
- Fallback node hiển thị khi một node trong serialized data có `resolvedName` không tồn tại trong resolver.
4
-
5
- ## Resolved name
6
-
7
- `Unknown`
8
-
9
- ## Configurable props
10
-
11
- Không có props.
12
-
13
- ## Behavior
14
-
15
- - **Render mode** (`enabled: false`): render nothing — hoàn toàn invisible.
16
- - **Editor mode** (`enabled: true`): hiển thị placeholder "Section is not available" kèm nút **Remove** để xóa node.
17
-
18
- ## Khi nào xảy ra
19
-
20
- `Canvas` tự động thay thế node bằng `UnknownNode` khi load `SerializedNodes` mà `resolvedName` không có trong resolver:
21
-
22
- ```ts
23
- // Trong Canvas component
24
- const resolvedNode = resolver[resolvedName];
25
- if (!resolvedNode) {
26
- value.type = { resolvedName: CoreNodeResolvedEnum.Unknown };
27
- }
28
- ```
29
-
30
- Thường xảy ra khi:
31
- - Custom node bị xóa khỏi codebase nhưng data cũ vẫn còn lưu
32
- - Resolver không được pass đầy đủ node types
33
-
34
- ## Usage
35
-
36
- Không cần dùng trực tiếp. Được xử lý tự động bởi `Canvas`.
37
-
38
- Nếu muốn tránh `UnknownNode` xuất hiện, đảm bảo truyền đầy đủ resolver khi mount `Composer`:
39
-
40
- ```tsx
41
- import { MyCustomNode } from './my-custom-node';
42
-
43
- <Composer resolver={{ MyCustomNode }}>
44
- <Canvas data={savedNodes}>
45
- <RootNode />
46
- </Canvas>
47
- </Composer>
48
- ```
@@ -1,82 +0,0 @@
1
- # UnorderedListNode
2
-
3
- Danh sách dọc (`ul`) — container cho các `ListItemNode`. Không render bullet mặc định, layout dùng flexbox column.
4
-
5
- ## Resolved name
6
-
7
- `UnorderedList`
8
-
9
- ## Configurable props
10
-
11
- ### `sx` props
12
-
13
- ```ts
14
- sx?: {
15
- // layout
16
- width?: number | string
17
- rowGap?: number // khoảng cách giữa các items
18
- alignItems?: 'flex-start' | 'flex-end' | 'center' // căn ngang các items
19
-
20
- // spacing
21
- paddingTop?: number
22
- paddingRight?: number
23
- paddingBottom?: number
24
- paddingLeft?: number
25
- marginTop?: number
26
- marginRight?: number
27
- marginBottom?: number
28
- marginLeft?: number
29
-
30
- // border
31
- borderStyle?: string
32
- borderColor?: string
33
- borderTopWidth?: number
34
- borderRightWidth?: number
35
- borderBottomWidth?: number
36
- borderLeftWidth?: number
37
- borderTopLeftRadius?: number | string
38
- borderTopRightRadius?: number | string
39
- borderBottomRightRadius?: number | string
40
- borderBottomLeftRadius?: number | string
41
-
42
- // responsive overrides
43
- sm?: { /* same keys above */ }
44
- md?: { /* same keys above */ }
45
- lg?: { /* same keys above */ }
46
- }
47
- ```
48
-
49
- ## Usage
50
-
51
- ```tsx
52
- import { UnorderedListNode, ListItemNode, TextNode, IconNode } from '@janbox/storefront-builder';
53
-
54
- // Danh sách các text items
55
- <UnorderedListNode sx={{ rowGap: 8 }}>
56
- <ListItemNode>
57
- <TextNode>Item 1</TextNode>
58
- </ListItemNode>
59
- <ListItemNode>
60
- <TextNode>Item 2</TextNode>
61
- </ListItemNode>
62
- </UnorderedListNode>
63
-
64
- // Icon + text, căn giữa dọc
65
- <UnorderedListNode sx={{ rowGap: 12, width: '100%' }}>
66
- <ListItemNode>
67
- <FlexboxNode sx={{ flexDirection: 'row', alignItems: 'center', columnGap: 8 }}>
68
- <FlexItemNode><IconNode source="..." size={16} /></FlexItemNode>
69
- <FlexItemNode sx={{ flexGrow: 1 }}><TextNode>Feature description</TextNode></FlexItemNode>
70
- </FlexboxNode>
71
- </ListItemNode>
72
- </UnorderedListNode>
73
- ```
74
-
75
- ## Rules
76
-
77
- - **Canvas**: no — không trực tiếp nhận drop.
78
- - **Children**: `ListItemNode` — thêm qua inspector.
79
-
80
- ## Related nodes
81
-
82
- - [`ListItemNode`](../list-item/README.md) — mỗi item trong list
@@ -1,91 +0,0 @@
1
- # VideoNode
2
-
3
- Video player node dùng `react-player`. Hỗ trợ nhiều nguồn video: YouTube, Vimeo, file MP4, v.v.
4
-
5
- ## Resolved name
6
-
7
- `Video`
8
-
9
- ## Configurable props
10
-
11
- ### Top-level props
12
-
13
- | Prop | Type | Description |
14
- | --- | --- | --- |
15
- | `src` | `string` | URL video (YouTube, Vimeo, MP4, v.v.) |
16
- | `light` | `string \| boolean` | URL thumbnail hiển thị trước khi play |
17
-
18
- ### `sx` props
19
-
20
- ```ts
21
- sx?: {
22
- // size
23
- width?: number | string
24
- aspectRatio?: string // ví dụ: '16 / 9', '1 / 1'
25
-
26
- // spacing
27
- paddingTop?: number
28
- paddingRight?: number
29
- paddingBottom?: number
30
- paddingLeft?: number
31
- marginTop?: number
32
- marginRight?: number
33
- marginBottom?: number
34
- marginLeft?: number
35
-
36
- // border
37
- borderStyle?: string
38
- borderColor?: string
39
- borderTopWidth?: number
40
- borderRightWidth?: number
41
- borderBottomWidth?: number
42
- borderLeftWidth?: number
43
- borderTopLeftRadius?: number | string
44
- borderTopRightRadius?: number | string
45
- borderBottomRightRadius?: number | string
46
- borderBottomLeftRadius?: number | string
47
-
48
- // responsive overrides
49
- sm?: { /* same keys above */ }
50
- md?: { /* same keys above */ }
51
- lg?: { /* same keys above */ }
52
- }
53
- ```
54
-
55
- ## Usage
56
-
57
- ```tsx
58
- import { VideoNode } from '@janbox/storefront-builder';
59
-
60
- // YouTube video
61
- <VideoNode
62
- src="https://www.youtube.com/watch?v=dQw4w9WgXcQ"
63
- sx={{ width: '100%', aspectRatio: '16 / 9' }}
64
- />
65
-
66
- // MP4 video với thumbnail
67
- <VideoNode
68
- src="https://example.com/video.mp4"
69
- light="https://example.com/thumbnail.jpg"
70
- sx={{ width: '100%', aspectRatio: '16 / 9' }}
71
- />
72
-
73
- // Responsive width, aspect ratio cố định
74
- <VideoNode
75
- src="https://vimeo.com/123456789"
76
- sx={{
77
- width: '100%',
78
- aspectRatio: '16 / 9',
79
- borderTopLeftRadius: 8,
80
- borderTopRightRadius: 8,
81
- borderBottomLeftRadius: 8,
82
- borderBottomRightRadius: 8,
83
- md: { width: '80%' },
84
- }}
85
- />
86
- ```
87
-
88
- ## Rules
89
-
90
- - **Canvas**: no — không chứa node con.
91
- - Dùng `react-player` bên dưới — hỗ trợ YouTube, Vimeo, Twitch, SoundCloud, Streamable, Wistia, Facebook, file video, v.v.