@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,218 @@
1
+ import { getRecordValue, humanizeLabel } from '@shamar/core';
2
+ function isBooleanColumn(column) {
3
+ return (column.type === 'boolean' ||
4
+ column.format === 'boolean' ||
5
+ column.format === 'toggle');
6
+ }
7
+ function findFormField(meta, columnName) {
8
+ const direct = meta.fields.find((field) => field.name === columnName);
9
+ if (direct)
10
+ return direct;
11
+ if (!columnName.includes('.'))
12
+ return undefined;
13
+ const [relName] = columnName.split('.');
14
+ if (!relName)
15
+ return undefined;
16
+ return meta.fields.find((field) => {
17
+ if (!field.relation || field.relation.kind !== 'belongsTo')
18
+ return false;
19
+ if (field.name === `${relName}Id`)
20
+ return true;
21
+ const resource = field.relation.resource;
22
+ // companies → company, users → user
23
+ const singular = resource.endsWith('ies')
24
+ ? `${resource.slice(0, -3)}y`
25
+ : resource.endsWith('s')
26
+ ? resource.slice(0, -1)
27
+ : resource;
28
+ return singular === relName;
29
+ });
30
+ }
31
+ function selectOptions(field) {
32
+ if (!Array.isArray(field.options) || field.options.length === 0)
33
+ return undefined;
34
+ return field.options.map((opt) => ({
35
+ label: String(opt.label ?? opt.value),
36
+ value: opt.value,
37
+ }));
38
+ }
39
+ /**
40
+ * Build toolbar headers for Filters / Group menus.
41
+ * Boolean columns, matching Select fields, and BelongsTo display columns are included by default.
42
+ */
43
+ export function buildListHeaders(meta) {
44
+ const headers = [];
45
+ for (const column of meta.columns) {
46
+ const label = column.label ?? humanizeLabel(column.name);
47
+ const field = findFormField(meta, column.name);
48
+ const explicitFilter = column.filterable === true;
49
+ const explicitGroup = column.groupable === true;
50
+ const denyFilter = column.filterable === false;
51
+ const denyGroup = column.groupable === false;
52
+ let filter_kind;
53
+ let group_kind;
54
+ let filterField = column.name;
55
+ let options;
56
+ if (isBooleanColumn(column) && !denyFilter) {
57
+ filter_kind = 'boolean';
58
+ if (!denyGroup)
59
+ group_kind = 'boolean';
60
+ }
61
+ else if (field?.type === 'select' && field.options?.length && !denyFilter) {
62
+ filter_kind = 'select';
63
+ options = selectOptions(field);
64
+ if (!denyGroup)
65
+ group_kind = 'select';
66
+ }
67
+ else if (field?.relation?.kind === 'belongsTo' && !denyFilter) {
68
+ filter_kind = 'm2o';
69
+ filterField = field.name;
70
+ if (!denyGroup)
71
+ group_kind = 'm2o';
72
+ }
73
+ else if (explicitFilter && field?.type === 'select' && field.options?.length) {
74
+ filter_kind = 'select';
75
+ options = selectOptions(field);
76
+ }
77
+ else if (explicitFilter && field?.relation?.kind === 'belongsTo') {
78
+ filter_kind = 'm2o';
79
+ filterField = field.name;
80
+ }
81
+ if (explicitGroup && !group_kind) {
82
+ if (isBooleanColumn(column))
83
+ group_kind = 'boolean';
84
+ else if (field?.type === 'select')
85
+ group_kind = 'select';
86
+ else if (field?.relation?.kind === 'belongsTo') {
87
+ group_kind = 'm2o';
88
+ filterField = field.name;
89
+ }
90
+ else {
91
+ group_kind = 'select';
92
+ }
93
+ }
94
+ if (!filter_kind && !group_kind && !explicitFilter && !explicitGroup) {
95
+ continue;
96
+ }
97
+ if (explicitFilter && !filter_kind && isBooleanColumn(column)) {
98
+ filter_kind = 'boolean';
99
+ }
100
+ if (!filter_kind && !group_kind)
101
+ continue;
102
+ headers.push({
103
+ name: column.name,
104
+ label,
105
+ filter_kind,
106
+ group_kind,
107
+ filterField: filterField !== column.name ? filterField : undefined,
108
+ options,
109
+ });
110
+ }
111
+ return headers;
112
+ }
113
+ export function parseListFilters(raw) {
114
+ if (raw == null || raw === '')
115
+ return [];
116
+ let parsed = raw;
117
+ if (typeof raw === 'string') {
118
+ try {
119
+ parsed = JSON.parse(raw);
120
+ }
121
+ catch {
122
+ return [];
123
+ }
124
+ }
125
+ if (!Array.isArray(parsed))
126
+ return [];
127
+ const filters = [];
128
+ for (const entry of parsed) {
129
+ if (!entry || typeof entry !== 'object')
130
+ continue;
131
+ const item = entry;
132
+ const field = String(item.field ?? '').trim();
133
+ if (!field)
134
+ continue;
135
+ const op = item.op === '!=' || item.op === 'ilike' || item.op === '='
136
+ ? item.op
137
+ : '=';
138
+ filters.push({
139
+ field,
140
+ op,
141
+ value: item.value,
142
+ label: item.label != null ? String(item.label) : undefined,
143
+ });
144
+ }
145
+ return filters;
146
+ }
147
+ /** Fill missing chip labels for default / URL filters using list headers. */
148
+ export function labelListFilters(filters, headers) {
149
+ return filters.map((filter) => {
150
+ if (filter.label)
151
+ return { ...filter };
152
+ const header = headers.find((entry) => entry.name === filter.field || entry.filterField === filter.field);
153
+ const labelBase = header?.label ?? filter.field;
154
+ let valueLabel = String(filter.value ?? '');
155
+ if (typeof filter.value === 'boolean') {
156
+ valueLabel = filter.value ? 'Yes' : 'No';
157
+ }
158
+ else if (header?.options?.length) {
159
+ const match = header.options.find((opt) => String(opt.value) === String(filter.value));
160
+ if (match)
161
+ valueLabel = match.label;
162
+ }
163
+ return {
164
+ ...filter,
165
+ label: `${labelBase}: ${valueLabel}`,
166
+ };
167
+ });
168
+ }
169
+ /**
170
+ * Resolve resource defaultFilters, mapping column names to filter fields when needed.
171
+ */
172
+ export function resolveDefaultFilters(meta, headers) {
173
+ const defaults = meta.defaultFilters ?? [];
174
+ if (!defaults.length)
175
+ return [];
176
+ const mapped = defaults.map((filter) => {
177
+ const header = headers.find((entry) => entry.name === filter.field || entry.filterField === filter.field);
178
+ return {
179
+ ...filter,
180
+ field: header?.filterField || filter.field,
181
+ };
182
+ });
183
+ return labelListFilters(mapped, headers);
184
+ }
185
+ /** Group consecutive records for table rendering (caller should sort by groupBy first). */
186
+ export function groupRecordsForDisplay(items, groupBy, headers) {
187
+ if (!groupBy || !items.length)
188
+ return null;
189
+ const header = headers.find((h) => h.name === groupBy || h.filterField === groupBy);
190
+ const sections = [];
191
+ for (const item of items) {
192
+ const raw = getRecordValue(item, groupBy);
193
+ const key = raw == null || raw === '' ? '__empty__' : String(raw);
194
+ let label;
195
+ if (raw == null || raw === '') {
196
+ label = 'None';
197
+ }
198
+ else if (typeof raw === 'boolean') {
199
+ label = raw ? 'Yes' : 'No';
200
+ }
201
+ else if (header?.options?.length) {
202
+ const match = header.options.find((opt) => String(opt.value) === String(raw));
203
+ label = match ? match.label : String(raw);
204
+ }
205
+ else {
206
+ label = String(raw);
207
+ }
208
+ const last = sections[sections.length - 1];
209
+ if (last && last.key === key) {
210
+ last.items.push(item);
211
+ }
212
+ else {
213
+ sections.push({ key, label, items: [item] });
214
+ }
215
+ }
216
+ return sections;
217
+ }
218
+ //# sourceMappingURL=list-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-headers.js","sourceRoot":"","sources":["../../src/shamar/list-headers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,229 @@
1
+ import type { ListQuery, PaginatedResult, ResourceMeta } from '@shamar/core';
2
+ export interface ListViewQuery {
3
+ search?: string;
4
+ sort?: string;
5
+ direction?: string;
6
+ perPage?: number | string;
7
+ page?: number | string;
8
+ filters?: string | unknown[];
9
+ groupBy?: string;
10
+ trashed?: string | boolean;
11
+ }
12
+ export interface PaginationLink {
13
+ type: 'page' | 'ellipsis';
14
+ page?: number;
15
+ label?: string;
16
+ active?: boolean;
17
+ href?: string;
18
+ }
19
+ export interface PaginationContext {
20
+ page: number;
21
+ pageCount: number;
22
+ total: number;
23
+ formAction: string;
24
+ prevHref?: string;
25
+ nextHref?: string;
26
+ links: PaginationLink[];
27
+ }
28
+ export declare const LIST_ALL_RECORDS_PER_PAGE = 1000;
29
+ /** Max IDs loaded for cyclic prev/next on show/edit (PyVELM-style). */
30
+ export declare const RECORD_NAV_CAP = 5000;
31
+ export interface RecordPager {
32
+ prevUrl: string;
33
+ nextUrl: string;
34
+ index: number;
35
+ total: number;
36
+ /** Query string including leading `?`, or empty. */
37
+ navQuery: string;
38
+ }
39
+ export declare function normalizeListQuery(raw: ListViewQuery, defaults?: {
40
+ perPage?: number;
41
+ }): ListQuery;
42
+ export declare function buildListQueryString(query?: ListViewQuery, overrides?: ListViewQuery): string;
43
+ export declare function listResourcePath(basePath: string, slug: string, query?: ListViewQuery, overrides?: ListViewQuery): string;
44
+ export declare function buildPaginationContext(basePath: string, slug: string, query: ListViewQuery, result: PaginatedResult): PaginationContext;
45
+ export declare function sortColumnUrl(basePath: string, slug: string, query: ListViewQuery, column: string): string;
46
+ /** List context preserved on show/edit links (search/sort only). */
47
+ export declare function recordNavQuery(query?: ListViewQuery): string;
48
+ export declare function recordPath(basePath: string, slug: string, id: string | number, mode: 'show' | 'edit', navQuery?: string): string;
49
+ /**
50
+ * Build cyclic prev/next pager for the current ordered ID list.
51
+ * Returns null when the record is not in the set.
52
+ */
53
+ export declare function buildRecordPager(options: {
54
+ basePath: string;
55
+ slug: string;
56
+ recordId: string;
57
+ mode: 'show' | 'edit';
58
+ ids: string[];
59
+ navQuery?: string;
60
+ }): RecordPager | null;
61
+ export declare function cellValue(record: Record<string, unknown>, column: {
62
+ name: string;
63
+ type?: string;
64
+ format?: string;
65
+ currency?: {
66
+ code: string;
67
+ locale?: string;
68
+ precision?: number;
69
+ };
70
+ }): string;
71
+ export declare function detailValue(record: Record<string, unknown>, field: {
72
+ name: string;
73
+ type?: string;
74
+ format?: string;
75
+ currency?: {
76
+ code: string;
77
+ locale?: string;
78
+ precision?: number;
79
+ };
80
+ }): string;
81
+ /** Labels for badge rendering — one entry per array item (tags, multi-select, etc.). */
82
+ export declare function badgeValues(record: Record<string, unknown>, field: {
83
+ name: string;
84
+ }): string[];
85
+ /** Parse Date, ISO strings, YYYY-MM-DD, epoch ms, and Luxon-like objects. */
86
+ export declare function parseDateValue(value: unknown): Date | null;
87
+ /**
88
+ * Human-readable date / datetime (locale-aware).
89
+ * e.g. "Jan 15, 2024" or "Jan 15, 2024, 3:45 PM"
90
+ */
91
+ export declare function formatDateValue(value: unknown, mode: 'date' | 'datetime'): string | null;
92
+ /**
93
+ * Normalize stored dates for native `date` / `datetime-local` inputs (local calendar).
94
+ */
95
+ export declare function toFormDateInputValue(value: unknown, mode: 'date' | 'datetime'): string;
96
+ /** Coerce adapter values into form-control-friendly state. */
97
+ export declare function toFormControlValue(value: unknown, field: {
98
+ type: string;
99
+ currency?: {
100
+ precision?: number;
101
+ };
102
+ }): unknown;
103
+ /** Parse currency-ish user input into a finite number (or empty string). */
104
+ export declare function parseCurrencyInput(value: unknown): number | '';
105
+ export declare function recordTitle(meta: ResourceMeta, record: Record<string, unknown>): string;
106
+ export declare function formInputType(field: {
107
+ type: string;
108
+ revealable?: boolean;
109
+ }): string;
110
+ /**
111
+ * Extra native attributes for text-like controls (min/max/length/pattern/etc.).
112
+ * Returned as a raw HTML attribute string for Edge `{{{ fieldInputAttrs(field) }}}`.
113
+ */
114
+ export declare function fieldInputAttrs(field: {
115
+ autocomplete?: string;
116
+ inputMode?: string;
117
+ minLength?: number;
118
+ maxLength?: number;
119
+ minValue?: number | string;
120
+ maxValue?: number | string;
121
+ step?: number | string;
122
+ pattern?: string;
123
+ accept?: string;
124
+ datalist?: string[];
125
+ name?: string;
126
+ extraInputAttributes?: Record<string, string>;
127
+ }): string;
128
+ export declare function fieldChecked(record: Record<string, unknown> | null, field: {
129
+ name: string;
130
+ }): boolean;
131
+ export declare function formSections(meta: ResourceMeta): {
132
+ name: string;
133
+ title: string;
134
+ description: string | undefined;
135
+ kind: "section" | "fieldset" | "plain";
136
+ icon: string | undefined;
137
+ card: boolean;
138
+ columns: 2 | 1 | 3 | 4;
139
+ collapsible: boolean | undefined;
140
+ collapsed: boolean | undefined;
141
+ dense: boolean | undefined;
142
+ gap: boolean | undefined;
143
+ extraAttributes: Record<string, string> | undefined;
144
+ fields: import("@shamar/core").FieldConfig[];
145
+ }[] | {
146
+ name: string;
147
+ title: string;
148
+ kind: "plain";
149
+ fields: import("@shamar/core").FieldConfig[];
150
+ columns: 2;
151
+ }[];
152
+ /** Nested schema tree for form rendering (Filament 5). */
153
+ export declare function formSchemaTree(meta: ResourceMeta): import("@shamar/core").SchemaNode[] | {
154
+ kind: "section" | "fieldset" | "plain";
155
+ name: string;
156
+ title: string | undefined;
157
+ description: string | undefined;
158
+ icon: string | undefined;
159
+ card: boolean | undefined;
160
+ columns: 1 | 2 | 3 | 4;
161
+ children: {
162
+ kind: "field";
163
+ name: string;
164
+ columnSpan: import("@shamar/core").ColumnSpan | undefined;
165
+ columnStart: number | undefined;
166
+ field: import("@shamar/core").FieldConfig;
167
+ }[];
168
+ }[];
169
+ export declare function detailSections(meta: ResourceMeta): {
170
+ name: string;
171
+ title: string;
172
+ description: string | undefined;
173
+ kind: "section" | "fieldset" | "plain";
174
+ icon: string | undefined;
175
+ card: boolean;
176
+ columns: 2 | 1 | 3 | 4;
177
+ collapsible: boolean | undefined;
178
+ collapsed: boolean | undefined;
179
+ dense: boolean | undefined;
180
+ gap: boolean | undefined;
181
+ extraAttributes: Record<string, string> | undefined;
182
+ entries: import("@shamar/core").InfolistEntryConfig[];
183
+ fields: {
184
+ name: string;
185
+ type: string;
186
+ label: string;
187
+ help: string | undefined;
188
+ hint: string | undefined;
189
+ columnSpan: unknown;
190
+ columnStart: number | undefined;
191
+ format: string | undefined;
192
+ url: string | boolean | undefined;
193
+ copyable: boolean | undefined;
194
+ icon: string | undefined;
195
+ falseIcon: string | undefined;
196
+ currency: {
197
+ code: string;
198
+ locale?: string;
199
+ precision?: number;
200
+ } | undefined;
201
+ alignment: string | undefined;
202
+ }[];
203
+ }[] | {
204
+ name: string;
205
+ title: string;
206
+ kind: "plain";
207
+ fields: import("@shamar/core").FieldConfig[];
208
+ columns: 2;
209
+ entries: never[];
210
+ }[];
211
+ /** Nested schema tree for detail/infolist rendering. */
212
+ export declare function detailSchemaTree(meta: ResourceMeta): import("@shamar/core").SchemaNode[] | {
213
+ kind: "section" | "fieldset" | "plain";
214
+ name: string;
215
+ title: string | undefined;
216
+ description: string | undefined;
217
+ icon: string | undefined;
218
+ card: boolean | undefined;
219
+ columns: 1 | 2 | 3 | 4;
220
+ children: {
221
+ kind: "entry";
222
+ name: string;
223
+ columnSpan: import("@shamar/core").ColumnSpan | undefined;
224
+ columnStart: number | undefined;
225
+ entry: import("@shamar/core").InfolistEntryConfig;
226
+ }[];
227
+ }[];
228
+ export { resolveGridItemStyle } from '@shamar/core';
229
+ //# sourceMappingURL=list-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-query.d.ts","sourceRoot":"","sources":["../../src/shamar/list-query.ts"],"names":[],"mappings":"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"}