@fui-org/fui-cli 1.3.2 → 2.1.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.
Files changed (115) hide show
  1. package/README.md +21 -3
  2. package/dist/fui-cx180e19.js +379 -0
  3. package/dist/fui.js +1 -1
  4. package/package.json +3 -6
  5. package/skills/fui/SKILL.md +9 -41
  6. package/skills/fui-skill/SKILL.md +95 -225
  7. package/skills/fui-skill/assets/projectdefaultstyle-3.0.css +555 -0
  8. package/skills/fui-skill/assets/projectdefaultstyle.css +207 -235
  9. package/skills/fui-skill/references/INDEX.md +105 -137
  10. package/skills/fui-skill/references/advanced-techniques.md +76 -68
  11. package/skills/fui-skill/references/coding-standards.md +56 -56
  12. package/skills/fui-skill/references/component-design.md +166 -173
  13. package/skills/fui-skill/references/component-quickref.md +61 -60
  14. package/skills/fui-skill/references/component-table.md +128 -117
  15. package/skills/fui-skill/references/components-dialog.md +55 -56
  16. package/skills/fui-skill/references/components-display.md +24 -30
  17. package/skills/fui-skill/references/components-echart.md +186 -261
  18. package/skills/fui-skill/references/components-input.md +72 -96
  19. package/skills/fui-skill/references/controls-patterns.md +196 -342
  20. package/skills/fui-skill/references/controls-styling-vocabulary.md +130 -97
  21. package/skills/fui-skill/references/db-table-design.md +24 -28
  22. package/skills/fui-skill/references/db-workflow.md +191 -390
  23. package/skills/fui-skill/references/default-function.md +169 -128
  24. package/skills/fui-skill/references/design-modes.md +35 -63
  25. package/skills/fui-skill/references/echart-templates.md +204 -196
  26. package/skills/fui-skill/references/fastproject.md +62 -60
  27. package/skills/fui-skill/references/fsheet.md +109 -124
  28. package/skills/fui-skill/references/fullstack-workflow.md +90 -128
  29. package/skills/fui-skill/references/module-data-patterns.md +31 -40
  30. package/skills/fui-skill/references/module-json-anatomy.md +47 -52
  31. package/skills/fui-skill/references/module-structure.md +80 -196
  32. package/skills/fui-skill/references/new-session.md +49 -51
  33. package/skills/fui-skill/references/pdfmake.md +17 -17
  34. package/skills/fui-skill/references/permission-system.md +89 -108
  35. package/skills/fui-skill/references/platform-architecture.md +128 -153
  36. package/skills/fui-skill/references/project-config.md +102 -134
  37. package/skills/fui-skill/references/project-provisioning.md +139 -244
  38. package/skills/fui-skill/references/script-map.md +208 -242
  39. package/skills/fui-skill/references/sql-clr-functions.md +98 -97
  40. package/skills/fui-skill/references/system-design.md +63 -88
  41. package/skills/fui-skill/references/tapi-file-api.md +46 -52
  42. package/skills/fui-skill/references/tapi-permission-patterns.md +51 -53
  43. package/skills/fui-skill/references/tapi-reference.md +132 -207
  44. package/skills/fui-skill/references/tools-registry.md +84 -460
  45. package/skills/fui-skill/references/ui-crosswindow-patterns.md +79 -75
  46. package/skills/fui-skill/references/ui-dialog-patterns.md +98 -72
  47. package/skills/fui-skill/references/ui-layout-patterns.md +26 -26
  48. package/skills/fui-skill/references/ui-patterns.md +71 -83
  49. package/skills/fui-skill/references/ui-screenshot-review.md +63 -62
  50. package/skills/fui-skill/references/ui-table-cell-patterns.md +61 -59
  51. package/skills/fui-skill/references/ui-templates.md +16 -23
  52. package/skills/fui-skill/references/verification.md +236 -246
  53. package/skills/fui-skill/references/watcher-patterns.md +30 -63
  54. package/skills/fui-skill/references/websocket-realtime.md +83 -66
  55. package/skills/fui-skill/scripts/component-3.0.js +298 -131
  56. package/skills/fui-skill/scripts/component.js +277 -271
  57. package/skills/fui-skill/scripts/componentTable-3.0.js +182 -53
  58. package/skills/fui-skill/scripts/componentTable.js +171 -49
  59. package/skills/fui-skill/scripts/defaultfunction-3.0.js +88 -3
  60. package/skills/fui-skill/scripts/defaultfunction.js +88 -3
  61. package/skills/fui-skill/scripts/fsheet.js +38 -0
  62. package/skills/fui-target/.claude-plugin/plugin.json +6 -0
  63. package/skills/fui-target/hooks/hooks.json +1 -0
  64. package/skills/fui-target/hooks/register.tsx +71 -0
  65. package/skills/fui-target/types/index.d.ts +7 -0
  66. package/dist/fui-y8an39cn.js +0 -420
  67. package/skills/fui-skill/README.md +0 -112
  68. package/skills/fui-skill/metadata.json +0 -75
  69. package/skills/fui-skill-cli/SKILL.md +0 -139
  70. package/skills/fui-skill-cli/references/INDEX.md +0 -110
  71. package/skills/fui-skill-cli/references/advanced-techniques.md +0 -168
  72. package/skills/fui-skill-cli/references/coding-standards.md +0 -112
  73. package/skills/fui-skill-cli/references/component-design.md +0 -448
  74. package/skills/fui-skill-cli/references/component-quickref.md +0 -78
  75. package/skills/fui-skill-cli/references/component-table.md +0 -248
  76. package/skills/fui-skill-cli/references/components-dialog.md +0 -191
  77. package/skills/fui-skill-cli/references/components-display.md +0 -141
  78. package/skills/fui-skill-cli/references/components-echart.md +0 -316
  79. package/skills/fui-skill-cli/references/components-input.md +0 -335
  80. package/skills/fui-skill-cli/references/controls-patterns.md +0 -701
  81. package/skills/fui-skill-cli/references/controls-styling-vocabulary.md +0 -137
  82. package/skills/fui-skill-cli/references/db-table-design.md +0 -73
  83. package/skills/fui-skill-cli/references/db-workflow.md +0 -288
  84. package/skills/fui-skill-cli/references/default-function.md +0 -425
  85. package/skills/fui-skill-cli/references/design-modes.md +0 -57
  86. package/skills/fui-skill-cli/references/echart-templates.md +0 -489
  87. package/skills/fui-skill-cli/references/fastproject.md +0 -99
  88. package/skills/fui-skill-cli/references/fsheet.md +0 -203
  89. package/skills/fui-skill-cli/references/fullstack-workflow.md +0 -313
  90. package/skills/fui-skill-cli/references/module-data-patterns.md +0 -117
  91. package/skills/fui-skill-cli/references/module-json-anatomy.md +0 -132
  92. package/skills/fui-skill-cli/references/module-structure.md +0 -141
  93. package/skills/fui-skill-cli/references/new-session.md +0 -85
  94. package/skills/fui-skill-cli/references/pdfmake.md +0 -60
  95. package/skills/fui-skill-cli/references/permission-system.md +0 -150
  96. package/skills/fui-skill-cli/references/platform-architecture.md +0 -269
  97. package/skills/fui-skill-cli/references/project-config.md +0 -303
  98. package/skills/fui-skill-cli/references/project-provisioning.md +0 -278
  99. package/skills/fui-skill-cli/references/script-map.md +0 -262
  100. package/skills/fui-skill-cli/references/sql-clr-functions.md +0 -225
  101. package/skills/fui-skill-cli/references/system-design.md +0 -89
  102. package/skills/fui-skill-cli/references/tapi-file-api.md +0 -185
  103. package/skills/fui-skill-cli/references/tapi-permission-patterns.md +0 -156
  104. package/skills/fui-skill-cli/references/tapi-reference.md +0 -474
  105. package/skills/fui-skill-cli/references/tools-registry.md +0 -84
  106. package/skills/fui-skill-cli/references/ui-crosswindow-patterns.md +0 -321
  107. package/skills/fui-skill-cli/references/ui-dialog-patterns.md +0 -255
  108. package/skills/fui-skill-cli/references/ui-layout-patterns.md +0 -176
  109. package/skills/fui-skill-cli/references/ui-patterns.md +0 -303
  110. package/skills/fui-skill-cli/references/ui-screenshot-review.md +0 -95
  111. package/skills/fui-skill-cli/references/ui-table-cell-patterns.md +0 -318
  112. package/skills/fui-skill-cli/references/ui-templates.md +0 -22
  113. package/skills/fui-skill-cli/references/verification.md +0 -236
  114. package/skills/fui-skill-cli/references/watcher-patterns.md +0 -163
  115. package/skills/fui-skill-cli/references/websocket-realtime.md +0 -271
