@rglabs/butterfly 2.0.1

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 (117) hide show
  1. package/CLAUDE.md +201 -0
  2. package/README.md +371 -0
  3. package/dist/commands/add.d.ts +23 -0
  4. package/dist/commands/add.js +303 -0
  5. package/dist/commands/code.d.ts +11 -0
  6. package/dist/commands/code.js +72 -0
  7. package/dist/commands/create-object.d.ts +6 -0
  8. package/dist/commands/create-object.js +293 -0
  9. package/dist/commands/create-report.d.ts +6 -0
  10. package/dist/commands/create-report.js +154 -0
  11. package/dist/commands/diff.d.ts +4 -0
  12. package/dist/commands/diff.js +238 -0
  13. package/dist/commands/download.d.ts +4 -0
  14. package/dist/commands/download.js +374 -0
  15. package/dist/commands/layout.d.ts +12 -0
  16. package/dist/commands/layout.js +83 -0
  17. package/dist/commands/record.d.ts +21 -0
  18. package/dist/commands/record.js +483 -0
  19. package/dist/commands/run-poc.d.ts +3 -0
  20. package/dist/commands/run-poc.js +18 -0
  21. package/dist/commands/setup.d.ts +3 -0
  22. package/dist/commands/setup.js +66 -0
  23. package/dist/commands/start-poc.d.ts +3 -0
  24. package/dist/commands/start-poc.js +55 -0
  25. package/dist/commands/sync-docs.d.ts +3 -0
  26. package/dist/commands/sync-docs.js +27 -0
  27. package/dist/commands/translate.d.ts +13 -0
  28. package/dist/commands/translate.js +401 -0
  29. package/dist/commands/upload.d.ts +3 -0
  30. package/dist/commands/upload.js +150 -0
  31. package/dist/commands/workflow-info.d.ts +13 -0
  32. package/dist/commands/workflow-info.js +161 -0
  33. package/dist/components/ConflictResolver.d.ts +12 -0
  34. package/dist/components/ConflictResolver.js +77 -0
  35. package/dist/components/DiffView.d.ts +11 -0
  36. package/dist/components/DiffView.js +101 -0
  37. package/dist/components/DownloadProgress.d.ts +11 -0
  38. package/dist/components/DownloadProgress.js +29 -0
  39. package/dist/components/RecordPreview.d.ts +11 -0
  40. package/dist/components/RecordPreview.js +91 -0
  41. package/dist/components/SetupForm.d.ts +8 -0
  42. package/dist/components/SetupForm.js +56 -0
  43. package/dist/components/UploadProgress.d.ts +13 -0
  44. package/dist/components/UploadProgress.js +42 -0
  45. package/dist/diff/adapters/index.d.ts +8 -0
  46. package/dist/diff/adapters/index.js +18 -0
  47. package/dist/diff/adapters/objectsAdapter.d.ts +13 -0
  48. package/dist/diff/adapters/objectsAdapter.js +177 -0
  49. package/dist/diff/adapters/reportsAdapter.d.ts +14 -0
  50. package/dist/diff/adapters/reportsAdapter.js +212 -0
  51. package/dist/diff/adapters/types.d.ts +19 -0
  52. package/dist/diff/adapters/types.js +2 -0
  53. package/dist/diff/engine.d.ts +19 -0
  54. package/dist/diff/engine.js +57 -0
  55. package/dist/diff/types.d.ts +34 -0
  56. package/dist/diff/types.js +110 -0
  57. package/dist/index.d.ts +3 -0
  58. package/dist/index.js +117 -0
  59. package/dist/types/index.d.ts +18 -0
  60. package/dist/types/index.js +2 -0
  61. package/dist/utils/api.d.ts +85 -0
  62. package/dist/utils/api.js +1031 -0
  63. package/dist/utils/auth.d.ts +4 -0
  64. package/dist/utils/auth.js +22 -0
  65. package/dist/utils/bfySplitter.d.ts +12 -0
  66. package/dist/utils/bfySplitter.js +151 -0
  67. package/dist/utils/docs.d.ts +16 -0
  68. package/dist/utils/docs.js +186 -0
  69. package/dist/utils/errorLogger.d.ts +6 -0
  70. package/dist/utils/errorLogger.js +29 -0
  71. package/dist/utils/files.d.ts +14 -0
  72. package/dist/utils/files.js +772 -0
  73. package/dist/utils/lockManager.d.ts +15 -0
  74. package/dist/utils/lockManager.js +126 -0
  75. package/dist/utils/resourceHandlers.d.ts +50 -0
  76. package/dist/utils/resourceHandlers.js +684 -0
  77. package/dist/utils/resourceMapping.d.ts +32 -0
  78. package/dist/utils/resourceMapping.js +210 -0
  79. package/dist/utils/singleResourceDownload.d.ts +14 -0
  80. package/dist/utils/singleResourceDownload.js +261 -0
  81. package/dist/utils/summaryGenerator.d.ts +2 -0
  82. package/dist/utils/summaryGenerator.js +183 -0
  83. package/dist/utils/uploadHandler.d.ts +31 -0
  84. package/dist/utils/uploadHandler.js +263 -0
  85. package/docs/AI_API.md +93 -0
  86. package/docs/CLAUDE.md +216 -0
  87. package/docs/PROJECT_SPECIFIC.md +1 -0
  88. package/docs/RECORD_COMMAND.md +262 -0
  89. package/docs/WORKFLOW_API.md +480 -0
  90. package/docs/bfy-splitting.md +126 -0
  91. package/docs/cli-commands.md +333 -0
  92. package/docs/examples/README.md +95 -0
  93. package/docs/examples/order-system.md +147 -0
  94. package/docs/examples/product-catalog.md +195 -0
  95. package/docs/examples/reports.md +187 -0
  96. package/docs/excel-export.md +216 -0
  97. package/docs/field-types/README.md +29 -0
  98. package/docs/field-types/calculated.md +147 -0
  99. package/docs/field-types/code-mappings.md +84 -0
  100. package/docs/field-types/custom.md +340 -0
  101. package/docs/object-specs/README.md +136 -0
  102. package/docs/object-specs/code-parameters.md +151 -0
  103. package/docs/object-specs/creating.md +203 -0
  104. package/docs/object-specs/js-code-examples.md +208 -0
  105. package/docs/object-specs/js-field-updates.md +168 -0
  106. package/docs/objects/README.md +89 -0
  107. package/docs/objects/creating.md +127 -0
  108. package/docs/page-layout.md +361 -0
  109. package/docs/permissions.md +260 -0
  110. package/docs/reports.md +197 -0
  111. package/docs/state-machines.md +544 -0
  112. package/docs/tasks/create-object.md +81 -0
  113. package/docs/translations.md +346 -0
  114. package/docs/twig-helpers.md +283 -0
  115. package/docs/webservices.md +159 -0
  116. package/docs/workspaces.md +176 -0
  117. package/package.json +59 -0
