@lobb-js/studio 0.7.2 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/package.json +2 -1
  2. package/src/App.svelte +5 -0
  3. package/src/app.css +124 -0
  4. package/src/lib/components/LlmButton.svelte +137 -0
  5. package/src/lib/components/Studio.svelte +129 -0
  6. package/src/lib/components/alertView.svelte +20 -0
  7. package/src/lib/components/breadCrumbs.svelte +60 -0
  8. package/src/lib/components/codeEditor.svelte +152 -0
  9. package/src/lib/components/combobox.svelte +92 -0
  10. package/src/lib/components/confirmationDialog/confirmationDialog.svelte +33 -0
  11. package/src/lib/components/confirmationDialog/store.svelte.ts +28 -0
  12. package/src/lib/components/createManyButton.svelte +109 -0
  13. package/src/lib/components/dataTable/childRecords.svelte +142 -0
  14. package/src/lib/components/dataTable/dataTable.svelte +225 -0
  15. package/src/lib/components/dataTable/fieldCell.svelte +77 -0
  16. package/src/lib/components/dataTable/filter.svelte +284 -0
  17. package/src/lib/components/dataTable/filterButton.svelte +39 -0
  18. package/src/lib/components/dataTable/footer.svelte +84 -0
  19. package/src/lib/components/dataTable/header.svelte +155 -0
  20. package/src/lib/components/dataTable/sort.svelte +173 -0
  21. package/src/lib/components/dataTable/sortButton.svelte +36 -0
  22. package/src/lib/components/dataTable/table.svelte +337 -0
  23. package/src/lib/components/dataTable/utils.ts +127 -0
  24. package/src/lib/components/detailView/create/children.svelte +70 -0
  25. package/src/lib/components/detailView/create/createDetailView.svelte +228 -0
  26. package/src/lib/components/detailView/create/createDetailViewButton.svelte +37 -0
  27. package/src/lib/components/detailView/create/createManyView.svelte +252 -0
  28. package/src/lib/components/detailView/create/subRecords.svelte +50 -0
  29. package/src/lib/components/detailView/detailViewForm.svelte +104 -0
  30. package/src/lib/components/detailView/fieldCustomInput.svelte +26 -0
  31. package/src/lib/components/detailView/fieldInput.svelte +258 -0
  32. package/src/lib/components/detailView/fieldInputReplacement.svelte +199 -0
  33. package/src/lib/components/detailView/store.svelte.ts +59 -0
  34. package/src/lib/components/detailView/update/children.svelte +96 -0
  35. package/src/lib/components/detailView/update/updateDetailView.svelte +176 -0
  36. package/src/lib/components/detailView/update/updateDetailViewButton.svelte +56 -0
  37. package/src/lib/components/detailView/utils.ts +176 -0
  38. package/src/lib/components/diffViewer.svelte +105 -0
  39. package/src/lib/components/drawer.svelte +28 -0
  40. package/src/lib/components/extensionsComponents.svelte +33 -0
  41. package/src/lib/components/foreingKeyInput.svelte +80 -0
  42. package/src/lib/components/header.svelte +45 -0
  43. package/src/lib/components/loadingTypesForMonacoEditor.ts +36 -0
  44. package/src/lib/components/miniSidebar.svelte +226 -0
  45. package/src/lib/components/rangeCalendarButton.svelte +257 -0
  46. package/src/lib/components/richTextEditor.svelte +284 -0
  47. package/src/lib/components/routes/collections/collection.svelte +57 -0
  48. package/src/lib/components/routes/collections/collections.svelte +45 -0
  49. package/src/lib/components/routes/data_model/dataModel.svelte +40 -0
  50. package/src/lib/components/routes/data_model/flow.css +22 -0
  51. package/src/lib/components/routes/data_model/flow.svelte +84 -0
  52. package/src/lib/components/routes/data_model/syncManager.svelte +94 -0
  53. package/src/lib/components/routes/data_model/utils.ts +35 -0
  54. package/src/lib/components/routes/extensions/extension.svelte +19 -0
  55. package/src/lib/components/routes/home.svelte +40 -0
  56. package/src/lib/components/routes/workflows/workflows.svelte +136 -0
  57. package/src/lib/components/selectRecord.svelte +130 -0
  58. package/src/lib/components/setServerPage.svelte +50 -0
  59. package/src/lib/components/sidebar/index.ts +4 -0
  60. package/src/lib/components/sidebar/sidebar.svelte +149 -0
  61. package/src/lib/components/sidebar/sidebarElements.svelte +144 -0
  62. package/src/lib/components/sidebar/sidebarTrigger.svelte +33 -0
  63. package/src/lib/components/singletone.svelte +71 -0
  64. package/src/lib/components/ui/accordion/accordion-content.svelte +22 -0
  65. package/src/lib/components/ui/accordion/accordion-item.svelte +12 -0
  66. package/src/lib/components/ui/accordion/accordion-trigger.svelte +31 -0
  67. package/src/lib/components/ui/accordion/index.ts +17 -0
  68. package/src/lib/components/ui/alert/alert-description.svelte +16 -0
  69. package/src/lib/components/ui/alert/alert-title.svelte +24 -0
  70. package/src/lib/components/ui/alert/alert.svelte +39 -0
  71. package/src/lib/components/ui/alert/index.ts +14 -0
  72. package/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte +13 -0
  73. package/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte +17 -0
  74. package/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte +26 -0
  75. package/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte +16 -0
  76. package/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte +20 -0
  77. package/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte +20 -0
  78. package/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte +19 -0
  79. package/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte +18 -0
  80. package/src/lib/components/ui/alert-dialog/index.ts +40 -0
  81. package/src/lib/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +23 -0
  82. package/src/lib/components/ui/breadcrumb/breadcrumb-item.svelte +16 -0
  83. package/src/lib/components/ui/breadcrumb/breadcrumb-link.svelte +31 -0
  84. package/src/lib/components/ui/breadcrumb/breadcrumb-list.svelte +23 -0
  85. package/src/lib/components/ui/breadcrumb/breadcrumb-page.svelte +23 -0
  86. package/src/lib/components/ui/breadcrumb/breadcrumb-separator.svelte +27 -0
  87. package/src/lib/components/ui/breadcrumb/breadcrumb.svelte +15 -0
  88. package/src/lib/components/ui/breadcrumb/index.ts +25 -0
  89. package/src/lib/components/ui/button/button.svelte +110 -0
  90. package/src/lib/components/ui/button/index.ts +17 -0
  91. package/src/lib/components/ui/checkbox/checkbox.svelte +35 -0
  92. package/src/lib/components/ui/checkbox/index.ts +6 -0
  93. package/src/lib/components/ui/command/command-dialog.svelte +35 -0
  94. package/src/lib/components/ui/command/command-empty.svelte +12 -0
  95. package/src/lib/components/ui/command/command-group.svelte +31 -0
  96. package/src/lib/components/ui/command/command-input.svelte +25 -0
  97. package/src/lib/components/ui/command/command-item.svelte +19 -0
  98. package/src/lib/components/ui/command/command-link-item.svelte +19 -0
  99. package/src/lib/components/ui/command/command-list.svelte +16 -0
  100. package/src/lib/components/ui/command/command-separator.svelte +12 -0
  101. package/src/lib/components/ui/command/command-shortcut.svelte +20 -0
  102. package/src/lib/components/ui/command/command.svelte +21 -0
  103. package/src/lib/components/ui/command/index.ts +40 -0
  104. package/src/lib/components/ui/dialog/dialog-content.svelte +38 -0
  105. package/src/lib/components/ui/dialog/dialog-description.svelte +16 -0
  106. package/src/lib/components/ui/dialog/dialog-footer.svelte +20 -0
  107. package/src/lib/components/ui/dialog/dialog-header.svelte +20 -0
  108. package/src/lib/components/ui/dialog/dialog-overlay.svelte +19 -0
  109. package/src/lib/components/ui/dialog/dialog-title.svelte +16 -0
  110. package/src/lib/components/ui/dialog/index.ts +37 -0
  111. package/src/lib/components/ui/input/index.ts +7 -0
  112. package/src/lib/components/ui/input/input.svelte +46 -0
  113. package/src/lib/components/ui/label/index.ts +7 -0
  114. package/src/lib/components/ui/label/label.svelte +19 -0
  115. package/src/lib/components/ui/popover/index.ts +17 -0
  116. package/src/lib/components/ui/popover/popover-content.svelte +28 -0
  117. package/src/lib/components/ui/range-calendar/index.ts +30 -0
  118. package/src/lib/components/ui/range-calendar/range-calendar-cell.svelte +19 -0
  119. package/src/lib/components/ui/range-calendar/range-calendar-day.svelte +35 -0
  120. package/src/lib/components/ui/range-calendar/range-calendar-grid-body.svelte +12 -0
  121. package/src/lib/components/ui/range-calendar/range-calendar-grid-head.svelte +12 -0
  122. package/src/lib/components/ui/range-calendar/range-calendar-grid-row.svelte +12 -0
  123. package/src/lib/components/ui/range-calendar/range-calendar-grid.svelte +16 -0
  124. package/src/lib/components/ui/range-calendar/range-calendar-head-cell.svelte +16 -0
  125. package/src/lib/components/ui/range-calendar/range-calendar-header.svelte +16 -0
  126. package/src/lib/components/ui/range-calendar/range-calendar-heading.svelte +16 -0
  127. package/src/lib/components/ui/range-calendar/range-calendar-months.svelte +20 -0
  128. package/src/lib/components/ui/range-calendar/range-calendar-next-button.svelte +27 -0
  129. package/src/lib/components/ui/range-calendar/range-calendar-prev-button.svelte +27 -0
  130. package/src/lib/components/ui/range-calendar/range-calendar.svelte +57 -0
  131. package/src/lib/components/ui/select/index.ts +34 -0
  132. package/src/lib/components/ui/select/select-content.svelte +38 -0
  133. package/src/lib/components/ui/select/select-group-heading.svelte +16 -0
  134. package/src/lib/components/ui/select/select-item.svelte +37 -0
  135. package/src/lib/components/ui/select/select-scroll-down-button.svelte +19 -0
  136. package/src/lib/components/ui/select/select-scroll-up-button.svelte +19 -0
  137. package/src/lib/components/ui/select/select-separator.svelte +13 -0
  138. package/src/lib/components/ui/select/select-trigger.svelte +24 -0
  139. package/src/lib/components/ui/separator/index.ts +7 -0
  140. package/src/lib/components/ui/separator/separator.svelte +22 -0
  141. package/src/lib/components/ui/skeleton/index.ts +7 -0
  142. package/src/lib/components/ui/skeleton/skeleton.svelte +22 -0
  143. package/src/lib/components/ui/sonner/index.ts +1 -0
  144. package/src/lib/components/ui/sonner/sonner.svelte +20 -0
  145. package/src/lib/components/ui/switch/index.ts +7 -0
  146. package/src/lib/components/ui/switch/switch.svelte +27 -0
  147. package/src/lib/components/ui/textarea/index.ts +7 -0
  148. package/src/lib/components/ui/textarea/textarea.svelte +22 -0
  149. package/src/lib/components/ui/tooltip/index.ts +18 -0
  150. package/src/lib/components/ui/tooltip/tooltip-content.svelte +21 -0
  151. package/src/lib/components/workflowEditor.svelte +188 -0
  152. package/src/lib/context.ts +22 -0
  153. package/src/lib/eventSystem.ts +40 -0
  154. package/src/lib/extensions/extension.types.ts +92 -0
  155. package/src/lib/extensions/extensionUtils.ts +156 -0
  156. package/src/lib/index.ts +24 -0
  157. package/src/lib/store.svelte.ts +13 -0
  158. package/src/lib/store.types.ts +28 -0
  159. package/src/lib/utils.ts +68 -0
  160. package/src/main.ts +18 -0
  161. package/src/stories/detailView/detailViewForm.stories.svelte +79 -0
  162. package/src/vite-env.d.ts +2 -0