@@ -1,14 +1,13 @@
1
1
  # FUI Dialog & Overlay Components
2
2
 
3
- > File này sở hữu: **`f-dialog`, `f-window`, `f-editor`**. Pattern dialog thủ công (`v-dialog` + hidden-container) xem [ui-dialog-patterns.md](ui-dialog-patterns.md).
3
+ > Owns: **`f-dialog`, `f-window`, `f-editor`**. Hand-built dialog pattern (`v-dialog` + hidden-container): [ui-dialog-patterns.md](ui-dialog-patterns.md).
4
4
 
5
- Components liên quan đến dialog, overlay, và editor nội dung. Xem prefix/binding rules tại [components-display.md](components-display.md).
5
+ Dialog, overlay and content-editor components. Prefix/binding rules: [components-display.md](components-display.md).
6
6
 
7
7
  ## f-window
8
8
 
9
9
  - Props (source): `id`
10
- - Behavior: internal iframe dialog host, thường được mở qua `openWindow(...)`
11
- - Example:
10
+ - Internal iframe dialog host, usually opened via `openWindow(...)`
12
11
 
13
12
  ```json
14
13
  {
@@ -26,8 +25,7 @@ Components liên quan đến dialog, overlay, và editor nội dung. Xem prefix/
26
25
 
27
26
  - Props (source): `value`, `imageapi`, `height`, `toolbar`
28
27
  - Emit: `input` with HTML content
29
- - Behavior: wraps CKEditor with upload auth header
30
- - Example:
28
+ - Wraps CKEditor with upload auth header
31
29
 
32
30
  ```json
