@tekki-forge/runtime-admin 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/account.d.ts +1 -0
- package/dist/account.js +105 -0
- package/dist/account.js.map +1 -0
- package/dist/activity.d.ts +65 -0
- package/dist/activity.js +299 -0
- package/dist/activity.js.map +1 -0
- package/dist/admin-access.d.ts +4 -0
- package/dist/admin-access.js +177 -0
- package/dist/admin-access.js.map +1 -0
- package/dist/admin.d.ts +5 -0
- package/dist/admin.js +129 -0
- package/dist/admin.js.map +1 -0
- package/dist/auth-pages.d.ts +13 -0
- package/dist/auth-pages.js +207 -0
- package/dist/auth-pages.js.map +1 -0
- package/dist/brand-art.d.ts +24 -0
- package/dist/brand-art.js +33 -0
- package/dist/brand-art.js.map +1 -0
- package/dist/brand.d.ts +11 -0
- package/dist/brand.js +16 -0
- package/dist/brand.js.map +1 -0
- package/dist/charts.d.ts +23 -0
- package/dist/charts.js +259 -0
- package/dist/charts.js.map +1 -0
- package/dist/command-palette.d.ts +9 -0
- package/dist/command-palette.js +115 -0
- package/dist/command-palette.js.map +1 -0
- package/dist/context.d.ts +242 -0
- package/dist/context.js +107 -0
- package/dist/context.js.map +1 -0
- package/dist/dashboard.d.ts +66 -0
- package/dist/dashboard.js +144 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/fields.d.ts +71 -0
- package/dist/fields.js +326 -0
- package/dist/fields.js.map +1 -0
- package/dist/i18n/catalog.d.ts +7 -0
- package/dist/i18n/catalog.js +23 -0
- package/dist/i18n/catalog.js.map +1 -0
- package/dist/i18n/locale.d.ts +15 -0
- package/dist/i18n/locale.js +69 -0
- package/dist/i18n/locale.js.map +1 -0
- package/dist/i18n/messages/de.d.ts +3 -0
- package/dist/i18n/messages/de.js +627 -0
- package/dist/i18n/messages/de.js.map +1 -0
- package/dist/i18n/messages/en.d.ts +3 -0
- package/dist/i18n/messages/en.js +627 -0
- package/dist/i18n/messages/en.js.map +1 -0
- package/dist/i18n/messages/es.d.ts +3 -0
- package/dist/i18n/messages/es.js +627 -0
- package/dist/i18n/messages/es.js.map +1 -0
- package/dist/i18n/messages/fr.d.ts +3 -0
- package/dist/i18n/messages/fr.js +627 -0
- package/dist/i18n/messages/fr.js.map +1 -0
- package/dist/i18n/messages/pt.d.ts +3 -0
- package/dist/i18n/messages/pt.js +627 -0
- package/dist/i18n/messages/pt.js.map +1 -0
- package/dist/i18n/validation.d.ts +3 -0
- package/dist/i18n/validation.js +36 -0
- package/dist/i18n/validation.js.map +1 -0
- package/dist/illustrations.d.ts +6 -0
- package/dist/illustrations.js +16 -0
- package/dist/illustrations.js.map +1 -0
- package/dist/import-dialog.d.ts +11 -0
- package/dist/import-dialog.js +152 -0
- package/dist/import-dialog.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/inline-edit.d.ts +18 -0
- package/dist/inline-edit.js +115 -0
- package/dist/inline-edit.js.map +1 -0
- package/dist/landing.d.ts +79 -0
- package/dist/landing.js +122 -0
- package/dist/landing.js.map +1 -0
- package/dist/locale-switcher.d.ts +4 -0
- package/dist/locale-switcher.js +15 -0
- package/dist/locale-switcher.js.map +1 -0
- package/dist/map.d.ts +26 -0
- package/dist/map.js +232 -0
- package/dist/map.js.map +1 -0
- package/dist/notifications.d.ts +12 -0
- package/dist/notifications.js +75 -0
- package/dist/notifications.js.map +1 -0
- package/dist/record-mutation.d.ts +19 -0
- package/dist/record-mutation.js +39 -0
- package/dist/record-mutation.js.map +1 -0
- package/dist/resource-detail.d.ts +4 -0
- package/dist/resource-detail.js +96 -0
- package/dist/resource-detail.js.map +1 -0
- package/dist/resource-form.d.ts +11 -0
- package/dist/resource-form.js +92 -0
- package/dist/resource-form.js.map +1 -0
- package/dist/resource-list.d.ts +10 -0
- package/dist/resource-list.js +154 -0
- package/dist/resource-list.js.map +1 -0
- package/dist/saved-views.d.ts +16 -0
- package/dist/saved-views.js +64 -0
- package/dist/saved-views.js.map +1 -0
- package/dist/schema-editor-diagram.d.ts +14 -0
- package/dist/schema-editor-diagram.js +54 -0
- package/dist/schema-editor-diagram.js.map +1 -0
- package/dist/schema-editor.d.ts +98 -0
- package/dist/schema-editor.js +571 -0
- package/dist/schema-editor.js.map +1 -0
- package/dist/shell.d.ts +10 -0
- package/dist/shell.js +228 -0
- package/dist/shell.js.map +1 -0
- package/dist/skeleton.d.ts +25 -0
- package/dist/skeleton.js +34 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/theme-catalog.d.ts +71 -0
- package/dist/theme-catalog.js +55 -0
- package/dist/theme-catalog.js.map +1 -0
- package/dist/theme-head.d.ts +8 -0
- package/dist/theme-head.js +11 -0
- package/dist/theme-head.js.map +1 -0
- package/dist/theme-preview.d.ts +2 -0
- package/dist/theme-preview.js +23 -0
- package/dist/theme-preview.js.map +1 -0
- package/dist/theme-switcher.d.ts +20 -0
- package/dist/theme-switcher.js +159 -0
- package/dist/theme-switcher.js.map +1 -0
- package/dist/theme.d.ts +24 -0
- package/dist/theme.js +30 -0
- package/dist/theme.js.map +1 -0
- package/dist/toast.d.ts +21 -0
- package/dist/toast.js +51 -0
- package/dist/toast.js.map +1 -0
- package/dist/ui.d.ts +86 -0
- package/dist/ui.js +106 -0
- package/dist/ui.js.map +1 -0
- package/dist/views.d.ts +23 -0
- package/dist/views.js +238 -0
- package/dist/views.js.map +1 -0
- package/package.json +58 -0
- package/styles.css +778 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pt.js","sourceRoot":"","sources":["../../../src/i18n/messages/pt.ts"],"names":[],"mappings":"AAEA,uCAAuC;AACvC,MAAM,CAAC,MAAM,EAAE,GAAa;IAC1B,cAAc,EAAE,QAAQ;IAExB,gBAAgB,EAAE,OAAO;IACzB,aAAa,EAAE,QAAQ;IACvB,eAAe,EAAE,UAAU;IAC3B,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,QAAQ;IACxB,gBAAgB,EAAE,WAAW;IAC7B,iBAAiB,EAAE,WAAW;IAC9B,eAAe,EAAE,OAAO;IACxB,eAAe,EAAE,UAAU;IAC3B,aAAa,EAAE,WAAW;IAC1B,mBAAmB,EAAE,YAAY;IACjC,aAAa,EAAE,QAAQ;IACvB,gBAAgB,EAAE,aAAa;IAC/B,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,QAAQ;IACvB,iBAAiB,EAAE,gBAAgB;IACnC,aAAa,EAAE,OAAO;IACtB,eAAe,EAAE,SAAS;IAC1B,aAAa,EAAE,SAAS;IACxB,eAAe,EAAE,WAAW;IAC5B,uBAAuB,EAAE,YAAY;IACrC,eAAe,EAAE,aAAa;IAC9B,2BAA2B,EAAE,iBAAiB;IAC9C,iBAAiB,EAAE,YAAY;IAC/B,YAAY,EAAE,KAAK;IAEnB,kBAAkB,EAAE,WAAW;IAC/B,iBAAiB,EAAE,UAAU;IAC7B,qBAAqB,EAAE,UAAU;IACjC,wBAAwB,EAAE,mBAAmB;IAC7C,0BAA0B,EAAE,oBAAoB;IAEhD,oBAAoB,EAAE,eAAe;IACrC,aAAa,EAAE,qBAAqB;IACpC,eAAe,EAAE,aAAa;IAC9B,kBAAkB,EAAE,sBAAsB;IAC1C,gBAAgB,EAAE,sBAAsB;IACxC,eAAe,EAAE,QAAQ;IACzB,mBAAmB,EAAE,4BAA4B;IACjD,UAAU,EAAE,qBAAqB;IACjC,qBAAqB,EAAE,oBAAoB;IAC3C,YAAY,EAAE,sCAAsC;IACpD,cAAc,EAAE,YAAY;IAC5B,kBAAkB,EAAE,aAAa;IACjC,aAAa,EAAE,iBAAiB;IAChC,uBAAuB,EAAE,OAAO;IAEhC,uBAAuB,EAAE,iBAAiB;IAC1C,wBAAwB,EAAE,eAAe;IACzC,mBAAmB,EAAE,wCAAwC;IAC7D,mBAAmB,EAAE,4BAA4B;IACjD,iBAAiB,EAAE,wBAAwB;IAC3C,wBAAwB,EAAE,gCAAgC;IAC1D,WAAW,EAAE,QAAQ;IACrB,mBAAmB,EAAE,0BAA0B;IAC/C,oBAAoB,EAAE,aAAa;IACnC,gBAAgB,EAAE,UAAU;IAC5B,yBAAyB,EAAE,wBAAwB;IACnD,iCAAiC,EAAE,mFAAmF;IACtH,wBAAwB,EAAE,kBAAkB;IAC5C,YAAY,EAAE,QAAQ;IACtB,sBAAsB,EAAE,+CAA+C;IACvE,oBAAoB,EAAE,mEAAmE;IACzF,qBAAqB,EAAE,+BAA+B;IACtD,sBAAsB,EAAE,kFAAkF;IAC1G,mBAAmB,EAAE,oBAAoB;IACzC,uBAAuB,EAAE,yBAAyB;IAClD,gBAAgB,EAAE,gBAAgB;IAClC,SAAS,EAAE,IAAI;IACf,uBAAuB,EAAE,qBAAqB;IAC9C,kCAAkC,EAAE,uBAAuB;IAC3D,eAAe,EAAE,eAAe;IAChC,mBAAmB,EAAE,0BAA0B;IAC/C,yBAAyB,EAAE,wBAAwB;IACnD,uBAAuB,EAAE,kDAAkD;IAC3E,gBAAgB,EAAE,2EAA2E;IAC7F,oBAAoB,EAAE,iDAAiD;IACvE,iBAAiB,EAAE,uBAAuB;IAC1C,oBAAoB,EAAE,gBAAgB;IACtC,aAAa,EAAE,gBAAgB;IAC/B,eAAe,EAAE,yBAAyB;IAC1C,wBAAwB,EAAE,wCAAwC;IAClE,kBAAkB,EAAE,2CAA2C;IAC/D,qBAAqB,EAAE,yBAAyB;IAChD,2BAA2B,EAAE,gDAAgD;IAC7E,oBAAoB,EAAE,mCAAmC;IACzD,uBAAuB,EAAE,gGAAgG;IAEzH,oBAAoB,EAAE,+BAA+B;IACrD,qBAAqB,EAAE,qDAAqD;IAC5E,wBAAwB,EAAE,uBAAuB;IACjD,6BAA6B,EAAE,kCAAkC;IACjE,yBAAyB,EAAE,qBAAqB;IAChD,oBAAoB,EAAE,WAAW;IACjC,mBAAmB,EAAE,YAAY;IACjC,cAAc,EAAE,MAAM;IACtB,qBAAqB,EAAE,oBAAoB;IAC3C,6BAA6B,EAAE,oCAAoC;IACnE,iBAAiB,EAAE,iBAAiB;IACpC,sBAAsB,EAAE,sBAAsB;IAC9C,4BAA4B,EAAE,6BAA6B;IAC3D,kBAAkB,EAAE,kBAAkB;IACtC,6BAA6B,EAAE,yEAAyE;IACxG,kBAAkB,EAAE,eAAe;IACnC,yBAAyB,EAAE,6DAA6D;IACxF,iBAAiB,EAAE,QAAQ;IAC3B,wBAAwB,EAAE,oBAAoB;IAC9C,gBAAgB,EAAE,SAAS;IAC3B,mBAAmB,EAAE,eAAe;IACpC,kBAAkB,EAAE,gBAAgB;IACpC,oBAAoB,EAAE,kBAAkB;IACxC,eAAe,EAAE,OAAO;IACxB,mBAAmB,EAAE,8BAA8B;IACnD,2BAA2B,EAAE,wDAAwD;IACrF,0BAA0B,EAAE,mDAAmD;IAC/E,wBAAwB,EAAE,oGAAoG;IAC9H,uBAAuB,EAAE,0BAA0B;IACnD,0BAA0B,EAAE,uBAAuB;IACnD,gBAAgB,EAAE,WAAW;IAE7B,YAAY,EAAE,QAAQ;IACtB,eAAe,EAAE,kBAAkB;IACnC,oBAAoB,EAAE,OAAO;IAC7B,iBAAiB,EAAE,UAAU;IAC7B,wBAAwB,EAAE,sEAAsE;IAChG,sBAAsB,EAAE,kBAAkB;IAC1C,oBAAoB,EAAE,WAAW;IACjC,oBAAoB,EAAE,kBAAkB;IACxC,qBAAqB,EAAE,oBAAoB;IAC3C,2BAA2B,EAAE,oEAAoE;IACjG,yBAAyB,EAAE,kBAAkB;IAC7C,yBAAyB,EAAE,mEAAmE;IAC9F,mBAAmB,EAAE,8BAA8B;IACnD,yBAAyB,EAAE,aAAa;IACxC,oBAAoB,EAAE,SAAS;IAC/B,yBAAyB,EAAE,mCAAmC;IAC9D,oBAAoB,EAAE,wBAAwB;IAC9C,+BAA+B,EAAE,+BAA+B;IAChE,qBAAqB,EAAE,kBAAkB;IACzC,uBAAuB,EAAE,8CAA8C;IACvE,oBAAoB,EAAE,QAAQ;IAC9B,0BAA0B,EAAE,0BAA0B;IACtD,8BAA8B,EAAE,oFAAoF;IACpH,mBAAmB,EAAE,cAAc;IACnC,mBAAmB,EAAE,aAAa;IAClC,sBAAsB,EAAE,0BAA0B;IAClD,wBAAwB,EAAE,gBAAgB;IAC1C,kBAAkB,EAAE,YAAY;IAChC,2BAA2B,EAAE,mBAAmB;IAChD,gCAAgC,EAAE,oBAAoB;IACtD,mCAAmC,EAAE,oBAAoB;IACzD,6BAA6B,EAAE,qBAAqB;IACpD,uBAAuB,EAAE,+BAA+B;IACxD,yBAAyB,EAAE,0CAA0C;IACrE,uBAAuB,EAAE,sBAAsB;IAC/C,2BAA2B,EAAE,oBAAoB;IACjD,0BAA0B,EAAE,gBAAgB;IAC5C,qBAAqB,EAAE,SAAS;IAChC,oBAAoB,EAAE,MAAM;IAC5B,0BAA0B,EAAE,mBAAmB;IAC/C,qBAAqB,EAAE,YAAY;IACnC,yBAAyB,EAAE,oEAAoE;IAC/F,mBAAmB,EAAE,wBAAwB;IAC7C,uBAAuB,EAAE,oFAAoF;IAC7G,oBAAoB,EAAE,UAAU;IAChC,oBAAoB,EAAE,SAAS;IAC/B,oBAAoB,EAAE,SAAS;IAC/B,mBAAmB,EAAE,sBAAsB;IAC3C,kBAAkB,EAAE,MAAM;IAC1B,iBAAiB,EAAE,YAAY;IAE/B,uBAAuB,EAAE,0BAA0B;IACnD,4BAA4B,EAAE,+CAA+C;IAC7E,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,yBAAyB;IACjD,iBAAiB,EAAE,QAAQ;IAC3B,mBAAmB,EAAE,UAAU;IAC/B,mBAAmB,EAAE,WAAW;IAChC,uBAAuB,EAAE,mBAAmB;IAE5C,YAAY,EAAE,mBAAmB;IACjC,qBAAqB,EAAE,2CAA2C;IAClE,cAAc,EAAE,UAAU;IAC1B,aAAa,EAAE,mBAAmB;IAClC,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,aAAa;IAC7B,oBAAoB,EAAE,6DAA6D;IACnF,sBAAsB,EAAE,8DAA8D;IACtF,qBAAqB,EAAE,mBAAmB;IAC1C,cAAc,EAAE,OAAO;IACvB,cAAc,EAAE,OAAO;IAEvB,UAAU,EAAE,WAAW;IACvB,uBAAuB,EAAE,QAAQ;IACjC,uBAAuB,EAAE,YAAY;IACrC,qBAAqB,EAAE,mEAAmE;IAC1F,0BAA0B,EAAE,0BAA0B;IACtD,4BAA4B,EAAE,2BAA2B;IACzD,kBAAkB,EAAE,kBAAkB;IACtC,qBAAqB,EAAE,kBAAkB;IACzC,qBAAqB,EAAE,qBAAqB;IAC5C,gBAAgB,EAAE,gBAAgB;IAClC,eAAe,EAAE,sBAAsB;IACvC,aAAa,EAAE,UAAU;IACzB,gBAAgB,EAAE,iBAAiB;IACnC,mBAAmB,EAAE,qBAAqB;IAC1C,aAAa,EAAE,UAAU;IACzB,UAAU,EAAE,cAAc;IAC1B,cAAc,EAAE,6BAA6B;IAC7C,iBAAiB,EAAE,sCAAsC;IACzD,wBAAwB,EAAE,oBAAoB;IAC9C,gBAAgB,EAAE,iBAAiB;IACnC,gBAAgB,EAAE,kBAAkB;IACpC,qBAAqB,EAAE,QAAQ;IAC/B,kBAAkB,EAAE,OAAO;IAC3B,sBAAsB,EAAE,YAAY;IACpC,WAAW,EAAE,OAAO;IACpB,kBAAkB,EAAE,QAAQ;IAC5B,qBAAqB,EAAE,YAAY;IACnC,gBAAgB,EAAE,MAAM;IACxB,kBAAkB,EAAE,QAAQ;IAE5B,wBAAwB,EAAE,sBAAsB;IAChD,gBAAgB,EAAE,QAAQ;IAC1B,uBAAuB,EAAE,qCAAqC;IAC9D,mBAAmB,EAAE,iCAAiC;IACtD,mBAAmB,EAAE,gCAAgC;IACrD,oBAAoB,EAAE,iCAAiC;IACvD,gBAAgB,EAAE,6BAA6B;IAC/C,gBAAgB,EAAE,WAAW;IAC7B,gBAAgB,EAAE,WAAW;IAC7B,iBAAiB,EAAE,aAAa;IAChC,0BAA0B,EAAE,6CAA6C;IACzE,qBAAqB,EAAE,+BAA+B;IAEtD,iBAAiB,EAAE,eAAe;IAClC,gBAAgB,EAAE,gBAAgB;IAClC,gBAAgB,EAAE,gCAAgC;IAClD,mBAAmB,EAAE,gBAAgB;IACrC,kBAAkB,EAAE,oBAAoB;IAExC,oBAAoB,EAAE,2BAA2B;IACjD,kBAAkB,EAAE,gBAAgB;IACpC,mBAAmB,EAAE,gBAAgB;IACrC,qBAAqB,EAAE,eAAe;IACtC,sBAAsB,EAAE,iDAAiD;IACzE,uBAAuB,EAAE,gDAAgD;IACzE,oBAAoB,EAAE,sBAAsB;IAC5C,qBAAqB,EAAE,YAAY;IACnC,sBAAsB,EAAE,uCAAuC;IAC/D,iCAAiC,EAAE,2CAA2C;IAC9E,gCAAgC,EAAE,2BAA2B;IAC7D,uBAAuB,EAAE,sBAAsB;IAC/C,uBAAuB,EAAE,wCAAwC;IACjE,0BAA0B,EAAE,UAAU;IACtC,0BAA0B,EAAE,cAAc;IAC1C,2BAA2B,EAAE,WAAW;IACxC,yBAAyB,EAAE,8BAA8B;IAEzD,iBAAiB,EAAE,+FAA+F;IAClH,kBAAkB,EAAE,UAAU;IAC9B,mBAAmB,EAAE,qBAAqB;IAC1C,sBAAsB,EAAE,mBAAmB;IAC3C,wBAAwB,EAAE,iCAAiC;IAC3D,oBAAoB,EAAE,aAAa;IACnC,sBAAsB,EAAE,kBAAkB;IAC1C,sBAAsB,EAAE,oBAAoB;IAC5C,qBAAqB,EAAE,eAAe;IACtC,sBAAsB,EAAE,wBAAwB;IAChD,0BAA0B,EAAE,cAAc;IAC1C,8BAA8B,EAAE,cAAc;IAC9C,iCAAiC,EAAE,4BAA4B;IAC/D,yBAAyB,EAAE,eAAe;IAC1C,sBAAsB,EAAE,MAAM;IAC9B,mBAAmB,EAAE,6BAA6B;IAClD,qBAAqB,EAAE,4CAA4C;IACnE,oBAAoB,EAAE,uCAAuC;IAC7D,iBAAiB,EAAE,6EAA6E;IAChG,mBAAmB,EAAE,cAAc;IACnC,kBAAkB,EAAE,WAAW;IAC/B,mBAAmB,EAAE,SAAS;IAE9B,qBAAqB,EAAE,6BAA6B;IACpD,kBAAkB,EAAE,yBAAyB;IAC7C,oBAAoB,EAAE,0BAA0B;IAChD,mBAAmB,EAAE,0CAA0C;IAC/D,eAAe,EAAE,QAAQ;IACzB,kBAAkB,EAAE,qBAAqB;IACzC,gBAAgB,EAAE,0BAA0B;IAC5C,gBAAgB,EAAE,0BAA0B;IAC5C,kBAAkB,EAAE,kCAAkC;IACtD,gBAAgB,EAAE,kBAAkB;IACpC,oBAAoB,EAAE,0EAA0E;IAChG,6BAA6B,EAAE,gGAAgG;IAC/H,+BAA+B,EAAE,mGAAmG;IACpI,mBAAmB,EAAE,kBAAkB;IACvC,yBAAyB,EAAE,oCAAoC;IAC/D,qBAAqB,EAAE,OAAO;IAC9B,iBAAiB,EAAE,qBAAqB;IACxC,wBAAwB,EAAE,gCAAgC;IAC1D,0BAA0B,EAAE,iCAAiC;IAC7D,cAAc,EAAE,OAAO;IACvB,iBAAiB,EAAE,0GAA0G;IAC7H,qBAAqB,EAAE,uDAAuD;IAC9E,mBAAmB,EAAE,gBAAgB;IACrC,uBAAuB,EAAE,wBAAwB;IACjD,yBAAyB,EAAE,yBAAyB;IACpD,2BAA2B,EAAE,wCAAwC;IACrE,6BAA6B,EAAE,yCAAyC;IACxE,aAAa,EAAE,eAAe;IAC9B,uBAAuB,EAAE,oCAAoC;IAC7D,aAAa,EAAE,0CAA0C;IACzD,YAAY,EAAE,OAAO;IACrB,eAAe,EAAE,wCAAwC;IACzD,wBAAwB,EAAE,oFAAoF;IAC9G,0BAA0B,EAAE,qFAAqF;IACjH,iBAAiB,EAAE,WAAW;IAC9B,iBAAiB,EAAE,yBAAyB;IAC5C,sBAAsB,EAAE,iGAAiG;IACzH,sBAAsB,EAAE,iDAAiD;IACzE,wBAAwB,EAAE,kDAAkD;IAC5E,+BAA+B,EAAE,4DAA4D;IAC7F,iCAAiC,EAAE,6DAA6D;IAChG,oBAAoB,EAAE,oCAAoC;IAC1D,sBAAsB,EAAE,wCAAwC;IAChE,cAAc,EAAE,kBAAkB;IAClC,mBAAmB,EAAE,oCAAoC;IACzD,mBAAmB,EAAE,uCAAuC;IAC5D,gBAAgB,EAAE,cAAc;IAEhC,uBAAuB,EAAE,yBAAyB;IAClD,kBAAkB,EAAE,gCAAgC;IACpD,wBAAwB,EAAE,6CAA6C;IACvE,4BAA4B,EAAE,oCAAoC;IAClE,yBAAyB,EAAE,eAAe;IAC1C,wBAAwB,EAAE,wBAAwB;IAClD,sBAAsB,EAAE,eAAe;IACvC,yBAAyB,EAAE,kCAAkC;IAC7D,mBAAmB,EAAE,yBAAyB;IAC9C,kBAAkB,EAAE,QAAQ;IAE5B,gBAAgB,EAAE,OAAO;IACzB,cAAc,EAAE,SAAS;IACzB,eAAe,EAAE,oBAAoB;IACrC,mBAAmB,EAAE,kCAAkC;IACvD,qBAAqB,EAAE,gCAAgC;IACvD,mBAAmB,EAAE,cAAc;IAEnC,wBAAwB,EAAE,kBAAkB;IAC5C,gCAAgC,EAAE,4DAA4D;IAC9F,0BAA0B,EAAE,WAAW;IACvC,wBAAwB,EAAE,cAAc;IACxC,uBAAuB,EAAE,aAAa;IACtC,2BAA2B,EAAE,gCAAgC;IAC7D,2BAA2B,EAAE,uBAAuB;IACpD,wBAAwB,EAAE,kBAAkB;IAC5C,0BAA0B,EAAE,gBAAgB;IAC5C,sBAAsB,EAAE,WAAW;IACnC,qBAAqB,EAAE,cAAc;IACrC,0BAA0B,EAAE,gBAAgB;IAE5C,qBAAqB,EAAE,aAAa;IACpC,mBAAmB,EAAE,sBAAsB;IAC3C,oBAAoB,EAAE,8BAA8B;IACpD,oBAAoB,EAAE,8BAA8B;IACpD,0BAA0B,EAAE,gCAAgC;IAC5D,oBAAoB,EAAE,kCAAkC;IACxD,gBAAgB,EAAE,6BAA6B;IAC/C,gBAAgB,EAAE,4BAA4B;IAC9C,iBAAiB,EAAE,kCAAkC;IACrD,qBAAqB,EAAE,4BAA4B;IACnD,kBAAkB,EAAE,+CAA+C;IACnE,sBAAsB,EAAE,gCAAgC;IACxD,sBAAsB,EAAE,6BAA6B;IACrD,sBAAsB,EAAE,4BAA4B;IACpD,oBAAoB,EAAE,kBAAkB;IACxC,kBAAkB,EAAE,6BAA6B;IACjD,gBAAgB,EAAE,0BAA0B;IAC5C,kBAAkB,EAAE,8CAA8C;IAClE,qBAAqB,EAAE,wCAAwC;IAC/D,sBAAsB,EAAE,2CAA2C;IACnE,kBAAkB,EAAE,gBAAgB;IAEpC,iBAAiB,EAAE,eAAe;IAClC,mBAAmB,EAAE,wBAAwB;IAC7C,cAAc,EAAE,qBAAqB;IACrC,aAAa,EAAE,sBAAsB;IACrC,eAAe,EAAE,eAAe;IAChC,eAAe,EAAE,kBAAkB;IACnC,cAAc,EAAE,2BAA2B;IAC3C,uBAAuB,EAAE,2BAA2B;IACpD,yBAAyB,EAAE,6BAA6B;IACxD,oBAAoB,EAAE,yBAAyB;IAC/C,sBAAsB,EAAE,2BAA2B;IAEnD,kDAAkD;IAClD,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,mBAAmB;IACnC,oBAAoB,EAAE,+FAA+F;IACrH,mBAAmB,EAAE,QAAQ;IAC7B,oBAAoB,EAAE,UAAU;IAChC,0BAA0B,EAAE,gCAAgC;IAC5D,yBAAyB,EAAE,0IAA0I;IACrK,kBAAkB,EAAE,gDAAgD;IACpE,kBAAkB,EAAE,gDAAgD;IACpE,eAAe,EAAE,YAAY;IAC7B,sBAAsB,EAAE,4FAA4F;IACpH,eAAe,EAAE,kBAAkB;IACnC,iBAAiB,EAAE,WAAW;IAC9B,uBAAuB,EAAE,eAAe;IACxC,yBAAyB,EAAE,gBAAgB;IAC3C,kBAAkB,EAAE,eAAe;IACnC,sBAAsB,EAAE,kBAAkB;IAC1C,sBAAsB,EAAE,sDAAsD;IAC9E,iBAAiB,EAAE,0CAA0C;IAC7D,gBAAgB,EAAE,sBAAsB;IACxC,qBAAqB,EAAE,0BAA0B;IACjD,gBAAgB,EAAE,gBAAgB;IAClC,oBAAoB,EAAE,mBAAmB;IACzC,uBAAuB,EAAE,oFAAoF;IAC7G,qBAAqB,EAAE,kBAAkB;IACzC,sBAAsB,EAAE,WAAW;IACnC,4BAA4B,EAAE,UAAU;IACxC,2BAA2B,EAAE,uBAAuB;IACpD,0BAA0B,EAAE,8GAA8G;IAC1I,0BAA0B,EAAE,gBAAgB;IAC5C,4BAA4B,EAAE,4BAA4B;IAC1D,yBAAyB,EAAE,cAAc;IACzC,sBAAsB,EAAE,sDAAsD;IAC9E,eAAe,EAAE,QAAQ;IACzB,iBAAiB,EAAE,iBAAiB;IACpC,mBAAmB,EAAE,MAAM;IAC3B,mBAAmB,EAAE,MAAM;IAC3B,qBAAqB,EAAE,SAAS;IAChC,uBAAuB,EAAE,aAAa;IACtC,qBAAqB,EAAE,OAAO;IAC9B,yBAAyB,EAAE,aAAa;IACxC,mBAAmB,EAAE,+BAA+B;IACpD,oBAAoB,EAAE,iBAAiB;IACvC,qBAAqB,EAAE,SAAS;IAChC,yBAAyB,EAAE,wDAAwD;IACnF,uBAAuB,EAAE,OAAO;IAChC,qBAAqB,EAAE,eAAe;IACtC,yBAAyB,EAAE,sBAAsB;IACjD,sBAAsB,EAAE,gBAAgB;IACxC,yBAAyB,EAAE,WAAW;IACtC,2BAA2B,EAAE,mBAAmB;IAChD,sBAAsB,EAAE,mBAAmB;IAC3C,sBAAsB,EAAE,aAAa;IACrC,qBAAqB,EAAE,iBAAiB;IACxC,uBAAuB,EAAE,kBAAkB;IAC3C,mBAAmB,EAAE,wBAAwB;IAC7C,qBAAqB,EAAE,eAAe;IACtC,kBAAkB,EAAE,MAAM;IAC1B,gBAAgB,EAAE,oBAAoB;IACtC,qBAAqB,EAAE,QAAQ;IAC/B,2BAA2B,EAAE,kBAAkB;IAC/C,oBAAoB,EAAE,OAAO;IAC7B,uBAAuB,EAAE,uBAAuB;IAChD,mBAAmB,EAAE,sBAAsB;IAC3C,uBAAuB,EAAE,aAAa;IACtC,sBAAsB,EAAE,sBAAsB;IAC9C,2BAA2B,EAAE,uBAAuB;IACpD,mBAAmB,EAAE,gDAAgD;IACrE,wBAAwB,EAAE,gCAAgC;IAC1D,yBAAyB,EAAE,6EAA6E;IACxG,uBAAuB,EAAE,sCAAsC;IAC/D,uBAAuB,EAAE,8CAA8C;IACvE,yBAAyB,EAAE,6EAA6E;IACxG,qBAAqB,EAAE,iCAAiC;IACxD,yBAAyB,EAAE,0BAA0B;IACrD,oBAAoB,EAAE,kBAAkB;IACxC,mBAAmB,EAAE,6BAA6B;IAClD,aAAa,EAAE,+BAA+B;IAC9C,eAAe,EAAE,0BAA0B;IAC3C,eAAe,EAAE,6DAA6D;IAC9E,iBAAiB,EAAE,2CAA2C;IAC9D,oBAAoB,EAAE,YAAY;IAClC,cAAc,EAAE,SAAS;IACzB,qBAAqB,EAAE,oBAAoB;IAC3C,gBAAgB,EAAE,6FAA6F;IAC/G,iBAAiB,EAAE,qFAAqF;IACxG,wBAAwB,EAAE,gBAAgB;IAC1C,uBAAuB,EAAE,oEAAoE;IAC7F,uBAAuB,EAAE,kBAAkB;IAC3C,sBAAsB,EAAE,gBAAgB;IACxC,0BAA0B,EAAE,8BAA8B;IAC1D,uBAAuB,EAAE,qBAAqB;IAC9C,yBAAyB,EAAE,6CAA6C;IACxE,qBAAqB,EAAE,+BAA+B;IACtD,wBAAwB,EAAE,6BAA6B;IACvD,wBAAwB,EAAE,sCAAsC;IAChE,oBAAoB,EAAE,4BAA4B;IAClD,uBAAuB,EAAE,0BAA0B;IACnD,uBAAuB,EAAE,0BAA0B;IACnD,qBAAqB,EAAE,kDAAkD;IACzE,2BAA2B,EAAE,8BAA8B;IAC3D,8BAA8B,EAAE,sDAAsD;IACtF,8BAA8B,EAAE,4YAA4Y;IAC5a,6BAA6B,EAAE,2DAA2D;IAC1F,2BAA2B,EAAE,+EAA+E;IAC5G,kCAAkC,EAAE,gGAAgG;IACpI,4BAA4B,EAAE,4EAA4E;IAC1G,+BAA+B,EAAE,qEAAqE;IACtG,sBAAsB,EAAE,iCAAiC;IACzD,wBAAwB,EAAE,WAAW;IACrC,oBAAoB,EAAE,OAAO;IAC7B,kBAAkB,EAAE,aAAa;IACjC,sBAAsB,EAAE,iBAAiB;IACzC,qBAAqB,EAAE,SAAS;IAChC,qBAAqB,EAAE,SAAS;IAChC,mBAAmB,EAAE,UAAU;IAC/B,wBAAwB,EAAE,aAAa;IACvC,qBAAqB,EAAE,SAAS;IAChC,kBAAkB,EAAE,MAAM;IAC1B,sBAAsB,EAAE,aAAa;IACrC,kBAAkB,EAAE,iBAAiB;IACrC,mBAAmB,EAAE,QAAQ;IAC7B,iBAAiB,EAAE,KAAK;IACxB,mBAAmB,EAAE,UAAU;IAC/B,mBAAmB,EAAE,KAAK;IAC1B,kBAAkB,EAAE,MAAM;IAC1B,sBAAsB,EAAE,aAAa;IACrC,kBAAkB,EAAE,UAAU;IAC9B,mBAAmB,EAAE,QAAQ;IAC7B,sBAAsB,EAAE,WAAW;IACnC,sBAAsB,EAAE,SAAS;IACjC,mBAAmB,EAAE,SAAS;IAC9B,wBAAwB,EAAE,4CAA4C;IACtE,yBAAyB,EAAE,yGAAyG;IACpI,oBAAoB,EAAE,aAAa;IACnC,kBAAkB,EAAE,eAAe;IACnC,mBAAmB,EAAE,sBAAsB;IAC3C,uBAAuB,EAAE,2DAA2D;IACpF,6BAA6B,EAAE,gBAAgB;IAC/C,+BAA+B,EAAE,iBAAiB;IAClD,qBAAqB,EAAE,SAAS;IAChC,mBAAmB,EAAE,yBAAyB;IAC9C,yBAAyB,EAAE,kBAAkB;IAC7C,2BAA2B,EAAE,gHAAgH;IAC7I,qBAAqB,EAAE,0BAA0B;IACjD,kBAAkB,EAAE,MAAM;IAC1B,6BAA6B,EAAE,WAAW;IAC1C,uBAAuB,EAAE,mBAAmB;IAC5C,sBAAsB,EAAE,qCAAqC;IAC7D,uBAAuB,EAAE,WAAW;IACpC,uBAAuB,EAAE,sBAAsB;IAC/C,qBAAqB,EAAE,qBAAqB;IAC5C,qBAAqB,EAAE,eAAe;IACtC,0BAA0B,EAAE,kDAAkD;IAC9E,2BAA2B,EAAE,8IAA8I;IAC3K,sBAAsB,EAAE,oBAAoB;IAC5C,qBAAqB,EAAE,mBAAmB;IAC1C,yBAAyB,EAAE,6DAA6D;IACxF,oBAAoB,EAAE,MAAM;IAC5B,wBAAwB,EAAE,8DAA8D;IACxF,sBAAsB,EAAE,SAAS;IACjC,wBAAwB,EAAE,mBAAmB;IAC7C,uBAAuB,EAAE,QAAQ;IACjC,2BAA2B,EAAE,wDAAwD;IACrF,wBAAwB,EAAE,kDAAkD;IAC5E,sBAAsB,EAAE,QAAQ;IAChC,6BAA6B,EAAE,OAAO;IACtC,8BAA8B,EAAE,UAAU;IAC1C,8BAA8B,EAAE,UAAU;IAC1C,yBAAyB,EAAE,qBAAqB;IAChD,qBAAqB,EAAE,OAAO;IAC9B,sBAAsB,EAAE,SAAS;IACjC,2BAA2B,EAAE,iBAAiB;IAC9C,6BAA6B,EAAE,+EAA+E;IAC9G,uBAAuB,EAAE,kBAAkB;IAC3C,4BAA4B,EAAE,yBAAyB;IACvD,yBAAyB,EAAE,uEAAuE;IAClG,mBAAmB,EAAE,cAAc;IACnC,oBAAoB,EAAE,QAAQ;IAC9B,wBAAwB,EAAE,SAAS;IACnC,oBAAoB,EAAE,SAAS;IAC/B,qBAAqB,EAAE,SAAS;IAChC,4BAA4B,EAAE,mBAAmB;IACjD,oBAAoB,EAAE,uBAAuB;IAE7C,gBAAgB,EAAE,WAAW;IAC7B,sBAAsB,EAAE,4BAA4B;IACpD,gBAAgB,EAAE,wBAAwB;IAC1C,oBAAoB,EAAE,0DAA0D;IAChF,kBAAkB,EAAE,6BAA6B;IACjD,kBAAkB,EAAE,wBAAwB;IAC5C,kBAAkB,EAAE,+BAA+B;IACnD,mBAAmB,EAAE,iCAAiC;IACtD,qBAAqB,EAAE,iCAAiC;IACxD,uBAAuB,EAAE,gDAAgD;IACzE,iBAAiB,EAAE,2BAA2B;IAC9C,kBAAkB,EAAE,wBAAwB;IAC5C,cAAc,EAAE,4BAA4B;IAC5C,kBAAkB,EAAE,4BAA4B;IAChD,wBAAwB,EAAE,kBAAkB;IAC5C,kBAAkB,EAAE,QAAQ;IAC5B,wBAAwB,EAAE,cAAc;IACxC,iBAAiB,EAAE,SAAS;IAC5B,uBAAuB,EAAE,yBAAyB;IAClD,sBAAsB,EAAE,uDAAuD;IAC/E,eAAe,EAAE,UAAU;IAC3B,mBAAmB,EAAE,4BAA4B;IACjD,sBAAsB,EAAE,mBAAmB;IAC3C,wBAAwB,EAAE,oBAAoB;IAC9C,sBAAsB,EAAE,0BAA0B;IAClD,wBAAwB,EAAE,sBAAsB;IAChD,yBAAyB,EAAE,uBAAuB;IAClD,yBAAyB,EAAE,qBAAqB;IAChD,6BAA6B,EAAE,wBAAwB;IACvD,oBAAoB,EAAE,oBAAoB;IAC1C,yBAAyB,EAAE,wBAAwB;IACnD,0BAA0B,EAAE,sBAAsB;IAClD,4BAA4B,EAAE,4BAA4B;IAC1D,yBAAyB,EAAE,sBAAsB;IACjD,oBAAoB,EAAE,oBAAoB;IAC1C,sBAAsB,EAAE,qBAAqB;IAC7C,sBAAsB,EAAE,eAAe;IACvC,wBAAwB,EAAE,cAAc;IACxC,uBAAuB,EAAE,eAAe;IACxC,wBAAwB,EAAE,kDAAkD;IAC5E,wBAAwB,EAAE,mCAAmC;IAC7D,2BAA2B,EAAE,wBAAwB;IACrD,wBAAwB,EAAE,qBAAqB;IAC/C,8BAA8B,EAAE,QAAQ;IACxC,oBAAoB,EAAE,gBAAgB;IACtC,wBAAwB,EAAE,SAAS;IACnC,2BAA2B,EAAE,iBAAiB;IAC9C,yBAAyB,EAAE,oEAAoE;IAC/F,2BAA2B,EAAE,yDAAyD;IACtF,2BAA2B,EAAE,8BAA8B;IAC3D,8BAA8B,EAAE,wGAAwG;IACxI,sBAAsB,EAAE,sBAAsB;IAC9C,qBAAqB,EAAE,+CAA+C;IACtE,uBAAuB,EAAE,wCAAwC;IACjE,qCAAqC,EAAE,sBAAsB;IAC7D,2CAA2C,EAAE,yFAAyF;IACtI,kCAAkC,EAAE,sBAAsB;IAC1D,wCAAwC,EAAE,4DAA4D;IACtG,oCAAoC,EAAE,yBAAyB;IAC/D,0CAA0C,EAAE,wGAAwG;CACrJ,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { TranslateVars } from "./locale.js";
|
|
2
|
+
/** Translate a validation message when it is one of the framework's; other messages are returned as-is. */
|
|
3
|
+
export declare function translateValidation(message: string, t: (key: string, vars?: TranslateVars) => string): string;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** English messages produced by @tekki-forge/runtime-schema (client and server) → translation keys. */
|
|
2
|
+
const PATTERNS = [
|
|
3
|
+
[/^Required$/, "validation.required", () => ({})],
|
|
4
|
+
[/^Must be a number$/, "validation.number", () => ({})],
|
|
5
|
+
[/^Must be a whole number$/, "validation.integer", () => ({})],
|
|
6
|
+
[/^Must be a decimal number$/, "validation.decimal", () => ({})],
|
|
7
|
+
[/^At most (\d+) decimal places$/, "validation.decimalPlaces", (m) => ({ max: m[1] })],
|
|
8
|
+
[/^Must be between (.+) and (.+)$/, "validation.between", (m) => ({ min: m[1], max: m[2] })],
|
|
9
|
+
[/^Must be at least (.+)$/, "validation.min", (m) => ({ min: m[1] })],
|
|
10
|
+
[/^Must be at most (.+)$/, "validation.max", (m) => ({ max: m[1] })],
|
|
11
|
+
[/^Must be a date \(YYYY-MM-DD\)$/, "validation.date", () => ({})],
|
|
12
|
+
[/^Must be a date and time$/, "validation.datetime", () => ({})],
|
|
13
|
+
[/^Must be one of (.+)$/, "validation.oneOf", (m) => ({ values: m[1] })],
|
|
14
|
+
[/^Select at least one$/, "validation.selectOne", () => ({})],
|
|
15
|
+
[/^At least (\d+) characters$/, "validation.minLength", (m) => ({ min: m[1] })],
|
|
16
|
+
[/^At most (\d+) characters$/, "validation.maxLength", (m) => ({ max: m[1] })],
|
|
17
|
+
[/^Invalid format$/, "validation.pattern", () => ({})],
|
|
18
|
+
[/^Must be a valid email$/, "validation.email", () => ({})],
|
|
19
|
+
[/^Must be a valid URL$/, "validation.url", () => ({})],
|
|
20
|
+
[/^Must be a hex color like #3b82f6$/, "validation.color", () => ({})],
|
|
21
|
+
[/^Latitude must be (a number|between -90 and 90)$/, "validation.latitude", () => ({})],
|
|
22
|
+
[/^Longitude must be (a number|between -180 and 180)$/, "validation.longitude", () => ({})],
|
|
23
|
+
[/^Already taken$/, "validation.taken", () => ({})],
|
|
24
|
+
];
|
|
25
|
+
/** Translate a validation message when it is one of the framework's; other messages are returned as-is. */
|
|
26
|
+
export function translateValidation(message, t) {
|
|
27
|
+
for (const [re, key, vars] of PATTERNS) {
|
|
28
|
+
const m = message.match(re);
|
|
29
|
+
if (m) {
|
|
30
|
+
const out = t(key, vars(m));
|
|
31
|
+
return out === key ? message : out;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return message;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/i18n/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type IllustrationName = "list" | "search" | "dashboard" | "notifications";
|
|
2
|
+
/** Small decorative drawing for empty states, tinted by the theme's colours. */
|
|
3
|
+
export declare function Illustration({ name, className }: {
|
|
4
|
+
name: IllustrationName;
|
|
5
|
+
className?: string;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// Lines use currentColor (muted ink); tints come from the brand colours so every theme recolours them.
|
|
3
|
+
const tint = (opacity, color = "var(--forge-primary)") => ({ fill: color, fillOpacity: opacity });
|
|
4
|
+
const accent = (opacity) => tint(opacity, "var(--forge-accent)");
|
|
5
|
+
const brand = { stroke: "var(--forge-primary)" };
|
|
6
|
+
const SHAPES = {
|
|
7
|
+
list: (_jsxs(_Fragment, { children: [_jsx("ellipse", { cx: "60", cy: "80", rx: "42", ry: "5", style: tint(0.08) }), _jsx("rect", { x: "30", y: "18", width: "60", height: "50", rx: "7", style: tint(0.06), transform: "rotate(-6 60 43)" }), _jsx("rect", { x: "28", y: "14", width: "64", height: "54", rx: "8", style: tint(0.12) }), _jsx("rect", { x: "28", y: "14", width: "64", height: "54", rx: "8" }), _jsx("path", { d: "M38 28h26M38 38h40M38 48h32", opacity: "0.55" }), _jsx("circle", { cx: "90", cy: "18", r: "10", style: accent(0.9), stroke: "none" }), _jsx("path", { d: "M90 13.5v9M85.5 18h9", style: { stroke: "var(--forge-accent-fg)" }, strokeWidth: "2" })] })),
|
|
8
|
+
search: (_jsxs(_Fragment, { children: [_jsx("ellipse", { cx: "60", cy: "80", rx: "42", ry: "5", style: tint(0.08) }), _jsx("rect", { x: "22", y: "12", width: "52", height: "60", rx: "7", style: tint(0.08) }), _jsx("rect", { x: "22", y: "12", width: "52", height: "60", rx: "7" }), _jsx("path", { d: "M32 26h26M32 36h32M32 46h18", opacity: "0.5", strokeDasharray: "3 4" }), _jsx("circle", { cx: "76", cy: "50", r: "15", style: tint(0.14) }), _jsx("circle", { cx: "76", cy: "50", r: "15", style: brand, strokeWidth: "2.5" }), _jsx("path", { d: "m87 61 10 10", style: brand, strokeWidth: "3.5" }), _jsx("path", { d: "M71 45l10 10M81 45 71 55", opacity: "0.7" })] })),
|
|
9
|
+
dashboard: (_jsxs(_Fragment, { children: [_jsx("ellipse", { cx: "60", cy: "80", rx: "46", ry: "5", style: tint(0.08) }), _jsx("rect", { x: "16", y: "12", width: "88", height: "60", rx: "8", style: tint(0.06) }), _jsx("rect", { x: "16", y: "12", width: "88", height: "60", rx: "8" }), _jsx("rect", { x: "28", y: "44", width: "10", height: "18", rx: "2", style: tint(0.35), stroke: "none" }), _jsx("rect", { x: "43", y: "34", width: "10", height: "28", rx: "2", style: tint(0.55), stroke: "none" }), _jsx("rect", { x: "58", y: "50", width: "10", height: "12", rx: "2", style: tint(0.25), stroke: "none" }), _jsx("circle", { cx: "86", cy: "36", r: "10", style: accent(0.25) }), _jsx("path", { d: "M86 26a10 10 0 0 1 10 10h-10z", style: accent(0.85), stroke: "none" }), _jsx("path", { d: "M28 24h30", opacity: "0.5" })] })),
|
|
10
|
+
notifications: (_jsxs(_Fragment, { children: [_jsx("ellipse", { cx: "60", cy: "80", rx: "36", ry: "5", style: tint(0.08) }), _jsx("path", { d: "M42 56V41a18 18 0 0 1 36 0v15l6 7H36z", style: tint(0.12) }), _jsx("path", { d: "M42 56V41a18 18 0 0 1 36 0v15l6 7H36z" }), _jsx("path", { d: "M54 68a6 6 0 0 0 12 0" }), _jsx("circle", { cx: "80", cy: "24", r: "9", style: accent(0.9), stroke: "none" }), _jsx("path", { d: "m76 24 3 3 5-6", style: { stroke: "var(--forge-accent-fg)" }, strokeWidth: "2" }), _jsx("path", { d: "M22 30h6M25 27v6M96 50h5M98.5 47.5v5", opacity: "0.45" })] })),
|
|
11
|
+
};
|
|
12
|
+
/** Small decorative drawing for empty states, tinted by the theme's colours. */
|
|
13
|
+
export function Illustration({ name, className }) {
|
|
14
|
+
return (_jsx("svg", { viewBox: "0 0 120 88", width: "120", height: "88", fill: "none", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, focusable: "false", className: className ?? "forge-illustration text-ink-subtle", children: SHAPES[name] }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=illustrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"illustrations.js","sourceRoot":"","sources":["../src/illustrations.tsx"],"names":[],"mappings":";AAIA,uGAAuG;AACvG,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,KAAK,GAAG,sBAAsB,EAAiB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AACzH,MAAM,MAAM,GAAG,CAAC,OAAe,EAAiB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;AACxF,MAAM,KAAK,GAAkB,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;AAEhE,MAAM,MAAM,GAAwC;IAClD,IAAI,EAAE,CACJ,8BACE,kBAAS,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAI,EAC7D,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,EAAC,kBAAkB,GAAG,EACpG,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAI,EACvE,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACpD,eAAM,CAAC,EAAC,6BAA6B,EAAC,OAAO,EAAC,MAAM,GAAG,EACvD,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAC,MAAM,GAAG,EACnE,eAAM,CAAC,EAAC,sBAAsB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE,EAAE,WAAW,EAAC,GAAG,GAAG,IAC7F,CACJ;IACD,MAAM,EAAE,CACN,8BACE,kBAAS,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAI,EAC7D,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAI,EACvE,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACpD,eAAM,CAAC,EAAC,6BAA6B,EAAC,OAAO,EAAC,KAAK,EAAC,eAAe,EAAC,KAAK,GAAG,EAC5E,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAI,EACpD,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAC,KAAK,GAAG,EACjE,eAAM,CAAC,EAAC,cAAc,EAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAC,KAAK,GAAG,EACzD,eAAM,CAAC,EAAC,0BAA0B,EAAC,OAAO,EAAC,KAAK,GAAG,IAClD,CACJ;IACD,SAAS,EAAE,CACT,8BACE,kBAAS,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAI,EAC7D,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAI,EACvE,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,GAAG,EACpD,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAC,MAAM,GAAG,EACrF,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAC,MAAM,GAAG,EACrF,eAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAC,MAAM,GAAG,EACrF,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAI,EACtD,eAAM,CAAC,EAAC,+BAA+B,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAC,MAAM,GAAG,EAC7E,eAAM,CAAC,EAAC,WAAW,EAAC,OAAO,EAAC,KAAK,GAAG,IACnC,CACJ;IACD,aAAa,EAAE,CACb,8BACE,kBAAS,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAI,EAC7D,eAAM,CAAC,EAAC,uCAAuC,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAI,EACrE,eAAM,CAAC,EAAC,uCAAuC,GAAG,EAClD,eAAM,CAAC,EAAC,uBAAuB,GAAG,EAClC,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAC,MAAM,GAAG,EAClE,eAAM,CAAC,EAAC,gBAAgB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,wBAAwB,EAAE,EAAE,WAAW,EAAC,GAAG,GAAG,EACxF,eAAM,CAAC,EAAC,sCAAsC,EAAC,OAAO,EAAC,MAAM,GAAG,IAC/D,CACJ;CACF,CAAC;AAEF,gFAAgF;AAChF,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAkD;IAC9F,OAAO,CACL,cAAK,OAAO,EAAC,YAAY,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,MAAM,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,uBAAa,SAAS,EAAC,OAAO,EAAC,SAAS,EAAE,SAAS,IAAI,oCAAoC,YAC3O,MAAM,CAAC,IAAI,CAAC,GACT,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EntityIR, FieldIR, ResourceMeta } from "@tekki-forge/compiler";
|
|
2
|
+
/** Fields a CSV column can feed (mirrors the server's importableFields). */
|
|
3
|
+
export declare function importColumns(entity: EntityIR): FieldIR[];
|
|
4
|
+
/** Split rows into request-sized batches (row count and payload size). */
|
|
5
|
+
export declare function batches<T>(rows: T[], maxRows?: number, maxBytes?: number): T[][];
|
|
6
|
+
export declare function ImportDialog({ entity, resource, open, onClose }: {
|
|
7
|
+
entity: EntityIR;
|
|
8
|
+
resource: ResourceMeta;
|
|
9
|
+
open: boolean;
|
|
10
|
+
onClose: () => void;
|
|
11
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { parseCsv, suggestMapping } from "@tekki-forge/runtime-schema";
|
|
4
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
5
|
+
import { FileUp } from "lucide-react";
|
|
6
|
+
import { useState } from "react";
|
|
7
|
+
import { useForge } from "./context.js";
|
|
8
|
+
import { useToast } from "./toast.js";
|
|
9
|
+
import { Alert, Button, Dialog, Select, cn } from "./ui.js";
|
|
10
|
+
const MAX_FILE_BYTES = 20 * 1024 * 1024;
|
|
11
|
+
const BATCH_ROWS = 1000;
|
|
12
|
+
const BATCH_BYTES = 700_000;
|
|
13
|
+
/** Fields a CSV column can feed (mirrors the server's importableFields). */
|
|
14
|
+
export function importColumns(entity) {
|
|
15
|
+
return entity.fields.filter((f) => !f.hidden && !f.readonly && !f.computed && !f.file && f.name !== entity.workflow?.field);
|
|
16
|
+
}
|
|
17
|
+
/** Split rows into request-sized batches (row count and payload size). */
|
|
18
|
+
export function batches(rows, maxRows = BATCH_ROWS, maxBytes = BATCH_BYTES) {
|
|
19
|
+
const out = [];
|
|
20
|
+
let current = [];
|
|
21
|
+
let bytes = 0;
|
|
22
|
+
for (const r of rows) {
|
|
23
|
+
const size = JSON.stringify(r).length + 1;
|
|
24
|
+
if (current.length && (current.length >= maxRows || bytes + size > maxBytes)) {
|
|
25
|
+
out.push(current);
|
|
26
|
+
current = [];
|
|
27
|
+
bytes = 0;
|
|
28
|
+
}
|
|
29
|
+
current.push(r);
|
|
30
|
+
bytes += size;
|
|
31
|
+
}
|
|
32
|
+
if (current.length)
|
|
33
|
+
out.push(current);
|
|
34
|
+
return out;
|
|
35
|
+
}
|
|
36
|
+
const csvCell = (v) => (/[",\n\r]/.test(v) ? `"${v.replace(/"/g, '""')}"` : v);
|
|
37
|
+
export function ImportDialog({ entity, resource, open, onClose }) {
|
|
38
|
+
const { api, locale, t, tv } = useForge();
|
|
39
|
+
const toast = useToast();
|
|
40
|
+
const queryClient = useQueryClient();
|
|
41
|
+
const fields = importColumns(entity);
|
|
42
|
+
const uniques = fields.filter((f) => f.unique && !f.relation);
|
|
43
|
+
const [step, setStep] = useState("file");
|
|
44
|
+
const [csv, setCsv] = useState(null);
|
|
45
|
+
const [fileName, setFileName] = useState("");
|
|
46
|
+
const [mapping, setMapping] = useState({});
|
|
47
|
+
const [matchBy, setMatchBy] = useState("");
|
|
48
|
+
const [dateOrder, setDateOrder] = useState("ymd");
|
|
49
|
+
const [results, setResults] = useState(null);
|
|
50
|
+
const [progress, setProgress] = useState(null);
|
|
51
|
+
const [error, setError] = useState(null);
|
|
52
|
+
const reset = () => {
|
|
53
|
+
setStep("file");
|
|
54
|
+
setCsv(null);
|
|
55
|
+
setResults(null);
|
|
56
|
+
setProgress(null);
|
|
57
|
+
setError(null);
|
|
58
|
+
setMatchBy("");
|
|
59
|
+
};
|
|
60
|
+
const close = () => {
|
|
61
|
+
if (progress && step !== "done")
|
|
62
|
+
return; // an import is running
|
|
63
|
+
reset();
|
|
64
|
+
onClose();
|
|
65
|
+
};
|
|
66
|
+
const readFile = async (file) => {
|
|
67
|
+
setError(null);
|
|
68
|
+
if (file.size > MAX_FILE_BYTES)
|
|
69
|
+
return setError(t("import.fileTooLarge", { size: MAX_FILE_BYTES / 1024 / 1024 }));
|
|
70
|
+
const parsed = parseCsv(await file.text());
|
|
71
|
+
if (!parsed.headers.length || !parsed.rows.length)
|
|
72
|
+
return setError(t("import.noRows"));
|
|
73
|
+
setCsv(parsed);
|
|
74
|
+
setFileName(file.name);
|
|
75
|
+
setMapping(suggestMapping(parsed.headers, [{ name: "id", apiName: "id", label: "ID" }, ...fields.map((f) => ({ name: f.name, apiName: f.apiName, label: f.label, required: f.required }))]));
|
|
76
|
+
setStep("map");
|
|
77
|
+
};
|
|
78
|
+
const mappedRows = () => csv.rows.map((cells) => {
|
|
79
|
+
const row = {};
|
|
80
|
+
for (const [name, col] of Object.entries(mapping))
|
|
81
|
+
if (col !== null && col !== undefined && (name !== "id" || matchBy === "id"))
|
|
82
|
+
row[name] = cells[col] ?? "";
|
|
83
|
+
return row;
|
|
84
|
+
});
|
|
85
|
+
const send = async (dryRun) => {
|
|
86
|
+
setError(null);
|
|
87
|
+
const rows = mappedRows();
|
|
88
|
+
const out = [];
|
|
89
|
+
let offset = 0;
|
|
90
|
+
let failed = null;
|
|
91
|
+
setProgress({ done: 0, total: rows.length });
|
|
92
|
+
try {
|
|
93
|
+
for (const batch of batches(rows)) {
|
|
94
|
+
const res = await api(`/${resource.path}/import`, { method: "POST", body: JSON.stringify({ rows: batch, dryRun, dateOrder, ...(matchBy ? { matchBy } : {}) }) });
|
|
95
|
+
out.push(...res.rows.map((r) => ({ ...r, index: r.index + offset })));
|
|
96
|
+
offset += batch.length;
|
|
97
|
+
setProgress({ done: offset, total: rows.length });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
failed = e.message;
|
|
102
|
+
setError(offset ? t("import.failedAfter", { message: e.message, count: offset }) : e.message);
|
|
103
|
+
}
|
|
104
|
+
setResults(out);
|
|
105
|
+
setStep(dryRun ? "preview" : "done");
|
|
106
|
+
if (!dryRun) {
|
|
107
|
+
const imported = out.filter((r) => r.status === "created" || r.status === "updated").length;
|
|
108
|
+
if (failed)
|
|
109
|
+
toast.error(t("toast.failed"), failed);
|
|
110
|
+
else
|
|
111
|
+
toast.success(t("toast.imported", { count: imported }));
|
|
112
|
+
queryClient.invalidateQueries({ queryKey: ["resource", resource.path] });
|
|
113
|
+
queryClient.invalidateQueries({ queryKey: ["forge"] });
|
|
114
|
+
}
|
|
115
|
+
setProgress(null);
|
|
116
|
+
};
|
|
117
|
+
const count = (...s) => results?.filter((r) => s.includes(r.status)).length ?? 0;
|
|
118
|
+
const failures = results?.filter((r) => r.status === "error") ?? [];
|
|
119
|
+
const missingRequired = fields.filter((f) => f.required && f.default === undefined && !f.relation?.owner && f.kind !== "boolean" && (mapping[f.name] ?? null) === null);
|
|
120
|
+
const usesDates = fields.some((f) => (f.kind === "date" || f.kind === "datetime") && mapping[f.name] != null);
|
|
121
|
+
const downloadErrors = () => {
|
|
122
|
+
if (!csv)
|
|
123
|
+
return;
|
|
124
|
+
const lines = [[...csv.headers, t("import.errorsColumn")].map(csvCell).join(",")];
|
|
125
|
+
for (const f of failures)
|
|
126
|
+
lines.push([...(csv.rows[f.index] ?? []), (f.errors ?? []).map((e) => (e.field ? `${e.field}: ${tv(e.message)}` : tv(e.message))).join("; ")].map(csvCell).join(","));
|
|
127
|
+
const url = URL.createObjectURL(new Blob([lines.join("\n")], { type: "text/csv" }));
|
|
128
|
+
const a = document.createElement("a");
|
|
129
|
+
a.href = url;
|
|
130
|
+
a.download = `${resource.path}-import-errors.csv`;
|
|
131
|
+
a.click();
|
|
132
|
+
URL.revokeObjectURL(url);
|
|
133
|
+
};
|
|
134
|
+
const errorList = (_jsxs("ul", { className: "mt-3 max-h-56 space-y-1 overflow-y-auto text-xs", children: [failures.slice(0, 100).map((f) => (_jsxs("li", { children: [_jsx("span", { className: "font-medium tabular-nums", children: t("import.line", { line: f.index + 2 }) }), " ", (f.errors ?? []).map((e) => `${e.field ? `${fields.find((x) => x.name === e.field)?.label ?? e.field}: ` : ""}${tv(e.message)}`).join(" · ")] }, f.index))), failures.length > 100 && _jsx("li", { className: "text-ink-subtle", children: t("import.more", { count: failures.length - 100 }) })] }));
|
|
135
|
+
const footer = step === "map" ? (_jsxs(_Fragment, { children: [_jsx(Button, { onClick: reset, children: t("common.back") }), _jsx(Button, { variant: "primary", loading: !!progress, disabled: missingRequired.length > 0, onClick: () => send(true), children: t("import.check", { count: csv?.rows.length ?? 0 }) })] })) : step === "preview" ? (_jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => setStep("map"), children: t("common.back") }), _jsx(Button, { variant: "primary", loading: !!progress, disabled: count("create", "update") === 0, onClick: () => send(false), children: failures.length ? t("import.importRowsSkip", { count: count("create", "update"), skip: failures.length }) : t("import.importRows", { count: count("create", "update") }) })] })) : step === "done" ? (_jsx(Button, { variant: "primary", onClick: close, children: t("common.done") })) : undefined;
|
|
136
|
+
return (_jsxs(Dialog, { open: open, onClose: close, title: t("import.title", { items: resource.pluralLabel.toLowerCase() }), size: "lg", footer: footer, children: [error && (_jsx("div", { className: "mb-3", children: _jsx(Alert, { children: error }) })), progress && (_jsxs("div", { className: "mb-3", role: "progressbar", "aria-valuemin": 0, "aria-valuemax": progress.total, "aria-valuenow": progress.done, children: [_jsx("div", { className: "h-1.5 overflow-hidden rounded-full bg-surface-muted", children: _jsx("div", { className: "h-full bg-primary transition-all", style: { width: `${(progress.done / Math.max(1, progress.total)) * 100}%` } }) }), _jsx("p", { className: "mt-1 text-xs text-ink-muted tabular-nums", children: t("import.progress", { done: progress.done, total: progress.total }) })] })), step === "file" && (_jsxs("label", { className: "flex cursor-pointer flex-col items-center justify-center gap-2 rounded-[var(--forge-radius)] border border-dashed border-line px-6 py-12 text-center hover:bg-hover", onDragOver: (e) => e.preventDefault(), onDrop: (e) => {
|
|
137
|
+
e.preventDefault();
|
|
138
|
+
const file = e.dataTransfer.files[0];
|
|
139
|
+
if (file)
|
|
140
|
+
void readFile(file);
|
|
141
|
+
}, children: [_jsx(FileUp, { className: "size-6 text-ink-subtle" }), _jsx("span", { className: "font-medium", children: t("import.chooseFile") }), _jsx("span", { className: "text-xs text-ink-muted", children: t("import.fileHint", { size: MAX_FILE_BYTES / 1024 / 1024 }) }), _jsx("input", { type: "file", accept: ".csv,text/csv,text/tab-separated-values,.tsv,.txt", className: "sr-only", onChange: (e) => e.target.files?.[0] && void readFile(e.target.files[0]) })] })), step === "map" && csv && (_jsxs("div", { className: "space-y-4", children: [_jsxs("p", { className: "text-ink-muted", children: [_jsx("span", { className: "font-medium text-ink", children: fileName }), " \u2014 ", t(csv.truncated ? "import.rowsFoundTruncated" : "import.rowsFound", { count: csv.rows.length })] }), csv.errors.length > 0 && _jsx(Alert, { tone: "info", children: t("import.parseErrors", { count: csv.errors.length, line: csv.errors[0].row, message: csv.errors[0].message }) }), _jsxs("table", { className: "w-full text-sm", children: [_jsx("thead", { children: _jsxs("tr", { className: "text-left text-xs text-ink-muted", children: [_jsx("th", { className: "py-1 pr-3 font-medium", children: t("import.field") }), _jsx("th", { className: "py-1 pr-3 font-medium", children: t("import.column") }), _jsx("th", { className: "py-1 font-medium", children: t("import.firstValue") })] }) }), _jsx("tbody", { children: [...(matchBy === "id" ? [{ name: "id", label: "ID", required: true }] : []), ...fields].map((f) => {
|
|
142
|
+
const col = mapping[f.name] ?? null;
|
|
143
|
+
return (_jsxs("tr", { className: "border-t border-line", children: [_jsxs("td", { className: "py-1.5 pr-3", children: [f.label, f.required && _jsx("span", { className: "text-danger", children: " *" })] }), _jsx("td", { className: "py-1.5 pr-3", children: _jsxs(Select, { "aria-label": t("import.columnFor", { field: f.label }), value: col === null ? "" : String(col), onChange: (e) => setMapping({ ...mapping, [f.name]: e.target.value === "" ? null : Number(e.target.value) }), className: "h-8 py-0 text-xs", children: [_jsx("option", { value: "", children: t("import.dontImport") }), csv.headers.map((h, i) => (_jsx("option", { value: i, children: h }, i)))] }) }), _jsx("td", { className: "max-w-48 truncate py-1.5 text-xs text-ink-muted", children: col === null ? "" : csv.rows[0]?.[col] })] }, f.name));
|
|
144
|
+
}) })] }), _jsxs("div", { className: "grid gap-3 sm:grid-cols-2", children: [_jsxs("label", { className: "text-xs text-ink-muted", children: [t("import.existing"), _jsxs(Select, { value: matchBy, onChange: (e) => setMatchBy(e.target.value), className: "mt-1 h-8 py-0 text-xs", children: [_jsx("option", { value: "", children: t("import.alwaysCreate") }), _jsx("option", { value: "id", children: t("import.updateById") }), uniques.map((f) => (_jsx("option", { value: f.name, children: t("import.updateWhen", { field: f.label.toLowerCase() }) }, f.name)))] })] }), usesDates && (_jsxs("label", { className: "text-xs text-ink-muted", children: [t("import.dateOrder"), _jsxs(Select, { value: dateOrder, onChange: (e) => setDateOrder(e.target.value), className: "mt-1 h-8 py-0 text-xs", children: [_jsx("option", { value: "ymd", children: t("import.dateYmd") }), _jsx("option", { value: "dmy", children: t("import.dateDmy") }), _jsx("option", { value: "mdy", children: t("import.dateMdy") })] })] }))] }), missingRequired.length > 0 && _jsx(Alert, { children: t("import.missingColumns", { fields: missingRequired.map((f) => f.label).join(", ") }) }), _jsx("p", { className: "text-xs text-ink-subtle", children: t("import.relationsHint") })] })), step === "preview" && results && (_jsxs("div", { children: [_jsx("div", { className: "grid grid-cols-3 gap-2 text-center", children: [
|
|
145
|
+
["import.new", count("create")],
|
|
146
|
+
["import.updates", count("update")],
|
|
147
|
+
["import.problems", failures.length],
|
|
148
|
+
].map(([key, n]) => (_jsxs("div", { className: "rounded-[var(--forge-radius-control)] bg-surface-muted px-3 py-2", children: [_jsx("p", { className: cn("text-xl font-semibold tabular-nums", key === "import.problems" && n > 0 && "text-danger"), children: n.toLocaleString(locale) }), _jsx("p", { className: "text-xs text-ink-muted", children: t(key) })] }, key))) }), failures.length > 0 && (_jsxs(_Fragment, { children: [errorList, _jsx(Button, { size: "sm", variant: "ghost", className: "mt-2", onClick: downloadErrors, children: t("import.downloadProblems") })] })), count("skipped") > 0 && _jsx("p", { className: "mt-2 text-xs text-ink-subtle", children: t("import.skipped", { count: count("skipped") }) })] })), step === "done" && results && (_jsxs("div", { children: [_jsx(Alert, { tone: failures.length ? "info" : "success", children: failures.length
|
|
149
|
+
? t("import.doneWithFailures", { created: count("created"), updated: count("updated"), items: resource.pluralLabel.toLowerCase(), count: failures.length })
|
|
150
|
+
: t("import.doneSummary", { created: count("created"), updated: count("updated"), items: resource.pluralLabel.toLowerCase() }) }), failures.length > 0 && (_jsxs(_Fragment, { children: [errorList, _jsx(Button, { size: "sm", variant: "ghost", className: "mt-2", onClick: downloadErrors, children: t("import.downloadProblems") })] }))] }))] }));
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=import-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-dialog.js","sourceRoot":"","sources":["../src/import-dialog.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export * from "./ui.js";
|
|
2
|
+
export * from "./context.js";
|
|
3
|
+
export * from "./fields.js";
|
|
4
|
+
export * from "./resource-list.js";
|
|
5
|
+
export * from "./resource-form.js";
|
|
6
|
+
export * from "./resource-detail.js";
|
|
7
|
+
export * from "./shell.js";
|
|
8
|
+
export * from "./auth-pages.js";
|
|
9
|
+
export * from "./account.js";
|
|
10
|
+
export * from "./admin.js";
|
|
11
|
+
export * from "./theme.js";
|
|
12
|
+
export * from "./theme-switcher.js";
|
|
13
|
+
export * from "./notifications.js";
|
|
14
|
+
export * from "./charts.js";
|
|
15
|
+
export * from "./dashboard.js";
|
|
16
|
+
export * from "./views.js";
|
|
17
|
+
export * from "./map.js";
|
|
18
|
+
export * from "./saved-views.js";
|
|
19
|
+
export * from "./import-dialog.js";
|
|
20
|
+
export * from "./command-palette.js";
|
|
21
|
+
export * from "./inline-edit.js";
|
|
22
|
+
export * from "./record-mutation.js";
|
|
23
|
+
export * from "./i18n/locale.js";
|
|
24
|
+
export * from "./i18n/catalog.js";
|
|
25
|
+
export * from "./i18n/validation.js";
|
|
26
|
+
export * from "./locale-switcher.js";
|
|
27
|
+
export * from "./toast.js";
|
|
28
|
+
export * from "./skeleton.js";
|
|
29
|
+
export * from "./illustrations.js";
|
|
30
|
+
export * from "./brand.js";
|
|
31
|
+
export * from "./theme-head.js";
|
|
32
|
+
export * from "./theme-catalog.js";
|
|
33
|
+
export * from "./theme-preview.js";
|
|
34
|
+
export * from "./schema-editor.js";
|
|
35
|
+
export * from "./admin-access.js";
|
|
36
|
+
export * from "./activity.js";
|
|
37
|
+
export * from "./brand-art.js";
|
|
38
|
+
export * from "./landing.js";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export * from "./ui.js";
|
|
2
|
+
export * from "./context.js";
|
|
3
|
+
export * from "./fields.js";
|
|
4
|
+
export * from "./resource-list.js";
|
|
5
|
+
export * from "./resource-form.js";
|
|
6
|
+
export * from "./resource-detail.js";
|
|
7
|
+
export * from "./shell.js";
|
|
8
|
+
export * from "./auth-pages.js";
|
|
9
|
+
export * from "./account.js";
|
|
10
|
+
export * from "./admin.js";
|
|
11
|
+
export * from "./theme.js";
|
|
12
|
+
export * from "./theme-switcher.js";
|
|
13
|
+
export * from "./notifications.js";
|
|
14
|
+
export * from "./charts.js";
|
|
15
|
+
export * from "./dashboard.js";
|
|
16
|
+
export * from "./views.js";
|
|
17
|
+
export * from "./map.js";
|
|
18
|
+
export * from "./saved-views.js";
|
|
19
|
+
export * from "./import-dialog.js";
|
|
20
|
+
export * from "./command-palette.js";
|
|
21
|
+
export * from "./inline-edit.js";
|
|
22
|
+
export * from "./record-mutation.js";
|
|
23
|
+
export * from "./i18n/locale.js";
|
|
24
|
+
export * from "./i18n/catalog.js";
|
|
25
|
+
export * from "./i18n/validation.js";
|
|
26
|
+
export * from "./locale-switcher.js";
|
|
27
|
+
export * from "./toast.js";
|
|
28
|
+
export * from "./skeleton.js";
|
|
29
|
+
export * from "./illustrations.js";
|
|
30
|
+
export * from "./brand.js";
|
|
31
|
+
export * from "./theme-head.js";
|
|
32
|
+
export * from "./theme-catalog.js";
|
|
33
|
+
export * from "./theme-preview.js";
|
|
34
|
+
export * from "./schema-editor.js";
|
|
35
|
+
export * from "./admin-access.js";
|
|
36
|
+
export * from "./activity.js";
|
|
37
|
+
export * from "./brand-art.js";
|
|
38
|
+
export * from "./landing.js";
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ColumnMeta, EntityIR, FieldIR, FormFieldMeta, ResourceMeta } from "@tekki-forge/compiler";
|
|
2
|
+
import type { Principal } from "@tekki-forge/runtime-permissions";
|
|
3
|
+
type Row = Record<string, any>;
|
|
4
|
+
/** The form field behind a column when the column can be edited in place (before record-level permission checks). */
|
|
5
|
+
export declare function inlineField(entity: EntityIR, resource: ResourceMeta, column: ColumnMeta): {
|
|
6
|
+
field: FieldIR;
|
|
7
|
+
form: FormFieldMeta;
|
|
8
|
+
} | null;
|
|
9
|
+
export declare function EditableCell({ entity, resource, row, column, field, form, principal, }: {
|
|
10
|
+
entity: EntityIR;
|
|
11
|
+
resource: ResourceMeta;
|
|
12
|
+
row: Row;
|
|
13
|
+
column: ColumnMeta;
|
|
14
|
+
field: FieldIR;
|
|
15
|
+
form: FormFieldMeta;
|
|
16
|
+
principal: Principal | null;
|
|
17
|
+
}): import("react").JSX.Element;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { canWriteField } from "@tekki-forge/runtime-permissions";
|
|
4
|
+
import { validateInput } from "@tekki-forge/runtime-schema";
|
|
5
|
+
import { LoaderCircle } from "lucide-react";
|
|
6
|
+
import { useEffect, useRef, useState } from "react";
|
|
7
|
+
import { ApiError, useForge } from "./context.js";
|
|
8
|
+
import { FieldValue, RelationSelect, toFormValue, toPayloadValue } from "./fields.js";
|
|
9
|
+
import { useRecordChange } from "./record-mutation.js";
|
|
10
|
+
import { Input, Select, cn } from "./ui.js";
|
|
11
|
+
/** Form components that edit comfortably inside a table cell. */
|
|
12
|
+
const INLINE = new Set(["text", "email", "url", "tel", "number", "money", "percentage", "select", "switch", "date", "datetime", "relation-select", "color"]);
|
|
13
|
+
/** The form field behind a column when the column can be edited in place (before record-level permission checks). */
|
|
14
|
+
export function inlineField(entity, resource, column) {
|
|
15
|
+
const field = entity.fields.find((f) => f.name === column.key);
|
|
16
|
+
const form = resource.form.fields.find((f) => f.name === column.key);
|
|
17
|
+
if (!field || !form || !INLINE.has(form.component) || field.name === entity.workflow?.field)
|
|
18
|
+
return null;
|
|
19
|
+
return { field, form };
|
|
20
|
+
}
|
|
21
|
+
export function EditableCell({ entity, resource, row, column, field, form, principal, }) {
|
|
22
|
+
const { t, tv } = useForge();
|
|
23
|
+
const change = useRecordChange(resource);
|
|
24
|
+
const [editing, setEditing] = useState(false);
|
|
25
|
+
const [draft, setDraft] = useState(null);
|
|
26
|
+
const [error, setError] = useState(null);
|
|
27
|
+
const cellRef = useRef(null);
|
|
28
|
+
const current = field.relation ? row[field.relation.foreignKey] : row[field.name];
|
|
29
|
+
const allowed = !row.deletedAt && canWriteField(entity, field.name, principal, row);
|
|
30
|
+
const display = _jsx(FieldValue, { field: field, value: row[column.key], cell: column.cell });
|
|
31
|
+
const start = () => {
|
|
32
|
+
setError(null);
|
|
33
|
+
setDraft(toFormValue(form, current));
|
|
34
|
+
setEditing(true);
|
|
35
|
+
};
|
|
36
|
+
const save = (value = draft) => {
|
|
37
|
+
const payload = toPayloadValue(form, value);
|
|
38
|
+
const before = toPayloadValue(form, toFormValue(form, current));
|
|
39
|
+
if (JSON.stringify(payload) === JSON.stringify(before)) {
|
|
40
|
+
setEditing(false);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const body = { [form.apiName]: payload };
|
|
44
|
+
const result = validateInput(entity, "update", body);
|
|
45
|
+
if (!result.success) {
|
|
46
|
+
setError(result.issues[0]?.message ? tv(result.issues[0].message) : t("form.invalidValue"));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (field.required && payload === null) {
|
|
50
|
+
setError(t("validation.required"));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
setEditing(false);
|
|
54
|
+
// Relation labels come back from the server; scalars update immediately.
|
|
55
|
+
const optimistic = field.relation ? undefined : { [field.name]: field.kind === "date" && typeof payload === "string" ? payload.slice(0, 10) : payload };
|
|
56
|
+
change.mutate({ id: row.id, patch: body, ...(optimistic ? { optimistic } : {}) }, {
|
|
57
|
+
onError: (e) => {
|
|
58
|
+
const issue = e instanceof ApiError ? e.body?.issues?.[0]?.message : undefined;
|
|
59
|
+
setError(issue ? tv(issue) : e.message);
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
const cancel = () => {
|
|
64
|
+
setEditing(false);
|
|
65
|
+
setError(null);
|
|
66
|
+
};
|
|
67
|
+
// Clicking elsewhere saves text-like editors (like a spreadsheet).
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
if (!editing)
|
|
70
|
+
return;
|
|
71
|
+
const onDown = (e) => {
|
|
72
|
+
if (cellRef.current && !cellRef.current.contains(e.target))
|
|
73
|
+
save();
|
|
74
|
+
};
|
|
75
|
+
document.addEventListener("mousedown", onDown);
|
|
76
|
+
return () => document.removeEventListener("mousedown", onDown);
|
|
77
|
+
});
|
|
78
|
+
if (!allowed)
|
|
79
|
+
return display;
|
|
80
|
+
const keys = (e) => {
|
|
81
|
+
if (e.key === "Enter") {
|
|
82
|
+
e.preventDefault();
|
|
83
|
+
save();
|
|
84
|
+
}
|
|
85
|
+
if (e.key === "Escape") {
|
|
86
|
+
e.preventDefault();
|
|
87
|
+
cancel();
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
if (form.component === "switch") {
|
|
91
|
+
return (_jsx("button", { type: "button", role: "switch", "aria-checked": !!current, "aria-label": `${form.label}: ${current ? t("common.yes") : t("common.no")}`, disabled: change.isPending, onClick: () => save(!current), className: cn("forge-cell-editable -mx-1 px-1", error && "forge-cell-error"), title: error ?? undefined, children: display }));
|
|
92
|
+
}
|
|
93
|
+
if (!editing) {
|
|
94
|
+
return (_jsxs("div", { role: "button", tabIndex: 0, "aria-label": t("list.editField", { field: form.label }), onClick: start, onKeyDown: (e) => (e.key === "Enter" || e.key === "F2") && (e.preventDefault(), start()), className: cn("forge-cell-editable -mx-1.5 -my-0.5 flex min-h-7 items-center gap-1 px-1.5 py-0.5", error && "forge-cell-error"), title: error ?? undefined, children: [change.isPending && _jsx(LoaderCircle, { className: "size-3 shrink-0 animate-spin text-ink-subtle", "aria-hidden": true }), display, error && _jsx("span", { className: "sr-only", children: error })] }));
|
|
95
|
+
}
|
|
96
|
+
const str = draft === null || draft === undefined ? "" : String(draft);
|
|
97
|
+
let editor;
|
|
98
|
+
switch (form.component) {
|
|
99
|
+
case "select":
|
|
100
|
+
editor = (_jsxs(Select, { autoFocus: true, "aria-label": form.label, value: str, onChange: (e) => save(e.target.value), onKeyDown: keys, onBlur: () => cancel(), className: "h-8 py-0 text-sm", children: [(!form.required || !str) && _jsx("option", { value: "", children: "\u2014" }), form.options?.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value)))] }));
|
|
101
|
+
break;
|
|
102
|
+
case "relation-select":
|
|
103
|
+
editor = (_jsx("div", { className: "min-w-48", onKeyDown: (e) => e.key === "Escape" && cancel(), children: _jsx(RelationSelect, { lookupPath: form.relation.lookupPath, value: str || null, onChange: (v) => save(v ?? ""), compact: true }) }));
|
|
104
|
+
break;
|
|
105
|
+
default: {
|
|
106
|
+
const type = { number: "number", money: "number", percentage: "number", date: "date", datetime: "datetime-local", email: "email", url: "url", tel: "tel" }[form.component] ?? "text";
|
|
107
|
+
editor = (_jsx(Input, { autoFocus: true, "aria-label": form.label, "aria-invalid": error ? true : undefined, type: type, step: type === "number" ? "any" : undefined, value: form.component === "date" ? str.slice(0, 10) : str, onChange: (e) => {
|
|
108
|
+
setError(null);
|
|
109
|
+
setDraft(e.target.value);
|
|
110
|
+
}, onKeyDown: keys, className: "h-8 min-w-32 py-0 text-sm" }));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return (_jsxs("div", { ref: cellRef, className: "-my-1", children: [editor, error && (_jsx("p", { role: "alert", className: "mt-0.5 text-xs text-danger", children: error }))] }));
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=inline-edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inline-edit.js","sourceRoot":"","sources":["../src/inline-edit.tsx"],"names":[],"mappings":"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"}
|