@donotdev/templates 0.0.5 → 0.0.6
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/dist/AdminLandingTemplate.d.ts +66 -0
- package/dist/AdminLandingTemplate.d.ts.map +1 -0
- package/dist/AdminLandingTemplate.js +1 -0
- package/dist/components/MarkdownViewer.d.ts.map +1 -1
- package/dist/crud/EntityFormTemplate.d.ts.map +1 -1
- package/dist/crud/EntityFormTemplate.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
|
|
3
|
+
* @fileoverview Admin Landing Template Component
|
|
4
|
+
|
|
5
|
+
* @description Reusable admin login/landing page template with auth providers, loading state, and support links
|
|
6
|
+
|
|
7
|
+
*
|
|
8
|
+
|
|
9
|
+
* @version 0.0.1
|
|
10
|
+
|
|
11
|
+
* @since 0.0.1
|
|
12
|
+
|
|
13
|
+
* @author AMBROISE PARK Consulting
|
|
14
|
+
|
|
15
|
+
*/
|
|
16
|
+
import { type ReactNode } from 'react';
|
|
17
|
+
export interface AdminLandingTemplateProps {
|
|
18
|
+
/** Page title (e.g., "Admin Login") */
|
|
19
|
+
title: string;
|
|
20
|
+
/** Page subtitle (e.g., "Car Inventory & CRM Management System") */
|
|
21
|
+
subtitle?: string;
|
|
22
|
+
/** Message section with title and content */
|
|
23
|
+
message?: {
|
|
24
|
+
title: string;
|
|
25
|
+
content: string;
|
|
26
|
+
};
|
|
27
|
+
/** Support/contact link configuration */
|
|
28
|
+
supportLink?: {
|
|
29
|
+
label?: string;
|
|
30
|
+
path?: string;
|
|
31
|
+
};
|
|
32
|
+
/** Public website link configuration */
|
|
33
|
+
publicWebsiteLink?: {
|
|
34
|
+
label?: string;
|
|
35
|
+
path?: string;
|
|
36
|
+
};
|
|
37
|
+
/** Redirect configuration */
|
|
38
|
+
redirectConfig?: {
|
|
39
|
+
condition: (user: any) => boolean;
|
|
40
|
+
redirectTo: string;
|
|
41
|
+
};
|
|
42
|
+
/** Additional content to render below auth providers */
|
|
43
|
+
children?: ReactNode;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
|
|
47
|
+
* AdminLandingTemplate - Reusable admin login/landing page
|
|
48
|
+
|
|
49
|
+
*
|
|
50
|
+
|
|
51
|
+
* Handles loading state, redirect logic, and displays auth providers with support links.
|
|
52
|
+
|
|
53
|
+
* Uses AppConfig for default link values (support link and public website URL).
|
|
54
|
+
|
|
55
|
+
*
|
|
56
|
+
|
|
57
|
+
* @version 0.0.1
|
|
58
|
+
|
|
59
|
+
* @since 0.0.1
|
|
60
|
+
|
|
61
|
+
* @author AMBROISE PARK Consulting
|
|
62
|
+
|
|
63
|
+
*/
|
|
64
|
+
export declare function AdminLandingTemplate({ title, subtitle, message, supportLink, publicWebsiteLink, redirectConfig, children, }: AdminLandingTemplateProps): import("react/jsx-runtime").JSX.Element | null;
|
|
65
|
+
export default AdminLandingTemplate;
|
|
66
|
+
//# sourceMappingURL=AdminLandingTemplate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdminLandingTemplate.d.ts","sourceRoot":"","sources":["../src/AdminLandingTemplate.tsx"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAgBlD,MAAM,WAAW,yBAAyB;IACxC,uCAAuC;IAEvC,KAAK,EAAE,MAAM,CAAC;IAEd,oEAAoE;IAEpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,6CAA6C;IAE7C,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QAEd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF,yCAAyC;IAEzC,WAAW,CAAC,EAAE;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,wCAAwC;IAExC,iBAAiB,CAAC,EAAE;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,6BAA6B;IAE7B,cAAc,CAAC,EAAE;QACf,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC;QAElC,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,wDAAwD;IAExD,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AAEH,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EAEL,QAAQ,EAER,OAAO,EAEP,WAAW,EAEX,iBAAiB,EAEjB,cAAc,EAEd,QAAQ,GACT,EAAE,yBAAyB,kDAkG3B;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client";import{jsx as t,Fragment as x,jsxs as a}from"react/jsx-runtime";import{useEffect as y}from"react";import{HeroSection as z,Section as T,Text as j,Stack as L}from"@donotdev/components";import{useTranslation as C,useAppConfig as P}from"@donotdev/core";import{PageContainer as A,useNavigate as W,useRedirectGuard as _,Loader as k,Link as f}from"@donotdev/ui";import{MultipleAuthProviders as F}from"@donotdev/auth";function R({title:m,subtitle:h,message:i,supportLink:s,publicWebsiteLink:c,redirectConfig:l,children:g}){const{t:d}=C("dndev"),p=W(),u=P("app"),{shouldRedirect:n,redirectTo:e,isChecking:v}=_({condition:l?.condition,redirectTo:l?.redirectTo});if(y(()=>{n&&e&&p(e,{replace:!0})},[n,e,p]),v)return t(k,{});if(n&&e)return null;const o=s?.path||u?.links?.support,r=c?.path||u?.url,b=s?.label||d("adminLanding.contactSupport","Contact Support"),S=c?.label||d("adminLanding.visitWebsite","Visit Website");return a(A,{children:[t(z,{title:m,subtitle:h,variant:"primary"}),i&&t(T,{title:i.title,align:"center",children:t(j,{as:"p",level:"body",children:i.content})}),t(F,{}),g,(o||r)&&a(L,{direction:"row",gap:"tight",justify:"center",align:"center",children:[o&&a(x,{children:[t(f,{path:o,style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:b}),r&&t("span",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:" | "})]}),r&&t(f,{path:r,style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)"},children:S})]})]})}var V=R;export{R as AdminLandingTemplate,V as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownViewer.d.ts","sourceRoot":"","sources":["../../src/components/MarkdownViewer.tsx"],"names":[],"mappings":"AAyBA,MAAM,WAAW,mBAAmB;IAClC,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"MarkdownViewer.d.ts","sourceRoot":"","sources":["../../src/components/MarkdownViewer.tsx"],"names":[],"mappings":"AAyBA,MAAM,WAAW,mBAAmB;IAClC,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiFD,eAAO,MAAM,cAAc,2DAA2B,CAAC;AACvD,eAAe,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityFormTemplate.d.ts","sourceRoot":"","sources":["../../src/crud/EntityFormTemplate.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EntityFormTemplate.d.ts","sourceRoot":"","sources":["../../src/crud/EntityFormTemplate.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAe7B,OAAO,KAAK,EACV,WAAW,EAIZ,MAAM,gBAAgB,CAAC;AAmDxB;;;;;GAKG;AACH,UAAU,uBAAuB,CAAC,OAAO,SAAS,WAAW,CAAC,GAAG,CAAC;IAChE,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7C,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA6HD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,SAAS,WAAW,CAAC,GAAG,CAAC,EAAE,EACnE,MAAM,EACN,WAAW,EACX,QAAQ,EACR,SAAS,GACV,EAAE,uBAAuB,CAAC,OAAO,CAAC,2CAodlC;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as
|
|
1
|
+
"use client";import{jsx as l,jsxs as u}from"react/jsx-runtime";import{useReducer as U,useEffect as N,useCallback as h}from"react";import{useForm as z}from"react-hook-form";import{ChevronLeft as B,ChevronRight as M,Save as $,CheckCircle as G}from"lucide-react";import{valibotResolver as J}from"@hookform/resolvers/valibot";import"valibot";import{Card as q,Button as E,BUTTON_VARIANT as R,Progress as K,Badge as F,BADGE_VARIANT as O,Alert as I,ALERT_VARIANT as w,Stack as y,Grid as W}from"@donotdev/components";import{useTranslation as Y,handleError as C}from"@donotdev/core";import{useNavigate as H}from"@donotdev/ui";import{FormFieldRenderer as Q}from"@donotdev/crud";function X(a,o){switch(o.type){case"SET_CURRENT_STEP":return{...a,currentStep:o.payload};case"SET_STEP_ERRORS":return{...a,stepErrors:o.payload};case"SET_FORM_DATA":return{...a,formData:o.payload};case"SET_LAST_SAVED":return{...a,lastSaved:o.payload};case"SET_IS_SAVING":return{...a,isSaving:o.payload};case"RESET_FORM":return{currentStep:0,stepErrors:[],formData:{},lastSaved:null,isSaving:!1};default:return a}}function Z(a,o,v){const d=new Set,i=new Set;return a.forEach(c=>{(Array.isArray(c.condition)?c.condition:[c.condition]).every(n=>{const e=o[n.field];switch(n.operator){case"equals":return e===n.value;case"not-equals":return e!==n.value;case"contains":return String(e).includes(String(n.value));case"greater-than":return e>n.value;case"less-than":return e<n.value;case"exists":return e!=null&&e!=="";case"not-exists":return e==null||e==="";default:return n.evaluate?n.evaluate(o):!1}})&&(c.showFields?.forEach(n=>d.add(n)),c.hideFields?.forEach(n=>d.delete(n)),c.disableFields?.forEach(n=>i.add(n)),c.enableFields?.forEach(n=>i.delete(n)))}),{visibleFields:d,disabledFields:i}}function ee(a,o,v,d){const i=a[o];if(!i)return[];let c=[...i.fields];if(d){const{visibleFields:S,disabledFields:f}=Z(d,v,o);c=c.filter(n=>S.has(n)||S.size===0)}return c}function te(a,o,v){const d=[];if(a.fields.forEach(i=>{const c=o[i],S=v.entries;if(!S)return;const f=S[i];f&&f.type==="optional"||(c==null||c==="")&&d.push(`${i} is required`)}),a.validation?.validate){const i=a.validation.validate(o);i!==!0&&d.push(a.validation.message||String(i))}return{isValid:d.length===0,errors:d}}function re({schema:a,initialData:o,onSubmit:v,isLoading:d}){const{t:i}=Y(),c=H(),S=!!(o&&"id"in o&&o.id),{collection:f,entity:n}=a.metadata,e=a.metadata.form||{type:"single"},[r,m]=U(X,{currentStep:0,stepErrors:[],formData:o||{},lastSaved:null,isSaving:!1}),p=z({resolver:J(a),defaultValues:o}),x=a.entries||{},T=Object.entries(x).map(([t,s])=>{try{return{name:t,type:"text",label:t,validation:{},options:{},visibility:"user"}}catch(g){return C(g,`Failed to process field configuration for ${t}`),{name:t,type:"text",label:t,validation:{},options:{},visibility:"user"}}});N(()=>{if(!e.persist||!e.persistence?.autoSaveInterval)return;const t=setInterval(async()=>{const s=p.getValues();JSON.stringify(s)!==JSON.stringify(r.formData)&&await _(s)},e.persistence.autoSaveInterval);return()=>clearInterval(t)},[e.persist,e.persistence?.autoSaveInterval,p,r.formData]);const _=h(async t=>{if(e.persist)try{m({type:"SET_IS_SAVING",payload:!0});const s=e.persistence?.key||`form-draft-${f}`;localStorage.setItem(s,JSON.stringify({data:t,timestamp:new Date().toISOString(),step:r.currentStep})),m({type:"SET_FORM_DATA",payload:t}),m({type:"SET_LAST_SAVED",payload:new Date})}catch{}finally{m({type:"SET_IS_SAVING",payload:!1})}},[e.persist,e.persistence?.key,f,r.currentStep]),b=h(()=>{if(e.persist)try{const t=e.persistence?.key||`form-draft-${f}`,s=localStorage.getItem(t);if(s){const{data:g,step:L}=JSON.parse(s);p.reset(g),m({type:"SET_FORM_DATA",payload:g}),e.type==="multi-step"&&e.steps&&m({type:"SET_CURRENT_STEP",payload:Math.min(L,e.steps.length-1)})}}catch{}},[e.persist,e.persistence?.key,f,p,e.type,e.steps]);N(()=>{S||b()},[S,b]);const V=h(()=>e.type==="multi-step"&&e.steps?ee(e.steps,r.currentStep,p.getValues(),e.rules):T.map(t=>t.name),[e.type,e.steps,e.rules,r.currentStep,p,T]),D=h(async()=>{if(!e.steps||r.currentStep>=e.steps.length-1)return;const t=e.steps[r.currentStep];if(!t)return;const s=p.getValues(),g=te(t,s,a);if(!g.isValid){m({type:"SET_STEP_ERRORS",payload:g.errors});return}m({type:"SET_STEP_ERRORS",payload:[]}),m({type:"SET_CURRENT_STEP",payload:r.currentStep+1})},[e.steps,r.currentStep,p,a]),P=h(()=>{r.currentStep>0&&(m({type:"SET_CURRENT_STEP",payload:r.currentStep-1}),m({type:"SET_STEP_ERRORS",payload:[]}))},[r.currentStep]),j=p.handleSubmit(async t=>{try{if(e.persist){const s=e.persistence?.key||`form-draft-${f}`;localStorage.removeItem(s)}await v(t)}catch(s){C(s,S?i("error.update.entity",{entity:n}):i("error.create.entity",{entity:n}))}},t=>{}),A=e.type==="multi-step"&&e.steps?(r.currentStep+1)/e.steps.length*100:0,k=e.steps?.[r.currentStep];return l(y,{gap:"medium",children:u(q,{title:u(y,{direction:"row",align:"center",justify:"between",children:[u("div",{children:[l("div",{style:{fontSize:"var(--font-size-xl)",fontWeight:600},children:S?i("edit.entity",{entity:n}):i("create.entity",{entity:n})}),e.type==="multi-step"&&e.steps&&u("p",{style:{fontSize:"var(--font-size-sm)",color:"var(--muted-foreground)",marginTop:"var(--gap-sm)"},children:["Step ",r.currentStep+1," of ",e.steps.length,":"," ",k?.title]})]}),e.persist&&e.persistence?.showSaveIndicator&&l(y,{direction:"row",align:"center",gap:"tight",children:r.isSaving?l(F,{variant:O.SECONDARY,children:"Saving..."}):r.lastSaved?u(F,{variant:O.OUTLINE,className:"dndev-flex dndev-items-center dndev-gap-sm",children:[l(G,{className:"dndev-size-md"}),"Saved ",r.lastSaved.toLocaleTimeString()]}):null})]}),children:[e.type==="multi-step"&&e.behavior?.showProgress&&u("div",{style:{marginTop:"var(--gap-md)"},children:[l(K,{value:A,style:{height:"0.5rem"}}),u(y,{direction:"row",justify:"between",style:{marginTop:"var(--gap-sm)",fontSize:"var(--font-size-xs)",color:"var(--muted-foreground)"},children:[u("span",{children:[Math.round(A),"% complete"]}),u("span",{children:["Step ",r.currentStep+1," of"," ",e.steps?.length||0]})]})]}),r.stepErrors.length>0&&l(I,{variant:w.ERROR,description:l(y,{as:"ul",gap:"tight",style:{listStyle:"disc",listStylePosition:"inside"},children:r.stepErrors.map((t,s)=>l("li",{children:t},s))}),style:{marginBottom:"var(--gap-lg)"}}),l("form",{onSubmit:j,children:u(y,{gap:"large",children:[Object.keys(p.formState.errors).length>0&&l(I,{variant:w.ERROR,description:l(y,{as:"ul",gap:"tight",style:{listStyle:"disc",listStylePosition:"inside"},children:Object.entries(p.formState.errors).map(([t,s])=>{const g=s?.message||(typeof s=="string"?s:`${t} is invalid`);return l("li",{children:g},t)})}),style:{marginBottom:"var(--gap-md)"}}),l(W,{cols:3,gap:"large",className:"dndev-grid-responsive-1-2-3",children:V().map(t=>{const s=T.find(g=>g.name===t);return s?l(Q,{name:s.name,control:p.control,errors:p.formState.errors,config:s,t:i},s.name):null})}),u(y,{direction:"row",justify:"between",align:"center",style:{paddingTop:"var(--gap-lg)",borderTop:"1px solid var(--border)"},children:[u(y,{direction:"row",gap:"tight",children:[e.type==="multi-step"&&r.currentStep>0&&l(E,{type:"button",variant:R.OUTLINE,onClick:P,className:"dndev-gap-sm",icon:B,children:"Previous"}),l(E,{type:"button",variant:R.OUTLINE,onClick:()=>c(`/${f}`),children:i("cancel")})]}),u(y,{direction:"row",gap:"tight",children:[e.persist&&l(E,{type:"button",variant:R.OUTLINE,onClick:()=>_(p.getValues()),disabled:r.isSaving,className:"dndev-gap-sm",icon:$,children:"Save Draft"}),e.type==="multi-step"&&e.steps&&r.currentStep<e.steps.length-1&&l(E,{type:"button",onClick:D,className:"dndev-gap-sm",icon:M,iconEnd:!0,children:"Next"}),(e.type==="single"||e.type==="multi-step"&&e.steps&&r.currentStep===e.steps.length-1)&&l(E,{type:"submit",disabled:d||p.formState.isSubmitting,children:i(S?"update":"create")})]})]})]})})]})})}var Se=re;export{re as EntityFormTemplate,Se as default};
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from './HomeTemplate';
|
|
|
2
2
|
export * from './WhatsNewTemplate';
|
|
3
3
|
export * from './DashboardTemplate';
|
|
4
4
|
export * from './LoginTemplate';
|
|
5
|
+
export * from './AdminLandingTemplate';
|
|
5
6
|
export * from './ProfileTemplate';
|
|
6
7
|
export * from './billing';
|
|
7
8
|
export * from './crud';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,6BAA6B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";export*from"./HomeTemplate";export*from"./WhatsNewTemplate";export*from"./DashboardTemplate";export*from"./LoginTemplate";export*from"./ProfileTemplate";export*from"./billing";export*from"./crud";export*from"./legal";export*from"./components/MarkdownViewer";
|
|
1
|
+
"use client";export*from"./HomeTemplate";export*from"./WhatsNewTemplate";export*from"./DashboardTemplate";export*from"./LoginTemplate";export*from"./AdminLandingTemplate";export*from"./ProfileTemplate";export*from"./billing";export*from"./crud";export*from"./legal";export*from"./components/MarkdownViewer";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@donotdev/templates",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
@@ -45,20 +45,20 @@
|
|
|
45
45
|
"type-check": "tsc --noEmit"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@donotdev/adv-comps": "0.0.
|
|
49
|
-
"@donotdev/components": "0.0.
|
|
50
|
-
"@donotdev/core": "0.0.
|
|
51
|
-
"@donotdev/crud": "0.0.5",
|
|
52
|
-
"@donotdev/ui": "0.0.
|
|
48
|
+
"@donotdev/adv-comps": "^0.0.8",
|
|
49
|
+
"@donotdev/components": "^0.0.12",
|
|
50
|
+
"@donotdev/core": "^0.0.12",
|
|
51
|
+
"@donotdev/crud": "^0.0.5",
|
|
52
|
+
"@donotdev/ui": "^0.0.8",
|
|
53
53
|
"@hookform/resolvers": "^5.2.2",
|
|
54
54
|
"html-react-parser": "^5.2.11",
|
|
55
55
|
"marked": "^17.0.1",
|
|
56
56
|
"react-hook-form": "^7.71.0"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"@donotdev/auth": "0.0.5",
|
|
60
|
-
"@donotdev/billing": "0.0.5",
|
|
61
|
-
"@donotdev/oauth": "0.0.5",
|
|
59
|
+
"@donotdev/auth": "^0.0.5",
|
|
60
|
+
"@donotdev/billing": "^0.0.5",
|
|
61
|
+
"@donotdev/oauth": "^0.0.5",
|
|
62
62
|
"lucide-react": "^0.562.0",
|
|
63
63
|
"react": "^19.2.3",
|
|
64
64
|
"react-dom": "^19.2.3",
|