@@ -0,0 +1,13 @@
1
+ import { LobbClient } from '@lobb-js/sdk';
2
+ import { toast } from 'svelte-sonner';
3
+
4
+ export function createLobb(url: string) {
5
+ const client = new LobbClient(url);
6
+ client.onResponse(async (response) => {
7
+ if (response.status >= 400) {
8
+ const body = await response.json();
9
+ toast.error(body.message);
10
+ }
11
+ });
12
+ return client;
13
+ }
@@ -0,0 +1,28 @@
1
+ import type { Extension } from "../extensions/extension.types";
2
+
3
+ interface Collection {
4
+ category: string;
5
+ owner: string;
6
+ fields: Record<string, any>;
7
+ singleton: boolean;
8
+ }
9
+ type Collections = Record<string, Collection>;
10
+
11
+ interface Meta {
12
+ version: string;
13
+ relations: Array<any>;
14
+ collections: Collections;
15
+ extensions: Record<string, any>;
16
+ filter: any;
17
+ events: any[];
18
+ event_context_type: string;
19
+ studio_workflows: any[];
20
+ }
21
+
22
+ export interface CTX {
23
+ studioVersion?: string;
24
+ lobbUrl: string | null;
25
+ extensions: Record<string, Extension>;
26
+ meta: Meta;
27
+ currentUrl: URL;
28
+ }
@@ -0,0 +1,68 @@
1
+ import { clsx, type ClassValue } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+
4
+ import { MediaQuery } from 'svelte/reactivity';
5
+ import type { CTX } from "./store.types";
6
+
7
+ export function cn(...inputs: ClassValue[]) {
8
+ return twMerge(clsx(inputs));
9
+ }
10
+
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ export type WithoutChild<T> = T extends { child?: any } ? Omit<T, "child"> : T;
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
+ export type WithoutChildren<T> = T extends { children?: any } ? Omit<T, "children"> : T;
15
+ export type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>;
16
+ export type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & { ref?: U | null };
17
+
18
+
19
+ export const mediaQueries = {
20
+ sm: new MediaQuery('min-width: 640px'),
21
+ md: new MediaQuery('min-width: 768px'),
22
+ lg: new MediaQuery('min-width: 1024px'),
23
+ xl: new MediaQuery('min-width: 1280px'),
24
+ '2xl': new MediaQuery('min-width: 1536px'),
25
+ }
26
+
27
+ export function getFieldRelation(ctx: CTX, collectionName: string, fieldName: string) {
28
+ const relations = ctx.meta.relations;
29
+ for (let index = 0; index < relations.length; index++) {
30
+ const relation = relations[index];
31
+ if (relation.from.collection === collectionName && relation.from.field === fieldName) {
32
+ return relation;
33
+ }
34
+ }
35
+ return null;
36
+ };
37
+
38
+ export function recordHasChildrean(ctx: CTX, collectionName: string) {
39
+ for (let index = 0; index < ctx.meta.relations.length; index++) {
40
+ const relation = ctx.meta.relations[index];
41
+ if (relation.to.collection === collectionName) {
42
+ return true;
43
+ }
44
+ }
45
+ return false;
46
+ };
47
+
48
+ export function calculateDrawerWidth() {
49
+ const backgroundDrawerButtons = document.querySelectorAll(".backgroundDrawerButton");
50
+ const drawersCount = Array.from(backgroundDrawerButtons).length;
51
+ const width = 672 - (30 * drawersCount);
52
+ return width;
53
+ };
54
+
55
+ export function getChangedProperties(oldObj: Record<string, any>, newObj: Record<string, any>) {
56
+ const changes: Record<string, any> = {};
57
+ for (const key of Object.keys(newObj)) {
58
+ if (oldObj[key] !== newObj[key]) {
59
+ changes[key] = newObj[key];
60
+ }
61
+ }
62
+ return changes;
63
+ }
64
+
65
+ export function parseFunction(functionString: string) {
66
+ const functionObj = new Function("return " + functionString)();
67
+ return functionObj;
68
+ };
package/src/main.ts ADDED
@@ -0,0 +1,18 @@
1
+ import "./app.css";
2
+
3
+ import { mount } from 'svelte'
4
+ import App from './App.svelte'
5
+
6
+ declare global {
7
+ interface Window {
8
+ APP_ENV: {
9
+ LOBB_URL: string
10
+ }
11
+ }
12
+ }
13
+
14
+ const app = mount(App, {
15
+ target: document.getElementById('app')!,
16
+ })
17
+
18
+ export default app
@@ -0,0 +1,79 @@
1
+ <script lang="ts" module>
2
+ import "../../app.css";
3
+
4
+ import DetailViewForm from '$lib/components/detailView/detailViewForm.svelte';
5
+ import { defineMeta } from '@storybook/addon-svelte-csf';
6
+ import { Calendar, Edit, Key } from "lucide-svelte";
7
+
8
+ const { Story } = defineMeta({
9
+ title: 'lobb/detailViewForm',
10
+ component: DetailViewForm,
11
+ args: {
12
+ value: {
13
+ name: "Malik",
14
+ age: 26,
15
+ bio: "This is a sample biography",
16
+ gender: "male",
17
+ birthDate: "1997-01-01",
18
+ appointmentTime: "14:30",
19
+ appointmentDateTime: "2025-10-31T15:00",
20
+ newsletter: true,
21
+ },
22
+ fields: [
23
+ {
24
+ key: "name",
25
+ label: "Name",
26
+ type: "input",
27
+ placeholder: "Enter your name",
28
+ icon: Key,
29
+ errorMessages: ["Name is required"],
30
+ },
31
+ {
32
+ key: "age",
33
+ label: "Age",
34
+ type: "input",
35
+ inputType: "number",
36
+ inputStep: 1,
37
+ icon: Edit,
38
+ },
39
+ {
40
+ key: "bio",
41
+ label: "Biography",
42
+ type: "textarea",
43
+ placeholder: "Tell us about yourself",
44
+ },
45
+ {
46
+ key: "gender",
47
+ label: "Gender",
48
+ type: "select",
49
+ options: ["male", "female", "other"],
50
+ placeholder: "Select gender",
51
+ },
52
+ {
53
+ key: "birthDate",
54
+ label: "Birth Date",
55
+ type: "date",
56
+ icon: Calendar,
57
+ },
58
+ {
59
+ key: "appointmentTime",
60
+ label: "Appointment Time",
61
+ type: "time",
62
+ },
63
+ {
64
+ key: "appointmentDateTime",
65
+ label: "Appointment Date & Time",
66
+ type: "datetime",
67
+ },
68
+ {
69
+ key: "newsletter",
70
+ label: "Subscribe to newsletter",
71
+ type: "switch",
72
+ },
73
+ ]
74
+ }
75
+ });
76
+ </script>
77
+
78
+ <!-- More on writing stories with args: https://storybook.js.org/docs/writing-stories/args -->
79
+ <Story name="Primary" />
@@ -0,0 +1,2 @@
1
+ /// <reference types="svelte" />
2
+ /// <reference types="vite/client" />