@fui-org/fui-cli 2.1.4 → 2.2.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 (217) hide show
  1. package/README.md +27 -7
  2. package/dist/fui-qrb1j9jz.js +397 -0
  3. package/dist/fui.js +1 -1
  4. package/package.json +1 -1
  5. package/skills/fui/SKILL.md +143 -38
  6. package/skills/fui/agents/fui-builder.md +62 -0
  7. package/skills/fui/agents/fui-tester.md +77 -0
  8. package/skills/{fui-skill → fui}/assets/projectdefaultstyle.css +489 -489
  9. package/skills/{fui-skill → fui}/examples/component.vue +162 -162
  10. package/skills/{fui-skill → fui}/references/INDEX.md +5 -4
  11. package/skills/{fui-skill → fui}/references/advanced-techniques.md +170 -168
  12. package/skills/{fui-skill → fui}/references/component-design.md +2 -2
  13. package/skills/{fui-skill → fui}/references/component-quickref.md +78 -78
  14. package/skills/{fui-skill → fui}/references/component-table.md +287 -287
  15. package/skills/{fui-skill → fui}/references/components-dialog.md +191 -191
  16. package/skills/{fui-skill → fui}/references/components-display.md +141 -141
  17. package/skills/{fui-skill → fui}/references/components-echart.md +316 -316
  18. package/skills/{fui-skill → fui}/references/components-input.md +335 -335
  19. package/skills/{fui-skill → fui}/references/controls-patterns.md +2 -2
  20. package/skills/{fui-skill → fui}/references/controls-styling-vocabulary.md +173 -173
  21. package/skills/{fui-skill → fui}/references/db-workflow.md +9 -9
  22. package/skills/{fui-skill → fui}/references/default-function.md +456 -456
  23. package/skills/{fui-skill → fui}/references/design-modes.md +57 -57
  24. package/skills/{fui-skill → fui}/references/echart-templates.md +489 -489
  25. package/skills/{fui-skill → fui}/references/fastproject.md +99 -99
  26. package/skills/{fui-skill → fui}/references/fullstack-workflow.md +314 -313
  27. package/skills/{fui-skill → fui}/references/module-data-patterns.md +117 -117
  28. package/skills/{fui-skill → fui}/references/module-json-anatomy.md +132 -132
  29. package/skills/{fui-skill → fui}/references/module-structure.md +144 -144
  30. package/skills/{fui-skill → fui}/references/new-session.md +1 -2
  31. package/skills/{fui-skill → fui}/references/pdfmake.md +60 -60
  32. package/skills/{fui-skill → fui}/references/permission-system.md +1 -1
  33. package/skills/{fui-skill → fui}/references/platform-architecture.md +269 -269
  34. package/skills/{fui-skill → fui}/references/project-config.md +303 -303
  35. package/skills/{fui-skill → fui}/references/project-provisioning.md +4 -4
  36. package/skills/{fui-skill → fui}/references/script-map.md +262 -262
  37. package/skills/{fui-skill → fui}/references/sql-clr-functions.md +225 -225
  38. package/skills/{fui-skill → fui}/references/system-design.md +2 -2
  39. package/skills/{fui-skill → fui}/references/tapi-permission-patterns.md +156 -156
  40. package/skills/{fui-skill → fui}/references/tapi-reference.md +474 -474
  41. package/skills/fui/references/team-run.md +141 -0
  42. package/skills/fui/references/tools-registry.md +211 -0
  43. package/skills/{fui-skill → fui}/references/ui-crosswindow-patterns.md +321 -321
  44. package/skills/{fui-skill → fui}/references/ui-dialog-patterns.md +255 -255
  45. package/skills/{fui-skill → fui}/references/ui-layout-patterns.md +176 -176
  46. package/skills/{fui-skill → fui}/references/ui-patterns.md +303 -303
  47. package/skills/{fui-skill → fui}/references/ui-screenshot-review.md +95 -95
  48. package/skills/{fui-skill → fui}/references/ui-table-cell-patterns.md +318 -318
  49. package/skills/{fui-skill → fui}/references/verification.md +11 -11
  50. package/skills/{fui-skill → fui}/references/watcher-patterns.md +163 -163
  51. package/skills/{fui-skill → fui}/references/websocket-realtime.md +271 -271
  52. package/skills/{fui-skill → fui}/scripts/component-3.0.js +2715 -2715
  53. package/skills/{fui-skill → fui}/scripts/component.js +3147 -3147
  54. package/skills/{fui-skill → fui}/scripts/componentTable-3.0.js +1038 -1038
  55. package/skills/{fui-skill → fui}/scripts/componentTable.js +891 -891
  56. package/skills/{fui-skill → fui}/scripts/defaultfunction-3.0.js +866 -866
  57. package/skills/{fui-skill → fui}/scripts/defaultfunction.js +1051 -1051
  58. package/skills/{fui-skill → fui}/scripts/fastproject-3.0.js +870 -870
  59. package/skills/{fui-skill → fui}/scripts/fastproject.js +828 -828
  60. package/dist/fui-h4z7zhk2.js +0 -381
  61. package/skills/fui-skill/SKILL.md +0 -139
  62. package/skills/fui-skill/references/tools-registry.md +0 -84
  63. /package/skills/{fui-skill → fui}/assets/projectdefaultstyle-3.0.css +0 -0
  64. /package/skills/{fui-skill → fui}/design-md/airbnb/DESIGN.md +0 -0
  65. /package/skills/{fui-skill → fui}/design-md/airbnb/README.md +0 -0
  66. /package/skills/{fui-skill → fui}/design-md/airtable/DESIGN.md +0 -0
  67. /package/skills/{fui-skill → fui}/design-md/airtable/README.md +0 -0
  68. /package/skills/{fui-skill → fui}/design-md/apple/DESIGN.md +0 -0
  69. /package/skills/{fui-skill → fui}/design-md/apple/README.md +0 -0
  70. /package/skills/{fui-skill → fui}/design-md/asu/DESIGN.md +0 -0
  71. /package/skills/{fui-skill → fui}/design-md/asu/README.md +0 -0
  72. /package/skills/{fui-skill → fui}/design-md/binance/DESIGN.md +0 -0
  73. /package/skills/{fui-skill → fui}/design-md/binance/README.md +0 -0
  74. /package/skills/{fui-skill → fui}/design-md/bmw/DESIGN.md +0 -0
  75. /package/skills/{fui-skill → fui}/design-md/bmw/README.md +0 -0
  76. /package/skills/{fui-skill → fui}/design-md/bmw-m/DESIGN.md +0 -0
  77. /package/skills/{fui-skill → fui}/design-md/bmw-m/README.md +0 -0
  78. /package/skills/{fui-skill → fui}/design-md/bugatti/DESIGN.md +0 -0
  79. /package/skills/{fui-skill → fui}/design-md/bugatti/README.md +0 -0
  80. /package/skills/{fui-skill → fui}/design-md/cal/DESIGN.md +0 -0
  81. /package/skills/{fui-skill → fui}/design-md/cal/README.md +0 -0
  82. /package/skills/{fui-skill → fui}/design-md/claude/DESIGN.md +0 -0
  83. /package/skills/{fui-skill → fui}/design-md/claude/README.md +0 -0
  84. /package/skills/{fui-skill → fui}/design-md/clay/DESIGN.md +0 -0
  85. /package/skills/{fui-skill → fui}/design-md/clay/README.md +0 -0
  86. /package/skills/{fui-skill → fui}/design-md/clickhouse/DESIGN.md +0 -0
  87. /package/skills/{fui-skill → fui}/design-md/clickhouse/README.md +0 -0
  88. /package/skills/{fui-skill → fui}/design-md/cohere/DESIGN.md +0 -0
  89. /package/skills/{fui-skill → fui}/design-md/cohere/README.md +0 -0
  90. /package/skills/{fui-skill → fui}/design-md/coinbase/DESIGN.md +0 -0
  91. /package/skills/{fui-skill → fui}/design-md/coinbase/README.md +0 -0
  92. /package/skills/{fui-skill → fui}/design-md/composio/DESIGN.md +0 -0
  93. /package/skills/{fui-skill → fui}/design-md/composio/README.md +0 -0
  94. /package/skills/{fui-skill → fui}/design-md/cursor/DESIGN.md +0 -0
  95. /package/skills/{fui-skill → fui}/design-md/cursor/README.md +0 -0
  96. /package/skills/{fui-skill → fui}/design-md/elevenlabs/DESIGN.md +0 -0
  97. /package/skills/{fui-skill → fui}/design-md/elevenlabs/README.md +0 -0
  98. /package/skills/{fui-skill → fui}/design-md/expo/DESIGN.md +0 -0
  99. /package/skills/{fui-skill → fui}/design-md/expo/README.md +0 -0
  100. /package/skills/{fui-skill → fui}/design-md/ferrari/DESIGN.md +0 -0
  101. /package/skills/{fui-skill → fui}/design-md/ferrari/README.md +0 -0
  102. /package/skills/{fui-skill → fui}/design-md/figma/DESIGN.md +0 -0
  103. /package/skills/{fui-skill → fui}/design-md/figma/README.md +0 -0
  104. /package/skills/{fui-skill → fui}/design-md/framer/DESIGN.md +0 -0
  105. /package/skills/{fui-skill → fui}/design-md/framer/README.md +0 -0
  106. /package/skills/{fui-skill → fui}/design-md/fui/DESIGN.md +0 -0
  107. /package/skills/{fui-skill → fui}/design-md/hashicorp/DESIGN.md +0 -0
  108. /package/skills/{fui-skill → fui}/design-md/hashicorp/README.md +0 -0
  109. /package/skills/{fui-skill → fui}/design-md/ibm/DESIGN.md +0 -0
  110. /package/skills/{fui-skill → fui}/design-md/ibm/README.md +0 -0
  111. /package/skills/{fui-skill → fui}/design-md/intercom/DESIGN.md +0 -0
  112. /package/skills/{fui-skill → fui}/design-md/intercom/README.md +0 -0
  113. /package/skills/{fui-skill → fui}/design-md/kraken/DESIGN.md +0 -0
  114. /package/skills/{fui-skill → fui}/design-md/kraken/README.md +0 -0
  115. /package/skills/{fui-skill → fui}/design-md/lamborghini/DESIGN.md +0 -0
  116. /package/skills/{fui-skill → fui}/design-md/lamborghini/README.md +0 -0
  117. /package/skills/{fui-skill → fui}/design-md/linear.app/DESIGN.md +0 -0
  118. /package/skills/{fui-skill → fui}/design-md/linear.app/README.md +0 -0
  119. /package/skills/{fui-skill → fui}/design-md/lovable/DESIGN.md +0 -0
  120. /package/skills/{fui-skill → fui}/design-md/lovable/README.md +0 -0
  121. /package/skills/{fui-skill → fui}/design-md/mastercard/DESIGN.md +0 -0
  122. /package/skills/{fui-skill → fui}/design-md/mastercard/README.md +0 -0
  123. /package/skills/{fui-skill → fui}/design-md/meta/DESIGN.md +0 -0
  124. /package/skills/{fui-skill → fui}/design-md/meta/README.md +0 -0
  125. /package/skills/{fui-skill → fui}/design-md/minimax/DESIGN.md +0 -0
  126. /package/skills/{fui-skill → fui}/design-md/minimax/README.md +0 -0
  127. /package/skills/{fui-skill → fui}/design-md/mintlify/DESIGN.md +0 -0
  128. /package/skills/{fui-skill → fui}/design-md/mintlify/README.md +0 -0
  129. /package/skills/{fui-skill → fui}/design-md/miro/DESIGN.md +0 -0
  130. /package/skills/{fui-skill → fui}/design-md/miro/README.md +0 -0
  131. /package/skills/{fui-skill → fui}/design-md/mistral.ai/DESIGN.md +0 -0
  132. /package/skills/{fui-skill → fui}/design-md/mistral.ai/README.md +0 -0
  133. /package/skills/{fui-skill → fui}/design-md/mongodb/DESIGN.md +0 -0
  134. /package/skills/{fui-skill → fui}/design-md/mongodb/README.md +0 -0
  135. /package/skills/{fui-skill → fui}/design-md/nike/DESIGN.md +0 -0
  136. /package/skills/{fui-skill → fui}/design-md/nike/README.md +0 -0
  137. /package/skills/{fui-skill → fui}/design-md/notion/DESIGN.md +0 -0
  138. /package/skills/{fui-skill → fui}/design-md/notion/README.md +0 -0
  139. /package/skills/{fui-skill → fui}/design-md/nvidia/DESIGN.md +0 -0
  140. /package/skills/{fui-skill → fui}/design-md/nvidia/README.md +0 -0
  141. /package/skills/{fui-skill → fui}/design-md/ollama/DESIGN.md +0 -0
  142. /package/skills/{fui-skill → fui}/design-md/ollama/README.md +0 -0
  143. /package/skills/{fui-skill → fui}/design-md/opencode.ai/DESIGN.md +0 -0
  144. /package/skills/{fui-skill → fui}/design-md/opencode.ai/README.md +0 -0
  145. /package/skills/{fui-skill → fui}/design-md/pinterest/DESIGN.md +0 -0
  146. /package/skills/{fui-skill → fui}/design-md/pinterest/README.md +0 -0
  147. /package/skills/{fui-skill → fui}/design-md/playstation/DESIGN.md +0 -0
  148. /package/skills/{fui-skill → fui}/design-md/playstation/README.md +0 -0
  149. /package/skills/{fui-skill → fui}/design-md/posthog/DESIGN.md +0 -0
  150. /package/skills/{fui-skill → fui}/design-md/posthog/README.md +0 -0
  151. /package/skills/{fui-skill → fui}/design-md/raycast/DESIGN.md +0 -0
  152. /package/skills/{fui-skill → fui}/design-md/raycast/README.md +0 -0
  153. /package/skills/{fui-skill → fui}/design-md/renault/DESIGN.md +0 -0
  154. /package/skills/{fui-skill → fui}/design-md/renault/README.md +0 -0
  155. /package/skills/{fui-skill → fui}/design-md/replicate/DESIGN.md +0 -0
  156. /package/skills/{fui-skill → fui}/design-md/replicate/README.md +0 -0
  157. /package/skills/{fui-skill → fui}/design-md/resend/DESIGN.md +0 -0
  158. /package/skills/{fui-skill → fui}/design-md/resend/README.md +0 -0
  159. /package/skills/{fui-skill → fui}/design-md/revolut/DESIGN.md +0 -0
  160. /package/skills/{fui-skill → fui}/design-md/revolut/README.md +0 -0
  161. /package/skills/{fui-skill → fui}/design-md/runwayml/DESIGN.md +0 -0
  162. /package/skills/{fui-skill → fui}/design-md/runwayml/README.md +0 -0
  163. /package/skills/{fui-skill → fui}/design-md/sanity/DESIGN.md +0 -0
  164. /package/skills/{fui-skill → fui}/design-md/sanity/README.md +0 -0
  165. /package/skills/{fui-skill → fui}/design-md/sentry/DESIGN.md +0 -0
  166. /package/skills/{fui-skill → fui}/design-md/sentry/README.md +0 -0
  167. /package/skills/{fui-skill → fui}/design-md/shopify/DESIGN.md +0 -0
  168. /package/skills/{fui-skill → fui}/design-md/shopify/README.md +0 -0
  169. /package/skills/{fui-skill → fui}/design-md/slack/DESIGN.md +0 -0
  170. /package/skills/{fui-skill → fui}/design-md/spacex/DESIGN.md +0 -0
  171. /package/skills/{fui-skill → fui}/design-md/spacex/README.md +0 -0
  172. /package/skills/{fui-skill → fui}/design-md/spotify/DESIGN.md +0 -0
  173. /package/skills/{fui-skill → fui}/design-md/spotify/README.md +0 -0
  174. /package/skills/{fui-skill → fui}/design-md/starbucks/DESIGN.md +0 -0
  175. /package/skills/{fui-skill → fui}/design-md/starbucks/README.md +0 -0
  176. /package/skills/{fui-skill → fui}/design-md/stripe/DESIGN.md +0 -0
  177. /package/skills/{fui-skill → fui}/design-md/stripe/README.md +0 -0
  178. /package/skills/{fui-skill → fui}/design-md/supabase/DESIGN.md +0 -0
  179. /package/skills/{fui-skill → fui}/design-md/supabase/README.md +0 -0
  180. /package/skills/{fui-skill → fui}/design-md/superhuman/DESIGN.md +0 -0
  181. /package/skills/{fui-skill → fui}/design-md/superhuman/README.md +0 -0
  182. /package/skills/{fui-skill → fui}/design-md/tesla/DESIGN.md +0 -0
  183. /package/skills/{fui-skill → fui}/design-md/tesla/README.md +0 -0
  184. /package/skills/{fui-skill → fui}/design-md/theverge/DESIGN.md +0 -0
  185. /package/skills/{fui-skill → fui}/design-md/theverge/README.md +0 -0
  186. /package/skills/{fui-skill → fui}/design-md/together.ai/DESIGN.md +0 -0
  187. /package/skills/{fui-skill → fui}/design-md/together.ai/README.md +0 -0
  188. /package/skills/{fui-skill → fui}/design-md/uber/DESIGN.md +0 -0
  189. /package/skills/{fui-skill → fui}/design-md/uber/README.md +0 -0
  190. /package/skills/{fui-skill → fui}/design-md/vercel/DESIGN.md +0 -0
  191. /package/skills/{fui-skill → fui}/design-md/vercel/README.md +0 -0
  192. /package/skills/{fui-skill → fui}/design-md/vodafone/DESIGN.md +0 -0
  193. /package/skills/{fui-skill → fui}/design-md/vodafone/README.md +0 -0
  194. /package/skills/{fui-skill → fui}/design-md/voltagent/DESIGN.md +0 -0
  195. /package/skills/{fui-skill → fui}/design-md/voltagent/README.md +0 -0
  196. /package/skills/{fui-skill → fui}/design-md/warp/DESIGN.md +0 -0
  197. /package/skills/{fui-skill → fui}/design-md/warp/README.md +0 -0
  198. /package/skills/{fui-skill → fui}/design-md/webflow/DESIGN.md +0 -0
  199. /package/skills/{fui-skill → fui}/design-md/webflow/README.md +0 -0
  200. /package/skills/{fui-skill → fui}/design-md/wired/DESIGN.md +0 -0
  201. /package/skills/{fui-skill → fui}/design-md/wired/README.md +0 -0
  202. /package/skills/{fui-skill → fui}/design-md/wise/DESIGN.md +0 -0
  203. /package/skills/{fui-skill → fui}/design-md/wise/README.md +0 -0
  204. /package/skills/{fui-skill → fui}/design-md/x.ai/DESIGN.md +0 -0
  205. /package/skills/{fui-skill → fui}/design-md/x.ai/README.md +0 -0
  206. /package/skills/{fui-skill → fui}/design-md/zapier/DESIGN.md +0 -0
  207. /package/skills/{fui-skill → fui}/design-md/zapier/README.md +0 -0
  208. /package/skills/{fui-skill → fui}/examples/f-table-patterns.json +0 -0
  209. /package/skills/{fui-skill → fui}/examples/module-patterns.json +0 -0
  210. /package/skills/{fui-skill → fui}/examples/project-patterns.json +0 -0
  211. /package/skills/{fui-skill → fui}/references/coding-standards.md +0 -0
  212. /package/skills/{fui-skill → fui}/references/db-table-design.md +0 -0
  213. /package/skills/{fui-skill → fui}/references/fsheet.md +0 -0
  214. /package/skills/{fui-skill → fui}/references/tapi-file-api.md +0 -0
  215. /package/skills/{fui-skill → fui}/references/ui-templates.md +0 -0
  216. /package/skills/{fui-skill → fui}/scripts/fechart.js +0 -0
  217. /package/skills/{fui-skill → fui}/scripts/fsheet.js +0 -0