33
31
  {
@@ -44,9 +42,8 @@ Components liên quan đến dialog, overlay, và editor nội dung. Xem prefix/
44
42
  ## f-editor-dialog
45
43
 
46
44
  - Props (source): `value`, `imageapi`, `label`, `width`, `toolbar`
47
- - Runtime expectation: `value` là object (`open`, `text`, `object`, `ok`), không phải plain string
48
- - Behavior: modal editor, write-back on OK
49
- - Example:
45
+ - `value` must be an object (`open`, `text`, `object`, `ok`), not a plain string
46
+ - Modal editor, writes back on OK
50
47
 
51
48
  ```json
52
49
  {
@@ -63,54 +60,53 @@ Components liên quan đến dialog, overlay, và editor nội dung. Xem prefix/
63
60
 
64
61
  ## f-dialog
65
62
 
66
- Modal dialog tự build form từ mảng `controls`, có hỗ trợ watchers cục bộ, validation, và action buttons.
63
+ Modal that builds a form from a `controls` array; supports local watchers, validation and action buttons.
67
64
 
68
65
  - Props:
69
- - `value` (Boolean, default: `false`) — v-model để mở/đóng dialog
70
- - `data` (Object, default: `{}`) — dữ liệu đầu vào, bind bằng `:data.sync`; khi dialog mở dữ liệu này được copy vào các field
71
- - `dataOut` (Object, default: `{}`) — dữ liệu đầu ra, bind bằng `:data-out.sync`; nhận instance component khi dialog mở
72
- - `title` (String, default: `''`) — tiêu đề dialog
73
- - `controls` (Array, default: `[]`) — mảng control definitions để build form; mỗi control có `el`, `attr`, `w` (col width); field nào có `v-model` không bắt đầu bằng `vueData.` sẽ được tạo data cục bộ tự động (khởi tạo `null`)
74
- - `watch` (Object, default: `{}`) — watchers cục bộ trong dialog; key là tên field, value là action chạy khi field thay đổi; watchers được đăng ký khi dialog mở và hủy khi đóng
75
- - `button` (Array, default: `[]`) — mảng button definitions (xem cấu trúc button bên dưới)
76
- - `disableValidate` (Boolean, default: `false`) — bỏ qua form validation khi `true`
77
- - `width` (Number, default: `800`) — chiều rộng dialog (px)
78
- - `openAction` (Object, default: `null`) — action chạy ngay khi dialog mở
66
+ - `value` (Boolean, default `false`) — v-model open/close
67
+ - `data` (Object, default `{}`) — input data, bind with `:data.sync`; copied into fields when the dialog opens
68
+ - `dataOut` (Object, default `{}`) — output, bind with `:data-out.sync`; receives the component instance on open
69
+ - `title` (String, default `''`)
70
+ - `controls` (Array, default `[]`) — control definitions (`el`, `attr`, `w` col width); any field whose `v-model` doesn't start with `vueData.` gets local data auto-created (init `null`)
71
+ - `watch` (Object, default `{}`) — local watchers; key = field name, value = action run on change; registered on open, removed on close
72
+ - `button` (Array, default `[]`) — button definitions (below)
73
+ - `disableValidate` (Boolean, default `false`) — skip form validation when `true`
74
+ - `width` (Number, default `800`) — px
75
+ - `openAction` (Object, default `null`) — action run as soon as the dialog opens
79
76
 
80
77
  - Emits:
81
- - `input` — mở/đóng dialog (dùng với v-model)
82
- - `update:data-out` — phát ra instance component khi dialog mở (để parent truy cập data cục bộ)
83
- - `update:data` — phát ra `v_outData` khi button có `getoutdata: true` được click (sau khi validation pass)
84
-
85
- - Vòng đời khi mở (`value = true`):
86
- 1. Reset tất cả field về giá trị từ `:data` (gọi `setDefaultData`)
87
- 2. Đăng ký watchers từ prop `watch`
88
- 3. Chạy `openAction` nếu có
89
- 4. Emit `update:data-out` với instance component
90
-
91
- - Vòng đời khi đóng (`value = false`):
92
- 1. Hủy tất cả watchers đã đăng ký
93
-
94
- - Cấu trúc button object:
95
- - `label` (String) — text hiển thị trên button
96
- - `color` (String, default: `"primary"`) — màu button
97
- - `elevation` (Number, default: `0`) — độ nổi
98
- - `text` (Boolean, default: `true`) — dạng text button
99
- - `type` (String) — ví dụ `"submit"`
100
- - `:disabled` (String) — biểu thức Vue để disable button, ví dụ `"!checkBoxValue"`
101
- - `v-if` (String) — biểu thức Vue để ẩn/hiện button, ví dụ `"ModuleID==1"`
102
- - `icon-text` (String) — icon MDI hiển thị bên trái label
103
- - `checkvalid` (Boolean) — validate form trước khi chạy action; nếu không pass thì dừng
104
- - `getoutdata` (Boolean) — sync field values vào `v_outData` rồi emit `update:data`; cũng trigger validation
105
- - `action` (Array | Function) — danh sách actions chạy khi click; context truyền vào gồm tất cả fields trong `v_outData` và key `dData` trỏ về `v_outData`
106
-
107
- - Lưu ý:
108
- - Button click được debounce 500ms (leading edge) để tránh double-click
109
- - Controls hỗ trợ `br: true` để xuống hàng (row break)
110
- - Template được build tĩnh lúc `data()` init, không re-render khi prop `controls` thay đổi
111
- - `watch` trong prop template là `:watch` (bind động), khác với `watch` mặc định của Vue
112
- - **Không dùng `f-dialog` bên trong template của component:** `f-dialog` chỉ hoạt động khi được khai báo trực tiếp trong `controls` của cấu trúc JSON module. Nếu đặt trong template của một Vue component, nó sẽ không hoạt động đúng.
113
- - **Khai báo biến `vueData` trước khi dùng trong controls:** Nếu một control bind vào `vueData.someVar`, biến đó phải được khai báo trước trong `data` của module — Vue không thể thiết lập reactivity cho biến chưa tồn tại lúc init.
78
+ - `input` — open/close (v-model)
79
+ - `update:data-out` — component instance on open (parent can reach local data)
80
+ - `update:data` — `v_outData` when a button with `getoutdata: true` is clicked (after validation passes)
81
+
82
+ - On open (`value = true`):
83
+ 1. Reset all fields from `:data` (`setDefaultData`)
84
+ 2. Register watchers from `watch`
85
+ 3. Run `openAction` if set
86
+ 4. Emit `update:data-out` with the instance
87
+
88
+ - On close (`value = false`): remove all registered watchers.
89
+
90
+ - Button object:
91
+ - `label` (String)
92
+ - `color` (String, default `"primary"`)
93
+ - `elevation` (Number, default `0`)
94
+ - `text` (Boolean, default `true`) — text button
95
+ - `type` (String) — e.g. `"submit"`
96
+ - `:disabled` (String) — Vue expression, e.g. `"!checkBoxValue"`
97
+ - `v-if` (String) — Vue expression to show/hide, e.g. `"ModuleID==1"`
98
+ - `icon-text` (String) — MDI icon left of the label
99
+ - `checkvalid` (Boolean) — validate before running the action; stop if invalid
100
+ - `getoutdata` (Boolean) — sync field values into `v_outData` then emit `update:data`; also triggers validation
101
+ - `action` (Array | Function) — actions run on click; context = all `v_outData` fields plus `dData` pointing to `v_outData`
102
+
103
+ - Notes:
104
+ - Button clicks debounced 500ms (leading edge) against double-click
105
+ - Controls support `br: true` for a row break
106
+ - Template is built statically at `data()` init; no re-render when `controls` changes
107
+ - In the template, `watch` is `:watch` (dynamic bind), not Vue's default `watch`
108
+ - **Never put `f-dialog` inside a component template:** it works only when declared directly in the module JSON `controls`; inside a Vue component it misbehaves.
109
+ - **Declare `vueData` variables before binding them in controls:** a control bound to `vueData.someVar` needs that variable declared in the module `data` first — Vue can't make a variable reactive if it doesn't exist at init.
114
110
 
115
111
  ```json
116
112
  "data": [
@@ -135,7 +131,7 @@ Modal dialog tự build form từ mảng `controls`, có hỗ trợ watchers c
135
131
  ]
136
132
  ```
137
133
 
138
- - Ví dụ đầy đủ:
134
+ - Full example:
139
135
 
140
136
  ```json
141
137
  {
@@ -156,8 +152,11 @@ Modal dialog tự build form từ mảng `controls`, có hỗ trợ watchers c
156
152
  {
157
153
  "el": "v-select",
158
154
  "attr": {
159
- "label": "select", "v-model": "bienselect",
160
- ":items": "vueData.Mang", "item-text": "AppName", "item-value": "AppListID"
155
+ "label": "select",
156
+ "v-model": "bienselect",
157
+ ":items": "vueData.Mang",
158
+ "item-text": "AppName",
159
+ "item-value": "AppListID"
161
160
  }
162
161
  }
163
162
  ],
@@ -1,22 +1,22 @@
1
1
  # FUI Display & Presentation Components
2
2
 
3
- > File này sở hữu: **component hiển thị: `f-label`, `f-title`, `f-box`, `f-header`, `f-slider`, chip/badge**.
3
+ > Owns: **display components: `f-label`, `f-title`, `f-box`, `f-header`, `f-slider`, chip/badge**.
4
4
 
5
- Components dùng để hiển thị thông tin, chart, media. File này cũng chứa prefix/binding rules áp dụng cho tất cả f-* components.
5
+ Components for showing info, charts, media. Also holds prefix/binding rules for all f-* components.
6
6
 
7
- ## Prefix và Binding Rules
7
+ ## Prefix and binding rules
8
8
 
9
- - `f-*`: FUI components (định nghĩa trong FUI runtime)
9
+ - `f-*`: FUI components (FUI runtime)
10
10
  - `v-*`: Vuetify components
11
- - `uc-*`: Custom module components từ `components/`
12
- - Trong `module.json`, truyền props qua `attr`
13
- - Dùng kebab-case trong JSON cho custom props (`api-upload`, `item-value`)
14
- - Giá trị động dùng `:prop`
15
- - Dùng `v-on:*` trong JSON (không dùng `@*`)
16
- - Props không có `:` (ví dụ `url`, `api-upload`) là plain string mặc định
17
- - Literal-string forcing (backtick/quote) chỉ dùng trong Action `IN` mapping, không dùng cho static props
11
+ - `uc-*`: custom module components from `components/`
12
+ - In `module.json`, pass props via `attr`
13
+ - Kebab-case in JSON for custom props (`api-upload`, `item-value`)
14
+ - Dynamic values use `:prop`
15
+ - Use `v-on:*` in JSON (not `@*`)
16
+ - Props without `:` (e.g. `url`, `api-upload`) are plain strings by default
17
+ - Literal-string forcing (backtick/quote) only in Action `IN` mappings, never for static props
18
18
 
19
- ## Minimal Control Pattern
19
+ ## Minimal control pattern
20
20
 
21
21
  ```json
22
22
  {
@@ -34,8 +34,7 @@ Components dùng để hiển thị thông tin, chart, media. File này cũng ch
34
34
  ## f-label
35
35
 
36
36
  - Props (source): `items`, `text`, `color`, `iconText`
37
- - Behavior: render `v-chip` từ `text` và/hoặc `items`
38
- - Example:
37
+ - Renders `v-chip` from `text` and/or `items`
39
38
 
40
39
  ```json
41
40
  {
@@ -51,11 +50,10 @@ Components dùng để hiển thị thông tin, chart, media. File này cũng ch
51
50
  ## f-box
52
51
 
53
52
  - Props (source): `rowFormat`, `items`, `label`, `edit`, `saveclick`
54
- - Emit: `input` khi dữ liệu nội bộ thay đổi
55
- - Behavior: hiển thị/chỉnh sửa key-value rows, tự build row format từ data nếu thiếu
56
- - `rowFormat`: mảng `{ text, value, noEdit }` — `noEdit: true` khóa cột đó khi `edit=true`
57
- - `items`: object hoặc array; object tự động wrap thành array 1 phần tử
58
- - Example:
53
+ - Emits `input` when internal data changes
54
+ - Displays/edits key-value rows; auto-builds row format from data if missing
55
+ - `rowFormat`: array of `{ text, value, noEdit }` — `noEdit: true` locks that column when `edit=true`
56
+ - `items`: object or array; an object is auto-wrapped into a 1-element array
59
57
 
60
58
  ```json
61
59
  {
@@ -77,7 +75,6 @@ Components dùng để hiển thị thông tin, chart, media. File này cũng ch
77
75
  ## f-header
78
76
 
79
77
  - Props (source): `label`
80
- - Example:
81
78
 
82
79
  ```json
83
80
  {
@@ -90,7 +87,6 @@ Components dùng để hiển thị thông tin, chart, media. File này cũng ch
90
87
  ## f-title
91
88
 
92
89
  - Props (source): `label`
93
- - Example:
94
90
 
95
91
  ```json
96
92
  {
@@ -103,8 +99,7 @@ Components dùng để hiển thị thông tin, chart, media. File này cũng ch
103
99
  ## f-slider
104
100
 
105
101
  - Props (source): `items`, `itemAttr`
106
- - Behavior: bọc `v-carousel` và `v-carousel-item`
107
- - Example:
102
+ - Wraps `v-carousel` and `v-carousel-item`
108
103
 
109
104
  ```json
110
105
  {
@@ -119,13 +114,12 @@ Components dùng để hiển thị thông tin, chart, media. File này cũng ch
119
114
 
120
115
  ## f-echart
121
116
 
122
- → Xem [`components-echart.md`](components-echart.md) — tài liệu đầy đủ về props, config, global module `FEchartFormatter` và ví dụ.
117
+ → See [`components-echart.md`](components-echart.md) — props, config, global `FEchartFormatter` module, examples.
123
118
 
124
119
  ## f-pdfmake
125
120
 
126
121
  - Props (source): `data`
127
- - Behavior: render PDF trong iframe, re-render khi `data` thay đổi (deep watch)
128
- - Example:
122
+ - Renders PDF in an iframe; re-renders when `data` changes (deep watch)
129
123
 
130
124
  ```json
131
125
  {
@@ -140,8 +134,8 @@ Components dùng để hiển thị thông tin, chart, media. File này cũng ch
140
134
 
141
135
  ---
142
136
 
143
- ## Practical Notes
137
+ ## Practical notes
144
138
 
145
- 1. Hầu hết `f-*` components forward unknown attrs qua `v-bind="$attrs"` — Vuetify attrs vẫn hoạt động nếu child là Vuetify control.
146
- 2. Literal-string rule chỉ áp dụng khi truyền API/path strings trong Action `IN` mapping.
147
- 3. Xem `references/component-table.md` cho `f-table`.
139
+ 1. Most `f-*` components forward unknown attrs via `v-bind="$attrs"` — Vuetify attrs still work when the child is a Vuetify control.
140
+ 2. The literal-string rule applies only to API/path strings in Action `IN` mappings.
141
+ 3. See `references/component-table.md` for `f-table`.