@shamar/adonis 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.
Files changed (134) hide show
  1. package/assets/admin.css +2 -0
  2. package/assets/alpine.min.js +5 -0
  3. package/assets/input.css +2286 -0
  4. package/assets/shamar-ui.js +3658 -0
  5. package/dist/assets-controller.d.ts +12 -0
  6. package/dist/assets-controller.d.ts.map +1 -0
  7. package/dist/assets-controller.js +32 -0
  8. package/dist/assets-controller.js.map +1 -0
  9. package/dist/config.d.ts +79 -0
  10. package/dist/config.d.ts.map +1 -0
  11. package/dist/config.js +38 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/configure.d.ts +21 -0
  14. package/dist/configure.d.ts.map +1 -0
  15. package/dist/configure.js +20 -0
  16. package/dist/configure.js.map +1 -0
  17. package/dist/context.d.ts +22 -0
  18. package/dist/context.d.ts.map +1 -0
  19. package/dist/context.js +2 -0
  20. package/dist/context.js.map +1 -0
  21. package/dist/controller.d.ts +31 -0
  22. package/dist/controller.d.ts.map +1 -0
  23. package/dist/controller.js +45 -0
  24. package/dist/controller.js.map +1 -0
  25. package/dist/controllers/admin_controller.d.ts +72 -0
  26. package/dist/controllers/admin_controller.d.ts.map +1 -0
  27. package/dist/controllers/admin_controller.js +1075 -0
  28. package/dist/controllers/admin_controller.js.map +1 -0
  29. package/dist/discover.d.ts +7 -0
  30. package/dist/discover.d.ts.map +1 -0
  31. package/dist/discover.js +50 -0
  32. package/dist/discover.js.map +1 -0
  33. package/dist/form-state.d.ts +41 -0
  34. package/dist/form-state.d.ts.map +1 -0
  35. package/dist/form-state.js +74 -0
  36. package/dist/form-state.js.map +1 -0
  37. package/dist/index.d.ts +10 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +10 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/middleware/require_api_key_middleware.d.ts +30 -0
  42. package/dist/middleware/require_api_key_middleware.d.ts.map +1 -0
  43. package/dist/middleware/require_api_key_middleware.js +59 -0
  44. package/dist/middleware/require_api_key_middleware.js.map +1 -0
  45. package/dist/provider.d.ts +9 -0
  46. package/dist/provider.d.ts.map +1 -0
  47. package/dist/provider.js +66 -0
  48. package/dist/provider.js.map +1 -0
  49. package/dist/resources/api_key_resource.d.ts +35 -0
  50. package/dist/resources/api_key_resource.d.ts.map +1 -0
  51. package/dist/resources/api_key_resource.js +225 -0
  52. package/dist/resources/api_key_resource.js.map +1 -0
  53. package/dist/routes.d.ts +5 -0
  54. package/dist/routes.d.ts.map +1 -0
  55. package/dist/routes.js +97 -0
  56. package/dist/routes.js.map +1 -0
  57. package/dist/runtime.d.ts +27 -0
  58. package/dist/runtime.d.ts.map +1 -0
  59. package/dist/runtime.js +74 -0
  60. package/dist/runtime.js.map +1 -0
  61. package/dist/shamar/auth.d.ts +30 -0
  62. package/dist/shamar/auth.d.ts.map +1 -0
  63. package/dist/shamar/auth.js +218 -0
  64. package/dist/shamar/auth.js.map +1 -0
  65. package/dist/shamar/branding.d.ts +24 -0
  66. package/dist/shamar/branding.d.ts.map +1 -0
  67. package/dist/shamar/branding.js +91 -0
  68. package/dist/shamar/branding.js.map +1 -0
  69. package/dist/shamar/display-relations.d.ts +7 -0
  70. package/dist/shamar/display-relations.d.ts.map +1 -0
  71. package/dist/shamar/display-relations.js +89 -0
  72. package/dist/shamar/display-relations.js.map +1 -0
  73. package/dist/shamar/list-headers.d.ts +38 -0
  74. package/dist/shamar/list-headers.d.ts.map +1 -0
  75. package/dist/shamar/list-headers.js +218 -0
  76. package/dist/shamar/list-headers.js.map +1 -0
  77. package/dist/shamar/list-query.d.ts +229 -0
  78. package/dist/shamar/list-query.d.ts.map +1 -0
  79. package/dist/shamar/list-query.js +564 -0
  80. package/dist/shamar/list-query.js.map +1 -0
  81. package/dist/shamar/menu.d.ts +48 -0
  82. package/dist/shamar/menu.d.ts.map +1 -0
  83. package/dist/shamar/menu.js +93 -0
  84. package/dist/shamar/menu.js.map +1 -0
  85. package/dist/shamar/paths.d.ts +5 -0
  86. package/dist/shamar/paths.d.ts.map +1 -0
  87. package/dist/shamar/paths.js +16 -0
  88. package/dist/shamar/paths.js.map +1 -0
  89. package/dist/shamar/relation-fields.d.ts +54 -0
  90. package/dist/shamar/relation-fields.d.ts.map +1 -0
  91. package/dist/shamar/relation-fields.js +94 -0
  92. package/dist/shamar/relation-fields.js.map +1 -0
  93. package/dist/shamar/resource-actions.d.ts +9 -0
  94. package/dist/shamar/resource-actions.d.ts.map +1 -0
  95. package/dist/shamar/resource-actions.js +42 -0
  96. package/dist/shamar/resource-actions.js.map +1 -0
  97. package/dist/shamar/view-context.d.ts +79 -0
  98. package/dist/shamar/view-context.d.ts.map +1 -0
  99. package/dist/shamar/view-context.js +74 -0
  100. package/dist/shamar/view-context.js.map +1 -0
  101. package/dist/types.d.ts +15 -0
  102. package/dist/types.d.ts.map +1 -0
  103. package/dist/types.js +2 -0
  104. package/dist/types.js.map +1 -0
  105. package/package.json +67 -0
  106. package/resources/views/shamar/dashboard.edge +24 -0
  107. package/resources/views/shamar/form.edge +87 -0
  108. package/resources/views/shamar/index.edge +149 -0
  109. package/resources/views/shamar/partials/boolean-value.edge +25 -0
  110. package/resources/views/shamar/partials/csrf.edge +1 -0
  111. package/resources/views/shamar/partials/detail-entry.edge +72 -0
  112. package/resources/views/shamar/partials/dialog-host.edge +125 -0
  113. package/resources/views/shamar/partials/field-affix-icon.edge +23 -0
  114. package/resources/views/shamar/partials/field-input.edge +585 -0
  115. package/resources/views/shamar/partials/field-relation-checkbox.edge +104 -0
  116. package/resources/views/shamar/partials/field-relation-m2m.edge +110 -0
  117. package/resources/views/shamar/partials/field-relation-m2o.edge +116 -0
  118. package/resources/views/shamar/partials/field-relation-table.edge +139 -0
  119. package/resources/views/shamar/partials/form-container.edge +82 -0
  120. package/resources/views/shamar/partials/icon.edge +14 -0
  121. package/resources/views/shamar/partials/list-row.edge +73 -0
  122. package/resources/views/shamar/partials/list-toolbar.edge +269 -0
  123. package/resources/views/shamar/partials/nav-mobile.edge +21 -0
  124. package/resources/views/shamar/partials/nav.edge +58 -0
  125. package/resources/views/shamar/partials/page-heading.edge +130 -0
  126. package/resources/views/shamar/partials/pagination.edge +73 -0
  127. package/resources/views/shamar/partials/record-pager.edge +37 -0
  128. package/resources/views/shamar/partials/schema-node.edge +289 -0
  129. package/resources/views/shamar/partials/shell-close.edge +20 -0
  130. package/resources/views/shamar/partials/shell-open.edge +51 -0
  131. package/resources/views/shamar/partials/toast.edge +5 -0
  132. package/resources/views/shamar/partials/topbar.edge +115 -0
  133. package/resources/views/shamar/show.edge +17 -0
  134. package/stubs/config/shamar.stub +29 -0