@@ -1,162 +1,162 @@
1
- <template>
2
- <div class="uc-component-name">
3
- <v-card outlined>
4
- <v-card-title v-if="title" class="subtitle-1 font-weight-bold">
5
- <slot name="title">
6
- {{ title }}
7
- </slot>
8
- </v-card-title>
9
-
10
- <v-card-text>
11
- <div v-if="loading">
12
- <slot name="loading">
13
- Loading...
14
- </slot>
15
- </div>
16
- <div v-else-if="!hasItems">
17
- <slot name="empty">
18
- No data
19
- </slot>
20
- </div>
21
- <div v-else>
22
- <slot :items="localItems" :selected-item="localValue">
23
- <v-list dense>
24
- <v-list-item
25
- v-for="(item, index) in localItems"
26
- :key="item.id || item.value || index"
27
- @click="handleSelect(item)"
28
- >
29
- <v-list-item-content>
30
- <v-list-item-title>{{ getItemLabel(item) }}</v-list-item-title>
31
- </v-list-item-content>
32
- </v-list-item>
33
- </v-list>
34
- </slot>
35
-
36
- <v-btn
37
- v-if="showAction"
38
- small
39
- color="primary"
40
- :disabled="disabled"
41
- @click="handleAction"
42
- >
43
- {{ actionLabel }}
44
- </v-btn>
45
- </div>
46
- </v-card-text>
47
- </v-card>
48
- </div>
49
- </template>
50
-
51
- <script>
52
- /**
53
- * Description: Reusable starter component. Prefer generic props, emits, and slots.
54
- * Usage: <uc-component-name :items="rows" :value="selectedRow" @select="handleSelect"></uc-component-name>
55
- * NOTE: No "name:" property — FUI resolves name from filename automatically.
56
- */
57
- export default {
58
- props: {
59
- title: {
60
- type: String,
61
- default: ''
62
- },
63
- value: {
64
- type: [String, Number, Object, Array],
65
- default: null
66
- },
67
- items: {
68
- type: Array,
69
- default: function() {
70
- return [];
71
- }
72
- },
73
- itemText: {
74
- type: String,
75
- default: 'label'
76
- },
77
- loading: {
78
- type: Boolean,
79
- default: false
80
- },
81
- disabled: {
82
- type: Boolean,
83
- default: false
84
- },
85
- showAction: {
86
- type: Boolean,
87
- default: true
88
- },
89
- actionLabel: {
90
- type: String,
91
- default: 'Action'
92
- },
93
- options: {
94
- type: Object,
95
- default: function() {
96
- return {};
97
- }
98
- }
99
- },
100
- data() {
101
- return {
102
- localValue: null,
103
- localItems: []
104
- }
105
- },
106
- computed: {
107
- hasItems() {
108
- return this.localItems.length > 0;
109
- },
110
- resolvedItemText() {
111
- return this.options.itemText || this.itemText;
112
- },
113
- resolvedItemValue() {
114
- return this.options.itemValue || 'value';
115
- }
116
- },
117
- watch: {
118
- value: {
119
- handler(val) {
120
- this.localValue = val;
121
- },
122
- immediate: true
123
- },
124
- items: {
125
- handler(val) {
126
- this.localItems = Array.isArray(val) ? val : [];
127
- },
128
- immediate: true
129
- }
130
- },
131
- methods: {
132
- getItemLabel(item) {
133
- if (!item || typeof item !== 'object') {
134
- return item;
135
- }
136
-
137
- return item[this.resolvedItemText] || item.label || item.name || '';
138
- },
139
- getItemValue(item) {
140
- if (!item || typeof item !== 'object') {
141
- return item;
142
- }
143
-
144
- return item[this.resolvedItemValue] || item.value || item.id || item;
145
- },
146
- handleSelect(item) {
147
- var nextValue = this.getItemValue(item);
148
- this.localValue = nextValue;
149
- this.$emit('input', nextValue);
150
- this.$emit('select', item);
151
- this.$emit('change', nextValue);
152
- },
153
- handleAction() {
154
- this.$emit('action', {
155
- value: this.localValue,
156
- items: this.localItems
157
- });
158
- }
159
- }
160
- }
161
- </script>
162
-
1
+ <template>
2
+ <div class="uc-component-name">
3
+ <v-card outlined>
4
+ <v-card-title v-if="title" class="subtitle-1 font-weight-bold">
5
+ <slot name="title">
6
+ {{ title }}
7
+ </slot>
8
+ </v-card-title>
9
+
10
+ <v-card-text>
11
+ <div v-if="loading">
12
+ <slot name="loading">
13
+ Loading...
14
+ </slot>
15
+ </div>
16
+ <div v-else-if="!hasItems">
17
+ <slot name="empty">
18
+ No data
19
+ </slot>
20
+ </div>
21
+ <div v-else>
22
+ <slot :items="localItems" :selected-item="localValue">
23
+ <v-list dense>
24
+ <v-list-item
25
+ v-for="(item, index) in localItems"
26
+ :key="item.id || item.value || index"
27
+ @click="handleSelect(item)"
28
+ >
29
+ <v-list-item-content>
30
+ <v-list-item-title>{{ getItemLabel(item) }}</v-list-item-title>
31
+ </v-list-item-content>
32
+ </v-list-item>
33
+ </v-list>
34
+ </slot>
35
+
36
+ <v-btn
37
+ v-if="showAction"
38
+ small
39
+ color="primary"
40
+ :disabled="disabled"
41
+ @click="handleAction"
42
+ >
43
+ {{ actionLabel }}
44
+ </v-btn>
45
+ </div>
46
+ </v-card-text>
47
+ </v-card>
48
+ </div>
49
+ </template>
50
+
51
+ <script>
52
+ /**
53
+ * Description: Reusable starter component. Prefer generic props, emits, and slots.
54
+ * Usage: <uc-component-name :items="rows" :value="selectedRow" @select="handleSelect"></uc-component-name>
55
+ * NOTE: No "name:" property — FUI resolves name from filename automatically.
56
+ */
57
+ export default {
58
+ props: {
59
+ title: {
60
+ type: String,
61
+ default: ''
62
+ },
63
+ value: {
64
+ type: [String, Number, Object, Array],
65
+ default: null
66
+ },
67
+ items: {
68
+ type: Array,
69
+ default: function() {
70
+ return [];
71
+ }
72
+ },
73
+ itemText: {
74
+ type: String,
75
+ default: 'label'
76
+ },
77
+ loading: {
78
+ type: Boolean,
79
+ default: false
80
+ },
81
+ disabled: {
82
+ type: Boolean,
83
+ default: false
84
+ },
85
+ showAction: {
86
+ type: Boolean,
87
+ default: true
88
+ },
89
+ actionLabel: {
90
+ type: String,
91
+ default: 'Action'
92
+ },
93
+ options: {
94
+ type: Object,
95
+ default: function() {
96
+ return {};
97
+ }
98
+ }
99
+ },
100
+ data() {
101
+ return {
102
+ localValue: null,
103
+ localItems: []
104
+ }
105
+ },
106
+ computed: {
107
+ hasItems() {
108
+ return this.localItems.length > 0;
109
+ },
110
+ resolvedItemText() {
111
+ return this.options.itemText || this.itemText;
112
+ },
113
+ resolvedItemValue() {
114
+ return this.options.itemValue || 'value';
115
+ }
116
+ },
117
+ watch: {
118
+ value: {
119
+ handler(val) {
120
+ this.localValue = val;
121
+ },
122
+ immediate: true
123
+ },
124
+ items: {
125
+ handler(val) {
126
+ this.localItems = Array.isArray(val) ? val : [];
127
+ },
128
+ immediate: true
129
+ }
130
+ },
131
+ methods: {
132
+ getItemLabel(item) {
133
+ if (!item || typeof item !== 'object') {
134
+ return item;
135
+ }
136
+
137
+ return item[this.resolvedItemText] || item.label || item.name || '';
138
+ },
139
+ getItemValue(item) {
140
+ if (!item || typeof item !== 'object') {
141
+ return item;
142
+ }
143
+
144
+ return item[this.resolvedItemValue] || item.value || item.id || item;
145
+ },
146
+ handleSelect(item) {
147
+ var nextValue = this.getItemValue(item);
148
+ this.localValue = nextValue;
149
+ this.$emit('input', nextValue);
150
+ this.$emit('select', item);
151
+ this.$emit('change', nextValue);
152
+ },
153
+ handleAction() {
154
+ this.$emit('action', {
155
+ value: this.localValue,
156
+ items: this.localItems
157
+ });
158
+ }
159
+ }
160
+ }
161
+ </script>
162
+
@@ -14,7 +14,7 @@ Load: `fui skill ref references/a.md references/b.md` (several at once OK).
14
14
 
