@lehnihon/bit-form 1.0.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.
- package/LICENSE +21 -0
- package/README.md +150 -0
- package/dist/angular/index.cjs +2 -0
- package/dist/angular/index.cjs.map +1 -0
- package/dist/angular/index.d.cts +115 -0
- package/dist/angular/index.d.ts +115 -0
- package/dist/angular/index.js +2 -0
- package/dist/angular/index.js.map +1 -0
- package/dist/bus-DAwKIiMY.d.cts +233 -0
- package/dist/bus-DAwKIiMY.d.ts +233 -0
- package/dist/chunk-32ZEDTLP.js +2 -0
- package/dist/chunk-32ZEDTLP.js.map +1 -0
- package/dist/chunk-FOPOA6NB.cjs +133 -0
- package/dist/chunk-FOPOA6NB.cjs.map +1 -0
- package/dist/chunk-XIDR3J47.cjs +2 -0
- package/dist/chunk-XIDR3J47.cjs.map +1 -0
- package/dist/chunk-ZI3XHI4I.js +133 -0
- package/dist/chunk-ZI3XHI4I.js.map +1 -0
- package/dist/cli/index.cjs +105 -0
- package/dist/devtools/bridge.cjs +2 -0
- package/dist/devtools/bridge.cjs.map +1 -0
- package/dist/devtools/bridge.d.cts +3 -0
- package/dist/devtools/bridge.d.ts +3 -0
- package/dist/devtools/bridge.js +2 -0
- package/dist/devtools/bridge.js.map +1 -0
- package/dist/devtools/index.cjs +2 -0
- package/dist/devtools/index.cjs.map +1 -0
- package/dist/devtools/index.d.cts +14 -0
- package/dist/devtools/index.d.ts +14 -0
- package/dist/devtools/index.js +2 -0
- package/dist/devtools/index.js.map +1 -0
- package/dist/index-CmwQH2V1.d.cts +108 -0
- package/dist/index-DRvn8318.d.ts +108 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +119 -0
- package/dist/index.d.ts +119 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/react/index.cjs +2 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +34 -0
- package/dist/react/index.d.ts +34 -0
- package/dist/react/index.js +2 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react-native/index.cjs +2 -0
- package/dist/react-native/index.cjs.map +1 -0
- package/dist/react-native/index.d.cts +27 -0
- package/dist/react-native/index.d.ts +27 -0
- package/dist/react-native/index.js +2 -0
- package/dist/react-native/index.js.map +1 -0
- package/dist/resolvers/joi.cjs +2 -0
- package/dist/resolvers/joi.cjs.map +1 -0
- package/dist/resolvers/joi.d.cts +8 -0
- package/dist/resolvers/joi.d.ts +8 -0
- package/dist/resolvers/joi.js +2 -0
- package/dist/resolvers/joi.js.map +1 -0
- package/dist/resolvers/yup.cjs +2 -0
- package/dist/resolvers/yup.cjs.map +1 -0
- package/dist/resolvers/yup.d.cts +8 -0
- package/dist/resolvers/yup.d.ts +8 -0
- package/dist/resolvers/yup.js +2 -0
- package/dist/resolvers/yup.js.map +1 -0
- package/dist/resolvers/zod.cjs +2 -0
- package/dist/resolvers/zod.cjs.map +1 -0
- package/dist/resolvers/zod.d.cts +8 -0
- package/dist/resolvers/zod.d.ts +8 -0
- package/dist/resolvers/zod.js +2 -0
- package/dist/resolvers/zod.js.map +1 -0
- package/dist/use-bit-watch-BMCwKIYx.d.cts +99 -0
- package/dist/use-bit-watch-BujTdIMc.d.ts +99 -0
- package/dist/vue/index.cjs +2 -0
- package/dist/vue/index.cjs.map +1 -0
- package/dist/vue/index.d.cts +122 -0
- package/dist/vue/index.d.ts +122 -0
- package/dist/vue/index.js +2 -0
- package/dist/vue/index.js.map +1 -0
- package/package.json +160 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 lehnihon
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# 🛠 Bit-Form
|
|
2
|
+
|
|
3
|
+
**Agnostic and performant form state management**.
|
|
4
|
+
|
|
5
|
+
Bit-Form is a powerful, framework-agnostic library designed to handle complex validations, dynamic masks, and conditional logic seamlessly across modern frontend ecosystems. Build your logic once, use it anywhere.
|
|
6
|
+
|
|
7
|
+
## ✨ Key Features
|
|
8
|
+
|
|
9
|
+
- **Framework Agnostic Core:** Dedicated bindings for React, Vue, and Angular.
|
|
10
|
+
- **First-Class Validation:** Built-in schema resolvers for Zod, Yup, and Joi. Includes native support for debounced asynchronous validation.
|
|
11
|
+
- **Advanced Masking System:** Extensive list of presets including Currency (BRL, USD, EUR), Documents (CPF, CNPJ, SSN), Dates, and Credit Cards.
|
|
12
|
+
- **Smart Dependencies:** Built-in dependency manager to conditionally hide or require fields using `showIf`, `requiredIf`, and `dependsOn`.
|
|
13
|
+
- **Computed Fields:** Automatically calculate and update form values in real-time based on other field changes.
|
|
14
|
+
- **Field Arrays:** First-class support for dynamic lists with native methods to append, prepend, move, and swap items.
|
|
15
|
+
- **Time-Travel DevTools:** Full history support with Undo/Redo capabilities and a Remote Inspector CLI via WebSocket.
|
|
16
|
+
|
|
17
|
+
## 🏎 Performance & Comparison
|
|
18
|
+
|
|
19
|
+
Bit-Form was built to solve the "heavy form" problem. While most libraries re-render the entire form or require complex memoization to handle dynamic masks and deep validations, Bit-Form uses a subscription-based model that updates only the specific field being touched.
|
|
20
|
+
|
|
21
|
+
### Comparison Table
|
|
22
|
+
|
|
23
|
+
#### React Ecosystem
|
|
24
|
+
|
|
25
|
+
| Feature | **Bit-Form** | React Hook Form | Formik | TanStack Form |
|
|
26
|
+
| :-------------------------- | :----------: | :-------------: | :-------: | :-----------: |
|
|
27
|
+
| **Framework Agnostic** | ✅ Yes | ❌ No | ❌ No | ✅ Yes |
|
|
28
|
+
| **Built-in Masking** | ✅ Advanced | ❌ No | ❌ No | ❌ No |
|
|
29
|
+
| **Re-renders** | ⚡ Minimal | ⚡ Minimal | 🐢 High | ⚡ Minimal |
|
|
30
|
+
| **Conditional Logic** | ✅ Native | ⚠️ Manual | ⚠️ Manual | ✅ Native |
|
|
31
|
+
| **Time-Travel (Undo/Redo)** | ✅ Native | ❌ No | ❌ No | ❌ No |
|
|
32
|
+
| **Remote DevTools** | ✅ Yes | ❌ No | ❌ No | ❌ No |
|
|
33
|
+
| **Computed Fields** | ✅ Native | ❌ No | ❌ No | ⚠️ Manual |
|
|
34
|
+
|
|
35
|
+
#### Vue Ecosystem
|
|
36
|
+
|
|
37
|
+
| Feature | **Bit-Form** | VeeValidate | FormKit |
|
|
38
|
+
| :-------------------------- | :----------: | :---------: | :--------: |
|
|
39
|
+
| **Framework Agnostic** | ✅ Yes | ❌ No | ❌ No |
|
|
40
|
+
| **Built-in Masking** | ✅ Advanced | ❌ No | ⚠️ Plugins |
|
|
41
|
+
| **Re-renders** | ⚡ Minimal | ⚡ Minimal | ⚡ Minimal |
|
|
42
|
+
| **Conditional Logic** | ✅ Native | ⚠️ Manual | ✅ Native |
|
|
43
|
+
| **Time-Travel (Undo/Redo)** | ✅ Native | ❌ No | ❌ No |
|
|
44
|
+
| **Remote DevTools** | ✅ Yes | ❌ No | ❌ No |
|
|
45
|
+
| **Computed Fields** | ✅ Native | ❌ No | ⚠️ Manual |
|
|
46
|
+
|
|
47
|
+
#### Angular Ecosystem
|
|
48
|
+
|
|
49
|
+
| Feature | **Bit-Form** | Angular Reactive Forms | ngx-formly |
|
|
50
|
+
| :-------------------------- | :----------: | :--------------------: | :--------: |
|
|
51
|
+
| **Framework Agnostic** | ✅ Yes | ❌ No | ❌ No |
|
|
52
|
+
| **Built-in Masking** | ✅ Advanced | ❌ No | ❌ No |
|
|
53
|
+
| **Re-renders** | ⚡ Minimal | ⚡ Minimal | ⚡ Minimal |
|
|
54
|
+
| **Conditional Logic** | ✅ Native | ⚠️ Manual | ✅ Native |
|
|
55
|
+
| **Time-Travel (Undo/Redo)** | ✅ Native | ❌ No | ❌ No |
|
|
56
|
+
| **Remote DevTools** | ✅ Yes | ❌ No | ❌ No |
|
|
57
|
+
| **Computed Fields** | ✅ Native | ⚠️ Manual | ⚠️ Manual |
|
|
58
|
+
|
|
59
|
+
### Benchmark Results
|
|
60
|
+
|
|
61
|
+
Tests performed with a form containing **100 inputs**, measuring the "Time to Interaction" (TTI) during a single keystroke on a mid-range device.
|
|
62
|
+
|
|
63
|
+
#### React Ecosystem
|
|
64
|
+
|
|
65
|
+
| Metric (lower is better) | **Bit-Form** | React Hook Form | Formik |
|
|
66
|
+
| :------------------------ | :----------- | :-------------- | :----- |
|
|
67
|
+
| **Keystroke Latency** | **1.2ms** | 1.8ms | 14.5ms |
|
|
68
|
+
| **Validation Overhead** | **0.8ms** | 1.2ms | 5.4ms |
|
|
69
|
+
| **Bundle Size (Gzipped)** | **~12kb** | ~9kb | ~15kb |
|
|
70
|
+
|
|
71
|
+
#### Vue Ecosystem
|
|
72
|
+
|
|
73
|
+
| Metric (lower is better) | **Bit-Form** | VeeValidate | FormKit |
|
|
74
|
+
| :------------------------ | :----------- | :---------- | :------ |
|
|
75
|
+
| **Keystroke Latency** | **~1.2ms** | ~2.0ms | ~2.5ms |
|
|
76
|
+
| **Validation Overhead** | **~0.8ms** | ~1.0ms | ~1.5ms |
|
|
77
|
+
| **Bundle Size (Gzipped)** | **~12kb** | ~8kb | ~25kb |
|
|
78
|
+
|
|
79
|
+
#### Angular Ecosystem
|
|
80
|
+
|
|
81
|
+
| Metric (lower is better) | **Bit-Form** | Angular Reactive Forms | ngx-formly |
|
|
82
|
+
| :------------------------ | :----------- | :--------------------: | :--------- |
|
|
83
|
+
| **Keystroke Latency** | **~1.2ms** | ~1.5ms | ~2.2ms |
|
|
84
|
+
| **Validation Overhead** | **~0.8ms** | ~1.0ms | ~1.4ms |
|
|
85
|
+
| **Bundle Size (Gzipped)** | **~12kb** | ~0kb (built-in) | ~15kb |
|
|
86
|
+
|
|
87
|
+
> **Note:** Bit-Form's slightly larger bundle size (vs. minimal libraries) is due to the included agnostic core and built-in masking engine, which saves you from installing secondary libraries like `imask` or `cleave.js`. Vue and Angular benchmarks use the same methodology as React; actual numbers may vary by form complexity and device.
|
|
88
|
+
|
|
89
|
+
### Why Bit-Form?
|
|
90
|
+
|
|
91
|
+
1. **Zero-Reflow Masking:** Unlike other libs where masking causes a double-render (one for the raw value, one for the mask), Bit-Form handles masks at the store level before the UI even knows about it.
|
|
92
|
+
2. **Logic Portability:** You can share the exact same `BitStore` instance (including validations and masks) between a React web app and an Angular admin dashboard.
|
|
93
|
+
3. **Predictable State:** With the History Manager, you can track exactly how the form state evolved, making it the best choice for complex, multi-step financial or insurance forms.
|
|
94
|
+
|
|
95
|
+
## 📦 Installation
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
npm install @lehnihon/bit-form
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 📚 Documentation
|
|
102
|
+
|
|
103
|
+
The complete documentation is available in the `/docs` folder. Explore the guides below to get started:
|
|
104
|
+
|
|
105
|
+
### 🚀 Getting Started
|
|
106
|
+
|
|
107
|
+
- **[Introduction & Installation](./docs/01-getting-started.md)**: Overview and basic setup.
|
|
108
|
+
- **[Core Concepts](./docs/02-core-concepts.md)**: Understanding the `BitStore` and state lifecycle.
|
|
109
|
+
|
|
110
|
+
### 🖼 Framework Guides
|
|
111
|
+
|
|
112
|
+
- **[React](./docs/frameworks/react.md)**: Using hooks and Context Provider.
|
|
113
|
+
- **[React Native](./docs/frameworks/react-native.md)**: Mobile specifics and `onChangeText` mapping.
|
|
114
|
+
- **[Vue](./docs/frameworks/vue.md)**: Using composables and InjectionKeys.
|
|
115
|
+
- **[Angular](./docs/frameworks/angular.md)**: Reactive forms via Signals.
|
|
116
|
+
|
|
117
|
+
### 🛠 Features
|
|
118
|
+
|
|
119
|
+
- **[Validation & Resolvers](./docs/features/validation.md)**: Integrating Zod, Yup, and Joi.
|
|
120
|
+
- **[Masks & Formatting](./docs/features/masks.md)**: Using and creating input masks.
|
|
121
|
+
- **[Conditional Logic](./docs/features/conditional-logic.md)**: Managing field dependencies.
|
|
122
|
+
- **[Computed Fields](./docs/features/computed-fields.md)**: Handling derived form values.
|
|
123
|
+
- **[Field Arrays](./docs/features/field-arrays.md)**: Managing dynamic lists of fields.
|
|
124
|
+
- **[Scopes](./docs/features/scopes.md)**: Per-step validation and status for wizard forms (`useBitScope`, `injectBitScope`).
|
|
125
|
+
- **[History & Time Travel](./docs/features/history-and-time-travel.md)**: Using Undo/Redo features.
|
|
126
|
+
|
|
127
|
+
### 📖 Guides & Examples
|
|
128
|
+
|
|
129
|
+
- **[When to Use What](./docs/guides/when-to-use-what.md)**: Quick reference for resolver vs asyncValidate vs setServerErrors, computed vs transform, and conditional fields.
|
|
130
|
+
- **[Complete Form Example](./docs/examples/complete-form-example.md)**: End-to-end example with masks, asyncValidate, conditional logic, scopes, history, and DevTools.
|
|
131
|
+
- **[Server Errors](./docs/examples/server-errors.md)**: Client validation (resolver/asyncValidate) vs API 422 handling (setServerErrors, onSubmit).
|
|
132
|
+
|
|
133
|
+
### 🔍 DevTools
|
|
134
|
+
|
|
135
|
+
- **[DevTools Overview](./docs/devtools/index.md)**: Configuration (`devTools: true` or `{ mode: "remote" }`).
|
|
136
|
+
- **[Floating Panel](./docs/devtools/floating-panel.md)**: In-app inspector (local mode).
|
|
137
|
+
- **[CLI & Remote Dashboard](./docs/devtools/cli-remote-dashboard.md)**: `bit-form devtools` + WebSocket for React Native / remote debugging.
|
|
138
|
+
|
|
139
|
+
### 📑 Reference
|
|
140
|
+
|
|
141
|
+
- **[API Reference](./docs/api-reference/bit-store.md)**: Full `BitStore` class documentation.
|
|
142
|
+
- **[Type Definitions](./docs/api-reference/types.md)**: Core TypeScript interfaces and types.
|
|
143
|
+
|
|
144
|
+
## 🤝 Contributing
|
|
145
|
+
|
|
146
|
+
Contributions are welcome! Feel free to open issues or submit pull requests.
|
|
147
|
+
|
|
148
|
+
## 📄 License
|
|
149
|
+
|
|
150
|
+
MIT
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkFOPOA6NBcjs = require('../chunk-FOPOA6NB.cjs');var _core = require('@angular/core');var R=new (0, _core.InjectionToken)("BIT_STORE");function C(t){return{provide:R,useValue:t}}function S(){let t=_core.inject.call(void 0, R,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}function W(){let t=S(),e=_core.inject.call(void 0, _core.DestroyRef),o=_core.signal.call(void 0, t.getState()),r=_core.signal.call(void 0, null),n=_core.signal.call(void 0, null),c=t.subscribe(()=>{o.set(t.getState())});e.onDestroy(()=>c());let p=_core.computed.call(void 0, ()=>o().isValid),s=_core.computed.call(void 0, ()=>o().isSubmitting),i=_core.computed.call(void 0, ()=>o().isDirty),d=_core.computed.call(void 0, ()=>(o(),t.canUndo)),u=_core.computed.call(void 0, ()=>(o(),t.canRedo));return{store:t,isValid:p,isSubmitting:s,isDirty:i,canUndo:d,canRedo:u,getValues:()=>o().values,getErrors:()=>o().errors,getTouched:()=>o().touched,submit:B=>f=>(_optionalChain([f, 'optionalAccess', _2 => _2.preventDefault, 'call', _3 => _3()]),_optionalChain([f, 'optionalAccess', _4 => _4.stopPropagation, 'call', _5 => _5()]),t.submit(B)),onSubmit:B=>f=>(_optionalChain([f, 'optionalAccess', _6 => _6.preventDefault, 'call', _7 => _7()]),_optionalChain([f, 'optionalAccess', _8 => _8.stopPropagation, 'call', _9 => _9()]),r.set(null),t.submit(async l=>{try{let a=await B(l);n.set(a),r.set(null)}catch(a){_chunkFOPOA6NBcjs.h.call(void 0, a)?t.setServerErrors(_chunkFOPOA6NBcjs.i.call(void 0, a)):r.set(a instanceof Error?a:new Error(String(a)))}})),submitError:r,lastResponse:n,reset:()=>{t.reset(),r.set(null),n.set(null)},validate:t.validate.bind(t),setValues:t.setValues.bind(t),setError:t.setError.bind(t),setErrors:t.setErrors.bind(t),setServerErrors:t.setServerErrors.bind(t),setField:t.setField.bind(t),blurField:t.blurField.bind(t),registerMask:t.registerMask.bind(t),pushItem:t.pushItem.bind(t),prependItem:t.prependItem.bind(t),removeItem:t.removeItem.bind(t),insertItem:t.insertItem.bind(t),moveItem:t.moveItem.bind(t),swapItems:t.swapItems.bind(t),undo:t.undo.bind(t),redo:t.redo.bind(t)}}function G(t,e,o){let r=_core.inject.call(void 0, R),n=_core.signal.call(void 0, r.getState()),c=r.subscribe(()=>{n.set(r.getState())});_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>{c(),r.unregisterField&&r.unregisterField(t)}),e&&r.registerField(t,e);let p=_core.computed.call(void 0, ()=>_chunkFOPOA6NBcjs.e.call(void 0, n().values,t)),s=_core.computed.call(void 0, ()=>n().errors[t]),i=_core.computed.call(void 0, ()=>!!n().touched[t]),d=_core.computed.call(void 0, ()=>(n(),r.isFieldDirty(t))),u=_core.computed.call(void 0, ()=>(n(),r.isFieldValidating(t))),m=_core.computed.call(void 0, ()=>(n(),r.isHidden(t))),F=_core.computed.call(void 0, ()=>(n(),r.isRequired(t))),E=_core.computed.call(void 0, ()=>i()&&!!s()),b=_nullishCoalesce(_optionalChain([o, 'optionalAccess', _10 => _10.mask]), () => (_optionalChain([r, 'access', _11 => _11.config, 'access', _12 => _12.fields, 'optionalAccess', _13 => _13[t], 'optionalAccess', _14 => _14.mask]))),P=b?typeof b=="string"?r.config.masks[b]:b:void 0,x=_core.computed.call(void 0, ()=>{let a=p();return a==null||a===""?"":P?P.format(a):String(a)}),B=a=>{if(!P){r.setField(t,a);return}let g=String(_nullishCoalesce(a, () => ("")));r.setField(t,P.parse(g))},f=()=>r.blurField(t),l=_core.computed.call(void 0, ()=>({isDirty:d(),isValidating:u(),isHidden:m(),isRequired:F(),hasError:!!s()}));return{value:p,displayValue:x,error:s,touched:i,invalid:E,isDirty:d,isValidating:u,isHidden:m,isRequired:F,fieldMeta:l,setValue:B,setBlur:f,update:a=>B(_nullishCoalesce(_optionalChain([a, 'optionalAccess', _15 => _15.target, 'optionalAccess', _16 => _16.value]), () => (a)))}}var h=()=>Math.random().toString(36).substring(2,9);function X(t){let e=_core.inject.call(void 0, R),o=_core.inject.call(void 0, _core.DestroyRef),r=()=>{let s=_chunkFOPOA6NBcjs.e.call(void 0, e.getState().values,t);return Array.isArray(s)?s:[]},n=_core.signal.call(void 0, r()),c=_core.signal.call(void 0, n().map(h)),p=e.subscribe(()=>{let s=r(),i=_core.untracked.call(void 0, c);n.set(s),s.length!==i.length&&(s.length>i.length?c.set([...i,...Array.from({length:s.length-i.length},h)]):c.set(i.slice(0,s.length)))});return o.onDestroy(()=>{p(),e.unregisterPrefix&&e.unregisterPrefix(`${t}.`)}),{fields:_core.computed.call(void 0, ()=>n().map((s,i)=>({key:c()[i]||`temp-${i}`,value:s,index:i}))),length:_core.computed.call(void 0, ()=>n().length),append:s=>{c.update(i=>[...i,h()]),e.pushItem(t,s)},prepend:s=>{c.update(i=>[h(),...i]),e.prependItem(t,s)},remove:s=>{c.update(i=>i.filter((d,u)=>u!==s)),e.removeItem(t,s)},insert:(s,i)=>{c.update(d=>{let u=[...d];return u.splice(s,0,h()),u}),e.insertItem(t,s,i)},swap:(s,i)=>{c.update(d=>{let u=[...d];return[u[s],u[i]]=[u[i],u[s]],u}),e.swapItems(t,s,i)},move:(s,i)=>{c.update(d=>{let u=[...d],[m]=u.splice(s,1);return u.splice(i,0,m),u}),e.moveItem(t,s,i)},replace:s=>{c.set(s.map(()=>h())),e.setField(t,s)},clear:()=>{c.set([]),e.setField(t,[])}}}function tt(t,e){let o=Object.keys(t),r=Object.keys(e);return o.length!==r.length?!1:o.every(n=>t[n]===e[n])}function et(t){let e=S(),o=e.getStepStatus(t),r=_core.signal.call(void 0, o),n=e.subscribe(()=>{let u=e.getStepStatus(t),m=r();(u.hasErrors!==m.hasErrors||u.isDirty!==m.isDirty||!tt(u.errors,m.errors))&&r.set(u)});try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>n())}catch (e2){}let c=async()=>{let u=await e.validate({scope:t}),m=e.getStepErrors(t);return{valid:u,errors:m}},p=()=>e.getStepErrors(t),s=_core.computed.call(void 0, ()=>!r().hasErrors),i=_core.computed.call(void 0, ()=>r().isDirty),d=_core.computed.call(void 0, ()=>r().errors);return{scopeName:t,status:r,errors:d,validate:c,getErrors:p,isValid:s,isDirty:i,unsubscribe:n}}function ot(t,e){let o=Object.keys(t),r=Object.keys(e);return o.length!==r.length?!1:o.every(n=>t[n]===e[n])}function nt(t){let e=S(),o=_core.signal.call(void 0, 0),r=_core.computed.call(void 0, ()=>_nullishCoalesce(t[o()], () => (""))),n=()=>_nullishCoalesce(t[o()], () => ("")),c=_core.signal.call(void 0, e.getStepStatus(n())),p=()=>{let l=n(),a=e.getStepStatus(l),g=c();(a.hasErrors!==g.hasErrors||a.isDirty!==g.isDirty||!ot(a.errors,g.errors))&&c.set(a)},s=e.subscribe(p);try{_core.inject.call(void 0, _core.DestroyRef).onDestroy(()=>s())}catch (e3){}let i=async()=>{let l=n(),a=await e.validate({scope:l}),g=e.getStepErrors(l);return{valid:a,errors:g}},d=()=>e.getStepErrors(n()),u=async()=>{let l=n(),a=await e.validate({scope:l});if(a){let g=Math.min(o()+1,t.length-1);o.set(g),c.set(e.getStepStatus(_nullishCoalesce(t[g], () => (""))))}return a},m=()=>{let l=Math.max(o()-1,0);o.set(l),c.set(e.getStepStatus(_nullishCoalesce(t[l], () => (""))))},F=l=>{let a=Math.max(0,Math.min(l-1,t.length-1));o.set(a),c.set(e.getStepStatus(_nullishCoalesce(t[a], () => (""))))},E=_core.computed.call(void 0, ()=>o()+1),b=_core.computed.call(void 0, ()=>o()===0),P=_core.computed.call(void 0, ()=>o()>=t.length-1),x=_core.computed.call(void 0, ()=>!c().hasErrors),B=_core.computed.call(void 0, ()=>c().isDirty),f=_core.computed.call(void 0, ()=>c().errors);return{step:E,stepIndex:o,scope:r,next:u,prev:m,goTo:F,isFirst:b,isLast:P,status:c,errors:f,isValid:x,isDirty:B,validate:i,getErrors:d}}function ut(t){let e=S(),o=_core.inject.call(void 0, _core.DestroyRef),r=_core.signal.call(void 0, _chunkFOPOA6NBcjs.e.call(void 0, e.getState().values,t),{equal:_chunkFOPOA6NBcjs.d}),n=e.watch(t,c=>{r.set(c)});return o.onDestroy(n),r.asReadonly()}exports.injectBitArray = X; exports.injectBitField = G; exports.injectBitForm = W; exports.injectBitScope = et; exports.injectBitSteps = nt; exports.injectBitWatch = ut; exports.provideBitStore = C; exports.useBitStore = S;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/leandrocarol/Projetos/bit-form/dist/angular/index.cjs","../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts"],"names":["BIT_STORE_TOKEN","InjectionToken","provideBitStore","store","useBitStore","inject","injectBitForm","destroyRef","stateSignal","signal","submitError","lastResponse","sub","isValid","computed","isSubmitting","isDirty","canUndo","canRedo","onSuccess","event","handler","values","result","err","isValidationErrorShape","extractServerErrors","injectBitField","path","config","options","unsubscribe","value","getDeepValue","error","touched","isValidating","isHidden","isRequired","invalid","maskOption","resolvedMask","displayValue","val","setValue","stringVal","setBlur","fieldMeta","e","generateId","injectBitArray","getRaw","valuesSig","idsSig","unsub","next","ids","untracked"],"mappings":"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","file":"/Users/leandrocarol/Projetos/bit-form/dist/angular/index.cjs","sourcesContent":[null,"import { inject, InjectionToken, Provider } from \"@angular/core\"; // IMPORTANTE: Adicione o 'inject' aqui\nimport { BitStore } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitStore<any>>(\"BIT_STORE\");\n\nexport function provideBitStore(store: BitStore<any>): Provider {\n return { provide: BIT_STORE_TOKEN, useValue: store };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitStore<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function injectBitForm<T extends object>() {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal(store.getState());\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = store.subscribe(() => {\n stateSignal.set(store.getState());\n });\n\n destroyRef.onDestroy(() => sub());\n\n const isValid = computed(() => stateSignal().isValid);\n const isSubmitting = computed(() => stateSignal().isSubmitting);\n const isDirty = computed(() => stateSignal().isDirty);\n\n const canUndo = computed(() => {\n stateSignal();\n return store.canUndo;\n });\n\n const canRedo = computed(() => {\n stateSignal();\n return store.canRedo;\n });\n\n const getValues = () => stateSignal().values;\n const getErrors = () => stateSignal().errors;\n const getTouched = () => stateSignal().touched;\n\n const submit = (onSuccess: (values: T) => void | Promise<void>) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n return store.submit(onSuccess);\n };\n };\n\n const onSubmit = (handler: (values: T) => Promise<unknown>) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n submitError.set(null);\n return store.submit(async (values) => {\n try {\n const result = await handler(values);\n lastResponse.set(result);\n submitError.set(null);\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n submitError.set(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n }\n });\n };\n };\n\n const reset = () => {\n store.reset();\n submitError.set(null);\n lastResponse.set(null);\n };\n\n return {\n store,\n isValid,\n isSubmitting,\n isDirty,\n canUndo,\n canRedo,\n getValues,\n getErrors,\n getTouched,\n submit,\n onSubmit,\n submitError,\n lastResponse,\n reset,\n validate: store.validate.bind(store),\n setValues: store.setValues.bind(store),\n setError: store.setError.bind(store),\n setErrors: store.setErrors.bind(store),\n setServerErrors: store.setServerErrors.bind(store),\n setField: store.setField.bind(store),\n blurField: store.blurField.bind(store),\n registerMask: store.registerMask.bind(store),\n pushItem: store.pushItem.bind(store),\n prependItem: store.prependItem.bind(store),\n removeItem: store.removeItem.bind(store),\n insertItem: store.insertItem.bind(store),\n moveItem: store.moveItem.bind(store),\n swapItems: store.swapItems.bind(store),\n undo: store.undo.bind(store),\n redo: store.redo.bind(store),\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n BitFieldDefinition,\n BitFieldOptions,\n getDeepValue,\n BitPath,\n BitPathValue,\n} from \"../core\";\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P, config?: BitFieldDefinition<TForm>, options?: BitFieldOptions) {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.getState());\n\n const unsubscribe = store.subscribe(() => {\n stateSignal.set(store.getState());\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n if (store.unregisterField) {\n store.unregisterField(path as string);\n }\n });\n\n if (config) {\n store.registerField(path as string, config as any);\n }\n\n const value = computed(\n () =>\n getDeepValue(\n stateSignal().values,\n path as string,\n ) as BitPathValue<TForm, P>,\n );\n const error = computed(\n () => (stateSignal().errors as Record<string, any>)[path],\n );\n const touched = computed(\n () => !!(stateSignal().touched as Record<string, any>)[path],\n );\n\n const isDirty = computed(() => {\n stateSignal();\n return store.isFieldDirty(path);\n });\n\n const isValidating = computed(() => {\n stateSignal();\n return store.isFieldValidating(path);\n });\n\n const isHidden = computed(() => {\n stateSignal();\n return store.isHidden(path);\n });\n\n const isRequired = computed(() => {\n stateSignal();\n return store.isRequired(path);\n });\n\n const invalid = computed(() => touched() && !!error());\n\n const maskOption =\n options?.mask ?? store.config.fields?.[path as string]?.mask;\n const resolvedMask = maskOption\n ? typeof maskOption === \"string\"\n ? store.config.masks![maskOption]\n : maskOption\n : undefined;\n\n const displayValue = computed(() => {\n const val = value();\n if (val === undefined || val === null || val === \"\") return \"\";\n\n return resolvedMask ? resolvedMask.format(val) : String(val);\n });\n\n const setValue = (val: any) => {\n if (!resolvedMask) {\n store.setField(path, val);\n return;\n }\n\n const stringVal = String(val ?? \"\");\n store.setField(path, resolvedMask.parse(stringVal) as any);\n };\n\n const setBlur = () => store.blurField(path);\n\n const fieldMeta = computed(() => ({\n isDirty: isDirty(),\n isValidating: isValidating(),\n isHidden: isHidden(),\n isRequired: isRequired(),\n hasError: !!error(),\n }));\n\n return {\n value,\n displayValue,\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n fieldMeta,\n setValue,\n setBlur,\n update: (e: any) => setValue(e?.target?.value ?? e),\n };\n}\n","import { DestroyRef, signal, computed, inject, untracked } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n getDeepValue,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n BitPath,\n} from \"../core\";\n\nconst generateId = () => Math.random().toString(36).substring(2, 9);\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n\n const getRaw = () => {\n const val = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P>;\n return Array.isArray(val)\n ? (val as BitArrayItem<BitPathValue<TForm, P>>[])\n : [];\n };\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(getRaw());\n const idsSig = signal<string[]>(valuesSig().map(generateId));\n\n const unsub = store.subscribe(() => {\n const next = getRaw();\n const ids = untracked(idsSig);\n valuesSig.set(next);\n\n if (next.length !== ids.length) {\n if (next.length > ids.length) {\n idsSig.set([\n ...ids,\n ...Array.from({ length: next.length - ids.length }, generateId),\n ]);\n } else {\n idsSig.set(ids.slice(0, next.length));\n }\n }\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n if (store.unregisterPrefix) store.unregisterPrefix(`${path as string}.`);\n });\n\n return {\n fields: computed(() =>\n valuesSig().map((v, i) => ({\n key: idsSig()[i] || `temp-${i}`,\n value: v,\n index: i,\n })),\n ),\n length: computed(() => valuesSig().length),\n append: (v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => [...ids, generateId()]);\n store.pushItem(path, v);\n },\n prepend: (v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => [generateId(), ...ids]);\n store.prependItem(path, v);\n },\n remove: (i: number) => {\n idsSig.update((ids) => ids.filter((_, idx) => idx !== i));\n store.removeItem(path, i);\n },\n insert: (index: number, v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => {\n const c = [...ids];\n c.splice(index, 0, generateId());\n return c;\n });\n store.insertItem(path, index, v);\n },\n swap: (a: number, b: number) => {\n idsSig.update((ids) => {\n const c = [...ids];\n [c[a], c[b]] = [c[b], c[a]];\n return c;\n });\n store.swapItems(path, a, b);\n },\n move: (f: number, t: number) => {\n idsSig.update((ids) => {\n const c = [...ids];\n const [it] = c.splice(f, 1);\n c.splice(t, 0, it);\n return c;\n });\n store.moveItem(path, f, t);\n },\n replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => {\n idsSig.set(items.map(() => generateId()));\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n idsSig.set([]);\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { Provider, computed, signal, Signal } from '@angular/core';
|
|
3
|
+
import { B as BitStore } from '../index-CmwQH2V1.cjs';
|
|
4
|
+
import { e as BitErrors, n as BitTouched, k as BitPath, l as BitPathValue, B as BitMask, b as BitArrayPath, a as BitArrayItem, g as BitFieldDefinition, h as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-DAwKIiMY.cjs';
|
|
5
|
+
|
|
6
|
+
declare function provideBitStore(store: BitStore<any>): Provider;
|
|
7
|
+
declare function useBitStore<T extends object>(): BitStore<T>;
|
|
8
|
+
|
|
9
|
+
declare function injectBitForm<T extends object>(): {
|
|
10
|
+
store: BitStore<T>;
|
|
11
|
+
isValid: _angular_core.Signal<boolean>;
|
|
12
|
+
isSubmitting: _angular_core.Signal<boolean>;
|
|
13
|
+
isDirty: _angular_core.Signal<boolean>;
|
|
14
|
+
canUndo: _angular_core.Signal<boolean>;
|
|
15
|
+
canRedo: _angular_core.Signal<boolean>;
|
|
16
|
+
getValues: () => T;
|
|
17
|
+
getErrors: () => BitErrors<T>;
|
|
18
|
+
getTouched: () => BitTouched<T>;
|
|
19
|
+
submit: (onSuccess: (values: T) => void | Promise<void>) => (event?: Event) => Promise<void>;
|
|
20
|
+
onSubmit: (handler: (values: T) => Promise<unknown>) => (event?: Event) => Promise<void>;
|
|
21
|
+
submitError: _angular_core.WritableSignal<Error | null>;
|
|
22
|
+
lastResponse: _angular_core.WritableSignal<unknown>;
|
|
23
|
+
reset: () => void;
|
|
24
|
+
validate: (options?: {
|
|
25
|
+
scope?: string;
|
|
26
|
+
scopeFields?: string[];
|
|
27
|
+
}) => Promise<boolean>;
|
|
28
|
+
setValues: (newValues: T) => void;
|
|
29
|
+
setError: (path: string, message: string | undefined) => void;
|
|
30
|
+
setErrors: (errors: BitErrors<T>) => void;
|
|
31
|
+
setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
|
|
32
|
+
setField: <P extends BitPath<T, "">>(path: P, value: BitPathValue<T, P>) => void;
|
|
33
|
+
blurField: <P extends BitPath<T, "">>(path: P) => void;
|
|
34
|
+
registerMask: (name: string, mask: BitMask) => void;
|
|
35
|
+
pushItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
|
|
36
|
+
prependItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
|
|
37
|
+
removeItem: <P extends BitArrayPath<T>>(path: P, index: number) => void;
|
|
38
|
+
insertItem: <P extends BitArrayPath<T>>(path: P, index: number, value: BitArrayItem<BitPathValue<T, P>>) => void;
|
|
39
|
+
moveItem: <P extends BitArrayPath<T>>(path: P, from: number, to: number) => void;
|
|
40
|
+
swapItems: <P extends BitArrayPath<T>>(path: P, indexA: number, indexB: number) => void;
|
|
41
|
+
undo: () => void;
|
|
42
|
+
redo: () => void;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
declare function injectBitField<TValue = any, TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P, config?: BitFieldDefinition<TForm>, options?: BitFieldOptions): {
|
|
46
|
+
value: _angular_core.Signal<BitPathValue<TForm, P>>;
|
|
47
|
+
displayValue: _angular_core.Signal<string>;
|
|
48
|
+
error: _angular_core.Signal<any>;
|
|
49
|
+
touched: _angular_core.Signal<boolean>;
|
|
50
|
+
invalid: _angular_core.Signal<boolean>;
|
|
51
|
+
isDirty: _angular_core.Signal<boolean>;
|
|
52
|
+
isValidating: _angular_core.Signal<boolean>;
|
|
53
|
+
isHidden: _angular_core.Signal<boolean>;
|
|
54
|
+
isRequired: _angular_core.Signal<boolean>;
|
|
55
|
+
fieldMeta: _angular_core.Signal<{
|
|
56
|
+
isDirty: boolean;
|
|
57
|
+
isValidating: boolean;
|
|
58
|
+
isHidden: boolean;
|
|
59
|
+
isRequired: boolean;
|
|
60
|
+
hasError: boolean;
|
|
61
|
+
}>;
|
|
62
|
+
setValue: (val: any) => void;
|
|
63
|
+
setBlur: () => void;
|
|
64
|
+
update: (e: any) => void;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
declare function injectBitArray<TForm extends object = any, P extends BitArrayPath<TForm> = BitArrayPath<TForm>>(path: P): {
|
|
68
|
+
fields: _angular_core.Signal<{
|
|
69
|
+
key: string;
|
|
70
|
+
value: BitArrayItem<BitPathValue<TForm, P>>;
|
|
71
|
+
index: number;
|
|
72
|
+
}[]>;
|
|
73
|
+
length: _angular_core.Signal<number>;
|
|
74
|
+
append: (v: BitArrayItem<BitPathValue<TForm, P>>) => void;
|
|
75
|
+
prepend: (v: BitArrayItem<BitPathValue<TForm, P>>) => void;
|
|
76
|
+
remove: (i: number) => void;
|
|
77
|
+
insert: (index: number, v: BitArrayItem<BitPathValue<TForm, P>>) => void;
|
|
78
|
+
swap: (a: number, b: number) => void;
|
|
79
|
+
move: (f: number, t: number) => void;
|
|
80
|
+
replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => void;
|
|
81
|
+
clear: () => void;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
declare function injectBitScope(scopeName: string): {
|
|
85
|
+
scopeName: string;
|
|
86
|
+
status: _angular_core.WritableSignal<ScopeStatus>;
|
|
87
|
+
errors: _angular_core.Signal<Record<string, string>>;
|
|
88
|
+
validate: () => Promise<ValidateScopeResult>;
|
|
89
|
+
getErrors: () => Record<string, string>;
|
|
90
|
+
isValid: _angular_core.Signal<boolean>;
|
|
91
|
+
isDirty: _angular_core.Signal<boolean>;
|
|
92
|
+
unsubscribe: () => void;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
interface InjectBitStepsResult {
|
|
96
|
+
step: ReturnType<typeof computed<number>>;
|
|
97
|
+
stepIndex: ReturnType<typeof signal<number>>;
|
|
98
|
+
scope: ReturnType<typeof computed<string>>;
|
|
99
|
+
next: () => Promise<boolean>;
|
|
100
|
+
prev: () => void;
|
|
101
|
+
goTo: (step: number) => void;
|
|
102
|
+
isFirst: ReturnType<typeof computed<boolean>>;
|
|
103
|
+
isLast: ReturnType<typeof computed<boolean>>;
|
|
104
|
+
status: ReturnType<typeof signal<ScopeStatus>>;
|
|
105
|
+
errors: ReturnType<typeof computed<Record<string, string>>>;
|
|
106
|
+
isValid: ReturnType<typeof computed<boolean>>;
|
|
107
|
+
isDirty: ReturnType<typeof computed<boolean>>;
|
|
108
|
+
validate: () => Promise<ValidateScopeResult>;
|
|
109
|
+
getErrors: () => Record<string, string>;
|
|
110
|
+
}
|
|
111
|
+
declare function injectBitSteps(scopeNames: string[]): InjectBitStepsResult;
|
|
112
|
+
|
|
113
|
+
declare function injectBitWatch<TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): Signal<BitPathValue<TForm, P>>;
|
|
114
|
+
|
|
115
|
+
export { ScopeStatus, ValidateScopeResult, injectBitArray, injectBitField, injectBitForm, injectBitScope, injectBitSteps, injectBitWatch, provideBitStore, useBitStore };
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { Provider, computed, signal, Signal } from '@angular/core';
|
|
3
|
+
import { B as BitStore } from '../index-DRvn8318.js';
|
|
4
|
+
import { e as BitErrors, n as BitTouched, k as BitPath, l as BitPathValue, B as BitMask, b as BitArrayPath, a as BitArrayItem, g as BitFieldDefinition, h as BitFieldOptions, S as ScopeStatus, V as ValidateScopeResult } from '../bus-DAwKIiMY.js';
|
|
5
|
+
|
|
6
|
+
declare function provideBitStore(store: BitStore<any>): Provider;
|
|
7
|
+
declare function useBitStore<T extends object>(): BitStore<T>;
|
|
8
|
+
|
|
9
|
+
declare function injectBitForm<T extends object>(): {
|
|
10
|
+
store: BitStore<T>;
|
|
11
|
+
isValid: _angular_core.Signal<boolean>;
|
|
12
|
+
isSubmitting: _angular_core.Signal<boolean>;
|
|
13
|
+
isDirty: _angular_core.Signal<boolean>;
|
|
14
|
+
canUndo: _angular_core.Signal<boolean>;
|
|
15
|
+
canRedo: _angular_core.Signal<boolean>;
|
|
16
|
+
getValues: () => T;
|
|
17
|
+
getErrors: () => BitErrors<T>;
|
|
18
|
+
getTouched: () => BitTouched<T>;
|
|
19
|
+
submit: (onSuccess: (values: T) => void | Promise<void>) => (event?: Event) => Promise<void>;
|
|
20
|
+
onSubmit: (handler: (values: T) => Promise<unknown>) => (event?: Event) => Promise<void>;
|
|
21
|
+
submitError: _angular_core.WritableSignal<Error | null>;
|
|
22
|
+
lastResponse: _angular_core.WritableSignal<unknown>;
|
|
23
|
+
reset: () => void;
|
|
24
|
+
validate: (options?: {
|
|
25
|
+
scope?: string;
|
|
26
|
+
scopeFields?: string[];
|
|
27
|
+
}) => Promise<boolean>;
|
|
28
|
+
setValues: (newValues: T) => void;
|
|
29
|
+
setError: (path: string, message: string | undefined) => void;
|
|
30
|
+
setErrors: (errors: BitErrors<T>) => void;
|
|
31
|
+
setServerErrors: (serverErrors: Record<string, string[] | string>) => void;
|
|
32
|
+
setField: <P extends BitPath<T, "">>(path: P, value: BitPathValue<T, P>) => void;
|
|
33
|
+
blurField: <P extends BitPath<T, "">>(path: P) => void;
|
|
34
|
+
registerMask: (name: string, mask: BitMask) => void;
|
|
35
|
+
pushItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
|
|
36
|
+
prependItem: <P extends BitArrayPath<T>>(path: P, value: BitArrayItem<BitPathValue<T, P>>) => void;
|
|
37
|
+
removeItem: <P extends BitArrayPath<T>>(path: P, index: number) => void;
|
|
38
|
+
insertItem: <P extends BitArrayPath<T>>(path: P, index: number, value: BitArrayItem<BitPathValue<T, P>>) => void;
|
|
39
|
+
moveItem: <P extends BitArrayPath<T>>(path: P, from: number, to: number) => void;
|
|
40
|
+
swapItems: <P extends BitArrayPath<T>>(path: P, indexA: number, indexB: number) => void;
|
|
41
|
+
undo: () => void;
|
|
42
|
+
redo: () => void;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
declare function injectBitField<TValue = any, TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P, config?: BitFieldDefinition<TForm>, options?: BitFieldOptions): {
|
|
46
|
+
value: _angular_core.Signal<BitPathValue<TForm, P>>;
|
|
47
|
+
displayValue: _angular_core.Signal<string>;
|
|
48
|
+
error: _angular_core.Signal<any>;
|
|
49
|
+
touched: _angular_core.Signal<boolean>;
|
|
50
|
+
invalid: _angular_core.Signal<boolean>;
|
|
51
|
+
isDirty: _angular_core.Signal<boolean>;
|
|
52
|
+
isValidating: _angular_core.Signal<boolean>;
|
|
53
|
+
isHidden: _angular_core.Signal<boolean>;
|
|
54
|
+
isRequired: _angular_core.Signal<boolean>;
|
|
55
|
+
fieldMeta: _angular_core.Signal<{
|
|
56
|
+
isDirty: boolean;
|
|
57
|
+
isValidating: boolean;
|
|
58
|
+
isHidden: boolean;
|
|
59
|
+
isRequired: boolean;
|
|
60
|
+
hasError: boolean;
|
|
61
|
+
}>;
|
|
62
|
+
setValue: (val: any) => void;
|
|
63
|
+
setBlur: () => void;
|
|
64
|
+
update: (e: any) => void;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
declare function injectBitArray<TForm extends object = any, P extends BitArrayPath<TForm> = BitArrayPath<TForm>>(path: P): {
|
|
68
|
+
fields: _angular_core.Signal<{
|
|
69
|
+
key: string;
|
|
70
|
+
value: BitArrayItem<BitPathValue<TForm, P>>;
|
|
71
|
+
index: number;
|
|
72
|
+
}[]>;
|
|
73
|
+
length: _angular_core.Signal<number>;
|
|
74
|
+
append: (v: BitArrayItem<BitPathValue<TForm, P>>) => void;
|
|
75
|
+
prepend: (v: BitArrayItem<BitPathValue<TForm, P>>) => void;
|
|
76
|
+
remove: (i: number) => void;
|
|
77
|
+
insert: (index: number, v: BitArrayItem<BitPathValue<TForm, P>>) => void;
|
|
78
|
+
swap: (a: number, b: number) => void;
|
|
79
|
+
move: (f: number, t: number) => void;
|
|
80
|
+
replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => void;
|
|
81
|
+
clear: () => void;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
declare function injectBitScope(scopeName: string): {
|
|
85
|
+
scopeName: string;
|
|
86
|
+
status: _angular_core.WritableSignal<ScopeStatus>;
|
|
87
|
+
errors: _angular_core.Signal<Record<string, string>>;
|
|
88
|
+
validate: () => Promise<ValidateScopeResult>;
|
|
89
|
+
getErrors: () => Record<string, string>;
|
|
90
|
+
isValid: _angular_core.Signal<boolean>;
|
|
91
|
+
isDirty: _angular_core.Signal<boolean>;
|
|
92
|
+
unsubscribe: () => void;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
interface InjectBitStepsResult {
|
|
96
|
+
step: ReturnType<typeof computed<number>>;
|
|
97
|
+
stepIndex: ReturnType<typeof signal<number>>;
|
|
98
|
+
scope: ReturnType<typeof computed<string>>;
|
|
99
|
+
next: () => Promise<boolean>;
|
|
100
|
+
prev: () => void;
|
|
101
|
+
goTo: (step: number) => void;
|
|
102
|
+
isFirst: ReturnType<typeof computed<boolean>>;
|
|
103
|
+
isLast: ReturnType<typeof computed<boolean>>;
|
|
104
|
+
status: ReturnType<typeof signal<ScopeStatus>>;
|
|
105
|
+
errors: ReturnType<typeof computed<Record<string, string>>>;
|
|
106
|
+
isValid: ReturnType<typeof computed<boolean>>;
|
|
107
|
+
isDirty: ReturnType<typeof computed<boolean>>;
|
|
108
|
+
validate: () => Promise<ValidateScopeResult>;
|
|
109
|
+
getErrors: () => Record<string, string>;
|
|
110
|
+
}
|
|
111
|
+
declare function injectBitSteps(scopeNames: string[]): InjectBitStepsResult;
|
|
112
|
+
|
|
113
|
+
declare function injectBitWatch<TForm extends object = any, P extends BitPath<TForm> = BitPath<TForm>>(path: P): Signal<BitPathValue<TForm, P>>;
|
|
114
|
+
|
|
115
|
+
export { ScopeStatus, ValidateScopeResult, injectBitArray, injectBitField, injectBitForm, injectBitScope, injectBitSteps, injectBitWatch, provideBitStore, useBitStore };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{d as j,e as v,h as w,i as k}from"../chunk-ZI3XHI4I.js";import{inject as H,InjectionToken as K}from"@angular/core";var R=new K("BIT_STORE");function C(t){return{provide:R,useValue:t}}function S(){let t=H(R,{optional:!0});if(!t)throw new Error('BitForm: N\xE3o foi poss\xEDvel encontrar a BitStore. Certifique-se de que voc\xEA adicionou "provideBitStore(store)" nos providers do seu componente.');return t}import{signal as I,computed as V,inject as L,DestroyRef as U}from"@angular/core";function W(){let t=S(),e=L(U),o=I(t.getState()),r=I(null),n=I(null),c=t.subscribe(()=>{o.set(t.getState())});e.onDestroy(()=>c());let p=V(()=>o().isValid),s=V(()=>o().isSubmitting),i=V(()=>o().isDirty),d=V(()=>(o(),t.canUndo)),u=V(()=>(o(),t.canRedo));return{store:t,isValid:p,isSubmitting:s,isDirty:i,canUndo:d,canRedo:u,getValues:()=>o().values,getErrors:()=>o().errors,getTouched:()=>o().touched,submit:B=>f=>(f?.preventDefault(),f?.stopPropagation(),t.submit(B)),onSubmit:B=>f=>(f?.preventDefault(),f?.stopPropagation(),r.set(null),t.submit(async l=>{try{let a=await B(l);n.set(a),r.set(null)}catch(a){w(a)?t.setServerErrors(k(a)):r.set(a instanceof Error?a:new Error(String(a)))}})),submitError:r,lastResponse:n,reset:()=>{t.reset(),r.set(null),n.set(null)},validate:t.validate.bind(t),setValues:t.setValues.bind(t),setError:t.setError.bind(t),setErrors:t.setErrors.bind(t),setServerErrors:t.setServerErrors.bind(t),setField:t.setField.bind(t),blurField:t.blurField.bind(t),registerMask:t.registerMask.bind(t),pushItem:t.pushItem.bind(t),prependItem:t.prependItem.bind(t),removeItem:t.removeItem.bind(t),insertItem:t.insertItem.bind(t),moveItem:t.moveItem.bind(t),swapItems:t.swapItems.bind(t),undo:t.undo.bind(t),redo:t.redo.bind(t)}}import{inject as A,DestroyRef as $,computed as y,signal as z}from"@angular/core";function G(t,e,o){let r=A(R),n=z(r.getState()),c=r.subscribe(()=>{n.set(r.getState())});A($).onDestroy(()=>{c(),r.unregisterField&&r.unregisterField(t)}),e&&r.registerField(t,e);let p=y(()=>v(n().values,t)),s=y(()=>n().errors[t]),i=y(()=>!!n().touched[t]),d=y(()=>(n(),r.isFieldDirty(t))),u=y(()=>(n(),r.isFieldValidating(t))),m=y(()=>(n(),r.isHidden(t))),F=y(()=>(n(),r.isRequired(t))),E=y(()=>i()&&!!s()),b=o?.mask??r.config.fields?.[t]?.mask,P=b?typeof b=="string"?r.config.masks[b]:b:void 0,x=y(()=>{let a=p();return a==null||a===""?"":P?P.format(a):String(a)}),B=a=>{if(!P){r.setField(t,a);return}let g=String(a??"");r.setField(t,P.parse(g))},f=()=>r.blurField(t),l=y(()=>({isDirty:d(),isValidating:u(),isHidden:m(),isRequired:F(),hasError:!!s()}));return{value:p,displayValue:x,error:s,touched:i,invalid:E,isDirty:d,isValidating:u,isHidden:m,isRequired:F,fieldMeta:l,setValue:B,setBlur:f,update:a=>B(a?.target?.value??a)}}import{DestroyRef as J,signal as O,computed as q,inject as M,untracked as Q}from"@angular/core";var h=()=>Math.random().toString(36).substring(2,9);function X(t){let e=M(R),o=M(J),r=()=>{let s=v(e.getState().values,t);return Array.isArray(s)?s:[]},n=O(r()),c=O(n().map(h)),p=e.subscribe(()=>{let s=r(),i=Q(c);n.set(s),s.length!==i.length&&(s.length>i.length?c.set([...i,...Array.from({length:s.length-i.length},h)]):c.set(i.slice(0,s.length)))});return o.onDestroy(()=>{p(),e.unregisterPrefix&&e.unregisterPrefix(`${t}.`)}),{fields:q(()=>n().map((s,i)=>({key:c()[i]||`temp-${i}`,value:s,index:i}))),length:q(()=>n().length),append:s=>{c.update(i=>[...i,h()]),e.pushItem(t,s)},prepend:s=>{c.update(i=>[h(),...i]),e.prependItem(t,s)},remove:s=>{c.update(i=>i.filter((d,u)=>u!==s)),e.removeItem(t,s)},insert:(s,i)=>{c.update(d=>{let u=[...d];return u.splice(s,0,h()),u}),e.insertItem(t,s,i)},swap:(s,i)=>{c.update(d=>{let u=[...d];return[u[s],u[i]]=[u[i],u[s]],u}),e.swapItems(t,s,i)},move:(s,i)=>{c.update(d=>{let u=[...d],[m]=u.splice(s,1);return u.splice(i,0,m),u}),e.moveItem(t,s,i)},replace:s=>{c.set(s.map(()=>h())),e.setField(t,s)},clear:()=>{c.set([]),e.setField(t,[])}}}import{signal as Y,computed as D,DestroyRef as Z,inject as N}from"@angular/core";function tt(t,e){let o=Object.keys(t),r=Object.keys(e);return o.length!==r.length?!1:o.every(n=>t[n]===e[n])}function et(t){let e=S(),o=e.getStepStatus(t),r=Y(o),n=e.subscribe(()=>{let u=e.getStepStatus(t),m=r();(u.hasErrors!==m.hasErrors||u.isDirty!==m.isDirty||!tt(u.errors,m.errors))&&r.set(u)});try{N(Z).onDestroy(()=>n())}catch{}let c=async()=>{let u=await e.validate({scope:t}),m=e.getStepErrors(t);return{valid:u,errors:m}},p=()=>e.getStepErrors(t),s=D(()=>!r().hasErrors),i=D(()=>r().isDirty),d=D(()=>r().errors);return{scopeName:t,status:r,errors:d,validate:c,getErrors:p,isValid:s,isDirty:i,unsubscribe:n}}import{signal as _,computed as T,DestroyRef as rt,inject as st}from"@angular/core";function ot(t,e){let o=Object.keys(t),r=Object.keys(e);return o.length!==r.length?!1:o.every(n=>t[n]===e[n])}function nt(t){let e=S(),o=_(0),r=T(()=>t[o()]??""),n=()=>t[o()]??"",c=_(e.getStepStatus(n())),p=()=>{let l=n(),a=e.getStepStatus(l),g=c();(a.hasErrors!==g.hasErrors||a.isDirty!==g.isDirty||!ot(a.errors,g.errors))&&c.set(a)},s=e.subscribe(p);try{st(rt).onDestroy(()=>s())}catch{}let i=async()=>{let l=n(),a=await e.validate({scope:l}),g=e.getStepErrors(l);return{valid:a,errors:g}},d=()=>e.getStepErrors(n()),u=async()=>{let l=n(),a=await e.validate({scope:l});if(a){let g=Math.min(o()+1,t.length-1);o.set(g),c.set(e.getStepStatus(t[g]??""))}return a},m=()=>{let l=Math.max(o()-1,0);o.set(l),c.set(e.getStepStatus(t[l]??""))},F=l=>{let a=Math.max(0,Math.min(l-1,t.length-1));o.set(a),c.set(e.getStepStatus(t[a]??""))},E=T(()=>o()+1),b=T(()=>o()===0),P=T(()=>o()>=t.length-1),x=T(()=>!c().hasErrors),B=T(()=>c().isDirty),f=T(()=>c().errors);return{step:E,stepIndex:o,scope:r,next:u,prev:m,goTo:F,isFirst:b,isLast:P,status:c,errors:f,isValid:x,isDirty:B,validate:i,getErrors:d}}import{DestroyRef as it,signal as at,inject as ct}from"@angular/core";function ut(t){let e=S(),o=ct(it),r=at(v(e.getState().values,t),{equal:j}),n=e.watch(t,c=>{r.set(c)});return o.onDestroy(n),r.asReadonly()}export{X as injectBitArray,G as injectBitField,W as injectBitForm,et as injectBitScope,nt as injectBitSteps,ut as injectBitWatch,C as provideBitStore,S as useBitStore};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/angular/provider.ts","../../src/angular/inject-bit-form.ts","../../src/angular/inject-bit-field.ts","../../src/angular/inject-bit-array.ts","../../src/angular/inject-bit-scope.ts","../../src/angular/inject-bit-steps.ts","../../src/angular/inject-bit-watch.ts"],"sourcesContent":["import { inject, InjectionToken, Provider } from \"@angular/core\"; // IMPORTANTE: Adicione o 'inject' aqui\nimport { BitStore } from \"../core\";\n\nexport const BIT_STORE_TOKEN = new InjectionToken<BitStore<any>>(\"BIT_STORE\");\n\nexport function provideBitStore(store: BitStore<any>): Provider {\n return { provide: BIT_STORE_TOKEN, useValue: store };\n}\n\nexport function useBitStore<T extends object>() {\n const store = inject(BIT_STORE_TOKEN, { optional: true });\n\n if (!store) {\n throw new Error(\n \"BitForm: Não foi possível encontrar a BitStore. \" +\n 'Certifique-se de que você adicionou \"provideBitStore(store)\" nos providers do seu componente.',\n );\n }\n\n return store as BitStore<T>;\n}\n","import { signal, computed, inject, DestroyRef } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport { isValidationErrorShape, extractServerErrors } from \"../core/utils\";\n\nexport function injectBitForm<T extends object>() {\n const store = useBitStore<T>();\n const destroyRef = inject(DestroyRef);\n const stateSignal = signal(store.getState());\n const submitError = signal<Error | null>(null);\n const lastResponse = signal<unknown>(null);\n\n const sub = store.subscribe(() => {\n stateSignal.set(store.getState());\n });\n\n destroyRef.onDestroy(() => sub());\n\n const isValid = computed(() => stateSignal().isValid);\n const isSubmitting = computed(() => stateSignal().isSubmitting);\n const isDirty = computed(() => stateSignal().isDirty);\n\n const canUndo = computed(() => {\n stateSignal();\n return store.canUndo;\n });\n\n const canRedo = computed(() => {\n stateSignal();\n return store.canRedo;\n });\n\n const getValues = () => stateSignal().values;\n const getErrors = () => stateSignal().errors;\n const getTouched = () => stateSignal().touched;\n\n const submit = (onSuccess: (values: T) => void | Promise<void>) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n return store.submit(onSuccess);\n };\n };\n\n const onSubmit = (handler: (values: T) => Promise<unknown>) => {\n return (event?: Event) => {\n event?.preventDefault();\n event?.stopPropagation();\n submitError.set(null);\n return store.submit(async (values) => {\n try {\n const result = await handler(values);\n lastResponse.set(result);\n submitError.set(null);\n } catch (err) {\n if (isValidationErrorShape(err)) {\n store.setServerErrors(extractServerErrors(err));\n } else {\n submitError.set(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n }\n });\n };\n };\n\n const reset = () => {\n store.reset();\n submitError.set(null);\n lastResponse.set(null);\n };\n\n return {\n store,\n isValid,\n isSubmitting,\n isDirty,\n canUndo,\n canRedo,\n getValues,\n getErrors,\n getTouched,\n submit,\n onSubmit,\n submitError,\n lastResponse,\n reset,\n validate: store.validate.bind(store),\n setValues: store.setValues.bind(store),\n setError: store.setError.bind(store),\n setErrors: store.setErrors.bind(store),\n setServerErrors: store.setServerErrors.bind(store),\n setField: store.setField.bind(store),\n blurField: store.blurField.bind(store),\n registerMask: store.registerMask.bind(store),\n pushItem: store.pushItem.bind(store),\n prependItem: store.prependItem.bind(store),\n removeItem: store.removeItem.bind(store),\n insertItem: store.insertItem.bind(store),\n moveItem: store.moveItem.bind(store),\n swapItems: store.swapItems.bind(store),\n undo: store.undo.bind(store),\n redo: store.redo.bind(store),\n };\n}\n","import { inject, DestroyRef, computed, signal } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n BitFieldDefinition,\n BitFieldOptions,\n getDeepValue,\n BitPath,\n BitPathValue,\n} from \"../core\";\n\nexport function injectBitField<\n TValue = any,\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P, config?: BitFieldDefinition<TForm>, options?: BitFieldOptions) {\n const store = inject(BIT_STORE_TOKEN);\n\n const stateSignal = signal(store.getState());\n\n const unsubscribe = store.subscribe(() => {\n stateSignal.set(store.getState());\n });\n\n inject(DestroyRef).onDestroy(() => {\n unsubscribe();\n if (store.unregisterField) {\n store.unregisterField(path as string);\n }\n });\n\n if (config) {\n store.registerField(path as string, config as any);\n }\n\n const value = computed(\n () =>\n getDeepValue(\n stateSignal().values,\n path as string,\n ) as BitPathValue<TForm, P>,\n );\n const error = computed(\n () => (stateSignal().errors as Record<string, any>)[path],\n );\n const touched = computed(\n () => !!(stateSignal().touched as Record<string, any>)[path],\n );\n\n const isDirty = computed(() => {\n stateSignal();\n return store.isFieldDirty(path);\n });\n\n const isValidating = computed(() => {\n stateSignal();\n return store.isFieldValidating(path);\n });\n\n const isHidden = computed(() => {\n stateSignal();\n return store.isHidden(path);\n });\n\n const isRequired = computed(() => {\n stateSignal();\n return store.isRequired(path);\n });\n\n const invalid = computed(() => touched() && !!error());\n\n const maskOption =\n options?.mask ?? store.config.fields?.[path as string]?.mask;\n const resolvedMask = maskOption\n ? typeof maskOption === \"string\"\n ? store.config.masks![maskOption]\n : maskOption\n : undefined;\n\n const displayValue = computed(() => {\n const val = value();\n if (val === undefined || val === null || val === \"\") return \"\";\n\n return resolvedMask ? resolvedMask.format(val) : String(val);\n });\n\n const setValue = (val: any) => {\n if (!resolvedMask) {\n store.setField(path, val);\n return;\n }\n\n const stringVal = String(val ?? \"\");\n store.setField(path, resolvedMask.parse(stringVal) as any);\n };\n\n const setBlur = () => store.blurField(path);\n\n const fieldMeta = computed(() => ({\n isDirty: isDirty(),\n isValidating: isValidating(),\n isHidden: isHidden(),\n isRequired: isRequired(),\n hasError: !!error(),\n }));\n\n return {\n value,\n displayValue,\n error,\n touched,\n invalid,\n isDirty,\n isValidating,\n isHidden,\n isRequired,\n fieldMeta,\n setValue,\n setBlur,\n update: (e: any) => setValue(e?.target?.value ?? e),\n };\n}\n","import { DestroyRef, signal, computed, inject, untracked } from \"@angular/core\";\nimport { BIT_STORE_TOKEN } from \"./provider\";\nimport {\n getDeepValue,\n BitArrayPath,\n BitPathValue,\n BitArrayItem,\n BitPath,\n} from \"../core\";\n\nconst generateId = () => Math.random().toString(36).substring(2, 9);\n\nexport function injectBitArray<\n TForm extends object = any,\n P extends BitArrayPath<TForm> = BitArrayPath<TForm>,\n>(path: P) {\n const store = inject(BIT_STORE_TOKEN);\n const destroyRef = inject(DestroyRef);\n\n const getRaw = () => {\n const val = getDeepValue(\n store.getState().values,\n path as string,\n ) as BitPathValue<TForm, P>;\n return Array.isArray(val)\n ? (val as BitArrayItem<BitPathValue<TForm, P>>[])\n : [];\n };\n\n const valuesSig = signal<BitArrayItem<BitPathValue<TForm, P>>[]>(getRaw());\n const idsSig = signal<string[]>(valuesSig().map(generateId));\n\n const unsub = store.subscribe(() => {\n const next = getRaw();\n const ids = untracked(idsSig);\n valuesSig.set(next);\n\n if (next.length !== ids.length) {\n if (next.length > ids.length) {\n idsSig.set([\n ...ids,\n ...Array.from({ length: next.length - ids.length }, generateId),\n ]);\n } else {\n idsSig.set(ids.slice(0, next.length));\n }\n }\n });\n\n destroyRef.onDestroy(() => {\n unsub();\n if (store.unregisterPrefix) store.unregisterPrefix(`${path as string}.`);\n });\n\n return {\n fields: computed(() =>\n valuesSig().map((v, i) => ({\n key: idsSig()[i] || `temp-${i}`,\n value: v,\n index: i,\n })),\n ),\n length: computed(() => valuesSig().length),\n append: (v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => [...ids, generateId()]);\n store.pushItem(path, v);\n },\n prepend: (v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => [generateId(), ...ids]);\n store.prependItem(path, v);\n },\n remove: (i: number) => {\n idsSig.update((ids) => ids.filter((_, idx) => idx !== i));\n store.removeItem(path, i);\n },\n insert: (index: number, v: BitArrayItem<BitPathValue<TForm, P>>) => {\n idsSig.update((ids) => {\n const c = [...ids];\n c.splice(index, 0, generateId());\n return c;\n });\n store.insertItem(path, index, v);\n },\n swap: (a: number, b: number) => {\n idsSig.update((ids) => {\n const c = [...ids];\n [c[a], c[b]] = [c[b], c[a]];\n return c;\n });\n store.swapItems(path, a, b);\n },\n move: (f: number, t: number) => {\n idsSig.update((ids) => {\n const c = [...ids];\n const [it] = c.splice(f, 1);\n c.splice(t, 0, it);\n return c;\n });\n store.moveItem(path, f, t);\n },\n replace: (items: BitArrayItem<BitPathValue<TForm, P>>[]) => {\n idsSig.set(items.map(() => generateId()));\n store.setField(path as unknown as BitPath<TForm>, items as any);\n },\n clear: () => {\n idsSig.set([]);\n store.setField(path as unknown as BitPath<TForm>, [] as any);\n },\n };\n}\n","import { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nexport type { ScopeStatus, ValidateScopeResult };\n\nfunction errorsEqual(\n a: Record<string, string>,\n b: Record<string, string>,\n): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => a[k] === b[k]);\n}\n\nexport function injectBitScope(scopeName: string) {\n const store = useBitStore();\n const initialStatus = store.getStepStatus(scopeName);\n\n const status = signal<ScopeStatus>(initialStatus);\n\n const unsubscribe = store.subscribe(() => {\n const newStatus = store.getStepStatus(scopeName);\n const current = status();\n if (\n newStatus.hasErrors !== current.hasErrors ||\n newStatus.isDirty !== current.isDirty ||\n !errorsEqual(newStatus.errors, current.errors)\n ) {\n status.set(newStatus);\n }\n });\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.getStepErrors(scopeName);\n\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n scopeName,\n status,\n errors,\n validate,\n getErrors,\n isValid,\n isDirty,\n unsubscribe,\n };\n}\n","import { signal, computed, DestroyRef, inject } from \"@angular/core\";\nimport type { ScopeStatus, ValidateScopeResult } from \"../core\";\nimport { useBitStore } from \"./provider\";\n\nfunction errorsEqual(\n a: Record<string, string>,\n b: Record<string, string>,\n): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => a[k] === b[k]);\n}\n\nexport interface InjectBitStepsResult {\n step: ReturnType<typeof computed<number>>;\n stepIndex: ReturnType<typeof signal<number>>;\n scope: ReturnType<typeof computed<string>>;\n next: () => Promise<boolean>;\n prev: () => void;\n goTo: (step: number) => void;\n isFirst: ReturnType<typeof computed<boolean>>;\n isLast: ReturnType<typeof computed<boolean>>;\n status: ReturnType<typeof signal<ScopeStatus>>;\n errors: ReturnType<typeof computed<Record<string, string>>>;\n isValid: ReturnType<typeof computed<boolean>>;\n isDirty: ReturnType<typeof computed<boolean>>;\n validate: () => Promise<ValidateScopeResult>;\n getErrors: () => Record<string, string>;\n}\n\nexport function injectBitSteps(scopeNames: string[]): InjectBitStepsResult {\n const store = useBitStore();\n const stepIndex = signal(0);\n\n const scope = computed(\n () => scopeNames[stepIndex()] ?? \"\",\n );\n\n const getCurrentScope = () => scopeNames[stepIndex()] ?? \"\";\n const status = signal<ScopeStatus>(\n store.getStepStatus(getCurrentScope()),\n );\n\n const updateStatus = () => {\n const scopeName = getCurrentScope();\n const newStatus = store.getStepStatus(scopeName);\n const current = status();\n if (\n newStatus.hasErrors !== current.hasErrors ||\n newStatus.isDirty !== current.isDirty ||\n !errorsEqual(newStatus.errors, current.errors)\n ) {\n status.set(newStatus);\n }\n };\n\n const unsubscribe = store.subscribe(updateStatus);\n\n try {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(() => unsubscribe());\n } catch {}\n\n const validate = async (): Promise<ValidateScopeResult> => {\n const scopeName = getCurrentScope();\n const valid = await store.validate({ scope: scopeName });\n const errors = store.getStepErrors(scopeName);\n return { valid, errors };\n };\n\n const getErrors = () => store.getStepErrors(getCurrentScope());\n\n const next = async (): Promise<boolean> => {\n const scopeName = getCurrentScope();\n const valid = await store.validate({ scope: scopeName });\n if (valid) {\n const newIndex = Math.min(stepIndex() + 1, scopeNames.length - 1);\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n }\n return valid;\n };\n\n const prev = () => {\n const newIndex = Math.max(stepIndex() - 1, 0);\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n };\n\n const goTo = (targetStep: number) => {\n const newIndex = Math.max(\n 0,\n Math.min(targetStep - 1, scopeNames.length - 1),\n );\n stepIndex.set(newIndex);\n status.set(store.getStepStatus(scopeNames[newIndex] ?? \"\"));\n };\n\n const step = computed(() => stepIndex() + 1);\n const isFirst = computed(() => stepIndex() === 0);\n const isLast = computed(() => stepIndex() >= scopeNames.length - 1);\n const isValid = computed(() => !status().hasErrors);\n const isDirty = computed(() => status().isDirty);\n const errors = computed(() => status().errors);\n\n return {\n step,\n stepIndex,\n scope,\n next,\n prev,\n goTo,\n isFirst,\n isLast,\n status,\n errors,\n isValid,\n isDirty,\n validate,\n getErrors,\n };\n}\n","import { DestroyRef, signal, Signal, inject } from \"@angular/core\";\nimport { useBitStore } from \"./provider\";\nimport {\n getDeepValue,\n deepEqual,\n BitPath,\n BitPathValue,\n} from \"../core\";\n\nexport function injectBitWatch<\n TForm extends object = any,\n P extends BitPath<TForm> = BitPath<TForm>,\n>(path: P): Signal<BitPathValue<TForm, P>> {\n const store = useBitStore<TForm>();\n const destroyRef = inject(DestroyRef);\n const valueSig = signal<BitPathValue<TForm, P>>(\n getDeepValue(store.getState().values, path as string) as BitPathValue<\n TForm,\n P\n >,\n { equal: deepEqual },\n );\n\n const unsub = store.watch(path, (v) => {\n valueSig.set(v as BitPathValue<TForm, P>);\n });\n\n destroyRef.onDestroy(unsub);\n\n return valueSig.asReadonly();\n}\n"],"mappings":"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","names":["inject","InjectionToken","BIT_STORE_TOKEN","provideBitStore","store","useBitStore","signal","computed","inject","DestroyRef","injectBitForm","store","useBitStore","destroyRef","inject","DestroyRef","stateSignal","signal","submitError","lastResponse","sub","isValid","computed","isSubmitting","isDirty","canUndo","canRedo","onSuccess","event","handler","values","result","err","isValidationErrorShape","extractServerErrors","inject","DestroyRef","computed","signal","injectBitField","path","config","options","store","inject","BIT_STORE_TOKEN","stateSignal","signal","unsubscribe","DestroyRef","value","computed","getDeepValue","error","touched","isDirty","isValidating","isHidden","isRequired","invalid","maskOption","resolvedMask","displayValue","val","setValue","stringVal","setBlur","fieldMeta","e","DestroyRef","signal","computed","inject","untracked","generateId","injectBitArray","path","store","inject","BIT_STORE_TOKEN","destroyRef","DestroyRef","getRaw","val","getDeepValue","valuesSig","signal","idsSig","unsub","next","ids","untracked","computed","v","i","_","idx","index","c","a","b","f","t","it","items","signal","computed","DestroyRef","inject","errorsEqual","a","b","keysA","keysB","k","injectBitScope","scopeName","store","useBitStore","initialStatus","status","signal","unsubscribe","newStatus","current","inject","DestroyRef","validate","valid","errors","getErrors","isValid","computed","isDirty","signal","computed","DestroyRef","inject","errorsEqual","a","b","keysA","keysB","k","injectBitSteps","scopeNames","store","useBitStore","stepIndex","signal","scope","computed","getCurrentScope","status","updateStatus","scopeName","newStatus","current","unsubscribe","inject","DestroyRef","validate","valid","errors","getErrors","next","newIndex","prev","goTo","targetStep","step","isFirst","isLast","isValid","isDirty","DestroyRef","signal","inject","injectBitWatch","path","store","useBitStore","destroyRef","inject","DestroyRef","valueSig","signal","getDeepValue","deepEqual","unsub","v"]}
|