@mmlogic/components 0.5.16 → 0.5.17

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 (42) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/mosterdcomponents.cjs.js +1 -1
  3. package/dist/cjs/mrd-boolean-field_28.cjs.entry.js +158 -20
  4. package/dist/collection/collection-manifest.json +2 -2
  5. package/dist/collection/components/documents/mrd-document-container/mrd-document-container.js +31 -4
  6. package/dist/collection/components/layout/mrd-layout-section/mrd-layout-section.js +131 -12
  7. package/dist/collection/components/memo/mrd-memo-container/mrd-memo-container.js +28 -4
  8. package/dist/collection/components/table/mrd-table/mrd-table.js +105 -2
  9. package/dist/collection/dev/api.js +17 -0
  10. package/dist/collection/dev/app.js +36 -0
  11. package/dist/components/mrd-document-container2.js +1 -1
  12. package/dist/components/mrd-layout-section.js +1 -1
  13. package/dist/components/mrd-memo-container2.js +1 -1
  14. package/dist/components/mrd-table2.js +1 -1
  15. package/dist/esm/loader.js +1 -1
  16. package/dist/esm/mosterdcomponents.js +1 -1
  17. package/dist/esm/mrd-boolean-field_28.entry.js +158 -20
  18. package/dist/mosterdcomponents/mosterdcomponents.esm.js +1 -1
  19. package/dist/mosterdcomponents/p-f72668e9.entry.js +3 -0
  20. package/dist/types/components/documents/mrd-document-container/mrd-document-container.d.ts +7 -0
  21. package/dist/types/components/layout/mrd-layout-section/mrd-layout-section.d.ts +47 -0
  22. package/dist/types/components/memo/mrd-memo-container/mrd-memo-container.d.ts +4 -0
  23. package/dist/types/components/table/mrd-table/mrd-table.d.ts +45 -0
  24. package/dist/types/components.d.ts +49 -0
  25. package/package.json +1 -1
  26. package/dist/mosterdcomponents/cell-renderer-CMUxFREW.js.map +0 -1
  27. package/dist/mosterdcomponents/client-layout-BJkVeSq6.js.map +0 -1
  28. package/dist/mosterdcomponents/document-attachments-BufPmMRv.js.map +0 -1
  29. package/dist/mosterdcomponents/field-helpers-BWAp5fD8.js.map +0 -1
  30. package/dist/mosterdcomponents/file-upload-common-DDWuC9-3.js.map +0 -1
  31. package/dist/mosterdcomponents/format-gcecItcD.js.map +0 -1
  32. package/dist/mosterdcomponents/i18n-OzbszktW.js.map +0 -1
  33. package/dist/mosterdcomponents/index-1ayBojyN.js.map +0 -1
  34. package/dist/mosterdcomponents/index-CkcFwdPc.js.map +0 -1
  35. package/dist/mosterdcomponents/index.esm.js.map +0 -1
  36. package/dist/mosterdcomponents/mosterdcomponents.esm.js.map +0 -1
  37. package/dist/mosterdcomponents/p-8a7fa81d.entry.js +0 -3
  38. package/dist/mosterdcomponents/purify.es-_duHfPgC.js.map +0 -1
  39. package/dist/mosterdcomponents/query-params-3TXd5CUO.js.map +0 -1
  40. package/dist/mosterdcomponents/quill-C9pgw_k-.js.map +0 -1
  41. package/dist/mosterdcomponents/table-query-DJq1uKqJ.js.map +0 -1
  42. package/dist/mosterdcomponents/validation-B_0Lx9DE.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-query-DJq1uKqJ.js","sources":["src/components/table/mrd-table/table-query.ts"],"sourcesContent":["import { ColumnFilter, TableColumn } from '../../../utils/cell-renderer';\nimport { ViewFilter } from '../../../types/client-layout';\nimport { applyViewFilters } from '../../../utils/query-params';\n\n/**\n * Pure sort/filter/aggregation query logic for mrd-table.\n * No component state — everything is passed in.\n */\n\nexport const TEXT_TYPES = new Set(['TEXT', 'TEXTBLOCK', 'EMAIL', 'HYPERLINK']);\nexport const NUMERIC_TYPES = new Set(['INTEGER', 'DECIMAL', 'PERCENTAGE', 'CURRENCY']);\nexport const DATE_TYPES = new Set(['DATE', 'DATETIME', 'TIME']);\nexport const NO_FILTER_TYPES = new Set(['FILE', 'IMAGE']);\n\n/** Column types that cannot be sorted or filtered (not stored in PostgreSQL). */\nexport const NON_INTERACTIVE_TYPES = new Set(['LONGTEXT', 'JSON', 'FILE', 'IMAGE']);\n\n/** Wait this long (ms) after the user stops typing in the free-text search box\n * before firing the search request — mirrors REQUEST_DEBOUNCE_MS's purpose\n * (skip intermediate keystrokes) but is tuned for typing, not scrolling. */\nexport const SEARCH_DEBOUNCE_MS = 400;\n\nexport function parseDefaultSort(defaultSort: string): { field: string; dir: 'asc' | 'desc' } {\n if (!defaultSort) return { field: '', dir: 'asc' };\n const parts = defaultSort.split(',');\n return { field: parts[0].trim(), dir: parts[1]?.trim() === 'desc' ? 'desc' : 'asc' };\n}\n\n/** Raw sort query-param value, e.g. \"name\" or \"name,desc\". */\nexport function buildSortParam(field: string, dir: 'asc' | 'desc'): string {\n if (!field) return '';\n return dir === 'desc' ? `${field},desc` : field;\n}\n\n/** Query params for a page request: page + sort + filterClass + view filters + active column filters. */\nexport function buildTableQueryParams(opts: {\n page: number;\n sort: string;\n filterClass?: string | null;\n viewFilters?: ViewFilter[] | null;\n activeFilters: Iterable<ColumnFilter>;\n /** Free-text search query from the toolbar's search box (VIEW only). */\n query?: string;\n}): string {\n const p = new URLSearchParams();\n if (opts.page > 0) p.set('page', String(opts.page));\n if (opts.sort) p.set('sort', opts.sort);\n if (opts.filterClass) p.set('type', opts.filterClass);\n applyViewFilters(p, opts.viewFilters);\n if (opts.query) p.set('q', opts.query);\n for (const f of opts.activeFilters) {\n if (f.operator === 'isEmpty') { p.set(f.field, ''); continue; }\n if (f.operator === 'isNotEmpty') { p.set(f.field + '_notempty', 'true'); continue; }\n if (f.operator === 'startsWith') { p.set(f.field + '_startswith', String(f.value ?? '')); continue; }\n if (f.values?.length) { p.set(f.field, f.values.join(',')); continue; }\n if (f.value != null) p.set(f.field, String(f.value));\n if (f.from != null) p.set(f.field + '_from', String(f.from));\n if (f.to != null) p.set(f.field + '_to', String(f.to));\n }\n return p.toString();\n}\n\n/** Groups aggregate columns by function; null when the view has no aggregates. */\nexport function buildAggregationParams(columns: TableColumn[]): { sum?: string[]; avg?: string[]; count?: string[] } | null {\n const groups: { sum: string[]; avg: string[]; count: string[] } = { sum: [], avg: [], count: [] };\n for (const col of columns) {\n if (col.type !== 'FIELD' || !col.aggregate) continue;\n const fn = col.aggregate.toLowerCase() as 'sum' | 'avg' | 'count';\n if (fn in groups) groups[fn].push(col.name ?? '');\n }\n const params: { sum?: string[]; avg?: string[]; count?: string[] } = {};\n if (groups.sum.length) params.sum = groups.sum;\n if (groups.avg.length) params.avg = groups.avg;\n if (groups.count.length) params.count = groups.count;\n return Object.keys(params).length > 0 ? params : null;\n}\n\n/** Aggregation query string: the page-0 query params without page/sort, plus sum/avg/count. */\nexport function buildAggregationQs(basePageQs: string, columns: TableColumn[]): string {\n const p = new URLSearchParams(basePageQs);\n p.delete('page');\n p.delete('sort');\n const groups = buildAggregationParams(columns);\n if (groups?.sum?.length) p.set('sum', groups.sum.join(','));\n if (groups?.avg?.length) p.set('avg', groups.avg.join(','));\n if (groups?.count?.length) p.set('count', groups.count.join(','));\n return p.toString();\n}\n\n/** True when the pending filter actually constrains anything. */\nexport function filterHasValue(f: Partial<ColumnFilter>): boolean {\n if (f.operator === 'isEmpty' || f.operator === 'isNotEmpty') return true;\n if (f.values !== undefined && f.values.length > 0) return true;\n if (f.value != null && f.value !== '') return true;\n if (typeof f.value === 'boolean') return true;\n if (f.from != null && f.from !== '') return true;\n if (f.to != null && f.to !== '') return true;\n return false;\n}\n\n// ── DATETIME filters: the user edits local \"YYYY-MM-DD\" dates, the API stores UTC ISO ──\n\n/** UTC ISO string at the start (midnight) of the given local day. */\nexport function dateLocalToUTCStart(dateStr: string): string {\n if (!dateStr) return dateStr;\n const [year, month, day] = dateStr.split('-').map(Number);\n return new Date(year, month - 1, day).toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n}\n\n/** Start of the day AFTER the given local date (exclusive range end). */\nexport function dateLocalToUTCEndExclusive(dateStr: string): string {\n if (!dateStr) return dateStr;\n const [year, month, day] = dateStr.split('-').map(Number);\n return new Date(year, month - 1, day + 1).toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n}\n\n/** Stored UTC ISO string back to the local \"YYYY-MM-DD\" date. */\nexport function utcISOToLocalDate(utcStr: string): string {\n if (!utcStr) return utcStr;\n const d = new Date(utcStr);\n if (isNaN(d.getTime())) return utcStr;\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;\n}\n\n/** The stored \"to\" is the exclusive end (next midnight); subtract a day to recover the entered date. */\nexport function utcISOToLocalDateExclusiveEnd(utcStr: string): string {\n if (!utcStr) return utcStr;\n const d = new Date(utcStr);\n if (isNaN(d.getTime())) return utcStr;\n d.setDate(d.getDate() - 1);\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;\n}\n\n/** Applies the local→UTC conversion when a DATETIME filter is submitted.\n * Exact date → range covering the full local day. */\nexport function normalizeDatetimeFilter(f: Partial<ColumnFilter>): Partial<ColumnFilter> {\n const normalized = { ...f };\n if (f.dataType === 'DATETIME' && f.operator !== 'isEmpty' && f.operator !== 'isNotEmpty') {\n if (typeof normalized.value === 'string' && normalized.value) {\n normalized.from = dateLocalToUTCStart(normalized.value);\n normalized.to = dateLocalToUTCEndExclusive(normalized.value);\n normalized.value = undefined;\n } else {\n if (typeof normalized.from === 'string' && normalized.from)\n normalized.from = dateLocalToUTCStart(normalized.from);\n if (typeof normalized.to === 'string' && normalized.to)\n normalized.to = dateLocalToUTCEndExclusive(normalized.to);\n }\n }\n return normalized;\n}\n\n/** Converts a stored DATETIME filter back to local dates for the popup.\n * A range covering a single local day is restored to exact-date mode. */\nexport function datetimeFilterToDisplay(existing: ColumnFilter): Partial<ColumnFilter> {\n const display: Partial<ColumnFilter> = { ...existing };\n if (typeof display.from === 'string' && display.from)\n display.from = utcISOToLocalDate(display.from);\n if (typeof display.to === 'string' && display.to)\n display.to = utcISOToLocalDateExclusiveEnd(display.to);\n if (display.from && display.to && display.from === display.to) {\n return { ...display, value: display.from, from: undefined, to: undefined };\n }\n return display;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation-B_0Lx9DE.js","sources":["src/utils/validation.ts"],"sourcesContent":["import { ClientLayoutItemFieldDataType } from '../types';\n\nexport function validateRequired(value: unknown): boolean {\n if (value === null || value === undefined) return false;\n if (typeof value === 'string') return value.trim().length > 0;\n if (Array.isArray(value)) return value.length > 0;\n if (typeof value === 'object') {\n // HyperlinkValue check\n const hv = value as { href?: unknown };\n if ('href' in hv) return typeof hv.href === 'string' && hv.href.trim().length > 0;\n // CurrencyValue check\n const cv = value as { amount?: unknown };\n if ('amount' in cv) return cv.amount !== null && cv.amount !== undefined && cv.amount !== '';\n }\n return true;\n}\n\nexport function validateEmail(value: string): boolean {\n if (!value) return true;\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\n}\n\nexport function validateUrl(value: string): boolean {\n if (!value) return true;\n try {\n const url = new URL(value);\n return url.protocol === 'http:' || url.protocol === 'https:';\n } catch {\n return false;\n }\n}\n\nexport function validateNumber(value: unknown, dataType: ClientLayoutItemFieldDataType): boolean {\n if (value === null || value === undefined || value === '') return true;\n const num = Number(value);\n if (isNaN(num)) return false;\n if (dataType === ClientLayoutItemFieldDataType.INTEGER) {\n return Number.isInteger(num);\n }\n if (dataType === ClientLayoutItemFieldDataType.PERCENTAGE) {\n return num >= 0 && num <= 100;\n }\n return true;\n}\n"],"names":[],"mappings":";;;AAEM,SAAU,gBAAgB,CAAC,KAAc,EAAA;AAC7C,IAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAAE,QAAA,OAAO,KAAK;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AAC7D,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;AACjD,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;QAE7B,MAAM,EAAE,GAAG,KAA2B;QACtC,IAAI,MAAM,IAAI,EAAE;AAAE,YAAA,OAAO,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;;QAEjF,MAAM,EAAE,GAAG,KAA6B;QACxC,IAAI,QAAQ,IAAI,EAAE;AAAE,YAAA,OAAO,EAAE,CAAC,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE;;AAE9F,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,aAAa,CAAC,KAAa,EAAA;AACzC,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AACvB,IAAA,OAAO,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC;AACjD;AAEM,SAAU,WAAW,CAAC,KAAa,EAAA;AACvC,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AACvB,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;QAC1B,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ;;IAC5D,OAAA,EAAA,EAAM;AACN,QAAA,OAAO,KAAK;;AAEhB;AAEM,SAAU,cAAc,CAAC,KAAc,EAAE,QAAuC,EAAA;IACpF,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;AAAE,QAAA,OAAO,IAAI;AACtE,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC;IACzB,IAAI,KAAK,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,KAAK;AAC5B,IAAA,IAAI,QAAQ,KAAK,6BAA6B,CAAC,OAAO,EAAE;AACtD,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;;AAE9B,IAAA,IAAI,QAAQ,KAAK,6BAA6B,CAAC,UAAU,EAAE;AACzD,QAAA,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG;;AAE/B,IAAA,OAAO,IAAI;AACb;;;;"}