15
15
  - FUI anatomy, Project→Module hierarchy (import/component/set merge), runtime, vueData/v_Set → `platform-architecture.md`
16
16
  - module.json's 4 parts (data/watch/controls/set) → `module-json-anatomy.md`
17
- - `HTMLOnly: true`: server embeds NO library (Vue/Vuetify/jQuery/lodash/MDI/`projectdefaultstyle.css` absent); declare all in the module; `script-map.md` does NOT apply → `module-structure.md` §HTMLOnly=true: KHÔNG có thư viện nào được nhúng sẵn
17
+ - `HTMLOnly: true`: server embeds NO library (Vue/Vuetify/jQuery/lodash/MDI/`projectdefaultstyle.css` absent); declare all in the module; `script-map.md` does NOT apply → `module-structure.md` §"HTMLOnly=true: no library is embedded"
18
18
 
19
19
  ## UI / components
20
20
 
@@ -57,7 +57,7 @@ Load: `fui skill ref references/a.md references/b.md` (several at once OK).
57
57
  ## User permissions
58
58
 
59
59
  - `SystemRight` (level) vs `FunctionRight` (per function), `v-if`/menu `right`, `fui right system|function list/new/update/delete` (8 commands) → `permission-system.md`
60
- - Guarding control/menu/SP with a right code — it must exist; how to create → `permission-system.md` (§"mã quyền phải TỒN TẠI trước khi đem gác")
60
+ - Guarding control/menu/SP with a right code — it must exist; how to create → `permission-system.md` (§"A right code must EXIST before guarding with it")
61
61
  - SQL permission checks in SP body → `tapi-permission-patterns.md`
