@fewbox/den-app 0.1.43

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 (229) hide show
  1. package/index-app.d.ts +13 -0
  2. package/index.css +1 -0
  3. package/index.js +2 -0
  4. package/index.js.map +1 -0
  5. package/jest.setup.d.ts +1 -0
  6. package/package.json +26 -0
  7. package/scripts/copy-templates.js +29 -0
  8. package/scripts/generate-packages.js +41 -0
  9. package/src/components/Auth/FigmaSignin/index.d.ts +9 -0
  10. package/src/components/Auth/GoogleGrant/index.d.ts +41 -0
  11. package/src/components/Auth/GoogleSignin/index.d.ts +18 -0
  12. package/src/components/Auth/WeComSignin/index.d.ts +8 -0
  13. package/src/components/Auth/util.d.ts +17 -0
  14. package/src/components/Debug/index.d.ts +6 -0
  15. package/src/components/Engine/Base/NativeAttributeMap.d.ts +2 -0
  16. package/src/components/Engine/Base/ViewAttributes.d.ts +2 -0
  17. package/src/components/Engine/Base/index.d.ts +61 -0
  18. package/src/components/Engine/index.d.ts +125 -0
  19. package/src/components/Layout/Display/index.d.ts +18 -0
  20. package/src/components/Layout/Dock/index.d.ts +42 -0
  21. package/src/components/Layout/Flex/index.d.ts +45 -0
  22. package/src/components/Layout/FlexItem/index.d.ts +18 -0
  23. package/src/components/Layout/Position/index.d.ts +32 -0
  24. package/src/components/Layout/PositionArea/index.d.ts +10 -0
  25. package/src/components/Layout/Responsive/index.d.ts +8 -0
  26. package/src/components/Layout/SBaseline/index.d.ts +5 -0
  27. package/src/components/Layout/SBottom/index.d.ts +6 -0
  28. package/src/components/Layout/SCenter/index.d.ts +5 -0
  29. package/src/components/Layout/SLeft/index.d.ts +5 -0
  30. package/src/components/Layout/SMiddle/index.d.ts +5 -0
  31. package/src/components/Layout/SRight/index.d.ts +5 -0
  32. package/src/components/Layout/SStretch/index.d.ts +5 -0
  33. package/src/components/Layout/STop/index.d.ts +5 -0
  34. package/src/components/Layout/X/index.d.ts +5 -0
  35. package/src/components/Layout/XAround/index.d.ts +5 -0
  36. package/src/components/Layout/XAutoBoth/index.d.ts +5 -0
  37. package/src/components/Layout/XAutoCenter/index.d.ts +5 -0
  38. package/src/components/Layout/XAutoLeft/index.d.ts +5 -0
  39. package/src/components/Layout/XAutoLefts/index.d.ts +5 -0
  40. package/src/components/Layout/XAutoRight/index.d.ts +5 -0
  41. package/src/components/Layout/XAutoRights/index.d.ts +5 -0
  42. package/src/components/Layout/XBase/index.d.ts +18 -0
  43. package/src/components/Layout/XBetween/index.d.ts +5 -0
  44. package/src/components/Layout/XCenter/index.d.ts +5 -0
  45. package/src/components/Layout/XCustom/index.d.ts +7 -0
  46. package/src/components/Layout/XCustomBoth/index.d.ts +7 -0
  47. package/src/components/Layout/XEvenly/index.d.ts +5 -0
  48. package/src/components/Layout/XLeft/index.d.ts +5 -0
  49. package/src/components/Layout/XRight/index.d.ts +5 -0
  50. package/src/components/Layout/XWrapAround/index.d.ts +5 -0
  51. package/src/components/Layout/XWrapBetween/index.d.ts +5 -0
  52. package/src/components/Layout/XWrapBottom/index.d.ts +5 -0
  53. package/src/components/Layout/XWrapEvenly/index.d.ts +5 -0
  54. package/src/components/Layout/XWrapMiddle/index.d.ts +5 -0
  55. package/src/components/Layout/XWrapTop/index.d.ts +5 -0
  56. package/src/components/Layout/Y/index.d.ts +5 -0
  57. package/src/components/Layout/YAround/index.d.ts +5 -0
  58. package/src/components/Layout/YAutoBoth/index.d.ts +5 -0
  59. package/src/components/Layout/YAutoBottom/index.d.ts +5 -0
  60. package/src/components/Layout/YAutoBottoms/index.d.ts +5 -0
  61. package/src/components/Layout/YAutoCenter/index.d.ts +5 -0
  62. package/src/components/Layout/YAutoTop/index.d.ts +5 -0
  63. package/src/components/Layout/YAutoTops/index.d.ts +5 -0
  64. package/src/components/Layout/YBase/index.d.ts +18 -0
  65. package/src/components/Layout/YBetween/index.d.ts +5 -0
  66. package/src/components/Layout/YBottom/index.d.ts +5 -0
  67. package/src/components/Layout/YCustom/index.d.ts +7 -0
  68. package/src/components/Layout/YCustomBoth/index.d.ts +7 -0
  69. package/src/components/Layout/YEvenly/index.d.ts +5 -0
  70. package/src/components/Layout/YMiddle/index.d.ts +5 -0
  71. package/src/components/Layout/YTop/index.d.ts +5 -0
  72. package/src/components/Layout/YWrapAround/index.d.ts +5 -0
  73. package/src/components/Layout/YWrapBetween/index.d.ts +5 -0
  74. package/src/components/Layout/YWrapCenter/index.d.ts +5 -0
  75. package/src/components/Layout/YWrapEvenly/index.d.ts +5 -0
  76. package/src/components/Layout/YWrapLeft/index.d.ts +5 -0
  77. package/src/components/Layout/YWrapRight/index.d.ts +5 -0
  78. package/src/components/Layout/index.d.ts +8 -0
  79. package/src/components/Layout/util.d.ts +6 -0
  80. package/src/components/View/VActionForm/index.d.ts +7 -0
  81. package/src/components/View/VAnimation/index.d.ts +127 -0
  82. package/src/components/View/VAudio/index.d.ts +10 -0
  83. package/src/components/View/VAvatar/index.d.ts +12 -0
  84. package/src/components/View/VBackground/index.d.ts +18 -0
  85. package/src/components/View/VBadge/index.d.ts +6 -0
  86. package/src/components/View/VBlock/index.d.ts +9 -0
  87. package/src/components/View/VBoundary/index.d.ts +6 -0
  88. package/src/components/View/VCard/index.d.ts +8 -0
  89. package/src/components/View/VCardMedia/index.d.ts +9 -0
  90. package/src/components/View/VCardSocial/index.d.ts +13 -0
  91. package/src/components/View/VCardWindow/index.d.ts +15 -0
  92. package/src/components/View/VChromeExtensionValidator/index.d.ts +23 -0
  93. package/src/components/View/VDynamic/index.d.ts +7 -0
  94. package/src/components/View/VErrorBoundary/index.d.ts +18 -0
  95. package/src/components/View/VFooter/index.d.ts +5 -0
  96. package/src/components/View/VForm/index.d.ts +13 -0
  97. package/src/components/View/VFrame/index.d.ts +12 -0
  98. package/src/components/View/VGoogleFont/index.d.ts +18 -0
  99. package/src/components/View/VHR/index.d.ts +5 -0
  100. package/src/components/View/VHeader/index.d.ts +5 -0
  101. package/src/components/View/VHyperlink/index.d.ts +13 -0
  102. package/src/components/View/VImage/index.d.ts +13 -0
  103. package/src/components/View/VInput/VBase64File/index.d.ts +10 -0
  104. package/src/components/View/VInput/VCheckBox/index.d.ts +6 -0
  105. package/src/components/View/VInput/VColor/index.d.ts +7 -0
  106. package/src/components/View/VInput/VDate/index.d.ts +7 -0
  107. package/src/components/View/VInput/VDatetimeLocal/index.d.ts +7 -0
  108. package/src/components/View/VInput/VDropdown/index.d.ts +38 -0
  109. package/src/components/View/VInput/VEmail/index.d.ts +5 -0
  110. package/src/components/View/VInput/VFile/index.d.ts +29 -0
  111. package/src/components/View/VInput/VGroup/index.d.ts +10 -0
  112. package/src/components/View/VInput/VHidden/index.d.ts +5 -0
  113. package/src/components/View/VInput/VMonth/index.d.ts +5 -0
  114. package/src/components/View/VInput/VNumber/index.d.ts +5 -0
  115. package/src/components/View/VInput/VPassword/index.d.ts +5 -0
  116. package/src/components/View/VInput/VRadio/index.d.ts +6 -0
  117. package/src/components/View/VInput/VRange/index.d.ts +10 -0
  118. package/src/components/View/VInput/VSearch/index.d.ts +5 -0
  119. package/src/components/View/VInput/VSubmit/index.d.ts +8 -0
  120. package/src/components/View/VInput/VSubmitWrapper/index.d.ts +6 -0
  121. package/src/components/View/VInput/VTel/index.d.ts +5 -0
  122. package/src/components/View/VInput/VTextBox/index.d.ts +6 -0
  123. package/src/components/View/VInput/VTime/index.d.ts +5 -0
  124. package/src/components/View/VInput/VUrl/index.d.ts +5 -0
  125. package/src/components/View/VInput/VWeek/index.d.ts +5 -0
  126. package/src/components/View/VInput/index.d.ts +29 -0
  127. package/src/components/View/VLabel/index.d.ts +57 -0
  128. package/src/components/View/VLoading/index.d.ts +8 -0
  129. package/src/components/View/VMain/index.d.ts +5 -0
  130. package/src/components/View/VMask/index.d.ts +5 -0
  131. package/src/components/View/VMount/index.d.ts +5 -0
  132. package/src/components/View/VPhoto/index.d.ts +20 -0
  133. package/src/components/View/VRoot/index.d.ts +15 -0
  134. package/src/components/View/VSection/index.d.ts +5 -0
  135. package/src/components/View/VSelect/index.d.ts +14 -0
  136. package/src/components/View/VShadow/index.d.ts +15 -0
  137. package/src/components/View/VShape/VEllipse/index.d.ts +10 -0
  138. package/src/components/View/VShape/VLine/index.d.ts +10 -0
  139. package/src/components/View/VShape/VRectangle/index.d.ts +10 -0
  140. package/src/components/View/VStack/index.d.ts +5 -0
  141. package/src/components/View/VSvg/index.d.ts +15 -0
  142. package/src/components/View/VSwitch/index.d.ts +13 -0
  143. package/src/components/View/VTemplate/index.d.ts +5 -0
  144. package/src/components/View/VText/index.d.ts +23 -0
  145. package/src/components/View/VTextArea/index.d.ts +12 -0
  146. package/src/components/View/VTheme/index.d.ts +42 -0
  147. package/src/components/View/VTooltip/index.d.ts +17 -0
  148. package/src/components/View/VTree/Block/index.d.ts +14 -0
  149. package/src/components/View/VTree/index.d.ts +15 -0
  150. package/src/components/View/VVideo/index.d.ts +10 -0
  151. package/src/components/View/VZone/index.d.ts +14 -0
  152. package/src/components/app.d.ts +11 -0
  153. package/src/components/consts.d.ts +2 -0
  154. package/src/components/core.d.ts +117 -0
  155. package/src/components/util.d.ts +1 -0
  156. package/src/components/web.d.ts +9 -0
  157. package/src/fewbox/index.d.ts +42 -0
  158. package/src/language/index.d.ts +13 -0
  159. package/src/network/FormHeaders.d.ts +2 -0
  160. package/src/network/IGraphQL.d.ts +6 -0
  161. package/src/network/JsonHeaders.d.ts +5 -0
  162. package/src/network/Network.d.ts +45 -0
  163. package/src/network/NetworkObservableBase.d.ts +14 -0
  164. package/src/network/StreamObservableBase.d.ts +11 -0
  165. package/src/network/UploadHeaders.d.ts +2 -0
  166. package/src/network/WS.d.ts +11 -0
  167. package/src/network/ajax/default/Delete.d.ts +5 -0
  168. package/src/network/ajax/default/DeleteText.d.ts +5 -0
  169. package/src/network/ajax/default/Get.d.ts +5 -0
  170. package/src/network/ajax/default/GetLocal.d.ts +5 -0
  171. package/src/network/ajax/default/GetText.d.ts +5 -0
  172. package/src/network/ajax/default/NetworkObservableAjax.d.ts +7 -0
  173. package/src/network/ajax/default/Patch.d.ts +5 -0
  174. package/src/network/ajax/default/PatchText.d.ts +5 -0
  175. package/src/network/ajax/default/Post.d.ts +5 -0
  176. package/src/network/ajax/default/PostText.d.ts +5 -0
  177. package/src/network/ajax/default/Put.d.ts +5 -0
  178. package/src/network/ajax/default/PutText.d.ts +5 -0
  179. package/src/network/ajax/external/DeleteExternal.d.ts +5 -0
  180. package/src/network/ajax/external/DeleteTextExternal.d.ts +5 -0
  181. package/src/network/ajax/external/GetExternal.d.ts +5 -0
  182. package/src/network/ajax/external/GetTextExternal.d.ts +5 -0
  183. package/src/network/ajax/external/NetworkObservableAjaxExternal.d.ts +8 -0
  184. package/src/network/ajax/external/PatchExternal.d.ts +5 -0
  185. package/src/network/ajax/external/PatchTextExternal.d.ts +5 -0
  186. package/src/network/ajax/external/PostExternal.d.ts +5 -0
  187. package/src/network/ajax/external/PostTextExternal.d.ts +5 -0
  188. package/src/network/ajax/external/PutExternal.d.ts +5 -0
  189. package/src/network/ajax/external/PutTextExternal.d.ts +5 -0
  190. package/src/network/fetch/default/DeleteFetch.d.ts +5 -0
  191. package/src/network/fetch/default/GetFetch.d.ts +5 -0
  192. package/src/network/fetch/default/NetworkObservableFetch.d.ts +7 -0
  193. package/src/network/fetch/default/PatchFetch.d.ts +5 -0
  194. package/src/network/fetch/default/PostFetch.d.ts +5 -0
  195. package/src/network/fetch/default/PutFetch.d.ts +5 -0
  196. package/src/network/fetch/external/DeleteFetchExternal.d.ts +5 -0
  197. package/src/network/fetch/external/GetFetchExternal.d.ts +5 -0
  198. package/src/network/fetch/external/NetworkObservableFetchExternal.d.ts +8 -0
  199. package/src/network/fetch/external/PatchFetchExternal.d.ts +5 -0
  200. package/src/network/fetch/external/PostFetchExternal.d.ts +5 -0
  201. package/src/network/fetch/external/PutFetchExternal.d.ts +5 -0
  202. package/src/network/graphql/default/GQL.d.ts +6 -0
  203. package/src/network/graphql/default/GQLUpload.d.ts +5 -0
  204. package/src/network/graphql/default/NetworkObservableGQL.d.ts +7 -0
  205. package/src/network/graphql/external/GQLExternal.d.ts +6 -0
  206. package/src/network/graphql/external/GQLExternalUpload.d.ts +6 -0
  207. package/src/network/graphql/external/NetworkObservableGQLExternal.d.ts +7 -0
  208. package/src/network/index.d.ts +47 -0
  209. package/src/network/sse/default/GetSSE.d.ts +5 -0
  210. package/src/network/sse/default/PostSSE.d.ts +5 -0
  211. package/src/network/sse/default/StreamObservableSSE.d.ts +5 -0
  212. package/src/network/sse/external/GetSSEExternal.d.ts +5 -0
  213. package/src/network/sse/external/PostSSEExternal.d.ts +5 -0
  214. package/src/network/sse/external/StreamObservableSSEExternal.d.ts +6 -0
  215. package/src/network/util.d.ts +5 -0
  216. package/src/store/EnumDictionary.d.ts +3 -0
  217. package/src/store/IContinuePaging.d.ts +4 -0
  218. package/src/store/IList.d.ts +3 -0
  219. package/src/store/IMetaResponse.d.ts +5 -0
  220. package/src/store/IPaging.d.ts +6 -0
  221. package/src/store/IPayloadResponse.d.ts +4 -0
  222. package/src/store/Json.d.ts +9 -0
  223. package/src/store/index.d.ts +7 -0
  224. package/templates/.claude/skills/fewbox-den/SKILL.md +1111 -0
  225. package/templates/FEWBOX.md +72 -0
  226. package/templates/style/_core.scss +288 -0
  227. package/templates/style/_root-properties.scss +55 -0
  228. package/templates/style/_root.scss +6 -0
  229. package/templates/style/_variables.scss +193 -0
