@mmlogic/components 0.3.6 → 0.3.8

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 (161) hide show
  1. package/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
  2. package/dist/cjs/index-BPj2cBXs.js +1570 -0
  3. package/dist/cjs/index.cjs.js +66 -0
  4. package/dist/cjs/loader.cjs.js +13 -0
  5. package/dist/cjs/mosterdcomponents.cjs.js +25 -0
  6. package/dist/cjs/mrd-boolean-field_20.cjs.entry.js +3961 -0
  7. package/dist/cjs/quill-DmFfnC1f.js +16272 -0
  8. package/dist/collection/collection-manifest.json +32 -0
  9. package/dist/collection/components/mrd-boolean-field/mrd-boolean-field.js +199 -0
  10. package/dist/collection/components/mrd-boolean-field/mrd-boolean-field.scss +77 -0
  11. package/dist/collection/components/mrd-currency-field/mrd-currency-field.js +248 -0
  12. package/dist/collection/components/mrd-currency-field/mrd-currency-field.scss +100 -0
  13. package/dist/collection/components/mrd-date-field/mrd-date-field.js +206 -0
  14. package/dist/collection/components/mrd-date-field/mrd-date-field.scss +66 -0
  15. package/dist/collection/components/mrd-datetime-field/mrd-datetime-field.js +240 -0
  16. package/dist/collection/components/mrd-datetime-field/mrd-datetime-field.scss +66 -0
  17. package/dist/collection/components/mrd-email-field/mrd-email-field.js +230 -0
  18. package/dist/collection/components/mrd-email-field/mrd-email-field.scss +69 -0
  19. package/dist/{mosterdcomponents/mrd-field.entry.js → collection/components/mrd-field/mrd-field.js} +179 -28
  20. package/dist/collection/components/mrd-field/mrd-field.scss +118 -0
  21. package/dist/collection/components/mrd-file-field/mrd-file-field.js +341 -0
  22. package/dist/collection/components/mrd-file-field/mrd-file-field.scss +153 -0
  23. package/dist/{mosterdcomponents/mrd-form.entry.js → collection/components/mrd-form/mrd-form.js} +308 -31
  24. package/dist/collection/components/mrd-form/mrd-form.scss +148 -0
  25. package/dist/collection/components/mrd-hyperlink-field/mrd-hyperlink-field.js +291 -0
  26. package/dist/collection/components/mrd-hyperlink-field/mrd-hyperlink-field.scss +91 -0
  27. package/dist/collection/components/mrd-image-field/mrd-image-field.js +356 -0
  28. package/dist/collection/components/mrd-image-field/mrd-image-field.scss +190 -0
  29. package/dist/{mosterdcomponents/mrd-layout-section.entry.js → collection/components/mrd-layout-section/mrd-layout-section.js} +420 -33
  30. package/dist/collection/components/mrd-layout-section/mrd-layout-section.scss +445 -0
  31. package/dist/collection/components/mrd-list-field/mrd-list-field.js +313 -0
  32. package/dist/collection/components/mrd-list-field/mrd-list-field.scss +109 -0
  33. package/dist/collection/components/mrd-longtext-field/mrd-longtext-field.js +227 -0
  34. package/dist/collection/components/mrd-longtext-field/mrd-longtext-field.scss +78 -0
  35. package/dist/collection/components/mrd-number-field/mrd-number-field.js +316 -0
  36. package/dist/collection/components/mrd-number-field/mrd-number-field.scss +77 -0
  37. package/dist/collection/components/mrd-relation-field/mrd-relation-field.js +707 -0
  38. package/dist/collection/components/mrd-relation-field/mrd-relation-field.scss +266 -0
  39. package/dist/collection/components/mrd-secret-field/mrd-secret-field.js +229 -0
  40. package/dist/collection/components/mrd-secret-field/mrd-secret-field.scss +73 -0
  41. package/dist/{mosterdcomponents/mrd-table.entry.js → collection/components/mrd-table/mrd-table.js} +394 -32
  42. package/dist/collection/components/mrd-table/mrd-table.scss +809 -0
  43. package/dist/collection/components/mrd-text-field/mrd-text-field.js +227 -0
  44. package/dist/collection/components/mrd-text-field/mrd-text-field.scss +69 -0
  45. package/dist/collection/components/mrd-textarea-field/mrd-textarea-field.js +267 -0
  46. package/dist/collection/components/mrd-textarea-field/mrd-textarea-field.scss +79 -0
  47. package/dist/collection/components/mrd-time-field/mrd-time-field.js +206 -0
  48. package/dist/collection/components/mrd-time-field/mrd-time-field.scss +66 -0
  49. package/dist/collection/dev/api.js +145 -0
  50. package/dist/collection/dev/app.js +890 -0
  51. package/dist/collection/dev/auth.js +156 -0
  52. package/dist/collection/dev/example-data.js +403 -0
  53. package/dist/collection/dev/sprites.svg +55 -0
  54. package/dist/collection/index.js +1 -0
  55. package/dist/collection/types/client-layout.js +64 -0
  56. package/dist/collection/types/index.js +1 -0
  57. package/dist/{mosterdcomponents/cell-renderer-CbRwLOo8.js → collection/utils/cell-renderer.js} +3 -9
  58. package/dist/{mosterdcomponents/format-BAfsQfy1.js → collection/utils/format.js} +7 -12
  59. package/dist/{mosterdcomponents/i18n-hoGGKbKU.js → collection/utils/i18n.js} +1 -6
  60. package/dist/{mosterdcomponents/validation-ixb43cqU.js → collection/utils/validation.js} +5 -12
  61. package/dist/components/client-layout.js +1 -0
  62. package/dist/components/format.js +1 -0
  63. package/dist/components/i18n.js +1 -0
  64. package/dist/components/index.js +1 -0
  65. package/dist/components/mrd-boolean-field.js +1 -0
  66. package/dist/components/mrd-boolean-field2.js +1 -0
  67. package/dist/components/mrd-currency-field.js +1 -0
  68. package/dist/components/mrd-currency-field2.js +1 -0
  69. package/dist/components/mrd-date-field.js +1 -0
  70. package/dist/components/mrd-date-field2.js +1 -0
  71. package/dist/components/mrd-datetime-field.js +1 -0
  72. package/dist/components/mrd-datetime-field2.js +1 -0
  73. package/dist/components/mrd-email-field.js +1 -0
  74. package/dist/components/mrd-email-field2.js +1 -0
  75. package/dist/components/mrd-field.js +1 -0
  76. package/dist/components/mrd-field2.js +1 -0
  77. package/dist/components/mrd-file-field.js +1 -0
  78. package/dist/components/mrd-file-field2.js +1 -0
  79. package/dist/components/mrd-form.js +1 -0
  80. package/dist/components/mrd-hyperlink-field.js +1 -0
  81. package/dist/components/mrd-hyperlink-field2.js +1 -0
  82. package/dist/components/mrd-image-field.js +1 -0
  83. package/dist/components/mrd-image-field2.js +1 -0
  84. package/dist/components/mrd-layout-section.js +1 -0
  85. package/dist/components/mrd-list-field.js +1 -0
  86. package/dist/components/mrd-list-field2.js +1 -0
  87. package/dist/components/mrd-longtext-field.js +1 -0
  88. package/dist/components/mrd-longtext-field2.js +1 -0
  89. package/dist/components/mrd-number-field.js +1 -0
  90. package/dist/components/mrd-number-field2.js +1 -0
  91. package/dist/components/mrd-relation-field.js +1 -0
  92. package/dist/components/mrd-relation-field2.js +1 -0
  93. package/dist/components/mrd-secret-field.js +1 -0
  94. package/dist/components/mrd-secret-field2.js +1 -0
  95. package/dist/components/mrd-table.js +1 -0
  96. package/dist/components/mrd-table2.js +1 -0
  97. package/dist/components/mrd-text-field.js +1 -0
  98. package/dist/components/mrd-text-field2.js +1 -0
  99. package/dist/components/mrd-textarea-field.js +1 -0
  100. package/dist/components/mrd-textarea-field2.js +1 -0
  101. package/dist/components/mrd-time-field.js +1 -0
  102. package/dist/components/mrd-time-field2.js +1 -0
  103. package/dist/components/quill.js +1 -0
  104. package/dist/components/validation.js +1 -0
  105. package/dist/esm/app-globals-DQuL1Twl.js +3 -0
  106. package/dist/esm/index-_tsCCkAi.js +1561 -0
  107. package/dist/{mosterdcomponents/client-layout-D88nn5zf.js → esm/index.js} +1 -4
  108. package/dist/esm/loader.js +11 -0
  109. package/dist/esm/mosterdcomponents.js +21 -0
  110. package/dist/esm/mrd-boolean-field_20.entry.js +3940 -0
  111. package/dist/{mosterdcomponents/quill-C9pgw_k-.js → esm/quill-CiuCgGz_.js} +1347 -16232
  112. package/dist/index.cjs.js +1 -0
  113. package/dist/index.js +1 -0
  114. package/dist/mosterdcomponents/index-6yQUNVww.js.map +1 -0
  115. package/dist/mosterdcomponents/index.esm.js +1 -5
  116. package/dist/mosterdcomponents/mosterdcomponents.css +1 -180
  117. package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -50
  118. package/dist/mosterdcomponents/p-7bfaee51.entry.js +1 -0
  119. package/dist/mosterdcomponents/p-CiuCgGz_.js +1 -0
  120. package/dist/mosterdcomponents/p-DQuL1Twl.js +1 -0
  121. package/dist/mosterdcomponents/p-_tsCCkAi.js +2 -0
  122. package/package.json +1 -1
  123. package/dist/mosterdcomponents/index-B_tPFIvS.js +0 -4585
  124. package/dist/mosterdcomponents/index-B_tPFIvS.js.map +0 -1
  125. package/dist/mosterdcomponents/index-I5SuYv7a.js +0 -4
  126. package/dist/mosterdcomponents/mrd-boolean-field.entry.js +0 -37
  127. package/dist/mosterdcomponents/mrd-boolean-field.entry.js.map +0 -1
  128. package/dist/mosterdcomponents/mrd-currency-field.entry.js +0 -67
  129. package/dist/mosterdcomponents/mrd-currency-field.entry.js.map +0 -1
  130. package/dist/mosterdcomponents/mrd-date-field.entry.js +0 -46
  131. package/dist/mosterdcomponents/mrd-date-field.entry.js.map +0 -1
  132. package/dist/mosterdcomponents/mrd-datetime-field.entry.js +0 -78
  133. package/dist/mosterdcomponents/mrd-datetime-field.entry.js.map +0 -1
  134. package/dist/mosterdcomponents/mrd-email-field.entry.js +0 -50
  135. package/dist/mosterdcomponents/mrd-email-field.entry.js.map +0 -1
  136. package/dist/mosterdcomponents/mrd-field.entry.js.map +0 -1
  137. package/dist/mosterdcomponents/mrd-file-field.entry.js +0 -108
  138. package/dist/mosterdcomponents/mrd-file-field.entry.js.map +0 -1
  139. package/dist/mosterdcomponents/mrd-form.entry.js.map +0 -1
  140. package/dist/mosterdcomponents/mrd-hyperlink-field.entry.js +0 -87
  141. package/dist/mosterdcomponents/mrd-hyperlink-field.entry.js.map +0 -1
  142. package/dist/mosterdcomponents/mrd-image-field.entry.js +0 -122
  143. package/dist/mosterdcomponents/mrd-image-field.entry.js.map +0 -1
  144. package/dist/mosterdcomponents/mrd-layout-section.entry.js.map +0 -1
  145. package/dist/mosterdcomponents/mrd-list-field.entry.js +0 -107
  146. package/dist/mosterdcomponents/mrd-list-field.entry.js.map +0 -1
  147. package/dist/mosterdcomponents/mrd-longtext-field.entry.js +0 -47
  148. package/dist/mosterdcomponents/mrd-longtext-field.entry.js.map +0 -1
  149. package/dist/mosterdcomponents/mrd-number-field.entry.js +0 -87
  150. package/dist/mosterdcomponents/mrd-number-field.entry.js.map +0 -1
  151. package/dist/mosterdcomponents/mrd-relation-field.entry.js +0 -267
  152. package/dist/mosterdcomponents/mrd-relation-field.entry.js.map +0 -1
  153. package/dist/mosterdcomponents/mrd-secret-field.entry.js +0 -49
  154. package/dist/mosterdcomponents/mrd-secret-field.entry.js.map +0 -1
  155. package/dist/mosterdcomponents/mrd-table.entry.js.map +0 -1
  156. package/dist/mosterdcomponents/mrd-text-field.entry.js +0 -47
  157. package/dist/mosterdcomponents/mrd-text-field.entry.js.map +0 -1
  158. package/dist/mosterdcomponents/mrd-textarea-field.entry.js +0 -86
  159. package/dist/mosterdcomponents/mrd-textarea-field.entry.js.map +0 -1
  160. package/dist/mosterdcomponents/mrd-time-field.entry.js +0 -46
  161. package/dist/mosterdcomponents/mrd-time-field.entry.js.map +0 -1