62
62
 
63
63
  ## Database
@@ -83,7 +83,7 @@ Load: `fui skill ref references/a.md references/b.md` (several at once OK).
83
83
  - Ordered commands (reset → reload → toast) in `CALLBACK`/`:action`/`watch`/`THEN` → `controls-patterns.md` §CORE RULE
84
84
  - v_old, deep-watch, cascading → `watcher-patterns.md`
85
85
  - EXE, MAP, complex expressions → `advanced-techniques.md`
86
- - Blank page with 0 JS errors and 0 Vue warns, or complex logic in `:attr` `:option` `:config` → `advanced-techniques.md` §1 + `fui module validate`
86
+ - Blank page (often with no JS error to trace), or complex logic in `:attr` `:option` `:config` → `advanced-techniques.md` §1 + `fui module validate`
87
87
  - `… is not defined` at render, or `EXE`/`FUN` doing nothing → `advanced-techniques.md` §2 (function must exist in `script.js`; `fui module publish script`). ⚠️ `fui module validate` misses this; use `fui module simulate --render`
88
88
  - Built-in utilities (openWindow, ajaxCALL, jsonToExcel, groupBy…) → `default-function.md`
89
89
  - Bundled libs (jQuery, lodash, moment, numeral, toast, jquery-confirm) — check before adding a CDN; ⚠️ `HTMLOnly=false` only → `script-map.md` §0