@@ -0,0 +1,1111 @@
1
+ ---
2
+ name: fewbox-den
3
+ description: Use when writing React UI with the fewbox-den component library. Provides component API reference for layouts (X/Y/S series), views (VLabel, VForm, VInput, etc.), network clients (Fetch, SSE, GraphQL, WebSocket), styling (ColorType, FontSizeType), and common patterns (page layout, forms, cards). Invoke this skill when you see Den.Components imports or need to create UI with fewbox-den.
4
+ allowed-tools: Read, Grep, Glob
5
+ ---
6
+
7
+ # FewBox Den - Component Library Reference
8
+
9
+ When writing code that uses fewbox-den, follow the patterns and API documented below.
10
+
11
+ ## Import Pattern
12
+
13
+ All components are accessed through the `Den` namespace:
14
+
15
+ ```tsx
16
+ import { Den } from '@fewbox/den'; // core variant
17
+ import { Den } from '@fewbox/den-app'; // app variant (includes network/store)
18
+ import { Den } from '@fewbox/den-web'; // web variant
19
+
20
+ // Components accessed via:
21
+ Den.Components.XCenter
22
+ Den.Components.VLabel
23
+ Den.Components.ColorType // enums are also under Components
24
+ ```
25
+
26
+ ### Variant Exports
27
+
28
+ - **core**: Layout (X/Y/S/Flex/Position/Dock/Display/Responsive), View (VBoundary, VLabel, VText, VForm, VInput/*, VSelect, VDropdown, VSwitch, VImage, VSvg, VBackground, VAnimation, VTooltip, VLoading, VErrorBoundary, VShape/*, VHyperlink, VMask, VFrame, VTheme, VHeader/VMain/VFooter, VHR, VSection, VZone, VAudio, VVideo, VShadow)
29
+ - **web**: core + Debug, VGoogleFont, VChromeExtensionValidator, GoogleGrant, GoogleSignin, FigmaSignin, WeComSignin
30
+ - **app**: web + VDynamic, VAvatar, VBlock, VCard, VCardMedia, VCardSocial, VCardWindow, VPhoto, VStack, VTree
31
+
32
+ ## Core Concepts
33
+
34
+ ### Common Props (IBaseProps)
35
+
36
+ All components extend `IBaseProps` which provides these shared props:
37
+
38
+ | Prop | Type | Description |
39
+ |------|------|-------------|
40
+ | `className` | `string` | Additional CSS classes |
41
+ | `style` | `CSSProperties` | Inline styles |
42
+ | `fontSize` | `FontSizeType \| string` | Font size preset or custom value |
43
+ | `fontWeight` | `FontWeightType` | Font weight (Thin through Black) |
44
+ | `frontColor` | `ColorType \| string` | Text/foreground color |
45
+ | `backgroundColor` | `ColorType \| string` | Background color |
46
+ | `borderColor` | `ColorType \| string` | Border color |
47
+ | `borderDirection` | `DirectionType` | Which sides get the border |
48
+ | `padding` | `string` | CSS padding |
49
+ | `margin` | `string` | CSS margin |
50
+ | `width` | `string` | CSS width |
51
+ | `height` | `string` | CSS height |
52
+ | `minWidth` | `string` | CSS min-width |
53
+ | `minHeight` | `string` | CSS min-height |
54
+ | `maxWidth` | `string` | CSS max-width |
55
+ | `maxHeight` | `string` | CSS max-height |
56
+ | `borderRadius` | `string` | CSS border-radius |
57
+ | `borderWidth` | `string` | CSS border-width |
58
+ | `borderStyle` | `string` | CSS border-style |
59
+ | `opacity` | `number` | CSS opacity |
60
+ | `display` | `string` | CSS display |
61
+ | `overflow` | `string` | CSS overflow |
62
+ | `cursor` | `string` | CSS cursor |
63
+ | `selfShrink` | `number` | flex-shrink for the component itself |
64
+ | `selfGrow` | `number` | flex-grow for the component itself |
65
+ | `selfBasis` | `string` | flex-basis for the component itself |
66
+ | `isDefaultValue` | `boolean` | Apply default transparency and color resets |
67
+
68
+ ### Color System (ColorType)
69
+
70
+ Pre-defined semantic colors with opacity variants:
71
+
72
+ ```tsx
73
+ ColorType.Font // #000
74
+ ColorType.Body // #f5f8fa
75
+ ColorType.White // #fff
76
+ ColorType.Black // #000
77
+ ColorType.Light // light gray
78
+ ColorType.Dark // dark gray
79
+ ColorType.Primary // magenta
80
+ ColorType.Secondary // pink
81
+ ColorType.Tertiary // gold
82
+ ColorType.Info // blue
83
+ ColorType.Success // green
84
+ ColorType.Warning // yellow
85
+ ColorType.Error // red
86
+ ColorType.Border // border color
87
+ ColorType.Placeholder // placeholder color
88
+ ColorType.Transparent // transparent
89
+
90
+ // Each color has opacity variants:
91
+ ColorType.Primary75 // 75% opacity
92
+ ColorType.Primary50 // 50% opacity
93
+ ColorType.Primary25 // 25% opacity
94
+ ```
95
+
96
+ ### Font Size System (FontSizeType)
97
+
98
+ ```tsx
99
+ FontSizeType.ExtraSmall
100
+ FontSizeType.Small
101
+ FontSizeType.Normal
102
+ FontSizeType.Default
103
+ FontSizeType.Large
104
+ FontSizeType.ExtraLarge
105
+
106
+ // Auto-responsive variants:
107
+ FontSizeType.AutoExtraSmall
108
+ FontSizeType.AutoSmall
109
+ FontSizeType.AutoNormal
110
+ FontSizeType.AutoLarge
111
+ FontSizeType.AutoExtraLarge
112
+
113
+ // Custom font size (string):
114
+ fontSize="custom" // applies class "font-size-custom", define in CSS
115
+ ```
116
+
117
+ ### Font Weight System (FontWeightType)
118
+
119
+ ```tsx
120
+ FontWeightType.Thin // 100
121
+ FontWeightType.ExtraLight // 200
122
+ FontWeightType.Light // 300
123
+ FontWeightType.Regular // 400
124
+ FontWeightType.Medium // 500
125
+ FontWeightType.SemiBold // 600
126
+ FontWeightType.Bold // 700
127
+ FontWeightType.ExtraBold // 800
128
+ FontWeightType.Black // 900
129
+ ```
130
+
131
+ ---
132
+
133
+ ## Layout Components
134
+
135
+ ### X-Series (Horizontal Layout, flex-direction: row)
136
+
137
+ All X-series components accept `gap`, `cross`, `itemsShrink` props in addition to common props.
138
+
139
+ ```tsx
140
+ // Basic horizontal layout (default: justify-content: flex-start)
141
+ <Den.Components.X gap="1em">
142
+ <Child1 /> <Child2 /> <Child3 />
143
+ </Den.Components.X>
144
+
145
+ // Justify-content variants:
146
+ <Den.Components.XLeft>...</Den.Components.XLeft> // flex-start
147
+ <Den.Components.XCenter>...</Den.Components.XCenter> // center
148
+ <Den.Components.XRight>...</Den.Components.XRight> // flex-end
149
+ <Den.Components.XBetween>...</Den.Components.XBetween> // space-between
150
+ <Den.Components.XAround>...</Den.Components.XAround> // space-around
151
+ <Den.Components.XEvenly>...</Den.Components.XEvenly> // space-evenly
152
+
153
+ // Auto-margin variants (margin-based centering):
154
+ <Den.Components.XAutoLeft>...</Den.Components.XAutoLeft> // first child margin-right: auto
155
+ <Den.Components.XAutoCenter>...</Den.Components.XAutoCenter> // center child with auto margins
156
+ <Den.Components.XAutoRight>...</Den.Components.XAutoRight> // last child margin-left: auto
157
+ <Den.Components.XAutoLefts>...</Den.Components.XAutoLefts> // all items margin-right: auto
158
+ <Den.Components.XAutoRights>...</Den.Components.XAutoRights> // all items margin-left: auto
159
+ <Den.Components.XAutoBoth>...</Den.Components.XAutoBoth> // first and last with auto margins
160
+
161
+ // Custom flex-basis distribution:
162
+ <Den.Components.XCustom basises={['20%', '30%', '50%']}>
163
+ <Child1 /> <Child2 /> <Child3 />
164
+ </Den.Components.XCustom>
165
+
166
+ // Uniform flex-basis with auto-margin sides:
167
+ <Den.Components.XCustomBoth basis="10%">
168
+ <Child1 /> <Child2 /> <Child3 />
169
+ </Den.Components.XCustomBoth>
170
+
171
+ // Wrap variants (flex-wrap: wrap with align-content):
172
+ <Den.Components.XWrapTop>...</Den.Components.XWrapTop> // align-content: flex-start
173
+ <Den.Components.XWrapMiddle>...</Den.Components.XWrapMiddle> // align-content: center
174
+ <Den.Components.XWrapBottom>...</Den.Components.XWrapBottom> // align-content: flex-end
175
+ <Den.Components.XWrapAround>...</Den.Components.XWrapAround> // align-content: space-around
176
+ <Den.Components.XWrapBetween>...</Den.Components.XWrapBetween> // align-content: space-between
177
+ <Den.Components.XWrapEvenly>...</Den.Components.XWrapEvenly> // align-content: space-evenly
178
+ ```
179
+
180
+ **Cross-axis alignment** (align-items) via the `cross` prop on X components:
181
+
182
+ ```tsx
183
+ <Den.Components.X cross={Den.Components.XCrossType.Top}> // align-items: flex-start
184
+ <Den.Components.X cross={Den.Components.XCrossType.Middle}> // align-items: center
185
+ <Den.Components.X cross={Den.Components.XCrossType.Bottom}> // align-items: flex-end
186
+ <Den.Components.X cross={Den.Components.XCrossType.Stretch}> // align-items: stretch
187
+ <Den.Components.X cross={Den.Components.XCrossType.Baseline}> // align-items: baseline
188
+ ```
189
+
190
+ ### Y-Series (Vertical Layout, flex-direction: column)
191
+
192
+ Mirrors X-series but vertically:
193
+
194
+ ```tsx
195
+ <Den.Components.Y gap="1em">...</Den.Components.Y> // default
196
+ <Den.Components.YTop>...</Den.Components.YTop> // justify-content: flex-start
197
+ <Den.Components.YMiddle>...</Den.Components.YMiddle> // justify-content: center
198
+ <Den.Components.YBottom>...</Den.Components.YBottom> // justify-content: flex-end
199
+ <Den.Components.YBetween>...</Den.Components.YBetween> // space-between
200
+ <Den.Components.YAround>...</Den.Components.YAround> // space-around
201
+ <Den.Components.YEvenly>...</Den.Components.YEvenly> // space-evenly
202
+
203
+ // Auto-margin variants:
204
+ <Den.Components.YAutoTop>...</Den.Components.YAutoTop>
205
+ <Den.Components.YAutoCenter>...</Den.Components.YAutoCenter>
206
+ <Den.Components.YAutoBottom>...</Den.Components.YAutoBottom>
207
+ <Den.Components.YAutoTops>...</Den.Components.YAutoTops>
208
+ <Den.Components.YAutoBottoms>...</Den.Components.YAutoBottoms>
209
+ <Den.Components.YAutoBoth>...</Den.Components.YAutoBoth>
210
+
211
+ // Custom:
212
+ <Den.Components.YCustom basises={['auto', '1fr', 'auto']}>...</Den.Components.YCustom>
213
+ <Den.Components.YCustomBoth basis="10%">...</Den.Components.YCustomBoth>
214
+
215
+ // Wrap variants:
216
+ <Den.Components.YWrapLeft>...</Den.Components.YWrapLeft>
217
+ <Den.Components.YWrapCenter>...</Den.Components.YWrapCenter>
218
+ <Den.Components.YWrapRight>...</Den.Components.YWrapRight>
219
+ <Den.Components.YWrapAround>...</Den.Components.YWrapAround>
220
+ <Den.Components.YWrapBetween>...</Den.Components.YWrapBetween>
221
+ <Den.Components.YWrapEvenly>...</Den.Components.YWrapEvenly>
222
+ ```
223
+
224
+ **Cross-axis alignment** (align-items) via the `cross` prop on Y components:
225
+
226
+ ```tsx
227
+ <Den.Components.Y cross={Den.Components.YCrossType.Left}> // align-items: flex-start
228
+ <Den.Components.Y cross={Den.Components.YCrossType.Center}> // align-items: center
229
+ <Den.Components.Y cross={Den.Components.YCrossType.Right}> // align-items: flex-end
230
+ <Den.Components.Y cross={Den.Components.YCrossType.Stretch}> // align-items: stretch
231
+ <Den.Components.Y cross={Den.Components.YCrossType.Baseline}> // align-items: baseline
232
+ ```
233
+
234
+ ### S-Series (Individual Item Cross-axis Override)
235
+
236
+ Wrap a child in an S-component to override the parent's cross-axis alignment for that child only:
237
+
238
+ ```tsx
239
+ <Den.Components.XCenter cross={Den.Components.XCrossType.Bottom} height="6em">
240
+ <Child1 /> {/* aligned to bottom */}
241
+ <Child2 /> {/* aligned to bottom */}
242
+ <Den.Components.STop>
243
+ <Child3 /> {/* overridden to top */}
244
+ </Den.Components.STop>
245
+ </Den.Components.XCenter>
246
+
247
+ // In X containers (cross-axis is vertical):
248
+ <Den.Components.STop>...</Den.Components.STop> // align-self: flex-start
249
+ <Den.Components.SMiddle>...</Den.Components.SMiddle> // align-self: center
250
+ <Den.Components.SBottom>...</Den.Components.SBottom> // align-self: flex-end
251
+ <Den.Components.SStretch>...</Den.Components.SStretch> // align-self: stretch
252
+ <Den.Components.SBaseline>...</Den.Components.SBaseline>// align-self: baseline
253
+
254
+ // In Y containers (cross-axis is horizontal):
255
+ <Den.Components.SLeft>...</Den.Components.SLeft> // align-self: flex-start
256
+ <Den.Components.SCenter>...</Den.Components.SCenter> // align-self: center
257
+ <Den.Components.SRight>...</Den.Components.SRight> // align-self: flex-end
258
+ <Den.Components.SStretch>...</Den.Components.SStretch> // align-self: stretch
259
+ <Den.Components.SBaseline>...</Den.Components.SBaseline>// align-self: baseline
260
+ ```
261
+
262
+ ### Position & PositionArea
263
+
264
+ ```tsx
265
+ // PositionArea establishes a positioning context (position: relative) on its child.
266
+ // PositionCategory.Area = position: absolute (for items inside)
267
+ <Den.Components.PositionArea category={Den.Components.PositionAreaCategory.FullSize}>
268
+ <Den.Components.VBoundary height="250px" backgroundColor={Den.Components.ColorType.Dark}>
269
+ <Den.Components.Position category={Den.Components.PositionCategory.Area} type={Den.Components.PositionType.Center}>
270
+ <Content />
271
+ </Den.Components.Position>
272
+ </Den.Components.VBoundary>
273
+ </Den.Components.PositionArea>
274
+
275
+ // PositionAreaCategory:
276
+ // Default = inline-block container
277
+ // FullSize = block container
278
+
279
+ // PositionCategory:
280
+ // Edge = position: sticky
281
+ // Window = position: fixed
282
+ // Area = position: absolute
283
+ // Self = position: relative
284
+
285
+ // PositionType (predefined positions):
286
+ // Top, Right, Bottom, Left, LeftTop, RightTop, LeftBottom, RightBottom, Center
287
+
288
+ // Custom positioning (omit type, set top/right/bottom/left):
289
+ <Den.Components.Position category={Den.Components.PositionCategory.Area} top="20px" left="30px">
290
+ <Content />
291
+ </Den.Components.Position>
292
+
293
+ // Sticky navbar example:
294
+ <Den.Components.Position category={Den.Components.PositionCategory.Edge} top="0px" isFullWidth zIndex={10}>
295
+ <NavBar />
296
+ </Den.Components.Position>
297
+
298
+ // Position props: category (required), type, top, right, bottom, left, zIndex, isFullWidth
299
+ ```
300
+
301
+ ### Dock (Anchored Overlay Positioning)
302
+
303
+ ```tsx
304
+ // Dock positions an overlay relative to its children.
305
+ // renderOverlay is REQUIRED — returns the overlay element.
306
+ <Den.Components.Dock
307
+ category={Den.Components.DockCategory.Top}
308
+ offset={4}
309
+ renderOverlay={() => <div>Tooltip above</div>}
310
+ >
311
+ <button>Hover me</button>
312
+ </Den.Components.Dock>
313
+
314
+ // DockCategory:
315
+ // Top, Right, Bottom, Left
316
+ // LeftTop, RightTop, LeftBottom, RightBottom
317
+ // InnerTop, InnerRight, InnerBottom, InnerLeft
318
+ // InnerLeftTop, InnerRightTop, InnerLeftBottom, InnerRightBottom
319
+
320
+ // DockAlignment (only for corner categories like LeftTop, RightTop, etc.):
321
+ // Horizontal, Vertical
322
+
323
+ // Corner with alignment:
324
+ <Den.Components.Dock
325
+ category={Den.Components.DockCategory.LeftTop}
326
+ alignment={Den.Components.DockAlignment.Horizontal}
327
+ offset={4}
328
+ renderOverlay={() => <DropdownMenu />}
329
+ >
330
+ <TriggerButton />
331
+ </Den.Components.Dock>
332
+ ```
333
+
334
+ ### Display (Responsive Show/Hide)
335
+
336
+ **Important:** Display uses `cloneElement` to inject className — child must accept `className` prop.
337
+
338
+ ```tsx
339
+ // DisplayCategory: Visiable, Hidden
340
+ // DisplayType: Only, Up, Down
341
+
342
+ // Always visible
343
+ <Den.Components.Display category={Den.Components.DisplayCategory.Visiable}>
344
+ <div>Always shown</div>
345
+ </Den.Components.Display>
346
+
347
+ // Always hidden
348
+ <Den.Components.Display category={Den.Components.DisplayCategory.Hidden}>
349
+ <div>Always hidden</div>
350
+ </Den.Components.Display>
351
+
352
+ // Responsive: visible only on Medium breakpoint
353
+ <Den.Components.Display
354
+ category={Den.Components.DisplayCategory.Visiable}
355
+ type={Den.Components.DisplayType.Only}
356
+ breakpoint={Den.Components.BreakpointType.Medium}
357
+ >
358
+ <div>Medium only</div>
359
+ </Den.Components.Display>
360
+
361
+ // Hidden on Small and below
362
+ <Den.Components.Display
363
+ category={Den.Components.DisplayCategory.Hidden}
364
+ type={Den.Components.DisplayType.Down}
365
+ breakpoint={Den.Components.BreakpointType.Small}
366
+ >
367
+ <div>Hidden on mobile</div>
368
+ </Den.Components.Display>
369
+
370
+ // Multiple breakpoints (array):
371
+ <Den.Components.Display
372
+ category={Den.Components.DisplayCategory.Visiable}
373
+ breakpoint={[Den.Components.BreakpointType.Small, Den.Components.BreakpointType.Large]}
374
+ >
375
+ <div>Visible on Small and Large</div>
376
+ </Den.Components.Display>
377
+
378
+ // BreakpointType: ExtraSmall, Small, Medium, Large, ExtraLarge, ExtraExtraLarge
379
+ ```
380
+
381
+ ### Responsive (Desktop/Mobile Switch)
382
+
383
+ ```tsx
384
+ // Shorthand for showing desktop or mobile content based on breakpoint.
385
+ // Children must accept className prop (uses Display internally).
386
+ <Den.Components.Responsive
387
+ breakpointType={Den.Components.BreakpointType.Medium}
388
+ desktop={<div>Desktop layout</div>}
389
+ mobile={<div>Mobile layout</div>}
390
+ />
391
+ ```
392
+
393
+ ### VZone (Responsive Container)
394
+
395
+ ```tsx
396
+ // Like Bootstrap's Container — constrains max-width and centers content.
397
+ // Category controls at which breakpoint max-width starts applying.
398
+ // Below the breakpoint: full width. Above: max-width grows per tier.
399
+ <Den.Components.VZone category={Den.Components.ZoneCategory.Small} padding="1em">
400
+ <Content />
401
+ </Den.Components.VZone>
402
+
403
+ // ZoneCategory:
404
+ // Fluid — always 100%, no max-width
405
+ // Small — constrained from ≥576px (540→720→960→1140→1320)
406
+ // Medium — constrained from ≥768px (720→960→1140→1320)
407
+ // Large — constrained from ≥992px (960→1140→1320)
408
+ // ExtraLarge — constrained from ≥1200px (1140→1320)
409
+ // ExtraExtraLarge — constrained from ≥1400px (1320)
410
+ ```
411
+
412
+ ### Flex & FlexItem (Low-level Control)
413
+
414
+ ```tsx
415
+ // Flex — full flexbox control
416
+ <Den.Components.Flex
417
+ direction={Den.Components.FlexDirectionType.Row}
418
+ wrap={Den.Components.FlexWrapType.Wrap}
419
+ justifyContent={Den.Components.FlexJustifyContentType.SpaceBetween}
420
+ alignItems={Den.Components.FlexAlignItemsType.Center}
421
+ gap="1em"
422
+ >
423
+ ...
424
+ </Den.Components.Flex>
425
+
426
+ // FlexItem — wraps a child with flex item properties
427
+ <Den.Components.FlexItem grow={1} shrink={0} basis="200px" order={2}>
428
+ <Content />
429
+ </Den.Components.FlexItem>
430
+ ```
431
+
432
+ ---
433
+
434
+ ## View Components
435
+
436
+ ### VBoundary (Generic Container)
437
+
438
+ The basic div wrapper. Use as a general-purpose container:
439
+
440
+ ```tsx
441
+ <Den.Components.VBoundary
442
+ padding="1em"
443
+ backgroundColor={Den.Components.ColorType.Light}
444
+ borderRadius={Den.Components.BorderRadiusType.Default}
445
+ width="100%"
446
+ >
447
+ <Content />
448
+ </Den.Components.VBoundary>
449
+ ```
450
+
451
+ ### VLabel (Text/Label)
452
+
453
+ For inline text. Renders as `<span>` by default, configurable to any inline/heading element:
454
+
455
+ ```tsx
456
+ // Basic label
457
+ <Den.Components.VLabel caption="Hello World" />
458
+
459
+ // With heading category
460
+ <Den.Components.VLabel
461
+ category={Den.Components.LabelCategory.H1}
462
+ caption="Page Title"
463
+ />
464
+
465
+ // Styled label
466
+ <Den.Components.VLabel
467
+ fontSize={Den.Components.FontSizeType.Large}
468
+ fontWeight={Den.Components.FontWeightType.Bold}
469
+ frontColor={Den.Components.ColorType.Primary}
470
+ caption="Important Text"
471
+ />
472
+
473
+ // Circle label (badge)
474
+ <Den.Components.VLabel
475
+ type={Den.Components.LabelType.Circle}
476
+ frontColor={Den.Components.ColorType.White}
477
+ backgroundColor={Den.Components.ColorType.Black}
478
+ caption="X"
479
+ />
480
+
481
+ // Text overflow (ellipsis)
482
+ <Den.Components.VLabel
483
+ isTextOverflow
484
+ width="12em"
485
+ caption="This very long text will be truncated with ellipsis..."
486
+ />
487
+
488
+ // Alignment
489
+ <Den.Components.VLabel
490
+ alignType={Den.Components.LabelAlignType.Center}
491
+ caption="Centered text"
492
+ />
493
+
494
+ // i18n with React Intl
495
+ <Den.Components.VLabel caption={<FormattedMessage id="Label.Hello" />} />
496
+
497
+ // Available categories:
498
+ // LabelCategory.Div, Span, H1-H6, Abbr, Strong, Em, Code, Pre,
499
+ // Blockquote, Mark, Del, Ins, Small, Sub, Sup, etc.
500
+ ```
501
+
502
+ ### VText (Block Text)
503
+
504
+ For block-level text (p, article, section, etc.):
505
+
506
+ ```tsx
507
+ <Den.Components.VText
508
+ category={Den.Components.TextCategory.P}
509
+ caption="Paragraph text content."
510
+ />
511
+
512
+ <Den.Components.VText
513
+ alignType={Den.Components.TextAlignType.Center}
514
+ renderContent={() => <span>Complex <strong>content</strong></span>}
515
+ />
516
+ ```
517
+
518
+ ### VHyperlink
519
+
520
+ ```tsx
521
+ // Renders an <a> tag. Requires category and to props.
522
+ <Den.Components.VHyperlink
523
+ category={Den.Components.HyperlinkCategory.Self}
524
+ to="/about"
525
+ >
526
+ Click me
527
+ </Den.Components.VHyperlink>
528
+
529
+ // Open in new window
530
+ <Den.Components.VHyperlink
531
+ category={Den.Components.HyperlinkCategory.NewWindow}
532
+ to="https://example.com"
533
+ >
534
+ External link
535
+ </Den.Components.VHyperlink>
536
+
537
+ // HyperlinkCategory: NewWindow (_blank), Self (_self), Parent (_parent), Top (_top)
538
+ ```
539
+
540
+ ### Form Components
541
+
542
+ #### VForm (Form Container)
543
+
544
+ ```tsx
545
+ <Den.Components.VForm
546
+ handleSubmit={(data) => {
547
+ // data is automatically converted from FormData to nested JSON
548
+ // e.g., { form: { username: "value", password: "value" } }
549
+ console.log(data);
550
+ }}
551
+ handleValidateError={(input) => {
552
+ // Called when HTML5 validation fails
553
+ input.focus();
554
+ }}
555
+ >
556
+ <Den.Components.Y gap="0.5em">
557
+ <Den.Components.VTextBox name="form.username" placeholder="Username" />
558
+ <Den.Components.VPassword name="form.password" placeholder="Password" />
559
+ <Den.Components.VSubmit caption="Submit" />
560
+ </Den.Components.Y>
561
+ </Den.Components.VForm>
562
+ ```
563
+
564
+ **Form data naming conventions:**
565
+ - `name="form.username"` -> `{ form: { username: "value" } }`
566
+ - `name="form.roles[]"` -> `{ form: { roles: ["value1", "value2"] } }`
567
+ - `name="#form.data[]"` -> Parses JSON string values in the array
568
+
569
+ #### Input Components
570
+
571
+ ```tsx
572
+ // Text input
573
+ <Den.Components.VTextBox
574
+ name="form.name"
575
+ placeholder="Enter name"
576
+ label="Name" // Floating label
577
+ icon={<IconElement />} // Prefix icon
578
+ enableClear // Show clear (X) button
579
+ required // HTML5 validation
580
+ value="default" // Initial value
581
+ />
582
+
583
+ // Controlled input with hooks
584
+ const [value, setValue] = useState('');
585
+ <Den.Components.VTextBox
586
+ name="form.search"
587
+ valueHook={value}
588
+ setStateHook={setValue}
589
+ />
590
+
591
+ // With suffix options
592
+ <Den.Components.VTextBox
593
+ renderOptions={(inputRef) => (
594
+ <Den.Components.VSvg onClick={() => alert(inputRef.current?.value)}>
595
+ <SearchIcon />
596
+ </Den.Components.VSvg>
597
+ )}
598
+ />
599
+
600
+ // Other input types:
601
+ <Den.Components.VEmail name="form.email" required placeholder="Email" />
602
+ <Den.Components.VPassword name="form.password" placeholder="Password" />
603
+ <Den.Components.VNumber name="form.count" min={0} max={100} />
604
+ <Den.Components.VDate name="form.date" />
605
+ <Den.Components.VDatetimeLocal name="form.datetime" />
606
+ <Den.Components.VTime name="form.time" />
607
+ <Den.Components.VColor name="form.color" />
608
+ <Den.Components.VTel name="form.phone" />
609
+ <Den.Components.VUrl name="form.website" />
610
+ <Den.Components.VSearch name="form.search" />
611
+ <Den.Components.VRange name="form.volume" min={0} max={100} />
612
+
613
+ // TextArea
614
+ <Den.Components.VTextArea name="form.bio" rows={6} placeholder="Bio" />
615
+
616
+ // Checkbox
617
+ <Den.Components.VCheckBox
618
+ id="form.agree"
619
+ name="form.agree"
620
+ label="I agree"
621
+ isChecked={true}
622
+ frontColor={Den.Components.ColorType.Primary}
623
+ />
624
+
625
+ // Radio
626
+ <Den.Components.VRadio id="opt1" name="form.option" value="A" label="Option A" />
627
+ <Den.Components.VRadio id="opt2" name="form.option" value="B" label="Option B" />
628
+
629
+ // Hidden field
630
+ <Den.Components.VHidden name="form.id" value="123" />
631
+
632
+ // Select (native <select>)
633
+ <Den.Components.VSelect
634
+ name="form.country"
635
+ items={[
636
+ { caption: 'USA', value: 'us' },
637
+ { caption: 'China', value: 'cn' }
638
+ ]}
639
+ value="us"
640
+ />
641
+
642
+ // Dropdown (custom dropdown with icons)
643
+ <Den.Components.VDropdown
644
+ name="form.category"
645
+ items={[
646
+ { caption: 'Option A', value: 'a', icon: <IconA /> },
647
+ { caption: 'Option B', value: 'b' }
648
+ ]}
649
+ emptyIcon={<EmptyIcon />} // required
650
+ downIcon={<DownArrowIcon />} // required
651
+ upIcon={<UpArrowIcon />} // required
652
+ enableClear
653
+ handleChange={(value) => console.log(value)}
654
+ />
655
+
656
+ // Switch
657
+ <Den.Components.VSwitch
658
+ isOn={true}
659
+ icon={<SwitchIcon />}
660
+ onSwitch={(isOn) => console.log(isOn)}
661
+ />
662
+
663
+ // File upload
664
+ <Den.Components.VFile
665
+ name="form.avatar"
666
+ isPreview // Show image preview
667
+ accept=".jpg,.png"
668
+ appearance={<UploadIcon />} // Custom trigger element
669
+ />
670
+
671
+ // File with base64 output
672
+ <Den.Components.VBase64File
673
+ name="form.file"
674
+ accept=".jpg,.jpeg,.png"
675
+ base64Image="iVBOR..." // Default base64 preview
676
+ />
677
+
678
+ // Submit button
679
+ <Den.Components.VSubmit
680
+ caption="Submit"
681
+ fontSize={Den.Components.FontSizeType.Small}
682
+ backgroundColor={Den.Components.ColorType.Primary}
683
+ frontColor={Den.Components.ColorType.White}
684
+ />
685
+ ```
686
+
687
+ ### Media Components
688
+
689
+ ```tsx
690
+ // Image
691
+ <Den.Components.VImage
692
+ src="/path/to/image.jpg"
693
+ alt="Description"
694
+ category={Den.Components.ImageCategory.Circle} // Circle, Squared, FullSize, Scale
695
+ />
696
+
697
+ // SVG (wraps imported SVG components)
698
+ import IconSvg from './icon.svg';
699
+ <Den.Components.VSvg
700
+ fontSize={Den.Components.FontSizeType.Large}
701
+ frontColor={Den.Components.ColorType.Primary}
702
+ >
703
+ <IconSvg />
704
+ </Den.Components.VSvg>
705
+
706
+ // Background image
707
+ <Den.Components.VBackground
708
+ image="/path/to/bg.jpg"
709
+ imageWidth="100%"
710
+ imageHeight="400px"
711
+ position={Den.Components.BackgroundPositionType.Center}
712
+ >
713
+ <OverlayContent />
714
+ </Den.Components.VBackground>
715
+
716
+ // Audio / Video
717
+ <Den.Components.VAudio src="/audio.mp3" />
718
+ <Den.Components.VVideo src="/video.mp4" />
719
+ ```
720
+
721
+ ### VTooltip
722
+
723
+ ```tsx
724
+ // Tooltip uses Dock internally. Requires renderOverlay and dockCategory.
725
+ <Den.Components.VTooltip
726
+ category={Den.Components.TooltipCategory.Hover}
727
+ dockCategory={Den.Components.DockCategory.Top}
728
+ renderOverlay={() => <div>Tooltip content</div>}
729
+ >
730
+ <button>Hover me</button>
731
+ </Den.Components.VTooltip>
732
+
733
+ // TooltipCategory: Hover (default), Click
734
+ ```
735
+
736
+ ### VAnimation
737
+
738
+ ```tsx
739
+ // Uses animate.css library. category is required.
740
+ <Den.Components.VAnimation
741
+ category={Den.Components.AnimationCategory.Bounce}
742
+ speed={Den.Components.AnimationSpeed.Fast}
743
+ delay={Den.Components.AnimationDelay.Delay1Second}
744
+ repeat={Den.Components.AnimationRepeat.Infinite}
745
+ >
746
+ <Content />
747
+ </Den.Components.VAnimation>
748
+
749
+ // AnimationCategory: Bounce, Flash, Pulse, RubberBand, ShakeX, Swing, Tada,
750
+ // Wobble, Jello, HeartBeat, FadeIn, FadeOut, ZoomIn, ZoomOut,
751
+ // SlideInDown, SlideInUp, SlideInLeft, SlideInRight,
752
+ // BounceIn, BounceOut, RotateIn, RotateOut, RollIn, RollOut, etc. (150+)
753
+ // AnimationSpeed: Slow (2s), Slower (3s), Fast (800ms), Faster (500ms)
754
+ // AnimationDelay: Delay1Second, Delay2Second, Delay3Second, Delay4Second, Delay5Second
755
+ // AnimationRepeat: Once, Twice, Thrice, Infinite
756
+ ```
757
+
758
+ ### Shape Components
759
+
760
+ ```tsx
761
+ <Den.Components.VEllipse width="100px" height="100px" backgroundColor={Den.Components.ColorType.Primary} />
762
+ <Den.Components.VRectangle width="200px" height="50px" backgroundColor={Den.Components.ColorType.Info} />
763
+ <Den.Components.VLine />
764
+ <Den.Components.VShadow category={Den.Components.ShadowCategory.Small}><Content /></Den.Components.VShadow>
765
+ ```
766
+
767
+ ### App-only Components (app variant)
768
+
769
+ ```tsx
770
+ // VCard — structured card with head and body
771
+ <Den.Components.VCard
772
+ head={<Den.Components.VLabel caption="Card Title" />}
773
+ body={<Den.Components.VText caption="Card content" />}
774
+ isDraggable={false}
775
+ />
776
+
777
+ // VCardMedia — card with media, head, body, foot sections
778
+ <Den.Components.VCardMedia
779
+ media={<Den.Components.VImage src="/image.jpg" category={Den.Components.ImageCategory.FullSize} />}
780
+ head={<Den.Components.VLabel caption="Title" />}
781
+ body={<Den.Components.VText caption="Description" />}
782
+ foot={<button>Action</button>}
783
+ />
784
+
785
+ // VCardWindow — card with background image
786
+ <Den.Components.VCardWindow
787
+ backgroundUrl="/bg.jpg"
788
+ backgroundSize={Den.Components.CardWindowSizeType.Cover}
789
+ >
790
+ <OverlayContent />
791
+ </Den.Components.VCardWindow>
792
+
793
+ // VBlock — structured block with icon, action, caption, subCaption
794
+ <Den.Components.VBlock
795
+ icon={<Icon />}
796
+ action={<button>Edit</button>}
797
+ caption={<Den.Components.VLabel caption="Title" />}
798
+ subCaption={<Den.Components.VLabel caption="Subtitle" />}
799
+ />
800
+
801
+ // VStack — stacks children with z-index layering
802
+ <Den.Components.VStack>
803
+ <Layer1 />
804
+ <Layer2 />
805
+ </Den.Components.VStack>
806
+
807
+ // VTree — hierarchical tree view
808
+ <Den.Components.VTree nodes={treeData} />
809
+
810
+ // VDynamic — renders component by name from registry
811
+ <Den.Components.VDynamic
812
+ components={{ MyWidget: WidgetComponent, MyChart: ChartComponent }}
813
+ name="MyWidget"
814
+ customProp="value" // extra props are passed to the resolved component
815
+ notFindMessage="Component not found"
816
+ />
817
+ ```
818
+
819
+ ### Other View Components
820
+
821
+ ```tsx
822
+ // Semantic HTML wrappers
823
+ <Den.Components.VHeader>...</Den.Components.VHeader>
824
+ <Den.Components.VMain>...</Den.Components.VMain>
825
+ <Den.Components.VFooter>...</Den.Components.VFooter>
826
+ <Den.Components.VSection>...</Den.Components.VSection>
827
+ <Den.Components.VHR />
828
+
829
+ // Mask overlay
830
+ <Den.Components.VMask><Content /></Den.Components.VMask>
831
+
832
+ // Iframe
833
+ <Den.Components.VFrame src="https://example.com" />
834
+
835
+ // Theme
836
+ <Den.Components.VTheme category={Den.Components.ThemeCategory.Light}>
837
+ <App />
838
+ </Den.Components.VTheme>
839
+
840
+ // Loading indicator
841
+ <Den.Components.VLoading />
842
+
843
+ // Error boundary
844
+ <Den.Components.VErrorBoundary>
845
+ <RiskyComponent />
846
+ </Den.Components.VErrorBoundary>
847
+ ```
848
+
849
+ ---
850
+
851
+ ## Network Module (App/Append variants only)
852
+
853
+ ### Bootstrap Configuration
854
+
855
+ Before using network features, initialize the bootstrap:
856
+
857
+ ```tsx
858
+ import { Den } from '@fewbox/den-app';
859
+
860
+ Den.boot({
861
+ getToken: () => localStorage.getItem('token') || '',
862
+ getAppSettings: () => ({
863
+ endpoint: {
864
+ PROTOCOL: 'https',
865
+ HOST: 'api.example.com',
866
+ PORT: '',
867
+ BASEPATH: '/v1'
868
+ },
869
+ externalService: {
870
+ PROTOCOL: 'https',
871
+ HOST: 'external.com',
872
+ PORT: '',
873
+ BASEPATH: '/api'
874
+ }
875
+ }),
876
+ getLanguages: (lang) => ({ /* i18n messages */ }),
877
+ getHeaders: () => ({ 'X-Custom-Header': 'value' }),
878
+ handleIsNotSuccessful: (data) => console.error('API error:', data),
879
+ handleError: (error) => console.error(error),
880
+ handleWarning: (error) => console.warn(error),
881
+ handleNetworkError: (error) => console.error('Network error:', error),
882
+ isDebug: process.env.NODE_ENV === 'development'
883
+ });
884
+
885
+ // Or use the Boot component:
886
+ <Den.Components.Boot options={bootOptions}><App /></Den.Components.Boot>
887
+ ```
888
+
889
+ ### HTTP Clients (Observable-based for Redux Observable)
890
+
891
+ All network clients return RxJS Observables for use in Redux Observable epics:
892
+
893
+ ```tsx
894
+ import { Den } from '@fewbox/den-app';
895
+
896
+ // GET, POST, PUT, PATCH, DELETE (uses app settings endpoint)
897
+ new Den.Network.GetFetch('/users', (payload) => ({ type: 'USERS_LOADED', payload }));
898
+ new Den.Network.PostFetch('/users', body, (payload) => ({ type: 'USER_CREATED', payload }));
899
+ new Den.Network.PutFetch('/users/1', body, processAction);
900
+ new Den.Network.PatchFetch('/users/1', body, processAction);
901
+ new Den.Network.DeleteFetch('/users/1', processAction);
902
+
903
+ // External endpoint (bypasses app settings)
904
+ new Den.Network.GetFetchExternal('externalService', '/data', processAction);
905
+
906
+ // GraphQL
907
+ new Den.Network.GQL({ query: 'query { users { id name } }' }, processAction);
908
+ new Den.Network.GQLExternal('externalService', { query: 'mutation { createUser(name: "test") { id } }' }, processAction);
909
+
910
+ // Server-Sent Events
911
+ new Den.Network.GetSSE('/events', processAction);
912
+
913
+ // WebSocket
914
+ new Den.Network.WS({ url: 'wss://example.com/ws' });
915
+ ```
916
+
917
+ ### Redux Observable Epic Pattern
918
+
919
+ ```tsx
920
+ import { ofType } from 'redux-observable';
921
+ import { switchMap } from 'rxjs/operators';
922
+
923
+ const fetchUsersEpic = (action$) =>
924
+ action$.pipe(
925
+ ofType('FETCH_USERS'),
926
+ switchMap(() =>
927
+ new Den.Network.GetFetch('/users', (payload) => ({
928
+ type: 'USERS_LOADED',
929
+ payload
930
+ }))
931
+ )
932
+ );
933
+ ```
934
+
935
+ ### Retry Behavior
936
+
937
+ - **Network errors** (timeout, CORS, DNS): retry 3x with 1s, 2s, 4s delays
938
+ - **4xx client errors**: no retry (immediate failure)
939
+ - **5xx server errors**: retry with exponential backoff
940
+
941
+ ---
942
+
943
+ ## Styling Guide
944
+
945
+ ### CSS Variables
946
+
947
+ All CSS variables use the `--den-` prefix. Override in your root stylesheet:
948
+
949
+ ```css
950
+ :root {
951
+ --den-font-color: #333;
952
+ --den-primary-color: #6200ea;
953
+ }
954
+ ```
955
+
956
+ ### Importing Styles
957
+
958
+ ```scss
959
+ @import 'fewbox-den/templates/style/variables';
960
+ @import 'fewbox-den/templates/style/root-properties';
961
+ @import 'fewbox-den/templates/style/core';
962
+ ```
963
+
964
+ ### Border Directions (DirectionType)
965
+
966
+ ```
967
+ All, Top, Right, Bottom, Left,
968
+ ExceptTop, ExceptRight, ExceptBottom, ExceptLeft,
969
+ RightTop, RightBottom, LeftTop, LeftBottom, TopBottom, LeftRight
970
+ ```
971
+
972
+ ### Border Radius (BorderRadiusType)
973
+
974
+ ```tsx
975
+ Den.Components.BorderRadiusType.Default // default radius from CSS variable
976
+ Den.Components.BorderRadiusType.Fixed // fixed radius
977
+ Den.Components.BorderRadiusType.Max // maximum rounding (pill shape)
978
+ ```
979
+
980
+ ---
981
+
982
+ ## Common Patterns
983
+
984
+ ### Page Layout (header + content + footer)
985
+
986
+ ```tsx
987
+ <Den.Components.Y height="100vh">
988
+ <Den.Components.VBoundary padding="1em" backgroundColor={Den.Components.ColorType.Primary}>
989
+ <Header />
990
+ </Den.Components.VBoundary>
991
+ <Den.Components.VBoundary selfGrow={1} overflow="auto" padding="1em">
992
+ <MainContent />
993
+ </Den.Components.VBoundary>
994
+ <Den.Components.VBoundary padding="1em" backgroundColor={Den.Components.ColorType.Dark}>
995
+ <Footer />
996
+ </Den.Components.VBoundary>
997
+ </Den.Components.Y>
998
+ ```
999
+
1000
+ ### Centered Content
1001
+
1002
+ ```tsx
1003
+ <Den.Components.XCenter height="100%">
1004
+ <Den.Components.SCenter><Content /></Den.Components.SCenter>
1005
+ </Den.Components.XCenter>
1006
+ ```
1007
+
1008
+ ### Sidebar Layout
1009
+
1010
+ ```tsx
1011
+ <Den.Components.X height="100vh">
1012
+ <Den.Components.VBoundary width="250px" backgroundColor={Den.Components.ColorType.Dark}>
1013
+ <Sidebar />
1014
+ </Den.Components.VBoundary>
1015
+ <Den.Components.VBoundary selfGrow={1}><MainContent /></Den.Components.VBoundary>
1016
+ </Den.Components.X>
1017
+ ```
1018
+
1019
+ ### Sticky Navigation Bar
1020
+
1021
+ ```tsx
1022
+ <Den.Components.Position category={Den.Components.PositionCategory.Edge} top="0px" isFullWidth zIndex={10}>
1023
+ <Den.Components.XBetween height="48px" padding="0 1em" backgroundColor={Den.Components.ColorType.Primary}>
1024
+ <Den.Components.VLabel caption="Logo" frontColor={Den.Components.ColorType.White} />
1025
+ <Den.Components.XRight gap="1em">
1026
+ <Den.Components.VHyperlink category={Den.Components.HyperlinkCategory.Self} to="/about">About</Den.Components.VHyperlink>
1027
+ <Den.Components.VHyperlink category={Den.Components.HyperlinkCategory.Self} to="/contact">Contact</Den.Components.VHyperlink>
1028
+ </Den.Components.XRight>
1029
+ </Den.Components.XBetween>
1030
+ </Den.Components.Position>
1031
+ ```
1032
+
1033
+ ### Form with Validation
1034
+
1035
+ ```tsx
1036
+ <Den.Components.VForm
1037
+ handleSubmit={(data) => api.login(data.form)}
1038
+ handleValidateError={(input) => { input.focus(); input.scrollIntoView({ behavior: 'smooth' }); }}>
1039
+ <Den.Components.Y gap="1em" padding="2em">
1040
+ <Den.Components.VEmail name="form.email" required placeholder="Email" label="Email" />
1041
+ <Den.Components.VPassword name="form.password" required minLength={8} placeholder="Password" label="Password" />
1042
+ <Den.Components.VSubmit caption="Sign In" backgroundColor={Den.Components.ColorType.Primary}
1043
+ frontColor={Den.Components.ColorType.White} borderRadius="0.5em" padding="0.8em 2em" />
1044
+ </Den.Components.Y>
1045
+ </Den.Components.VForm>
1046
+ ```
1047
+
1048
+ ### Card Grid (app variant)
1049
+
1050
+ ```tsx
1051
+ <Den.Components.XWrapEvenly gap="1em" padding="1em">
1052
+ {items.map(item => (
1053
+ <Den.Components.VCardMedia
1054
+ key={item.id}
1055
+ width="300px"
1056
+ borderRadius="0.5em"
1057
+ borderColor={Den.Components.ColorType.Border}
1058
+ borderStyle="solid"
1059
+ borderWidth="1px"
1060
+ media={<Den.Components.VImage src={item.image} category={Den.Components.ImageCategory.FullSize} />}
1061
+ head={<Den.Components.VLabel category={Den.Components.LabelCategory.H3} caption={item.title} />}
1062
+ body={<Den.Components.VText caption={item.description} />}
1063
+ />
1064
+ ))}
1065
+ </Den.Components.XWrapEvenly>
1066
+ ```
1067
+
1068
+ ### Absolute Positioning Inside Container
1069
+
1070
+ ```tsx
1071
+ <Den.Components.PositionArea category={Den.Components.PositionAreaCategory.FullSize}>
1072
+ <Den.Components.VBoundary height="300px" backgroundColor={Den.Components.ColorType.Dark}>
1073
+ <Den.Components.Position category={Den.Components.PositionCategory.Area} type={Den.Components.PositionType.LeftTop}>
1074
+ <TopLeftContent />
1075
+ </Den.Components.Position>
1076
+ <Den.Components.Position category={Den.Components.PositionCategory.Area} type={Den.Components.PositionType.Center}>
1077
+ <CenterContent />
1078
+ </Den.Components.Position>
1079
+ </Den.Components.VBoundary>
1080
+ </Den.Components.PositionArea>
1081
+ ```
1082
+
1083
+ ### Responsive Layout
1084
+
1085
+ ```tsx
1086
+ <Den.Components.Responsive
1087
+ breakpointType={Den.Components.BreakpointType.Medium}
1088
+ desktop={<Den.Components.X gap="1em">
1089
+ <Sidebar />
1090
+ <MainContent />
1091
+ </Den.Components.X>}
1092
+ mobile={<Den.Components.Y gap="1em">
1093
+ <MainContent />
1094
+ </Den.Components.Y>}
1095
+ />
1096
+ ```
1097
+
1098
+ ---
1099
+
1100
+ ## Tips
1101
+
1102
+ 1. Prefer semantic layout components (XCenter, YBetween) over manual Flexbox.
1103
+ 2. Use `gap` prop on X/Y instead of margins on children.
1104
+ 3. Nest X and Y freely for complex layouts.
1105
+ 4. Use S-components inside X/Y to override individual child alignment.
1106
+ 5. Form names use dot notation: `name="form.user.email"` -> `{ form: { user: { email: "..." } } }`.
1107
+ 6. `selfGrow={1}` fills remaining space (flex-grow: 1).
1108
+ 7. VBoundary is the safe default container.
1109
+ 8. All components forward standard HTML attributes (onClick, id, aria-*, data-*).
1110
+ 9. Display/PositionArea use `cloneElement` — children must accept `className` prop.
1111
+ 10. Use `height`/`width` as direct props (not in `style`) for highest CSS priority.