@happyvertical/smrt-svelte 0.54.2 → 0.54.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,6 +18,7 @@ the top-of-stack, domain-aware pieces:
18
18
  | Forms (`/forms`) | `TextInput`, `Select`, `MoneyInput`, `DateTimeInput`, `Toggle`, `FileUpload`, `AddressInput`, + more (AI-wired inputs use the hooks/browser-ai here) |
19
19
  | Module | `ModulePanel` |
20
20
  | Settings (`/settings`) | `SettingsCatalog`, `paginateSettingsCatalog` |
21
+ | Audit (root export) | `RecordHistory`, `AuditList` — authorized data props; [contract](../../../docs/content/audit-trail.md) |
21
22
  | Workspace (`/workspace`) | `AdminShell`, `ShellState`, `TenantNav`, focus tools, settings, activities, and system/app panels |
22
23
  | Legacy workspace (`/workspace/legacy`) | First-generation `ToolsDock` compatibility surface during AdminShell migration |
23
24
 
@@ -0,0 +1,66 @@
1
+ <script lang="ts">
2
+ import { Form, FormGroup, Input } from '@happyvertical/smrt-ui/forms';
3
+ import { useI18n } from '@happyvertical/smrt-ui/i18n';
4
+ import { Button } from '@happyvertical/smrt-ui/ui';
5
+ import { M } from '../../i18n/strings.audit.js';
6
+ import RecordHistory from './RecordHistory.svelte';
7
+ import type { AuditHistoryEntry, AuditListFilter } from './types.js';
8
+
9
+ interface Props {
10
+ /** Authorized data only. For server paging use onfilter to reload the authorized page. */
11
+ entries: AuditHistoryEntry[];
12
+ /** Shows the loading state and disables filter submission while a page is loading. */
13
+ loading?: boolean;
14
+ /** Displays a history-loading error above the entries. */
15
+ error?: string | null;
16
+ /** Requests an authorized server page for the submitted filters instead of filtering locally. */
17
+ onfilter?: (filter: AuditListFilter) => void;
18
+ }
19
+ let { entries, loading = false, error = null, onfilter }: Props = $props();
20
+ const { t } = useI18n();
21
+ let profileId = $state('');
22
+ let resourceId = $state('');
23
+ let from = $state('');
24
+ let to = $state('');
25
+ let filter = $state<AuditListFilter>({
26
+ profileId: '',
27
+ resourceId: '',
28
+ from: '',
29
+ to: '',
30
+ });
31
+ const visible = $derived(
32
+ onfilter
33
+ ? entries
34
+ : entries.filter(
35
+ (entry) =>
36
+ (!filter.profileId || entry.profileId === filter.profileId) &&
37
+ (!filter.resourceId || entry.resourceId === filter.resourceId) &&
38
+ (!filter.from || entry.occurredAt.slice(0, 10) >= filter.from) &&
39
+ (!filter.to || entry.occurredAt.slice(0, 10) <= filter.to),
40
+ ),
41
+ );
42
+ function apply() {
43
+ filter = {
44
+ profileId: profileId.trim(),
45
+ resourceId: resourceId.trim(),
46
+ from,
47
+ to,
48
+ };
49
+ onfilter?.({ ...filter });
50
+ }
51
+ </script>
52
+
53
+ <section aria-label={t(M['ui.audit.list'])}>
54
+ <Form onsubmit={apply} class="smrt-audit-filters">
55
+ <FormGroup label={t(M['ui.audit.person'])}><Input bind:value={profileId} /></FormGroup>
56
+ <FormGroup label={t(M['ui.audit.record'])}><Input bind:value={resourceId} /></FormGroup>
57
+ <FormGroup label={t(M['ui.audit.from'])}><Input type="date" bind:value={from} max={to || undefined} /></FormGroup>
58
+ <FormGroup label={t(M['ui.audit.to'])}><Input type="date" bind:value={to} min={from || undefined} /></FormGroup>
59
+ <Button type="submit" disabled={loading}>{t(M['ui.audit.filter'])}</Button>
60
+ </Form>
61
+ <RecordHistory entries={visible} {loading} {error} />
62
+ </section>
63
+
64
+ <style>
65
+ .smrt-audit-filters { display: flex; flex-wrap: wrap; gap: var(--smrt-spacing-3); align-items: end; }
66
+ </style>
@@ -0,0 +1,15 @@
1
+ import type { AuditHistoryEntry, AuditListFilter } from './types.js';
2
+ interface Props {
3
+ /** Authorized data only. For server paging use onfilter to reload the authorized page. */
4
+ entries: AuditHistoryEntry[];
5
+ /** Shows the loading state and disables filter submission while a page is loading. */
6
+ loading?: boolean;
7
+ /** Displays a history-loading error above the entries. */
8
+ error?: string | null;
9
+ /** Requests an authorized server page for the submitted filters instead of filtering locally. */
10
+ onfilter?: (filter: AuditListFilter) => void;
11
+ }
12
+ declare const AuditList: import("svelte").Component<Props, {}, "">;
13
+ type AuditList = ReturnType<typeof AuditList>;
14
+ export default AuditList;
15
+ //# sourceMappingURL=AuditList.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditList.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/audit/AuditList.svelte.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGrE,UAAU,KAAK;IACb,0FAA0F;IAC1F,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iGAAiG;IACjG,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;CAC9C;AA0DD,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -0,0 +1,76 @@
1
+ <script lang="ts">
2
+ import { useI18n } from '@happyvertical/smrt-ui/i18n';
3
+ import { M } from '../../i18n/strings.audit.js';
4
+ import type { AuditHistoryEntry } from './types.js';
5
+
6
+ interface Props {
7
+ /** Authorized entries. This component never fetches or authorizes records. */
8
+ entries: AuditHistoryEntry[];
9
+ /** Optional resource identity for a per-record page. Both must be supplied together. */
10
+ resourceType?: string;
11
+ /** Limits entries to this record identifier when supplied with resourceType. */
12
+ resourceId?: string;
13
+ /** Announces that history is loading and suppresses the empty-state message. */
14
+ loading?: boolean;
15
+ /** Displays a history-loading error as an alert. */
16
+ error?: string | null;
17
+ /** Overrides the translated accessible label for the history section. */
18
+ label?: string;
19
+ }
20
+ let {
21
+ entries,
22
+ resourceType,
23
+ resourceId,
24
+ loading = false,
25
+ error = null,
26
+ label,
27
+ }: Props = $props();
28
+ const { locale, t } = useI18n();
29
+ const visible = $derived(
30
+ entries
31
+ .filter(
32
+ (entry) =>
33
+ (!resourceType || entry.resourceType === resourceType) &&
34
+ (!resourceId || entry.resourceId === resourceId),
35
+ )
36
+ .toSorted((a, b) => Date.parse(b.occurredAt) - Date.parse(a.occurredAt)),
37
+ );
38
+ function display(value: unknown): string {
39
+ return typeof value === 'string' ? value : (JSON.stringify(value) ?? '');
40
+ }
41
+ function date(value: string): string {
42
+ const parsed = new Date(value);
43
+ return Number.isFinite(parsed.getTime())
44
+ ? parsed.toLocaleString(locale)
45
+ : value;
46
+ }
47
+ </script>
48
+
49
+ <section aria-label={label ?? t(M['ui.audit.history'])} aria-busy={loading} class="smrt-record-history">
50
+ {#if error}<p role="alert">{error}</p>{/if}
51
+ {#if loading}<p role="status">{t(M['ui.audit.loading'])}</p>{/if}
52
+ {#if !loading && visible.length === 0}<p>{t(M['ui.audit.empty'])}</p>{/if}
53
+ <ol>
54
+ {#each visible as entry (entry.id)}
55
+ <li>
56
+ <p><strong>{entry.actorLabel ?? entry.profileId}</strong> · {entry.action} · {entry.resourceType} / {entry.resourceId}</p>
57
+ <time datetime={entry.occurredAt}>{date(entry.occurredAt)}</time>
58
+ {#if entry.onBehalfOfId}<p>{t(M['ui.audit.behalf'], { actor: entry.onBehalfOfId })}</p>{/if}
59
+ {#if entry.reason}<p>{t(M['ui.audit.reason'], { reason: entry.reason })}</p>{/if}
60
+ {#if entry.changes && Object.keys(entry.changes).length}
61
+ <ul>
62
+ {#each Object.entries(entry.changes) as [field, change] (field)}
63
+ <li>{t(M['ui.audit.change'], { field, before: display(change.before), after: display(change.after) })}</li>
64
+ {/each}
65
+ </ul>
66
+ {/if}
67
+ </li>
68
+ {/each}
69
+ </ol>
70
+ </section>
71
+
72
+ <style>
73
+ .smrt-record-history ol { display: grid; gap: var(--smrt-spacing-4); padding-inline-start: var(--smrt-spacing-6); }
74
+ .smrt-record-history p { margin-block: var(--smrt-spacing-1); overflow-wrap: anywhere; }
75
+ .smrt-record-history time { color: var(--smrt-color-on-surface-variant); }
76
+ </style>
@@ -0,0 +1,19 @@
1
+ import type { AuditHistoryEntry } from './types.js';
2
+ interface Props {
3
+ /** Authorized entries. This component never fetches or authorizes records. */
4
+ entries: AuditHistoryEntry[];
5
+ /** Optional resource identity for a per-record page. Both must be supplied together. */
6
+ resourceType?: string;
7
+ /** Limits entries to this record identifier when supplied with resourceType. */
8
+ resourceId?: string;
9
+ /** Announces that history is loading and suppresses the empty-state message. */
10
+ loading?: boolean;
11
+ /** Displays a history-loading error as an alert. */
12
+ error?: string | null;
13
+ /** Overrides the translated accessible label for the history section. */
14
+ label?: string;
15
+ }
16
+ declare const RecordHistory: import("svelte").Component<Props, {}, "">;
17
+ type RecordHistory = ReturnType<typeof RecordHistory>;
18
+ export default RecordHistory;
19
+ //# sourceMappingURL=RecordHistory.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecordHistory.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/audit/RecordHistory.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,UAAU,KAAK;IACb,8EAA8E;IAC9E,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA8DD,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { default as AuditList } from './AuditList.svelte';
2
+ export { default as RecordHistory } from './RecordHistory.svelte';
3
+ export type { AuditHistoryEntry, AuditListFilter } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/audit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default as AuditList } from './AuditList.svelte';
2
+ export { default as RecordHistory } from './RecordHistory.svelte';
@@ -0,0 +1,23 @@
1
+ /** Browser-safe projection. Supply only entries authorized by the server. */
2
+ export interface AuditHistoryEntry {
3
+ id: string;
4
+ profileId: string;
5
+ actorLabel?: string;
6
+ onBehalfOfId?: string | null;
7
+ action: string;
8
+ resourceType: string;
9
+ resourceId: string;
10
+ occurredAt: string;
11
+ reason?: string;
12
+ changes?: Record<string, {
13
+ before: unknown;
14
+ after: unknown;
15
+ }>;
16
+ }
17
+ export interface AuditListFilter {
18
+ profileId: string;
19
+ resourceId: string;
20
+ from: string;
21
+ to: string;
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/audit/types.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ"}
@@ -0,0 +1 @@
1
+ export {};
@@ -20,6 +20,7 @@ import { type I18nSnapshot } from '@happyvertical/smrt-ui/i18n';
20
20
  import '@happyvertical/smrt-ui/i18n';
21
21
  import './strings.forms.js';
22
22
  import './strings.board.js';
23
+ import './strings.audit.js';
23
24
  import './strings.workspace.js';
24
25
  import '../mcp-apps/strings.js';
25
26
  export interface BuildI18nSnapshotOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/i18n/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAGL,KAAK,4BAA4B,EAElC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AAMrC,OAAO,6BAA6B,CAAC;AACrC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,wBAAwB,CAAC;AAChC,OAAO,wBAAwB,CAAC;AAEhC,MAAM,WAAW,wBAAwB;IACvC,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,4BAA4B,CAAC,UAAU,CAAC,CAAC;IACpD;;;OAGG;IACH,EAAE,CAAC,EAAE,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACxC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,YAAY,CAAC,CA4BvB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/i18n/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAGL,KAAK,4BAA4B,EAElC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AAMrC,OAAO,6BAA6B,CAAC;AACrC,OAAO,oBAAoB,CAAC;AAC5B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,wBAAwB,CAAC;AAChC,OAAO,wBAAwB,CAAC;AAEhC,MAAM,WAAW,wBAAwB;IACvC,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,4BAA4B,CAAC,UAAU,CAAC,CAAC;IACpD;;;OAGG;IACH,EAAE,CAAC,EAAE,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACxC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,YAAY,CAAC,CA4BvB"}
@@ -25,6 +25,7 @@ import { getRegisteredDefaults, } from '@happyvertical/smrt-ui/i18n';
25
25
  import '@happyvertical/smrt-ui/i18n';
26
26
  import './strings.forms.js';
27
27
  import './strings.board.js';
28
+ import './strings.audit.js';
28
29
  import './strings.workspace.js';
29
30
  import '../mcp-apps/strings.js';
30
31
  /**
@@ -0,0 +1,15 @@
1
+ export declare const M: {
2
+ readonly 'ui.audit.history': "ui.audit.history";
3
+ readonly 'ui.audit.list': "ui.audit.list";
4
+ readonly 'ui.audit.empty': "ui.audit.empty";
5
+ readonly 'ui.audit.loading': "ui.audit.loading";
6
+ readonly 'ui.audit.person': "ui.audit.person";
7
+ readonly 'ui.audit.record': "ui.audit.record";
8
+ readonly 'ui.audit.from': "ui.audit.from";
9
+ readonly 'ui.audit.to': "ui.audit.to";
10
+ readonly 'ui.audit.filter': "ui.audit.filter";
11
+ readonly 'ui.audit.reason': "ui.audit.reason";
12
+ readonly 'ui.audit.behalf': "ui.audit.behalf";
13
+ readonly 'ui.audit.change': "ui.audit.change";
14
+ };
15
+ //# sourceMappingURL=strings.audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.audit.d.ts","sourceRoot":"","sources":["../../src/i18n/strings.audit.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,CAAC;;;;;;;;;;;;;CAaZ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { defineMessages } from '@happyvertical/smrt-ui/i18n';
2
+ export const M = defineMessages({
3
+ 'ui.audit.history': 'Record history',
4
+ 'ui.audit.list': 'Audit trail',
5
+ 'ui.audit.empty': 'No audit entries.',
6
+ 'ui.audit.loading': 'Loading audit entries…',
7
+ 'ui.audit.person': 'Person ID',
8
+ 'ui.audit.record': 'Record ID',
9
+ 'ui.audit.from': 'From date',
10
+ 'ui.audit.to': 'To date',
11
+ 'ui.audit.filter': 'Apply filters',
12
+ 'ui.audit.reason': 'Reason: {reason}',
13
+ 'ui.audit.behalf': 'On behalf of {actor}',
14
+ 'ui.audit.change': '{field}: {before} → {after}',
15
+ });
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@
11
11
  * agent-admin shells (AgentAdminPanel / AgentAdminTabs / AgentSettingsShell)
12
12
  * moved to `@happyvertical/smrt-agents/svelte`.
13
13
  */
14
+ export * from './components/audit/index.js';
14
15
  export * from './components/forms/index.js';
15
16
  export * from './components/module/index.js';
16
17
  export * from './data-surface.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAGH,cAAc,6BAA6B,CAAC;AAE5C,cAAc,8BAA8B,CAAC;AAE7C,cAAc,mBAAmB,CAAC;AAElC,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAExD,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EACL,KAAK,oBAAoB,EACzB,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,4BAA4B,EACjC,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,WAAW,EACX,KAAK,eAAe,GACrB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,cAAc,6BAA6B,CAAC;AAE5C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,8BAA8B,CAAC;AAE7C,cAAc,mBAAmB,CAAC;AAElC,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAExD,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EACL,KAAK,oBAAoB,EACzB,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,4BAA4B,EACjC,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,WAAW,EACX,KAAK,eAAe,GACrB,MAAM,4BAA4B,CAAC"}
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@
12
12
  * agent-admin shells (AgentAdminPanel / AgentAdminTabs / AgentSettingsShell)
13
13
  * moved to `@happyvertical/smrt-agents/svelte`.
14
14
  */
15
+ export * from './components/audit/index.js';
15
16
  // Form components
16
17
  export * from './components/forms/index.js';
17
18
  // Module components (for dynamic module UI rendering)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-svelte",
3
- "version": "0.54.2",
3
+ "version": "0.54.3",
4
4
  "smrtJsdoc": "strict",
5
5
  "description": "Svelte 5 components for SMRT user management - auth, users, tenants, roles, permissions, groups",
6
6
  "type": "module",
@@ -137,12 +137,12 @@
137
137
  "access": "public"
138
138
  },
139
139
  "dependencies": {
140
- "@happyvertical/logger": "^0.100.3",
141
- "@happyvertical/smrt-languages": "0.54.2",
142
- "@happyvertical/smrt-mcp-apps": "0.54.2",
143
- "@happyvertical/smrt-types": "0.54.2",
144
- "@happyvertical/smrt-ui": "0.54.2",
145
- "@happyvertical/smrt-web": "0.54.2",
140
+ "@happyvertical/logger": "^0.102.1",
141
+ "@happyvertical/smrt-languages": "0.54.3",
142
+ "@happyvertical/smrt-mcp-apps": "0.54.3",
143
+ "@happyvertical/smrt-types": "0.54.3",
144
+ "@happyvertical/smrt-ui": "0.54.3",
145
+ "@happyvertical/smrt-web": "0.54.3",
146
146
  "@tanstack/db": "^0.6.14",
147
147
  "@tanstack/svelte-db": "^0.1.91",
148
148
  "esm-env": "^1.2.2"
@@ -177,14 +177,14 @@
177
177
  }
178
178
  },
179
179
  "devDependencies": {
180
- "@happyvertical/smrt-agents": "0.54.2",
181
- "@happyvertical/smrt-chat": "0.54.2",
182
- "@happyvertical/smrt-content": "0.54.2",
183
- "@happyvertical/smrt-core": "0.54.2",
184
- "@happyvertical/smrt-reports": "0.54.2",
185
- "@happyvertical/smrt-scanner": "0.54.2",
186
- "@happyvertical/smrt-tenancy": "0.54.2",
187
- "@happyvertical/smrt-users": "0.54.2",
180
+ "@happyvertical/smrt-agents": "0.54.3",
181
+ "@happyvertical/smrt-chat": "0.54.3",
182
+ "@happyvertical/smrt-content": "0.54.3",
183
+ "@happyvertical/smrt-core": "0.54.3",
184
+ "@happyvertical/smrt-reports": "0.54.3",
185
+ "@happyvertical/smrt-scanner": "0.54.3",
186
+ "@happyvertical/smrt-tenancy": "0.54.3",
187
+ "@happyvertical/smrt-users": "0.54.3",
188
188
  "@sveltejs/package": "^2.5.8",
189
189
  "@sveltejs/vite-plugin-svelte": "^7.3.0",
190
190
  "@testing-library/jest-dom": "^7.0.1",