@@ -0,0 +1,564 @@
1
+ import { formatCurrencyValue, getRecordValue } from '@shamar/core';
2
+ import { parseListFilters } from './list-headers.js';
3
+ export const LIST_ALL_RECORDS_PER_PAGE = 1000;
4
+ /** Max IDs loaded for cyclic prev/next on show/edit (PyVELM-style). */
5
+ export const RECORD_NAV_CAP = 5000;
6
+ export function normalizeListQuery(raw, defaults) {
7
+ const sort = typeof raw.sort === 'string' ? raw.sort.trim() || undefined : undefined;
8
+ const direction = raw.direction === 'asc' || raw.direction === 'desc' ? raw.direction : undefined;
9
+ const search = typeof raw.search === 'string' ? raw.search.trim() || undefined : undefined;
10
+ const groupBy = typeof raw.groupBy === 'string' ? raw.groupBy.trim() || undefined : undefined;
11
+ const perPageRaw = raw.perPage;
12
+ const wantsAll = perPageRaw === 'all' || String(perPageRaw).toLowerCase() === 'all';
13
+ const perPage = wantsAll
14
+ ? LIST_ALL_RECORDS_PER_PAGE
15
+ : Math.min(LIST_ALL_RECORDS_PER_PAGE, Math.max(5, Number(perPageRaw) || defaults?.perPage || 15));
16
+ const page = Math.max(1, Number(raw.page) || 1);
17
+ const filters = parseListFilters(raw.filters);
18
+ return {
19
+ page,
20
+ perPage,
21
+ search,
22
+ sort,
23
+ direction: sort ? direction : undefined,
24
+ filters: filters.length ? filters : undefined,
25
+ groupBy,
26
+ };
27
+ }
28
+ export function buildListQueryString(query = {}, overrides = {}) {
29
+ const merged = { ...query, ...overrides };
30
+ const params = new URLSearchParams();
31
+ const search = merged.search != null ? String(merged.search).trim() : '';
32
+ if (search)
33
+ params.set('search', search);
34
+ const sort = merged.sort != null ? String(merged.sort).trim() : '';
35
+ if (sort) {
36
+ params.set('sort', sort);
37
+ if (merged.direction === 'asc' || merged.direction === 'desc') {
38
+ params.set('direction', merged.direction);
39
+ }
40
+ }
41
+ const perPageRaw = merged.perPage;
42
+ if (perPageRaw === 'all' ||
43
+ String(perPageRaw).toLowerCase() === 'all' ||
44
+ Number(perPageRaw) === LIST_ALL_RECORDS_PER_PAGE) {
45
+ params.set('perPage', 'all');
46
+ }
47
+ else {
48
+ const perPage = Number(perPageRaw);
49
+ if (perPage && perPage !== 15)
50
+ params.set('perPage', String(perPage));
51
+ }
52
+ const page = Number(merged.page);
53
+ if (page > 1)
54
+ params.set('page', String(page));
55
+ if (merged.filters != null) {
56
+ const filters = typeof merged.filters === 'string'
57
+ ? merged.filters
58
+ : Array.isArray(merged.filters)
59
+ ? JSON.stringify(merged.filters)
60
+ : '';
61
+ if (filters && filters !== '[]')
62
+ params.set('filters', filters);
63
+ }
64
+ const groupBy = merged.groupBy != null ? String(merged.groupBy).trim() : '';
65
+ if (groupBy)
66
+ params.set('groupBy', groupBy);
67
+ const value = params.toString();
68
+ return value ? `?${value}` : '';
69
+ }
70
+ export function listResourcePath(basePath, slug, query = {}, overrides = {}) {
71
+ return `${basePath}/${slug}${buildListQueryString(query, overrides)}`;
72
+ }
73
+ function paginationWindow(current, pageCount) {
74
+ if (pageCount <= 1)
75
+ return pageCount === 1 ? [1] : [];
76
+ if (pageCount <= 7) {
77
+ return Array.from({ length: pageCount }, (_, index) => index + 1);
78
+ }
79
+ const pages = new Set([1, pageCount, current]);
80
+ for (let offset = -1; offset <= 1; offset += 1) {
81
+ const page = current + offset;
82
+ if (page >= 1 && page <= pageCount)
83
+ pages.add(page);
84
+ }
85
+ const sorted = [...pages].sort((a, b) => a - b);
86
+ const result = [];
87
+ for (let index = 0; index < sorted.length; index += 1) {
88
+ const page = sorted[index];
89
+ if (index > 0 && page - sorted[index - 1] > 1) {
90
+ result.push('ellipsis');
91
+ }
92
+ result.push(page);
93
+ }
94
+ return result;
95
+ }
96
+ export function buildPaginationContext(basePath, slug, query, result) {
97
+ const links = paginationWindow(result.page, result.pageCount).map((entry) => {
98
+ if (entry === 'ellipsis') {
99
+ return { type: 'ellipsis' };
100
+ }
101
+ return {
102
+ type: 'page',
103
+ page: entry,
104
+ label: String(entry),
105
+ active: entry === result.page,
106
+ href: listResourcePath(basePath, slug, query, { page: entry }),
107
+ };
108
+ });
109
+ return {
110
+ page: result.page,
111
+ pageCount: result.pageCount,
112
+ total: result.total,
113
+ formAction: `${basePath}/${slug}`,
114
+ prevHref: result.page > 1
115
+ ? listResourcePath(basePath, slug, query, { page: result.page - 1 })
116
+ : undefined,
117
+ nextHref: result.page < result.pageCount
118
+ ? listResourcePath(basePath, slug, query, { page: result.page + 1 })
119
+ : undefined,
120
+ links,
121
+ };
122
+ }
123
+ export function sortColumnUrl(basePath, slug, query, column) {
124
+ const nextDirection = query.sort === column && query.direction !== 'desc' ? 'desc' : 'asc';
125
+ return listResourcePath(basePath, slug, query, {
126
+ sort: column,
127
+ direction: nextDirection,
128
+ page: 1,
129
+ });
130
+ }
131
+ /** List context preserved on show/edit links (search/sort only). */
132
+ export function recordNavQuery(query = {}) {
133
+ return buildListQueryString({
134
+ search: query.search,
135
+ sort: query.sort,
136
+ direction: query.direction,
137
+ });
138
+ }
139
+ export function recordPath(basePath, slug, id, mode, navQuery = '') {
140
+ const path = mode === 'edit'
141
+ ? `${basePath}/${slug}/${id}/edit`
142
+ : `${basePath}/${slug}/${id}`;
143
+ return `${path}${navQuery}`;
144
+ }
145
+ /**
146
+ * Build cyclic prev/next pager for the current ordered ID list.
147
+ * Returns null when the record is not in the set.
148
+ */
149
+ export function buildRecordPager(options) {
150
+ const ids = options.ids.map(String);
151
+ const idx = ids.indexOf(String(options.recordId));
152
+ if (idx < 0 || ids.length === 0)
153
+ return null;
154
+ const total = ids.length;
155
+ const prevId = total === 1 ? ids[0] : ids[(idx - 1 + total) % total];
156
+ const nextId = total === 1 ? ids[0] : ids[(idx + 1) % total];
157
+ const navQuery = options.navQuery ?? '';
158
+ return {
159
+ prevUrl: recordPath(options.basePath, options.slug, prevId, options.mode, navQuery),
160
+ nextUrl: recordPath(options.basePath, options.slug, nextId, options.mode, navQuery),
161
+ index: idx + 1,
162
+ total,
163
+ navQuery,
164
+ };
165
+ }
166
+ export function cellValue(record, column) {
167
+ const value = getRecordValue(record, column.name);
168
+ if (column.type === 'boolean' ||
169
+ column.format === 'boolean' ||
170
+ column.format === 'toggle') {
171
+ return value ? 'Yes' : 'No';
172
+ }
173
+ if (value == null || value === '')
174
+ return '—';
175
+ if (Array.isArray(value)) {
176
+ return value.map((item) => String(item)).filter(Boolean).join(', ') || '—';
177
+ }
178
+ if (column.format === 'currency' || column.currency) {
179
+ const formatted = formatCurrencyValue(value, column.currency ?? { code: 'USD', precision: 2 });
180
+ if (formatted != null)
181
+ return formatted;
182
+ }
183
+ const dateMode = resolveDateFormat(column);
184
+ if (dateMode) {
185
+ return formatDateValue(value, dateMode) ?? String(value);
186
+ }
187
+ return String(value);
188
+ }
189
+ export function detailValue(record, field) {
190
+ return cellValue(record, field);
191
+ }
192
+ /** Labels for badge rendering — one entry per array item (tags, multi-select, etc.). */
193
+ export function badgeValues(record, field) {
194
+ const value = getRecordValue(record, field.name);
195
+ if (value == null || value === '')
196
+ return [];
197
+ if (Array.isArray(value)) {
198
+ return value.map((item) => String(item).trim()).filter(Boolean);
199
+ }
200
+ const text = String(value).trim();
201
+ return text ? [text] : [];
202
+ }
203
+ function resolveDateFormat(column) {
204
+ if (column.format === 'date' || column.type === 'date')
205
+ return 'date';
206
+ if (column.format === 'datetime' || column.type === 'datetime')
207
+ return 'datetime';
208
+ return null;
209
+ }
210
+ /** Parse Date, ISO strings, YYYY-MM-DD, epoch ms, and Luxon-like objects. */
211
+ export function parseDateValue(value) {
212
+ if (value instanceof Date) {
213
+ return Number.isNaN(value.getTime()) ? null : value;
214
+ }
215
+ if (typeof value === 'number' && Number.isFinite(value)) {
216
+ const date = new Date(value);
217
+ return Number.isNaN(date.getTime()) ? null : date;
218
+ }
219
+ if (typeof value === 'string') {
220
+ const trimmed = value.trim();
221
+ if (!trimmed)
222
+ return null;
223
+ // Date-only: keep calendar day stable across timezones.
224
+ const dateOnly = /^(\d{4})-(\d{2})-(\d{2})$/.exec(trimmed);
225
+ if (dateOnly) {
226
+ const date = new Date(Number(dateOnly[1]), Number(dateOnly[2]) - 1, Number(dateOnly[3]));
227
+ return Number.isNaN(date.getTime()) ? null : date;
228
+ }
229
+ const date = new Date(trimmed);
230
+ return Number.isNaN(date.getTime()) ? null : date;
231
+ }
232
+ if (value && typeof value === 'object') {
233
+ const object = value;
234
+ if (typeof object.toJSDate === 'function') {
235
+ return parseDateValue(object.toJSDate());
236
+ }
237
+ if (typeof object.toISO === 'function') {
238
+ return parseDateValue(object.toISO());
239
+ }
240
+ if (typeof object.toISOString === 'function') {
241
+ return parseDateValue(object.toISOString());
242
+ }
243
+ }
244
+ return null;
245
+ }
246
+ /**
247
+ * Human-readable date / datetime (locale-aware).
248
+ * e.g. "Jan 15, 2024" or "Jan 15, 2024, 3:45 PM"
249
+ */
250
+ export function formatDateValue(value, mode) {
251
+ const date = parseDateValue(value);
252
+ if (!date)
253
+ return null;
254
+ if (mode === 'date') {
255
+ return new Intl.DateTimeFormat(undefined, {
256
+ year: 'numeric',
257
+ month: 'short',
258
+ day: 'numeric',
259
+ }).format(date);
260
+ }
261
+ return new Intl.DateTimeFormat(undefined, {
262
+ year: 'numeric',
263
+ month: 'short',
264
+ day: 'numeric',
265
+ hour: 'numeric',
266
+ minute: '2-digit',
267
+ }).format(date);
268
+ }
269
+ /**
270
+ * Normalize stored dates for native `date` / `datetime-local` inputs (local calendar).
271
+ */
272
+ export function toFormDateInputValue(value, mode) {
273
+ const date = parseDateValue(value);
274
+ if (!date)
275
+ return '';
276
+ const y = date.getFullYear();
277
+ const m = String(date.getMonth() + 1).padStart(2, '0');
278
+ const d = String(date.getDate()).padStart(2, '0');
279
+ if (mode === 'date')
280
+ return `${y}-${m}-${d}`;
281
+ const hh = String(date.getHours()).padStart(2, '0');
282
+ const mm = String(date.getMinutes()).padStart(2, '0');
283
+ return `${y}-${m}-${d}T${hh}:${mm}`;
284
+ }
285
+ /** Coerce adapter values into form-control-friendly state. */
286
+ export function toFormControlValue(value, field) {
287
+ if (field.type === 'date')
288
+ return toFormDateInputValue(value, 'date');
289
+ if (field.type === 'datetime')
290
+ return toFormDateInputValue(value, 'datetime');
291
+ if (field.type === 'number' || field.currency) {
292
+ if (value == null || value === '')
293
+ return '';
294
+ const num = typeof value === 'number' ? value : Number(value);
295
+ return Number.isFinite(num) ? num : value;
296
+ }
297
+ if (field.type === 'color' && (value == null || value === '')) {
298
+ return '#000000';
299
+ }
300
+ if (field.type === 'select' && field.multiple) {
301
+ if (Array.isArray(value))
302
+ return value.map((item) => String(item));
303
+ if (value == null || value === '')
304
+ return [];
305
+ return [String(value)];
306
+ }
307
+ return value;
308
+ }
309
+ /** Parse currency-ish user input into a finite number (or empty string). */
310
+ export function parseCurrencyInput(value) {
311
+ if (value == null || value === '')
312
+ return '';
313
+ if (typeof value === 'number')
314
+ return Number.isFinite(value) ? value : '';
315
+ const cleaned = String(value).replace(/[^\d.-]/g, '');
316
+ if (!cleaned || cleaned === '-' || cleaned === '.' || cleaned === '-.')
317
+ return '';
318
+ const num = Number(cleaned);
319
+ return Number.isFinite(num) ? num : '';
320
+ }
321
+ export function recordTitle(meta, record) {
322
+ const value = record[meta.recordTitleField];
323
+ if (value != null && value !== '')
324
+ return String(value);
325
+ const id = record.id;
326
+ return id != null ? `#${id}` : meta.singularLabel;
327
+ }
328
+ export function formInputType(field) {
329
+ switch (field.type) {
330
+ case 'email':
331
+ return 'email';
332
+ case 'password':
333
+ return 'password';
334
+ case 'number':
335
+ return 'number';
336
+ case 'tel':
337
+ return 'tel';
338
+ case 'url':
339
+ return 'url';
340
+ case 'date':
341
+ return 'date';
342
+ case 'datetime':
343
+ return 'datetime-local';
344
+ case 'color':
345
+ return 'color';
346
+ case 'hidden':
347
+ return 'hidden';
348
+ case 'file':
349
+ case 'image':
350
+ return 'file';
351
+ default:
352
+ return 'text';
353
+ }
354
+ }
355
+ function escapeAttr(value) {
356
+ return value
357
+ .replace(/&/g, '&amp;')
358
+ .replace(/"/g, '&quot;')
359
+ .replace(/</g, '&lt;')
360
+ .replace(/>/g, '&gt;');
361
+ }
362
+ /**
363
+ * Extra native attributes for text-like controls (min/max/length/pattern/etc.).
364
+ * Returned as a raw HTML attribute string for Edge `{{{ fieldInputAttrs(field) }}}`.
365
+ */
366
+ export function fieldInputAttrs(field) {
367
+ const parts = [];
368
+ if (field.autocomplete)
369
+ parts.push(`autocomplete="${escapeAttr(field.autocomplete)}"`);
370
+ if (field.inputMode)
371
+ parts.push(`inputmode="${escapeAttr(field.inputMode)}"`);
372
+ if (field.minLength != null)
373
+ parts.push(`minlength="${field.minLength}"`);
374
+ if (field.maxLength != null)
375
+ parts.push(`maxlength="${field.maxLength}"`);
376
+ if (field.minValue != null)
377
+ parts.push(`min="${escapeAttr(String(field.minValue))}"`);
378
+ if (field.maxValue != null)
379
+ parts.push(`max="${escapeAttr(String(field.maxValue))}"`);
380
+ if (field.step != null)
381
+ parts.push(`step="${escapeAttr(String(field.step))}"`);
382
+ if (field.pattern)
383
+ parts.push(`pattern="${escapeAttr(field.pattern)}"`);
384
+ if (field.accept)
385
+ parts.push(`accept="${escapeAttr(field.accept)}"`);
386
+ if (field.datalist?.length && field.name) {
387
+ parts.push(`list="datalist-${escapeAttr(field.name)}"`);
388
+ }
389
+ if (field.extraInputAttributes) {
390
+ for (const [key, value] of Object.entries(field.extraInputAttributes)) {
391
+ if (value == null || value === '') {
392
+ parts.push(escapeAttr(key));
393
+ }
394
+ else {
395
+ parts.push(`${escapeAttr(key)}="${escapeAttr(value)}"`);
396
+ }
397
+ }
398
+ }
399
+ return parts.join(' ');
400
+ }
401
+ export function fieldChecked(record, field) {
402
+ if (!record)
403
+ return false;
404
+ const value = record[field.name];
405
+ return value === true || value === 1 || value === '1';
406
+ }
407
+ export function formSections(meta) {
408
+ if (meta.form?.sections?.length) {
409
+ return meta.form.sections.map((section) => ({
410
+ name: section.name,
411
+ title: section.title,
412
+ description: section.description,
413
+ kind: section.kind ?? 'section',
414
+ icon: section.icon,
415
+ card: section.card ?? ((section.kind ?? 'section') === 'section'),
416
+ columns: section.columns ?? 2,
417
+ collapsible: section.collapsible,
418
+ collapsed: section.collapsed,
419
+ dense: section.dense,
420
+ gap: section.gap,
421
+ extraAttributes: section.extraAttributes,
422
+ fields: section.fields.filter((field) => !field.hiddenOnForm),
423
+ }));
424
+ }
425
+ return [
426
+ {
427
+ name: '_fields',
428
+ title: '',
429
+ kind: 'plain',
430
+ fields: meta.fields.filter((field) => !field.hiddenOnForm),
431
+ columns: 2,
432
+ },
433
+ ];
434
+ }
435
+ /** Nested schema tree for form rendering (Filament 5). */
436
+ export function formSchemaTree(meta) {
437
+ const tree = meta.form?.schema;
438
+ if (tree?.length)
439
+ return pruneFormNodes(tree);
440
+ return formSections(meta).map((section) => {
441
+ const s = section;
442
+ return {
443
+ kind: (s.kind ?? 'section'),
444
+ name: s.name,
445
+ title: s.title,
446
+ description: s.description,
447
+ icon: s.icon,
448
+ card: s.card,
449
+ columns: (s.columns ?? 2),
450
+ children: (s.fields ?? []).map((field) => ({
451
+ kind: 'field',
452
+ name: field.name,
453
+ columnSpan: field.columnSpan,
454
+ columnStart: field.columnStart,
455
+ field,
456
+ })),
457
+ };
458
+ });
459
+ }
460
+ function pruneFormNodes(nodes) {
461
+ return nodes
462
+ .map((node) => {
463
+ if (node.kind === 'field') {
464
+ if (node.field?.hiddenOnForm)
465
+ return null;
466
+ return node;
467
+ }
468
+ const children = node.children ? pruneFormNodes(node.children) : undefined;
469
+ return { ...node, children };
470
+ })
471
+ .filter((n) => n != null);
472
+ }
473
+ export function detailSections(meta) {
474
+ if (meta.infolist?.sections?.length) {
475
+ return meta.infolist.sections.map((section) => ({
476
+ name: section.name,
477
+ title: section.title,
478
+ description: section.description,
479
+ kind: section.kind ?? 'section',
480
+ icon: section.icon,
481
+ card: section.card ?? ((section.kind ?? 'section') === 'section'),
482
+ columns: section.columns ?? 2,
483
+ collapsible: section.collapsible,
484
+ collapsed: section.collapsed,
485
+ dense: section.dense,
486
+ gap: section.gap,
487
+ extraAttributes: section.extraAttributes,
488
+ entries: section.entries.filter((entry) => !entry.hiddenOnDetail),
489
+ fields: section.entries
490
+ .filter((entry) => !entry.hiddenOnDetail)
491
+ .map((entry) => entryToDetailField(entry)),
492
+ }));
493
+ }
494
+ return [
495
+ {
496
+ name: '_entries',
497
+ title: '',
498
+ kind: 'plain',
499
+ fields: meta.fields.filter((field) => !field.hiddenOnDetail),
500
+ columns: 2,
501
+ entries: [],
502
+ },
503
+ ];
504
+ }
505
+ /** Nested schema tree for detail/infolist rendering. */
506
+ export function detailSchemaTree(meta) {
507
+ const tree = meta.infolist?.schema;
508
+ if (tree?.length)
509
+ return pruneDetailNodes(tree);
510
+ return detailSections(meta).map((section) => {
511
+ const s = section;
512
+ return {
513
+ kind: (s.kind ?? 'section'),
514
+ name: s.name,
515
+ title: s.title,
516
+ description: s.description,
517
+ icon: s.icon,
518
+ card: s.card,
519
+ columns: (s.columns ?? 2),
520
+ children: (s.fields ?? []).map((field) => ({
521
+ kind: 'entry',
522
+ name: field.name,
523
+ columnSpan: field.columnSpan,
524
+ columnStart: field.columnStart,
525
+ entry: field,
526
+ })),
527
+ };
528
+ });
529
+ }
530
+ function entryToDetailField(entry) {
531
+ return {
532
+ name: entry.name,
533
+ type: entry.type,
534
+ label: entry.label ?? entry.name,
535
+ help: entry.help,
536
+ hint: entry.hint,
537
+ columnSpan: entry.columnSpan,
538
+ columnStart: entry.columnStart,
539
+ format: entry.format,
540
+ url: entry.url,
541
+ copyable: entry.copyable,
542
+ icon: entry.icon,
543
+ falseIcon: entry.falseIcon,
544
+ currency: entry.currency,
545
+ alignment: entry.alignment,
546
+ };
547
+ }
548
+ function pruneDetailNodes(nodes) {
549
+ return nodes
550
+ .map((node) => {
551
+ if (node.kind === 'entry') {
552
+ if (node.entry?.hiddenOnDetail)
553
+ return null;
554
+ return node;
555
+ }
556
+ if (node.kind === 'field')
557
+ return null;
558
+ const children = node.children ? pruneDetailNodes(node.children) : undefined;
559
+ return { ...node, children };
560
+ })
561
+ .filter((n) => n != null);
562
+ }
563
+ export { resolveGridItemStyle } from '@shamar/core';
564
+ //# sourceMappingURL=list-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-query.js","sourceRoot":"","sources":["../../src/shamar/list-query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { ResourceMeta } from '@shamar/core';
2
+ export interface MenuRoot {
3
+ label: string;
4
+ icon: string;
5
+ href: string;
6
+ rootIndex: number;
7
+ active: boolean;
8
+ }
9
+ export interface MenuSecondaryChild {
10
+ label: string;
11
+ href: string;
12
+ active: boolean;
13
+ icon?: string;
14
+ }
15
+ export interface MenuSecondaryItem {
16
+ label: string;
17
+ href?: string;
18
+ active: boolean;
19
+ icon?: string;
20
+ children?: MenuSecondaryChild[];
21
+ }
22
+ export interface Breadcrumb {
23
+ label: string;
24
+ href?: string;
25
+ }
26
+ export interface MenuLayoutContext {
27
+ menuRoots: MenuRoot[];
28
+ menuActiveRoot: MenuRoot | null;
29
+ menuActiveRootIndex: number | null;
30
+ menuSecondary: MenuSecondaryItem[];
31
+ breadcrumbs: Breadcrumb[];
32
+ }
33
+ export interface NavigationGroup {
34
+ name: string;
35
+ icon?: string;
36
+ sort?: number;
37
+ items: ResourceMeta[];
38
+ }
39
+ /** Extra crumbs for create / show / edit record pages. */
40
+ export interface RecordBreadcrumbOptions {
41
+ mode?: 'create' | 'edit' | 'show';
42
+ /** Human record title (e.g. company name). */
43
+ recordTitle?: string;
44
+ /** Show/detail URL — linked from the record crumb on edit. */
45
+ recordHref?: string;
46
+ }
47
+ export declare function menuLayoutContext(groups: NavigationGroup[], basePath: string, currentSlug?: string, pageTitle?: string, record?: RecordBreadcrumbOptions): MenuLayoutContext;
48
+ //# sourceMappingURL=menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/shamar/menu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAC;IAChC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,0DAA0D;AAC1D,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAqBD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,eAAe,EAAE,EACzB,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,uBAAuB,GAC/B,iBAAiB,CAoFnB"}