@@ -0,0 +1,156 @@
1
+ /* =====================================================================
2
+ AUTH0 PKCE
3
+ ===================================================================== */
4
+
5
+ const AUTH0_DOMAIN = 'login.develop.rulebooks.nl';
6
+ const AUTH0_CLIENT = '5zpghu11GLFrx95eg5jMl1f0BEnkIenF';
7
+ const AUTH0_AUDIENCE = 'https://api.mosterd';
8
+ const REDIRECT_URI = 'http://localhost:3333';
9
+
10
+ let _accessToken = null;
11
+ let _userEmail = null;
12
+
13
+ function authRestoreSession() {
14
+ const token = localStorage.getItem('auth_token');
15
+ const exp = parseInt(localStorage.getItem('auth_exp') || '0', 10);
16
+ if (!token || (exp && Date.now() / 1000 >= exp - 60)) {
17
+ localStorage.removeItem('auth_token');
18
+ localStorage.removeItem('auth_email');
19
+ localStorage.removeItem('auth_exp');
20
+ return;
21
+ }
22
+ _accessToken = token;
23
+ _userEmail = localStorage.getItem('auth_email') || null;
24
+ }
25
+
26
+ function base64url(buffer) {
27
+ return btoa(String.fromCharCode(...new Uint8Array(buffer)))
28
+ .replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
29
+ }
30
+
31
+ async function pkceGenerateVerifier() {
32
+ const bytes = crypto.getRandomValues(new Uint8Array(96));
33
+ return base64url(bytes);
34
+ }
35
+
36
+ async function pkceGenerateChallenge(verifier) {
37
+ const data = new TextEncoder().encode(verifier);
38
+ const hash = await crypto.subtle.digest('SHA-256', data);
39
+ return base64url(hash);
40
+ }
41
+
42
+ async function authLogin() {
43
+ const verifier = await pkceGenerateVerifier();
44
+ const challenge = await pkceGenerateChallenge(verifier);
45
+ sessionStorage.setItem('pkce_verifier', verifier);
46
+
47
+ const params = new URLSearchParams({
48
+ response_type: 'code',
49
+ client_id: AUTH0_CLIENT,
50
+ redirect_uri: REDIRECT_URI,
51
+ audience: AUTH0_AUDIENCE,
52
+ scope: 'openid profile email',
53
+ code_challenge: challenge,
54
+ code_challenge_method: 'S256',
55
+ });
56
+
57
+ window.location.href = `https://${AUTH0_DOMAIN}/authorize?${params}`;
58
+ }
59
+
60
+ async function authHandleCallback() {
61
+ const url = new URL(window.location.href);
62
+ const code = url.searchParams.get('code');
63
+ const error = url.searchParams.get('error');
64
+
65
+ if (error) {
66
+ showAuthError(url.searchParams.get('error_description') || error);
67
+ cleanUrl();
68
+ return;
69
+ }
70
+
71
+ if (!code) return;
72
+
73
+ const verifier = sessionStorage.getItem('pkce_verifier');
74
+ if (!verifier) {
75
+ showAuthError('PKCE verifier missing — please try logging in again.');
76
+ cleanUrl();
77
+ return;
78
+ }
79
+ sessionStorage.removeItem('pkce_verifier');
80
+
81
+ try {
82
+ const resp = await fetch(`https://${AUTH0_DOMAIN}/oauth/token`, {
83
+ method: 'POST',
84
+ headers: { 'Content-Type': 'application/json' },
85
+ body: JSON.stringify({
86
+ grant_type: 'authorization_code',
87
+ client_id: AUTH0_CLIENT,
88
+ code,
89
+ redirect_uri: REDIRECT_URI,
90
+ code_verifier: verifier,
91
+ }),
92
+ });
93
+
94
+ const data = await resp.json();
95
+ if (!resp.ok) throw new Error(data.error_description || data.error || resp.statusText);
96
+
97
+ _accessToken = data.access_token;
98
+
99
+ // Decode id_token for email (no signature validation needed on test page)
100
+ if (data.id_token) {
101
+ try {
102
+ const payload = JSON.parse(atob(data.id_token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')));
103
+ _userEmail = payload.email || payload.name || null;
104
+ } catch (_) { /* ignore */ }
105
+ }
106
+
107
+ // Persist session in localStorage
108
+ try {
109
+ const payload = JSON.parse(atob(data.access_token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')));
110
+ localStorage.setItem('auth_token', _accessToken);
111
+ localStorage.setItem('auth_email', _userEmail || '');
112
+ if (payload.exp) localStorage.setItem('auth_exp', String(payload.exp));
113
+ } catch (_) { /* ignore */ }
114
+ } catch (err) {
115
+ showAuthError(err.message);
116
+ }
117
+
118
+ cleanUrl();
119
+ }
120
+
121
+ function cleanUrl() {
122
+ const clean = window.location.pathname;
123
+ window.history.replaceState({}, document.title, clean);
124
+ }
125
+
126
+ function authGetToken() { return _accessToken; }
127
+
128
+ function showAuthError(msg) {
129
+ document.getElementById('auth-status-area').innerHTML =
130
+ `<span style="color:var(--mrd-color-danger)">❌ ${escHtml(msg)}</span>
131
+ <button class="btn-secondary" onclick="authLogin()">Opnieuw proberen</button>`;
132
+ }
133
+
134
+ function showAuthStatus() {
135
+ const area = document.getElementById('auth-status-area');
136
+ const label = _userEmail ? `Ingelogd als <strong>${escHtml(_userEmail)}</strong>` : 'Ingelogd';
137
+ area.innerHTML =
138
+ `<span class="badge-ok">✓ ${label}</span>
139
+ <button class="btn-secondary" onclick="authLogout()">Uitloggen</button>`;
140
+ }
141
+
142
+ function authLogout() {
143
+ _accessToken = null;
144
+ _userEmail = null;
145
+ localStorage.removeItem('auth_token');
146
+ localStorage.removeItem('auth_email');
147
+ localStorage.removeItem('auth_exp');
148
+ localStorage.removeItem('last_tenant');
149
+ document.getElementById('auth-status-area').innerHTML =
150
+ `<button class="btn-primary" id="btn-login" onclick="authLogin()">Login met Auth0</button>`;
151
+ document.getElementById('panel-tenant').classList.add('hidden');
152
+ document.getElementById('panel-type').classList.add('hidden');
153
+ document.getElementById('panel-table').classList.add('hidden');
154
+ document.getElementById('panel-form').classList.add('hidden');
155
+ document.getElementById('panel-response').innerHTML = '';
156
+ }
@@ -0,0 +1,403 @@
1
+ // Static example layout used in the "Embedded Form" tab.
2
+ window.EXAMPLE_LAYOUT = {
3
+ title: "Project Intake Form",
4
+ items: [
5
+ {
6
+ type: "SECTION",
7
+ label: "Basic Information",
8
+ items: [
9
+ { type: "FIELD", name: "projectName", label: "Project Name", dataType: "TEXT", required: true, placeholder: "Enter project name" },
10
+ { type: "FIELD", name: "description", label: "Description", dataType: "TEXTBLOCK", required: false, placeholder: "Describe the project..." },
11
+ {
12
+ type: "FIELD", name: "status", label: "Status", dataType: "LIST", required: true, multiple: false,
13
+ listItems: [
14
+ { key: "active", label: "Active", color: "#16a34a" },
15
+ { key: "pending", label: "Pending", color: "#d97706" },
16
+ { key: "on_hold", label: "On Hold", color: "#dc2626" },
17
+ { key: "completed", label: "Completed", color: "#2563eb" }
18
+ ]
19
+ },
20
+ {
21
+ type: "FIELD", name: "tags", label: "Tags (Multi-select)", dataType: "LIST", required: false, multiple: true,
22
+ listItems: [
23
+ { key: "frontend", label: "Frontend", color: "#7c3aed" },
24
+ { key: "backend", label: "Backend", color: "#db2777" },
25
+ { key: "design", label: "Design", color: "#0891b2" },
26
+ { key: "devops", label: "DevOps", color: "#65a30d" }
27
+ ]
28
+ }
29
+ ]
30
+ },
31
+ {
32
+ type: "SECTION",
33
+ label: "Financial Details",
34
+ items: [
35
+ { type: "FIELD", name: "budget", label: "Budget", dataType: "CURRENCY", required: true, currencyCode: "EUR" },
36
+ { type: "FIELD", name: "completion", label: "Completion (%)", dataType: "PERCENTAGE", required: false, decimalPrecision: 1 },
37
+ { type: "FIELD", name: "headcount", label: "Headcount", dataType: "INTEGER", required: false },
38
+ { type: "FIELD", name: "hourlyRate", label: "Hourly Rate", dataType: "DECIMAL", required: false, decimalPrecision: 2 }
39
+ ]
40
+ },
41
+ {
42
+ type: "SECTION",
43
+ label: "Dates & Time",
44
+ items: [
45
+ { type: "FIELD", name: "startDate", label: "Start Date", dataType: "DATE", required: true },
46
+ { type: "FIELD", name: "deadline", label: "Deadline", dataType: "DATETIME", required: false },
47
+ { type: "FIELD", name: "dailyStandup", label: "Daily Standup Time", dataType: "TIME", required: false }
48
+ ]
49
+ },
50
+ {
51
+ type: "SECTION",
52
+ label: "Contact & Links",
53
+ items: [
54
+ { type: "FIELD", name: "contactEmail", label: "Contact Email", dataType: "EMAIL", required: true, placeholder: "project@company.com" },
55
+ { type: "FIELD", name: "repositoryUrl", label: "Repository URL", dataType: "HYPERLINK", required: false, placeholder: "https://github.com/..." }
56
+ ]
57
+ },
58
+ {
59
+ type: "SECTION",
60
+ label: "Settings",
61
+ items: [
62
+ { type: "FIELD", name: "isPublic", label: "Public project", dataType: "BOOLEAN", required: false },
63
+ { type: "FIELD", name: "isArchived", label: "Archived", dataType: "BOOLEAN", required: false },
64
+ { type: "FIELD", name: "apiToken", label: "API Token", dataType: "SECRET", required: false, placeholder: "Paste token here" }
65
+ ]
66
+ },
67
+ {
68
+ type: "SECTION",
69
+ label: "Assets",
70
+ items: [
71
+ { type: "FIELD", name: "projectLogo", label: "Project Logo", dataType: "IMAGE", required: false, accept: "image/*", maxSize: 5242880 },
72
+ { type: "FIELD", name: "attachments", label: "Attachments", dataType: "FILE", required: false, accept: ".pdf,.doc,.docx,.zip", maxSize: 10485760 }
73
+ ]
74
+ },
75
+ { type: "RELATION", name: "projectManager", label: "Project Manager", relatedClass: "Employee", displayType: "SEARCH", required: true, multiple: false },
76
+ {
77
+ type: "RELATION", name: "projectCategory", label: "Category", relatedClass: "Category", displayType: "DROPDOWN", required: false,
78
+ dropdownValues: [
79
+ { value: "product", label: "Product Development" },
80
+ { value: "internal", label: "Internal Tool" },
81
+ { value: "client", label: "Client Project" },
82
+ { value: "research", label: "Research & Innovation" }
83
+ ]
84
+ }
85
+ ]
86
+ };
87
+
88
+ window.EXAMPLE_VALUES = {
89
+ projectName: "Mosterd Platform",
90
+ status: "active",
91
+ budget: { amount: 150000, currency: "EUR" },
92
+ isPublic: true,
93
+ startDate: "2026-01-15",
94
+ contactEmail: "team@mosterd.nl"
95
+ };
96
+
97
+ // ─── Companies detail view demo ────────────────────────────────────────────────
98
+
99
+ /** Column definitions for the companies list table. */
100
+ window.EXAMPLE_COMPANY_COLUMNS = [
101
+ { type: 'FIELD', label: 'Company name', name: 'name', dataType: 'TEXT', required: true },
102
+ { type: 'FIELD', label: 'Reg. number', name: 'registrationNumber', dataType: 'TEXT', required: false },
103
+ { type: 'FIELD', label: 'Legal form', name: 'legalForm', dataType: 'TEXT', required: false },
104
+ { type: 'FIELD', label: 'Start date', name: 'startDate', dataType: 'DATE', required: false },
105
+ { type: 'FIELD', label: 'Employees', name: 'totalEmployees', dataType: 'INTEGER', required: false },
106
+ ];
107
+
108
+ /** Rows for the companies list table. */
109
+ window.EXAMPLE_COMPANIES = [
110
+ {
111
+ name: 'Alpha Holding B.V.',
112
+ registrationNumber: '10000001',
113
+ legalForm: 'Besloten Vennootschap',
114
+ startDate: '2001-03-01',
115
+ totalEmployees: 1,
116
+ _links: { self: { href: '/data/demo/companies/company-1' } },
117
+ },
118
+ {
119
+ name: 'Beta Services N.V.',
120
+ registrationNumber: '20000002',
121
+ legalForm: 'Naamloze Vennootschap',
122
+ startDate: '2010-07-15',
123
+ totalEmployees: 45,
124
+ _links: { self: { href: '/data/demo/companies/company-2' } },
125
+ },
126
+ {
127
+ name: 'Gamma & Partners B.V.',
128
+ registrationNumber: '30000003',
129
+ legalForm: 'Besloten Vennootschap',
130
+ startDate: '2008-11-01',
131
+ totalEmployees: 12,
132
+ _links: { self: { href: '/data/demo/companies/company-3' } },
133
+ },
134
+ {
135
+ name: 'Delta Vastgoed B.V.',
136
+ registrationNumber: '40000004',
137
+ legalForm: 'Besloten Vennootschap',
138
+ startDate: '2020-06-15',
139
+ totalEmployees: 3,
140
+ _links: { self: { href: '/data/demo/companies/company-4' } },
141
+ },
142
+ ];
143
+
144
+ /** Single company data object (result of GET /data/:tenant/companies/:id). */
145
+ window.EXAMPLE_COMPANY = {
146
+ name: 'Alpha Holding B.V.',
147
+ legalName: 'Alpha Holding B.V.',
148
+ registrationNumber: '10000001',
149
+ registrationDate: null,
150
+ legalForm: 'Besloten Vennootschap',
151
+ legalFormExtended: 'Besloten Vennootschap',
152
+ rsin: '100000001',
153
+ startDate: '2001-03-01',
154
+ endDate: null,
155
+ primaryActivityDescription: 'Activiteiten van houdstermaatschappijen',
156
+ primaryActivityCode: '64100',
157
+ totalEmployees: 1,
158
+ noMailing: false,
159
+ verificationDate: '2024-01-15T09:00:00.000Z',
160
+ visitAddress: 'Voorbeeldstraat 1',
161
+ visitPostalCode: '1234AB',
162
+ visitCity: 'Amsterdam',
163
+ mailingAddress: null,
164
+ mailingPostalCode: null,
165
+ mailingCity: null,
166
+ _links: {
167
+ self: { href: '/data/demo/companies/company-1' },
168
+ country: { href: '/data/demo/countries/nl', name: 'Nederland' },
169
+ appointments: { href: '/data/demo/companies/company-1/appointments' },
170
+ shareClasses: { href: '/data/demo/companies/company-1/shareClasses' },
171
+ shareAllocations: { href: '/data/demo/shareholders/company-1/shareAllocations' },
172
+ },
173
+ };
174
+
175
+ /** Dashboard metadata (GET /metadata/:tenant/dataObject?types=companies,...). */
176
+ window.EXAMPLE_COMPANY_METADATA = {
177
+ layoutType: 'OBJECT_DASHBOARD',
178
+ layouts: [
179
+ {
180
+ type: 'OBJECT_DASHBOARD',
181
+ label: '',
182
+ tabPage: false,
183
+ items: [
184
+ { type: 'FIELD', label: 'company name', name: 'name', dataType: 'TEXT', required: true, header: true },
185
+ { type: 'FIELD', label: 'legal name', name: 'legalName', dataType: 'TEXT', required: true },
186
+ { type: 'FIELD', label: 'registration number', name: 'registrationNumber', dataType: 'TEXT', required: false },
187
+ { type: 'FIELD', label: 'registration date', name: 'registrationDate', dataType: 'DATE', required: false },
188
+ // ACTION items are silently ignored by mrd-layout-section
189
+ { type: 'ACTION', label: 'company register', name: 'CompanyRegister' },
190
+ ],
191
+ },
192
+ {
193
+ type: 'OBJECT_DASHBOARD',
194
+ label: 'Registration details',
195
+ tabPage: true,
196
+ items: [
197
+ { type: 'FIELD', label: 'legal form', name: 'legalForm', dataType: 'TEXT', required: false },
198
+ { type: 'FIELD', label: 'legal form extended', name: 'legalFormExtended', dataType: 'TEXT', required: false },
199
+ { type: 'FIELD', label: 'rsin', name: 'rsin', dataType: 'TEXT', required: false },
200
+ { type: 'FIELD', label: 'start date', name: 'startDate', dataType: 'DATE', required: false },
201
+ { type: 'FIELD', label: 'end date', name: 'endDate', dataType: 'DATE', required: false },
202
+ { type: 'FIELD', label: 'primary activity description', name: 'primaryActivityDescription', dataType: 'TEXT', required: false },
203
+ { type: 'FIELD', label: 'primary activity code', name: 'primaryActivityCode', dataType: 'TEXT', required: false },
204
+ { type: 'FIELD', label: 'total employees', name: 'totalEmployees', dataType: 'INTEGER', required: false },
205
+ { type: 'FIELD', label: 'no mailing', name: 'noMailing', dataType: 'BOOLEAN', required: false },
206
+ { type: 'FIELD', label: 'verification date', name: 'verificationDate', dataType: 'DATETIME', required: false },
207
+ ],
208
+ },
209
+ {
210
+ type: 'OBJECT_DASHBOARD',
211
+ label: 'Contact information',
212
+ tabPage: true,
213
+ items: [
214
+ { type: 'FIELD', label: 'visit address', name: 'visitAddress', dataType: 'TEXT', required: false },
215
+ { type: 'FIELD', label: 'visit postal code', name: 'visitPostalCode', dataType: 'TEXT', required: false },
216
+ { type: 'FIELD', label: 'visit city', name: 'visitCity', dataType: 'TEXT', required: false },
217
+ { type: 'FIELD', label: 'mailing address', name: 'mailingAddress', dataType: 'TEXT', required: false },
218
+ { type: 'FIELD', label: 'mailing postal code', name: 'mailingPostalCode', dataType: 'TEXT', required: false },
219
+ { type: 'FIELD', label: 'mailing city', name: 'mailingCity', dataType: 'TEXT', required: false },
220
+ { type: 'RELATION', label: 'country', name: 'country', relatedClass: 'commons.country', mostSignificantClass: 'countries', required: false },
221
+ ],
222
+ },
223
+ {
224
+ type: 'OBJECT_DASHBOARD',
225
+ label: 'Appointments',
226
+ tabPage: true,
227
+ items: [
228
+ { type: 'RELATED_VIEW', label: 'Appointments', name: 'view0', relatedClass: 'appointments', showTitle: false },
229
+ ],
230
+ },
231
+ {
232
+ type: 'OBJECT_DASHBOARD',
233
+ label: 'Share classes',
234
+ tabPage: true,
235
+ items: [
236
+ {
237
+ type: 'RELATED_VIEW', label: 'Share classes', name: 'view1', relatedClass: 'shareClasses', showTitle: false,
238
+ actions: ['NEW', 'EXPORT'],
239
+ createTypes: [
240
+ { type: 'ordinaryShares', label: 'Ordinary shares' },
241
+ { type: 'preferenceShares', label: 'Preference shares' },
242
+ ],
243
+ },
244
+ ],
245
+ },
246
+ ],
247
+ views: {
248
+ view0: {
249
+ name: null,
250
+ defaultView: true,
251
+ defaultSort: 'name',
252
+ values: [
253
+ { type: 'FIELD', label: 'name', name: 'name', dataType: 'TEXT', required: true },
254
+ { type: 'RELATION', label: 'Officer', name: 'officer', relatedClass: 'housekeeping.officer', mostSignificantClass: 'entities', required: true },
255
+ {
256
+ type: 'FIELD', label: 'Authority', name: 'authority', dataType: 'LIST', required: false,
257
+ listItems: [
258
+ { key: 'SOLE', label: 'Sole authority' },
259
+ { key: 'JOINT', label: 'Joint authority' },
260
+ ],
261
+ },
262
+ { type: 'FIELD', label: 'start date', name: 'activeDate', dataType: 'DATE', required: false },
263
+ { type: 'FIELD', label: 'end date', name: 'inactiveDate', dataType: 'DATE', required: false },
264
+ ],
265
+ type: 'appointments',
266
+ singularLabel: 'Appointment',
267
+ pluralLabel: 'Appointments',
268
+ },
269
+ view1: {
270
+ name: null,
271
+ defaultView: true,
272
+ defaultSort: 'name',
273
+ values: [
274
+ { type: 'FIELD', label: 'name', name: 'name', dataType: 'TEXT', required: true },
275
+ { type: 'FIELD', label: 'Nominal value', name: 'nominalValue', dataType: 'TEXT', required: false },
276
+ { type: 'FIELD', label: 'Currency', name: 'currency', dataType: 'TEXT', required: false },
277
+ { type: 'FIELD', label: 'Authorised shares', name: 'authorizedShares', dataType: 'INTEGER', required: false },
278
+ ],
279
+ type: 'shareClasses',
280
+ singularLabel: 'Share class',
281
+ pluralLabel: 'Share classes',
282
+ },
283
+ },
284
+ _links: {
285
+ view0: { href: '/data/demo/appointments' },
286
+ view1: { href: '/data/demo/shareClasses' },
287
+ },
288
+ };
289
+
290
+ /** Mock appointment rows for the embedded table. */
291
+ window.EXAMPLE_APPOINTMENTS = [
292
+ {
293
+ name: 'Directeur',
294
+ authority: 'SOLE',
295
+ activeDate: '2001-03-01',
296
+ inactiveDate: null,
297
+ _links: {
298
+ self: { href: '/data/demo/appointments/apt-1' },
299
+ officer: { href: '/data/demo/entities/person-1', name: 'A. Jansen' },
300
+ },
301
+ },
302
+ {
303
+ name: 'Commissaris',
304
+ authority: 'JOINT',
305
+ activeDate: '2018-03-01',
306
+ inactiveDate: null,
307
+ _links: {
308
+ self: { href: '/data/demo/appointments/apt-2' },
309
+ officer: { href: '/data/demo/entities/person-2', name: 'B. de Wit' },
310
+ },
311
+ },
312
+ ];
313
+
314
+ /** Mock share class rows for the embedded table. */
315
+ window.EXAMPLE_SHARE_CLASSES = [
316
+ {
317
+ name: 'Gewone aandelen',
318
+ nominalValue: '1.00',
319
+ currency: 'EUR',
320
+ authorizedShares: 1800,
321
+ _links: { self: { href: '/data/demo/shareClasses/sc-1' } },
322
+ },
323
+ {
324
+ name: 'Preferente aandelen',
325
+ nominalValue: '1.00',
326
+ currency: 'EUR',
327
+ authorizedShares: 200,
328
+ _links: { self: { href: '/data/demo/shareClasses/sc-2' } },
329
+ },
330
+ ];
331
+
332
+ // ─── Field Types demo ─────────────────────────────────────────────────────────
333
+
334
+ window.EXAMPLE_FIELD_TYPES_ITEMS = [
335
+ { type: 'FIELD', label: 'Name (header)', name: 'fHeader', dataType: 'TEXT', required: false, header: true },
336
+ { type: 'FIELD', label: 'Text', name: 'fText', dataType: 'TEXT', required: false },
337
+ { type: 'FIELD', label: 'Email', name: 'fEmail', dataType: 'EMAIL', required: false },
338
+ { type: 'FIELD', label: 'Hyperlink', name: 'fHyperlink', dataType: 'HYPERLINK', required: false },
339
+ { type: 'FIELD', label: 'Integer', name: 'fInteger', dataType: 'INTEGER', required: false },
340
+ { type: 'FIELD', label: 'Decimal', name: 'fDecimal', dataType: 'DECIMAL', required: false },
341
+ { type: 'FIELD', label: 'Percentage', name: 'fPercentage', dataType: 'PERCENTAGE', required: false },
342
+ { type: 'FIELD', label: 'Currency', name: 'fCurrency', dataType: 'CURRENCY', required: false },
343
+ { type: 'FIELD', label: 'Boolean (true)', name: 'fBoolTrue', dataType: 'BOOLEAN', required: false },
344
+ { type: 'FIELD', label: 'Boolean (false)', name: 'fBoolFalse', dataType: 'BOOLEAN', required: false },
345
+ { type: 'FIELD', label: 'Date', name: 'fDate', dataType: 'DATE', required: false },
346
+ { type: 'FIELD', label: 'DateTime', name: 'fDatetime', dataType: 'DATETIME', required: false },
347
+ { type: 'FIELD', label: 'Time', name: 'fTime', dataType: 'TIME', required: false },
348
+ {
349
+ type: 'FIELD', label: 'List (no color)', name: 'fListPlain', dataType: 'LIST', required: false,
350
+ listItems: [{ key: 'a', label: 'Option A' }, { key: 'b', label: 'Option B' }],
351
+ },
352
+ {
353
+ type: 'FIELD', label: 'List (color only)', name: 'fListColor', dataType: 'LIST', required: false,
354
+ listItems: [
355
+ { key: 'active', label: 'Active', color: '#16a34a' },
356
+ { key: 'inactive', label: 'Inactive', color: '#dc2626' },
357
+ ],
358
+ },
359
+ {
360
+ type: 'FIELD', label: 'List (color + bg)', name: 'fListBadge', dataType: 'LIST', required: false,
361
+ listItems: [
362
+ { key: 'approved', label: 'Approved', color: '#14532d', backgroundColor: '#dcfce7' },
363
+ { key: 'rejected', label: 'Rejected', color: '#7f1d1d', backgroundColor: '#fee2e2' },
364
+ { key: 'pending', label: 'Pending', color: '#78350f', backgroundColor: '#fef3c7' },
365
+ ],
366
+ },
367
+ { type: 'SEARCH', label: 'Zoeken', dataClass: 'demo.entity' },
368
+ { type: 'RELATION', label: 'Relation (single)', name: 'fRelation', relatedClass: 'demo.entity', required: false },
369
+ { type: 'FIELD', label: 'File', name: 'fFile', dataType: 'FILE', required: false },
370
+ { type: 'FIELD', label: 'Image', name: 'fImage', dataType: 'IMAGE', required: false },
371
+ { type: 'FIELD', label: 'Textblock', name: 'fTextblock', dataType: 'TEXTBLOCK', required: false },
372
+ { type: 'FIELD', label: 'Longtext', name: 'fLongtext', dataType: 'LONGTEXT', required: false },
373
+ { type: 'FIELD', label: 'JSON', name: 'fJson', dataType: 'JSON', required: false },
374
+ { type: 'FIELD', label: 'Secret', name: 'fSecret', dataType: 'SECRET', required: false },
375
+ ];
376
+
377
+ window.EXAMPLE_FIELD_TYPES_DATA = {
378
+ fHeader: 'Voorbeeld Bedrijf B.V.',
379
+ fText: 'Voorbeeld tekst',
380
+ fEmail: 'info@example.com',
381
+ fHyperlink: { href: 'https://example.com', text: 'example.com' },
382
+ fInteger: 42,
383
+ fDecimal: 3.14159,
384
+ fPercentage: 0.7825,
385
+ fCurrency: { amount: 1250.50, currency: 'EUR' },
386
+ fBoolTrue: true,
387
+ fBoolFalse: false,
388
+ fDate: '2024-03-15',
389
+ fDatetime: '2024-03-15T14:30:00.000Z',
390
+ fTime: '14:30:00',
391
+ fListPlain: 'a',
392
+ fListColor: 'active',
393
+ fListBadge: 'approved',
394
+ fFile: { href: '/api/files/example-document', fileName: 'voorbeeld-document.pdf' },
395
+ fImage: { href: '/api/files/example-photo', fileName: 'voorbeeld-foto.jpg' },
396
+ fTextblock: '<p>Dit is een <strong>opgemaakte</strong> tekst met <em>html</em>-inhoud. Geschikt voor langere beschrijvingen met opmaak.</p>',
397
+ fLongtext: 'Dit is een langere stuk platte tekst zonder opmaak.\nHet kan meerdere regels bevatten en wordt getoond in een pre-blok zodat witruimte bewaard blijft.',
398
+ fJson: { id: 1, status: 'active', tags: ['alpha', 'beta'], meta: { created: '2024-01-01', valid: true } },
399
+ fSecret: 'sk-live-abc123xyz',
400
+ _links: {
401
+ fRelation: { href: '/data/demo/entities/person-1', name: 'A. Jansen' },
402
+ },
403
+ };
@@ -0,0 +1,55 @@
1
+ <svg aria-hidden="true" style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2
+ <defs>
3
+ <symbol id="icon-search" viewBox="0 0 32 32">
4
+ <path d="M31.008 27.231l-7.58-6.447c-0.784-0.705-1.622-1.029-2.299-0.998 1.789-2.096 2.87-4.815 2.87-7.787 0-6.627-5.373-12-12-12s-12 5.373-12 12 5.373 12 12 12c2.972 0 5.691-1.081 7.787-2.87-0.031 0.677 0.293 1.515 0.998 2.299l6.447 7.58c1.104 1.226 2.907 1.33 4.007 0.23s0.997-2.903-0.23-4.007zM12 20c-4.418 0-8-3.582-8-8s3.582-8 8-8 8 3.582 8 8-3.582 8-8 8z"></path>
5
+ </symbol>
6
+ <symbol id="icon-bin" viewBox="0 0 32 32">
7
+ <path d="M4 10v20c0 1.1 0.9 2 2 2h18c1.1 0 2-0.9 2-2v-20h-22zM10 28h-2v-14h2v14zM14 28h-2v-14h2v14zM18 28h-2v-14h2v14zM22 28h-2v-14h2v14z"></path>
8
+ <path d="M26.5 4h-6.5v-2.5c0-0.825-0.675-1.5-1.5-1.5h-7c-0.825 0-1.5 0.675-1.5 1.5v2.5h-6.5c-0.825 0-1.5 0.675-1.5 1.5v2.5h26v-2.5c0-0.825-0.675-1.5-1.5-1.5zM18 4h-6v-1.975h6v1.975z"></path>
9
+ </symbol>
10
+ <symbol id="icon-plus" viewBox="0 0 32 32">
11
+ <path d="M31 12h-11v-11c0-0.552-0.448-1-1-1h-6c-0.552 0-1 0.448-1 1v11h-11c-0.552 0-1 0.448-1 1v6c0 0.552 0.448 1 1 1h11v11c0 0.552 0.448 1 1 1h6c0.552 0 1-0.448 1-1v-11h11c0.552 0 1-0.448 1-1v-6c0-0.552-0.448-1-1-1z"></path>
12
+ </symbol>
13
+ <symbol id="icon-cross" viewBox="0 0 32 32">
14
+ <path d="M31.708 25.708c-0-0-0-0-0-0l-9.708-9.708 9.708-9.708c0-0 0-0 0-0 0.105-0.105 0.18-0.227 0.229-0.357 0.133-0.356 0.057-0.771-0.229-1.057l-4.586-4.586c-0.286-0.286-0.702-0.361-1.057-0.229-0.13 0.048-0.252 0.124-0.357 0.228 0 0-0 0-0 0l-9.708 9.708-9.708-9.708c-0-0-0-0-0-0-0.105-0.104-0.227-0.18-0.357-0.228-0.356-0.133-0.771-0.057-1.057 0.229l-4.586 4.586c-0.286 0.286-0.361 0.702-0.229 1.057 0.049 0.13 0.124 0.252 0.229 0.357 0 0 0 0 0 0l9.708 9.708-9.708 9.708c-0 0-0 0-0 0-0.104 0.105-0.18 0.227-0.229 0.357-0.133 0.355-0.057 0.771 0.229 1.057l4.586 4.586c0.286 0.286 0.702 0.361 1.057 0.229 0.13-0.049 0.252-0.124 0.357-0.229 0-0 0-0 0-0l9.708-9.708 9.708 9.708c0 0 0 0 0 0 0.105 0.105 0.227 0.18 0.357 0.229 0.356 0.133 0.771 0.057 1.057-0.229l4.586-4.586c0.286-0.286 0.362-0.702 0.229-1.057-0.049-0.13-0.124-0.252-0.229-0.357z"></path>
15
+ </symbol>
16
+ <symbol id="icon-backward2" viewBox="0 0 32 32">
17
+ <path d="M18 5v10l10-10v22l-10-10v10l-11-11z"></path>
18
+ </symbol>
19
+ <symbol id="icon-forward3" viewBox="0 0 32 32">
20
+ <path d="M16 27v-10l-10 10v-22l10 10v-10l11 11z"></path>
21
+ </symbol>
22
+ <symbol id="icon-previous2" viewBox="0 0 32 32">
23
+ <path d="M8 28v-24h4v11l10-10v22l-10-10v11z"></path>
24
+ </symbol>
25
+ <symbol id="icon-next2" viewBox="0 0 32 32">
26
+ <path d="M24 4v24h-4v-11l-10 10v-22l10 10v-11z"></path>
27
+ </symbol>
28
+ <symbol id="icon-sort-alpha-asc" viewBox="0 0 32 32">
29
+ <path d="M10 24v-24h-4v24h-5l7 7 7-7h-5z"></path>
30
+ <path d="M29 32h-8c-0.369 0-0.708-0.203-0.882-0.528s-0.155-0.72 0.050-1.027l6.963-10.445h-6.131c-0.552 0-1-0.448-1-1s0.448-1 1-1h8c0.369 0 0.708 0.203 0.882 0.528s0.155 0.72-0.050 1.027l-6.963 10.445h6.131c0.552 0 1 0.448 1 1s-0.448 1-1 1z"></path>
31
+ <path d="M31.894 12.553l-6-12c-0.169-0.339-0.516-0.553-0.894-0.553s-0.725 0.214-0.895 0.553l-6 12c-0.247 0.494-0.047 1.095 0.447 1.342 0.144 0.072 0.296 0.106 0.447 0.106 0.367 0 0.72-0.203 0.895-0.553l1.724-3.447h6.764l1.724 3.447c0.247 0.494 0.848 0.694 1.342 0.447s0.694-0.848 0.447-1.342zM22.618 8l2.382-4.764 2.382 4.764h-4.764z"></path>
32
+ </symbol>
33
+ <symbol id="icon-sort-alpha-desc" viewBox="0 0 32 32">
34
+ <path d="M10 24v-24h-4v24h-5l7 7 7-7h-5z"></path>
35
+ <path d="M29 14h-8c-0.369 0-0.708-0.203-0.882-0.528s-0.155-0.72 0.050-1.027l6.963-10.445h-6.131c-0.552 0-1-0.448-1-1s0.448-1 1-1h8c0.369 0 0.708 0.203 0.882 0.528s0.155 0.72-0.050 1.027l-6.963 10.445h6.131c0.552 0 1 0.448 1 1s-0.448 1-1 1z"></path>
36
+ <path d="M31.894 30.553l-6-12c-0.169-0.339-0.516-0.553-0.894-0.553s-0.725 0.214-0.895 0.553l-6 12c-0.247 0.494-0.047 1.095 0.447 1.342 0.144 0.072 0.296 0.106 0.447 0.106 0.367 0 0.72-0.203 0.895-0.553l1.724-3.447h6.764l1.724 3.447c0.247 0.494 0.848 0.694 1.342 0.447s0.694-0.848 0.447-1.342zM22.618 26l2.382-4.764 2.382 4.764h-4.764z"></path>
37
+ </symbol>
38
+ <symbol id="icon-filter" viewBox="0 0 32 32">
39
+ <path d="M16 0c-8.837 0-16 2.239-16 5v3l12 12v10c0 1.105 1.791 2 4 2s4-0.895 4-2v-10l12-12v-3c0-2.761-7.163-5-16-5zM2.95 4.338c0.748-0.427 1.799-0.832 3.040-1.171 2.748-0.752 6.303-1.167 10.011-1.167s7.262 0.414 10.011 1.167c1.241 0.34 2.292 0.745 3.040 1.171 0.494 0.281 0.76 0.519 0.884 0.662-0.124 0.142-0.391 0.38-0.884 0.662-0.748 0.427-1.8 0.832-3.040 1.171-2.748 0.752-6.303 1.167-10.011 1.167s-7.262-0.414-10.011-1.167c-1.24-0.34-2.292-0.745-3.040-1.171-0.494-0.282-0.76-0.519-0.884-0.662 0.124-0.142 0.391-0.38 0.884-0.662z"></path>
40
+ </symbol>
41
+ <symbol id="icon-file-excel" viewBox="0 0 32 32">
42
+ <path d="M23.22 12h-4.228l-2.992 4.407-2.992-4.407h-4.228l5.068 7.577-5.718 8.423h7.87v-2.862h-1.567l1.567-2.344 3.481 5.205h4.389l-5.718-8.423 5.068-7.577z"></path>
43
+ <path d="M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.121 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841v0zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268v0zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z"></path>
44
+ </symbol>
45
+ <symbol id="icon-pencil" viewBox="0 0 32 32">
46
+ <path d="M27.414 0.586c-0.781-0.781-2.048-0.781-2.828 0l-3.172 3.172 5.828 5.828 3.172-3.172c0.781-0.781 0.781-2.047 0-2.828l-3-3zM0 24v8h8l17.414-17.414-8-8-17.414 17.414zM6.828 28h-2.828v-2.828l12-12 2.828 2.828-12 12z"></path>
47
+ </symbol>
48
+ <symbol id="icon-ellipsis" viewBox="0 0 32 32">
49
+ <circle cx="4" cy="16" r="3.5"></circle>
50
+ <circle cx="16" cy="16" r="3.5"></circle>
51
+ <circle cx="28" cy="16" r="3.5"></circle>
52
+ </symbol>
53
+ </defs>
54
+ </svg>
55
+
@@ -0,0 +1 @@
1
+ export * from './types';