@@ -0,0 +1,168 @@
1
+ # Updating Form Field Values via JavaScript
2
+
3
+ When programmatically updating field values in the admin form (e.g., after fetching data via AJAX), use the appropriate method based on the field type.
4
+
5
+ ## Quick Reference
6
+
7
+ | Field Type | Update Method | Example |
8
+ |------------|---------------|---------|
9
+ | `calculated` | `bfyRefresh_` | `bfyRefresh_total(150.00)` |
10
+ | `custom` | `bfyRefresh_` | `bfyRefresh_custom_field(data)` |
11
+ | `date` | `bfyRefresh_` | `bfyRefresh_due_date('2024-01-15')` |
12
+ | `string` | `.val().trigger('change')` | `$('[name="title"]').val('New Title').trigger('change')` |
13
+ | `integer` | `.val().trigger('change')` | `$('[name="quantity"]').val(10).trigger('change')` |
14
+ | `decimal` | `.val().trigger('change')` | `$('[name="price"]').val(99.99).trigger('change')` |
15
+ | `textarea` | `.val().trigger('change')` | `$('[name="description"]').val('Text').trigger('change')` |
16
+ | `from_list` | `.val().trigger('change')` | `$('[name="status"]').val('active').trigger('change')` |
17
+ | `datetime` | `.val().trigger('change')` | `$('[name="created_at"]').val('2024-01-15 10:30:00').trigger('change')` |
18
+ | `hidden` | `.val().trigger('change')` | `$('[name="hidden_field"]').val('value').trigger('change')` |
19
+
20
+ ## Fields with bfyRefresh_
21
+
22
+ For `calculated`, `custom`, and `date` field types, use the `bfyRefresh_` function:
23
+
24
+ ```javascript
25
+ bfyRefresh_COLUMN_NAME(value);
26
+ ```
27
+
28
+ ### Example
29
+
30
+ ```javascript
31
+ // Calculated field
32
+ bfyRefresh_total(150.00);
33
+
34
+ // Custom field
35
+ bfyRefresh_custom_display(data);
36
+
37
+ // Date field
38
+ bfyRefresh_due_date('2024-01-15');
39
+ ```
40
+
41
+ ## All Other Fields
42
+
43
+ For all other field types, use standard jQuery:
44
+
45
+ ```javascript
46
+ $('[name="COLUMN_NAME"]').val(value).trigger('change');
47
+ ```
48
+
49
+ ### Example
50
+
51
+ ```javascript
52
+ // String field
53
+ $('[name="title"]').val('New Title').trigger('change');
54
+
55
+ // Integer field
56
+ $('[name="quantity"]').val(10).trigger('change');
57
+
58
+ // Dropdown (from_list)
59
+ $('[name="status"]').val('active').trigger('change');
60
+
61
+ // Datetime field
62
+ $('[name="created_at"]').val('2024-01-15 10:30:00').trigger('change');
63
+ ```
64
+
65
+ ## Fetching Data and Updating Fields
66
+
67
+ Common pattern for fetching data from another table and updating form fields:
68
+
69
+ ```javascript
70
+ %element%.on('change', function() {
71
+ var id = $(this).val();
72
+
73
+ $.post('/admin/ajax/cms_object/get', {
74
+ "table_name": 'source_table',
75
+ "column": "id",
76
+ "value": id
77
+ }, function(data) {
78
+ if (data.data && data.data[0]) {
79
+ var record = data.data[0];
80
+
81
+ // For calculated, custom, date fields - use bfyRefresh_
82
+ bfyRefresh_calculated_total(record.total);
83
+ bfyRefresh_due_date(record.due_date);
84
+
85
+ // For all other fields - use jQuery
86
+ $('[name="title"]').val(record.title).trigger('change');
87
+ $('[name="status"]').val(record.status).trigger('change');
88
+ $('[name="quantity"]').val(record.quantity).trigger('change');
89
+ }
90
+ });
91
+ });
92
+ ```
93
+
94
+ > **Important:** When fetching data, the `column` parameter should be the `column_name` in `val_3` of the source field (for dropdowns, this is the value column).
95
+
96
+ ## Alert Dialog
97
+
98
+ Display an alert with a callback:
99
+
100
+ ```javascript
101
+ rg_alert('Your message here', function() {
102
+ // Executed after user clicks OK
103
+ console.log('User acknowledged');
104
+ });
105
+ ```
106
+
107
+ ## Input Masking
108
+
109
+ Apply input masks to format user input:
110
+
111
+ ### Pattern Characters
112
+
113
+ | Character | Matches |
114
+ |-----------|---------|
115
+ | `9` | Digit (0-9) |
116
+ | `a` | Letter (A-Za-z) |
117
+ | `*` | Alphanumeric |
118
+ | `#` | Hex digit (0-9, A-F) |
119
+
120
+ ### Pattern Modifiers
121
+
122
+ | Modifier | Description |
123
+ |----------|-------------|
124
+ | `[x]` | Optional character |
125
+ | `{n}` | Repeat n times |
126
+ | `{n,m}` | Repeat n to m times |
127
+
128
+ ### Examples
129
+
130
+ ```javascript
131
+ // Phone number
132
+ %element%.maskInput('(999) 999-9999');
133
+
134
+ // Date (DD/MM/YYYY)
135
+ %element%.maskInput('99/99/9999');
136
+
137
+ // SSN
138
+ %element%.maskInput('999-99-9999');
139
+
140
+ // MAC address
141
+ %element%.maskInput('##:##:##:##:##:##');
142
+
143
+ // Fixed 4 digits
144
+ %element%.maskInput('9{4}');
145
+
146
+ // 1-5 letters
147
+ %element%.maskInput('a{1,5}');
148
+
149
+ // Optional first digit
150
+ %element%.maskInput('[9]99');
151
+ ```
152
+
153
+ ## Conditional Show/Hide Fields
154
+
155
+ For `from_list` fields, conditionally show/hide other fields:
156
+
157
+ ```javascript
158
+ %element%.condition({
159
+ "1": ["field_a", "field_b"], // Show these when value is "1"
160
+ "2": ["field_c"] // Show this when value is "2"
161
+ });
162
+ ```
163
+
164
+ ## Notes
165
+
166
+ - `%element%` is automatically replaced with the jQuery selector for the current field
167
+ - Always trigger 'change' event after setting values to ensure form state updates
168
+ - Use `bfyRefresh_` functions for calculated/custom/date fields to properly re-render them
@@ -0,0 +1,89 @@
1
+ # Objects
2
+
3
+ Objects in Butterfly represent database tables with their configurations, menus, and behaviors.
4
+
5
+ ## Table: `objects`
6
+
7
+ ## Required Fields
8
+
9
+ | Field | Type | Description |
10
+ |-------|------|-------------|
11
+ | `name` | string | Display name |
12
+ | `table_name` | string | Database table name (lowercase, underscores) |
13
+
14
+ ## Optional Fields
15
+
16
+ | Field | Type | Default | Description |
17
+ |-------|------|---------|-------------|
18
+ | `database_alias` | string | `"default"` | Database connection |
19
+ | `auto_increment_column_name` | string | `"id"` | Primary key column |
20
+ | `is_cms_object` | int | `0` | `1` = CMS/system object, `0` = App object |
21
+ | `has_trash` | int | `0` | Enable soft delete |
22
+ | `has_order` | int | `0` | Enable ordering |
23
+ | `has_draft` | int | `0` | Enable draft mode |
24
+ | `description` | string | null | Object description |
25
+ | `section_title` | string | null | Section title in forms |
26
+ | `protect_schema` | int | `0` | Prevent schema modifications |
27
+
28
+ ## Menu Fields
29
+
30
+ | Field | Type | Description |
31
+ |-------|------|-------------|
32
+ | `main_menu_id` | int | Top-level menu ID |
33
+ | `sub_menu_id` | int | Sub-menu ID |
34
+ | `menu_id` | int | Direct menu ID |
35
+
36
+ ## Creating an Object
37
+
38
+ ```bash
39
+ butterfly-cli record add objects --data '{
40
+ "name": "Products",
41
+ "table_name": "products",
42
+ "description": "Product catalog",
43
+ "is_cms_object": 0,
44
+ "has_trash": 1
45
+ }'
46
+ ```
47
+
48
+ ## Get Object by ID
49
+
50
+ ```bash
51
+ butterfly-cli record get objects --id 128
52
+ ```
53
+
54
+ ## Get Object by Table Name
55
+
56
+ ```bash
57
+ butterfly-cli record get objects --column table_name --value "products"
58
+ ```
59
+
60
+ ## Update Object
61
+
62
+ ```bash
63
+ butterfly-cli record edit objects --id 128 --data '{
64
+ "description": "Updated description"
65
+ }'
66
+ ```
67
+
68
+ ## Full Example
69
+
70
+ ```bash
71
+ # Create a Products object
72
+ butterfly-cli record add objects --data '{
73
+ "name": "Products",
74
+ "table_name": "products",
75
+ "database_alias": "default",
76
+ "auto_increment_column_name": "id",
77
+ "is_cms_object": 0,
78
+ "has_trash": 1,
79
+ "has_order": 0,
80
+ "description": "Product management"
81
+ }'
82
+
83
+ # Response: SUCCESS: add operation completed (ID: 150)
84
+ ```
85
+
86
+ ## Related
87
+
88
+ - [Creating Objects Step-by-Step](./creating.md)
89
+ - [Object Specs](../object-specs/README.md) - Add fields to objects
@@ -0,0 +1,127 @@
1
+ # Creating Objects
2
+
3
+ Step-by-step guide to creating a new object (table) in Butterfly.
4
+
5
+ ## Step 1: Plan Your Object
6
+
7
+ Before creating, determine:
8
+ - **Table name**: lowercase, underscores (e.g., `order_items`)
9
+ - **Display name**: Human readable (e.g., "Order Items")
10
+ - **Type**: App object (`is_cms_object: 0`) or CMS object (`is_cms_object: 1`)
11
+
12
+ ## Step 2: Create the Object
13
+
14
+ ### Minimal Object
15
+
16
+ ```bash
17
+ butterfly-cli record add objects --data '{
18
+ "name": "Order Items",
19
+ "table_name": "order_items"
20
+ }'
21
+ ```
22
+
23
+ ### Full Object with Options
24
+
25
+ ```bash
26
+ butterfly-cli record add objects --data '{
27
+ "name": "Order Items",
28
+ "table_name": "order_items",
29
+ "database_alias": "default",
30
+ "auto_increment_column_name": "id",
31
+ "is_cms_object": 0,
32
+ "has_trash": 1,
33
+ "has_order": 0,
34
+ "has_draft": 0,
35
+ "description": "Items in customer orders",
36
+ "section_title": "Order Item"
37
+ }'
38
+ ```
39
+
40
+ ## Step 3: Add Fields (Object Specs)
41
+
42
+ After creating the object, add fields using the returned ID:
43
+
44
+ ```bash
45
+ # Get the object ID from the response
46
+ # SUCCESS: add operation completed (ID: 150)
47
+
48
+ # Add a Name field
49
+ butterfly-cli record add object_specs --data '{
50
+ "object_id": 150,
51
+ "name": "Name",
52
+ "column_name": "name",
53
+ "type": "string",
54
+ "required": 1,
55
+ "list_column": 1,
56
+ "edit_order_no": 1
57
+ }'
58
+
59
+ # Add a Price field
60
+ butterfly-cli record add object_specs --data '{
61
+ "object_id": 150,
62
+ "name": "Price",
63
+ "column_name": "price",
64
+ "type": "decimal",
65
+ "edit_order_no": 2
66
+ }'
67
+
68
+ # Add a Status dropdown
69
+ butterfly-cli record add object_specs --data '{
70
+ "object_id": 150,
71
+ "name": "Status",
72
+ "column_name": "status",
73
+ "type": "from_list",
74
+ "val_1": "active:Active,inactive:Inactive",
75
+ "edit_order_no": 3
76
+ }'
77
+ ```
78
+
79
+ ## Step 4: Verify
80
+
81
+ ```bash
82
+ # Get the object
83
+ butterfly-cli record get objects --id 150
84
+
85
+ # Get all specs for the object
86
+ butterfly-cli record get object_specs --column object_id --value 150
87
+ ```
88
+
89
+ ## Common Patterns
90
+
91
+ ### E-commerce Product
92
+
93
+ ```bash
94
+ # Create object
95
+ butterfly-cli record add objects --data '{
96
+ "name": "Products",
97
+ "table_name": "products",
98
+ "has_trash": 1
99
+ }'
100
+
101
+ # Add fields (assuming object_id is 150)
102
+ butterfly-cli record add object_specs --data '{"object_id":150,"name":"Title","column_name":"title","type":"string","required":1,"list_column":1,"edit_order_no":1}'
103
+ butterfly-cli record add object_specs --data '{"object_id":150,"name":"SKU","column_name":"sku","type":"string","edit_order_no":2}'
104
+ butterfly-cli record add object_specs --data '{"object_id":150,"name":"Price","column_name":"price","type":"decimal","edit_order_no":3}'
105
+ butterfly-cli record add object_specs --data '{"object_id":150,"name":"Description","column_name":"description","type":"textarea","edit_order_no":4}'
106
+ butterfly-cli record add object_specs --data '{"object_id":150,"name":"Status","column_name":"status","type":"from_list","val_1":"draft:Draft,active:Active,archived:Archived","edit_order_no":5}'
107
+ ```
108
+
109
+ ### User Profile
110
+
111
+ ```bash
112
+ # Create object
113
+ butterfly-cli record add objects --data '{
114
+ "name": "User Profiles",
115
+ "table_name": "user_profiles"
116
+ }'
117
+
118
+ # Add fields
119
+ butterfly-cli record add object_specs --data '{"object_id":151,"name":"User","column_name":"user_id","type":"dropdown","val_1":"users","val_2":"id","val_3":"name","required":1,"edit_order_no":1}'
120
+ butterfly-cli record add object_specs --data '{"object_id":151,"name":"Bio","column_name":"bio","type":"textarea","edit_order_no":2}'
121
+ butterfly-cli record add object_specs --data '{"object_id":151,"name":"Avatar","column_name":"avatar","type":"image","edit_order_no":3}'
122
+ ```
123
+
124
+ ## Next Steps
125
+
126
+ - [Object Specs Reference](../object-specs/README.md)
127
+ - [Field Types](../field-types/README.md)