@@ -96,9 +96,10 @@ Load: `fui skill ref references/a.md references/b.md` (several at once OK).
96
96
 
97
97
  - "new session" / "phiên mới" / "cửa sổ mới": open another Claude Code CLI in its own terminal window (workspace root resolved dynamically, NEVER hard-coded) → `new-session.md`
98
98
  - Hand work / instructions to another running Claude session (coordinating several sessions, a multi-AI workflow, parallelizing work per module) — `ListAgents`/`SendMessage` → `new-session.md` §6
99
+ - Build, test and fix one module with little supervision (planner → builder → tester → fix, one approval at the end) → `team-run.md` (the `fui` skill decides between this and a direct change; the agents come with fui)
99
100
  - Per-command safety (R/M, Safe/Confirm/Destructive), strict mode, `fui sp verify`, error log → `tools-registry.md`
100
101
  - Pre-publish definition-of-done (`fui module validate` + `fui module outline` + `fui module simulate` + static `fui sp verify`) → `verification.md`
101
- - UI broken, cause unknown — cheapest verification layer (symptom → layer; read BEFORE `--render`, reread after ≥2 renders without progress) → `verification.md` §Chọn tầng kiểm chứng
102
+ - UI broken, cause unknown — cheapest verification layer (symptom → layer; read BEFORE `--render`, reread after ≥2 renders without progress) → `verification.md` §"Pick the tier by SYMPTOM"
102
103
 
103
104
  ## Design system
104
105