@snokam/page-content 0.0.0-stage → 6.9.4
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.
- package/CHANGELOG.md +1462 -0
- package/dist/admin-form-labels.d.ts +11 -0
- package/dist/admin-form-labels.d.ts.map +1 -0
- package/dist/admin-form-labels.js +21 -0
- package/dist/admin-form-labels.js.map +1 -0
- package/dist/app-router/MetaTags.d.ts +2 -0
- package/dist/app-router/MetaTags.d.ts.map +1 -0
- package/dist/app-router/MetaTags.js +10 -0
- package/dist/app-router/MetaTags.js.map +1 -0
- package/dist/app-router/actions.d.ts +62 -0
- package/dist/app-router/actions.d.ts.map +1 -0
- package/dist/app-router/actions.js +18 -0
- package/dist/app-router/actions.js.map +1 -0
- package/dist/app-router/draft.d.ts +3 -0
- package/dist/app-router/draft.d.ts.map +1 -0
- package/dist/app-router/draft.js +14 -0
- package/dist/app-router/draft.js.map +1 -0
- package/dist/app-router/error-page/TenantErrorPage.d.ts +5 -0
- package/dist/app-router/error-page/TenantErrorPage.d.ts.map +1 -0
- package/dist/app-router/error-page/TenantErrorPage.js +20 -0
- package/dist/app-router/error-page/TenantErrorPage.js.map +1 -0
- package/dist/app-router/error-page/icons.d.ts +8 -0
- package/dist/app-router/error-page/icons.d.ts.map +1 -0
- package/dist/app-router/error-page/icons.js +11 -0
- package/dist/app-router/error-page/icons.js.map +1 -0
- package/dist/app-router/error-page/index.d.ts +3 -0
- package/dist/app-router/error-page/index.d.ts.map +1 -0
- package/dist/app-router/error-page/index.js +3 -0
- package/dist/app-router/error-page/index.js.map +1 -0
- package/dist/app-router/hoc/index.d.ts +5 -0
- package/dist/app-router/hoc/index.d.ts.map +1 -0
- package/dist/app-router/hoc/index.js +5 -0
- package/dist/app-router/hoc/index.js.map +1 -0
- package/dist/app-router/hoc/withSanityAppContent.d.ts +11 -0
- package/dist/app-router/hoc/withSanityAppContent.d.ts.map +1 -0
- package/dist/app-router/hoc/withSanityAppContent.js +31 -0
- package/dist/app-router/hoc/withSanityAppContent.js.map +1 -0
- package/dist/app-router/hoc/withSanityPageContent.d.ts +13 -0
- package/dist/app-router/hoc/withSanityPageContent.d.ts.map +1 -0
- package/dist/app-router/hoc/withSanityPageContent.js +23 -0
- package/dist/app-router/hoc/withSanityPageContent.js.map +1 -0
- package/dist/app-router/index.d.ts +6 -0
- package/dist/app-router/index.d.ts.map +1 -0
- package/dist/app-router/index.js +7 -0
- package/dist/app-router/index.js.map +1 -0
- package/dist/app-router/providers/AppContentProvider.d.ts +13 -0
- package/dist/app-router/providers/AppContentProvider.d.ts.map +1 -0
- package/dist/app-router/providers/AppContentProvider.js +12 -0
- package/dist/app-router/providers/AppContentProvider.js.map +1 -0
- package/dist/app-router/providers/PageContentProvider.d.ts +15 -0
- package/dist/app-router/providers/PageContentProvider.d.ts.map +1 -0
- package/dist/app-router/providers/PageContentProvider.js +12 -0
- package/dist/app-router/providers/PageContentProvider.js.map +1 -0
- package/dist/app-router/providers/index.d.ts +3 -0
- package/dist/app-router/providers/index.d.ts.map +1 -0
- package/dist/app-router/providers/index.js +4 -0
- package/dist/app-router/providers/index.js.map +1 -0
- package/dist/app-router/server.d.ts +12 -0
- package/dist/app-router/server.d.ts.map +1 -0
- package/dist/app-router/server.js +10 -0
- package/dist/app-router/server.js.map +1 -0
- package/dist/app-router/tenant/app-content.d.ts +57 -0
- package/dist/app-router/tenant/app-content.d.ts.map +1 -0
- package/dist/app-router/tenant/app-content.js +5 -0
- package/dist/app-router/tenant/app-content.js.map +1 -0
- package/dist/app-router/tenant/branding.d.ts +12 -0
- package/dist/app-router/tenant/branding.d.ts.map +1 -0
- package/dist/app-router/tenant/branding.js +62 -0
- package/dist/app-router/tenant/branding.js.map +1 -0
- package/dist/app-router/tenant/content.d.ts +16 -0
- package/dist/app-router/tenant/content.d.ts.map +1 -0
- package/dist/app-router/tenant/content.js +44 -0
- package/dist/app-router/tenant/content.js.map +1 -0
- package/dist/app-router/tenant/layout.d.ts +11 -0
- package/dist/app-router/tenant/layout.d.ts.map +1 -0
- package/dist/app-router/tenant/layout.js +17 -0
- package/dist/app-router/tenant/layout.js.map +1 -0
- package/dist/app-router/tenant/metadata.d.ts +9 -0
- package/dist/app-router/tenant/metadata.d.ts.map +1 -0
- package/dist/app-router/tenant/metadata.js +19 -0
- package/dist/app-router/tenant/metadata.js.map +1 -0
- package/dist/app-router/tenant/server-texts.d.ts +7 -0
- package/dist/app-router/tenant/server-texts.d.ts.map +1 -0
- package/dist/app-router/tenant/server-texts.js +25 -0
- package/dist/app-router/tenant/server-texts.js.map +1 -0
- package/dist/app-router/utils.d.ts +3 -0
- package/dist/app-router/utils.d.ts.map +1 -0
- package/dist/app-router/utils.js +11 -0
- package/dist/app-router/utils.js.map +1 -0
- package/dist/app-text.d.ts +3 -0
- package/dist/app-text.d.ts.map +1 -0
- package/dist/app-text.js +14 -0
- package/dist/app-text.js.map +1 -0
- package/dist/component-texts.d.ts +2 -0
- package/dist/component-texts.d.ts.map +1 -0
- package/dist/component-texts.js +14 -0
- package/dist/component-texts.js.map +1 -0
- package/dist/components/ContentEmptyState/index.d.ts +7 -0
- package/dist/components/ContentEmptyState/index.d.ts.map +1 -0
- package/dist/components/ContentEmptyState/index.js +17 -0
- package/dist/components/ContentEmptyState/index.js.map +1 -0
- package/dist/components/ContentEmptyState/styles.d.ts +4 -0
- package/dist/components/ContentEmptyState/styles.d.ts.map +1 -0
- package/dist/components/ContentEmptyState/styles.js +21 -0
- package/dist/components/ContentEmptyState/styles.js.map +1 -0
- package/dist/components/OrganizationSchema.d.ts +7 -0
- package/dist/components/OrganizationSchema.d.ts.map +1 -0
- package/dist/components/OrganizationSchema.js +32 -0
- package/dist/components/OrganizationSchema.js.map +1 -0
- package/dist/data/fetch.d.ts +11 -0
- package/dist/data/fetch.d.ts.map +1 -0
- package/dist/data/fetch.js +29 -0
- package/dist/data/fetch.js.map +1 -0
- package/dist/edit-mode/Drawer.d.ts +12 -0
- package/dist/edit-mode/Drawer.d.ts.map +1 -0
- package/dist/edit-mode/Drawer.js +134 -0
- package/dist/edit-mode/Drawer.js.map +1 -0
- package/dist/edit-mode/EditMode.d.ts +3 -0
- package/dist/edit-mode/EditMode.d.ts.map +1 -0
- package/dist/edit-mode/EditMode.js +41 -0
- package/dist/edit-mode/EditMode.js.map +1 -0
- package/dist/edit-mode/client.d.ts +8 -0
- package/dist/edit-mode/client.d.ts.map +1 -0
- package/dist/edit-mode/client.js +18 -0
- package/dist/edit-mode/client.js.map +1 -0
- package/dist/edit-mode/drawer/MissingSection.d.ts +5 -0
- package/dist/edit-mode/drawer/MissingSection.d.ts.map +1 -0
- package/dist/edit-mode/drawer/MissingSection.js +13 -0
- package/dist/edit-mode/drawer/MissingSection.js.map +1 -0
- package/dist/edit-mode/drawer-helpers.d.ts +5 -0
- package/dist/edit-mode/drawer-helpers.d.ts.map +1 -0
- package/dist/edit-mode/drawer-helpers.js +33 -0
- package/dist/edit-mode/drawer-helpers.js.map +1 -0
- package/dist/edit-mode/editModeState.d.ts +10 -0
- package/dist/edit-mode/editModeState.d.ts.map +1 -0
- package/dist/edit-mode/editModeState.js +65 -0
- package/dist/edit-mode/editModeState.js.map +1 -0
- package/dist/edit-mode/field-styles.d.ts +20 -0
- package/dist/edit-mode/field-styles.d.ts.map +1 -0
- package/dist/edit-mode/field-styles.js +200 -0
- package/dist/edit-mode/field-styles.js.map +1 -0
- package/dist/edit-mode/fields/BlockField.d.ts +5 -0
- package/dist/edit-mode/fields/BlockField.d.ts.map +1 -0
- package/dist/edit-mode/fields/BlockField.js +32 -0
- package/dist/edit-mode/fields/BlockField.js.map +1 -0
- package/dist/edit-mode/fields/FieldEditor.d.ts +5 -0
- package/dist/edit-mode/fields/FieldEditor.d.ts.map +1 -0
- package/dist/edit-mode/fields/FieldEditor.js +39 -0
- package/dist/edit-mode/fields/FieldEditor.js.map +1 -0
- package/dist/edit-mode/fields/GalleryField.d.ts +5 -0
- package/dist/edit-mode/fields/GalleryField.d.ts.map +1 -0
- package/dist/edit-mode/fields/GalleryField.js +41 -0
- package/dist/edit-mode/fields/GalleryField.js.map +1 -0
- package/dist/edit-mode/fields/ImageField.d.ts +5 -0
- package/dist/edit-mode/fields/ImageField.d.ts.map +1 -0
- package/dist/edit-mode/fields/ImageField.js +41 -0
- package/dist/edit-mode/fields/ImageField.js.map +1 -0
- package/dist/edit-mode/fields/LinkField.d.ts +5 -0
- package/dist/edit-mode/fields/LinkField.d.ts.map +1 -0
- package/dist/edit-mode/fields/LinkField.js +25 -0
- package/dist/edit-mode/fields/LinkField.js.map +1 -0
- package/dist/edit-mode/fields/MediaField.d.ts +5 -0
- package/dist/edit-mode/fields/MediaField.d.ts.map +1 -0
- package/dist/edit-mode/fields/MediaField.js +33 -0
- package/dist/edit-mode/fields/MediaField.js.map +1 -0
- package/dist/edit-mode/fields/SurfaceAddItem.d.ts +5 -0
- package/dist/edit-mode/fields/SurfaceAddItem.d.ts.map +1 -0
- package/dist/edit-mode/fields/SurfaceAddItem.js +27 -0
- package/dist/edit-mode/fields/SurfaceAddItem.js.map +1 -0
- package/dist/edit-mode/fields/SurfaceItemControls.d.ts +8 -0
- package/dist/edit-mode/fields/SurfaceItemControls.d.ts.map +1 -0
- package/dist/edit-mode/fields/SurfaceItemControls.js +40 -0
- package/dist/edit-mode/fields/SurfaceItemControls.js.map +1 -0
- package/dist/edit-mode/fields/SurfaceLinkField.d.ts +5 -0
- package/dist/edit-mode/fields/SurfaceLinkField.d.ts.map +1 -0
- package/dist/edit-mode/fields/SurfaceLinkField.js +28 -0
- package/dist/edit-mode/fields/SurfaceLinkField.js.map +1 -0
- package/dist/edit-mode/fields/TextField.d.ts +5 -0
- package/dist/edit-mode/fields/TextField.d.ts.map +1 -0
- package/dist/edit-mode/fields/TextField.js +42 -0
- package/dist/edit-mode/fields/TextField.js.map +1 -0
- package/dist/edit-mode/fields/VideoField.d.ts +5 -0
- package/dist/edit-mode/fields/VideoField.d.ts.map +1 -0
- package/dist/edit-mode/fields/VideoField.js +21 -0
- package/dist/edit-mode/fields/VideoField.js.map +1 -0
- package/dist/edit-mode/fields/VisibilityField.d.ts +5 -0
- package/dist/edit-mode/fields/VisibilityField.d.ts.map +1 -0
- package/dist/edit-mode/fields/VisibilityField.js +26 -0
- package/dist/edit-mode/fields/VisibilityField.js.map +1 -0
- package/dist/edit-mode/fields/YoutubeField.d.ts +5 -0
- package/dist/edit-mode/fields/YoutubeField.d.ts.map +1 -0
- package/dist/edit-mode/fields/YoutubeField.js +21 -0
- package/dist/edit-mode/fields/YoutubeField.js.map +1 -0
- package/dist/edit-mode/fields/shared.d.ts +27 -0
- package/dist/edit-mode/fields/shared.d.ts.map +1 -0
- package/dist/edit-mode/fields/shared.js +55 -0
- package/dist/edit-mode/fields/shared.js.map +1 -0
- package/dist/edit-mode/fields-from-content.d.ts +12 -0
- package/dist/edit-mode/fields-from-content.d.ts.map +1 -0
- package/dist/edit-mode/fields-from-content.js +42 -0
- package/dist/edit-mode/fields-from-content.js.map +1 -0
- package/dist/edit-mode/image-url.d.ts +4 -0
- package/dist/edit-mode/image-url.d.ts.map +1 -0
- package/dist/edit-mode/image-url.js +7 -0
- package/dist/edit-mode/image-url.js.map +1 -0
- package/dist/edit-mode/index.d.ts +4 -0
- package/dist/edit-mode/index.d.ts.map +1 -0
- package/dist/edit-mode/index.js +3 -0
- package/dist/edit-mode/index.js.map +1 -0
- package/dist/edit-mode/missing-keys.d.ts +8 -0
- package/dist/edit-mode/missing-keys.d.ts.map +1 -0
- package/dist/edit-mode/missing-keys.js +33 -0
- package/dist/edit-mode/missing-keys.js.map +1 -0
- package/dist/edit-mode/overlay/InlineBlockEditor.d.ts +9 -0
- package/dist/edit-mode/overlay/InlineBlockEditor.d.ts.map +1 -0
- package/dist/edit-mode/overlay/InlineBlockEditor.js +98 -0
- package/dist/edit-mode/overlay/InlineBlockEditor.js.map +1 -0
- package/dist/edit-mode/overlay/InlineText.d.ts +10 -0
- package/dist/edit-mode/overlay/InlineText.d.ts.map +1 -0
- package/dist/edit-mode/overlay/InlineText.js +190 -0
- package/dist/edit-mode/overlay/InlineText.js.map +1 -0
- package/dist/edit-mode/overlay/Overlay.d.ts +13 -0
- package/dist/edit-mode/overlay/Overlay.d.ts.map +1 -0
- package/dist/edit-mode/overlay/Overlay.js +186 -0
- package/dist/edit-mode/overlay/Overlay.js.map +1 -0
- package/dist/edit-mode/overlay/Popover.d.ts +10 -0
- package/dist/edit-mode/overlay/Popover.d.ts.map +1 -0
- package/dist/edit-mode/overlay/Popover.js +58 -0
- package/dist/edit-mode/overlay/Popover.js.map +1 -0
- package/dist/edit-mode/overlay/block-match.d.ts +15 -0
- package/dist/edit-mode/overlay/block-match.d.ts.map +1 -0
- package/dist/edit-mode/overlay/block-match.js +124 -0
- package/dist/edit-mode/overlay/block-match.js.map +1 -0
- package/dist/edit-mode/overlay/dom.d.ts +4 -0
- package/dist/edit-mode/overlay/dom.d.ts.map +1 -0
- package/dist/edit-mode/overlay/dom.js +13 -0
- package/dist/edit-mode/overlay/dom.js.map +1 -0
- package/dist/edit-mode/overlay/geometry.d.ts +16 -0
- package/dist/edit-mode/overlay/geometry.d.ts.map +1 -0
- package/dist/edit-mode/overlay/geometry.js +58 -0
- package/dist/edit-mode/overlay/geometry.js.map +1 -0
- package/dist/edit-mode/overlay/match.d.ts +29 -0
- package/dist/edit-mode/overlay/match.d.ts.map +1 -0
- package/dist/edit-mode/overlay/match.js +140 -0
- package/dist/edit-mode/overlay/match.js.map +1 -0
- package/dist/edit-mode/overlay/stega-scan.d.ts +8 -0
- package/dist/edit-mode/overlay/stega-scan.d.ts.map +1 -0
- package/dist/edit-mode/overlay/stega-scan.js +51 -0
- package/dist/edit-mode/overlay/stega-scan.js.map +1 -0
- package/dist/edit-mode/overlay/styles.d.ts +18 -0
- package/dist/edit-mode/overlay/styles.d.ts.map +1 -0
- package/dist/edit-mode/overlay/styles.js +187 -0
- package/dist/edit-mode/overlay/styles.js.map +1 -0
- package/dist/edit-mode/overlay/useOverlayScan.d.ts +3 -0
- package/dist/edit-mode/overlay/useOverlayScan.d.ts.map +1 -0
- package/dist/edit-mode/overlay/useOverlayScan.js +70 -0
- package/dist/edit-mode/overlay/useOverlayScan.js.map +1 -0
- package/dist/edit-mode/overlay/wildcard.d.ts +8 -0
- package/dist/edit-mode/overlay/wildcard.d.ts.map +1 -0
- package/dist/edit-mode/overlay/wildcard.js +55 -0
- package/dist/edit-mode/overlay/wildcard.js.map +1 -0
- package/dist/edit-mode/refresh.d.ts +4 -0
- package/dist/edit-mode/refresh.d.ts.map +1 -0
- package/dist/edit-mode/refresh.js +11 -0
- package/dist/edit-mode/refresh.js.map +1 -0
- package/dist/edit-mode/save-media.d.ts +10 -0
- package/dist/edit-mode/save-media.d.ts.map +1 -0
- package/dist/edit-mode/save-media.js +49 -0
- package/dist/edit-mode/save-media.js.map +1 -0
- package/dist/edit-mode/save.d.ts +22 -0
- package/dist/edit-mode/save.d.ts.map +1 -0
- package/dist/edit-mode/save.js +47 -0
- package/dist/edit-mode/save.js.map +1 -0
- package/dist/edit-mode/section-fields.d.ts +4 -0
- package/dist/edit-mode/section-fields.d.ts.map +1 -0
- package/dist/edit-mode/section-fields.js +80 -0
- package/dist/edit-mode/section-fields.js.map +1 -0
- package/dist/edit-mode/stega.d.ts +9 -0
- package/dist/edit-mode/stega.d.ts.map +1 -0
- package/dist/edit-mode/stega.js +97 -0
- package/dist/edit-mode/stega.js.map +1 -0
- package/dist/edit-mode/store/content.d.ts +3 -0
- package/dist/edit-mode/store/content.d.ts.map +1 -0
- package/dist/edit-mode/store/content.js +44 -0
- package/dist/edit-mode/store/content.js.map +1 -0
- package/dist/edit-mode/store/types.d.ts +23 -0
- package/dist/edit-mode/store/types.d.ts.map +1 -0
- package/dist/edit-mode/store/types.js +2 -0
- package/dist/edit-mode/store/types.js.map +1 -0
- package/dist/edit-mode/styles.d.ts +17 -0
- package/dist/edit-mode/styles.d.ts.map +1 -0
- package/dist/edit-mode/styles.js +125 -0
- package/dist/edit-mode/styles.js.map +1 -0
- package/dist/edit-mode/surface-ops.d.ts +22 -0
- package/dist/edit-mode/surface-ops.d.ts.map +1 -0
- package/dist/edit-mode/surface-ops.js +43 -0
- package/dist/edit-mode/surface-ops.js.map +1 -0
- package/dist/edit-mode/surfaces.d.ts +32 -0
- package/dist/edit-mode/surfaces.d.ts.map +1 -0
- package/dist/edit-mode/surfaces.js +106 -0
- package/dist/edit-mode/surfaces.js.map +1 -0
- package/dist/edit-mode/types.d.ts +55 -0
- package/dist/edit-mode/types.d.ts.map +1 -0
- package/dist/edit-mode/types.js +2 -0
- package/dist/edit-mode/types.js.map +1 -0
- package/dist/edit-mode/useArmed.d.ts +4 -0
- package/dist/edit-mode/useArmed.d.ts.map +1 -0
- package/dist/edit-mode/useArmed.js +28 -0
- package/dist/edit-mode/useArmed.js.map +1 -0
- package/dist/editor/BlockChrome.d.ts +5 -0
- package/dist/editor/BlockChrome.d.ts.map +1 -0
- package/dist/editor/BlockChrome.js +60 -0
- package/dist/editor/BlockChrome.js.map +1 -0
- package/dist/editor/BlockChrome.styled.d.ts +15 -0
- package/dist/editor/BlockChrome.styled.d.ts.map +1 -0
- package/dist/editor/BlockChrome.styled.js +188 -0
- package/dist/editor/BlockChrome.styled.js.map +1 -0
- package/dist/editor/BlockObject.styled.d.ts +10 -0
- package/dist/editor/BlockObject.styled.d.ts.map +1 -0
- package/dist/editor/BlockObject.styled.js +106 -0
- package/dist/editor/BlockObject.styled.js.map +1 -0
- package/dist/editor/BlockObjectEditor.d.ts +10 -0
- package/dist/editor/BlockObjectEditor.d.ts.map +1 -0
- package/dist/editor/BlockObjectEditor.js +55 -0
- package/dist/editor/BlockObjectEditor.js.map +1 -0
- package/dist/editor/DockPortal.d.ts +5 -0
- package/dist/editor/DockPortal.d.ts.map +1 -0
- package/dist/editor/DockPortal.js +16 -0
- package/dist/editor/DockPortal.js.map +1 -0
- package/dist/editor/EditableSurface.d.ts +4 -0
- package/dist/editor/EditableSurface.d.ts.map +1 -0
- package/dist/editor/EditableSurface.js +85 -0
- package/dist/editor/EditableSurface.js.map +1 -0
- package/dist/editor/EditableSurface.styled.d.ts +2 -0
- package/dist/editor/EditableSurface.styled.d.ts.map +1 -0
- package/dist/editor/EditableSurface.styled.js +30 -0
- package/dist/editor/EditableSurface.styled.js.map +1 -0
- package/dist/editor/EmptyStatePicker.d.ts +2 -0
- package/dist/editor/EmptyStatePicker.d.ts.map +1 -0
- package/dist/editor/EmptyStatePicker.js +22 -0
- package/dist/editor/EmptyStatePicker.js.map +1 -0
- package/dist/editor/EmptyStatePicker.styled.d.ts +6 -0
- package/dist/editor/EmptyStatePicker.styled.d.ts.map +1 -0
- package/dist/editor/EmptyStatePicker.styled.js +59 -0
- package/dist/editor/EmptyStatePicker.styled.js.map +1 -0
- package/dist/editor/LinkGalleryEditors.d.ts +14 -0
- package/dist/editor/LinkGalleryEditors.d.ts.map +1 -0
- package/dist/editor/LinkGalleryEditors.js +25 -0
- package/dist/editor/LinkGalleryEditors.js.map +1 -0
- package/dist/editor/MediaBlockEditors.d.ts +19 -0
- package/dist/editor/MediaBlockEditors.d.ts.map +1 -0
- package/dist/editor/MediaBlockEditors.js +91 -0
- package/dist/editor/MediaBlockEditors.js.map +1 -0
- package/dist/editor/MediaBlockEditors.styled.d.ts +3 -0
- package/dist/editor/MediaBlockEditors.styled.d.ts.map +1 -0
- package/dist/editor/MediaBlockEditors.styled.js +23 -0
- package/dist/editor/MediaBlockEditors.styled.js.map +1 -0
- package/dist/editor/TableBlockEditor.d.ts +8 -0
- package/dist/editor/TableBlockEditor.d.ts.map +1 -0
- package/dist/editor/TableBlockEditor.js +71 -0
- package/dist/editor/TableBlockEditor.js.map +1 -0
- package/dist/editor/TableBlockEditor.styled.d.ts +8 -0
- package/dist/editor/TableBlockEditor.styled.d.ts.map +1 -0
- package/dist/editor/TableBlockEditor.styled.js +98 -0
- package/dist/editor/TableBlockEditor.styled.js.map +1 -0
- package/dist/editor/Toolbar.d.ts +6 -0
- package/dist/editor/Toolbar.d.ts.map +1 -0
- package/dist/editor/Toolbar.js +56 -0
- package/dist/editor/Toolbar.js.map +1 -0
- package/dist/editor/Toolbar.styled.d.ts +7 -0
- package/dist/editor/Toolbar.styled.d.ts.map +1 -0
- package/dist/editor/Toolbar.styled.js +114 -0
- package/dist/editor/Toolbar.styled.js.map +1 -0
- package/dist/editor/blocks.d.ts +34 -0
- package/dist/editor/blocks.d.ts.map +1 -0
- package/dist/editor/blocks.js +163 -0
- package/dist/editor/blocks.js.map +1 -0
- package/dist/editor/deps.d.ts +18 -0
- package/dist/editor/deps.d.ts.map +1 -0
- package/dist/editor/deps.js +54 -0
- package/dist/editor/deps.js.map +1 -0
- package/dist/editor/index.d.ts +19 -0
- package/dist/editor/index.d.ts.map +1 -0
- package/dist/editor/index.js +35 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/editor/insertOptions.d.ts +15 -0
- package/dist/editor/insertOptions.d.ts.map +1 -0
- package/dist/editor/insertOptions.js +194 -0
- package/dist/editor/insertOptions.js.map +1 -0
- package/dist/editor/rename.d.ts +7 -0
- package/dist/editor/rename.d.ts.map +1 -0
- package/dist/editor/rename.js +45 -0
- package/dist/editor/rename.js.map +1 -0
- package/dist/editor/styles.d.ts +5 -0
- package/dist/editor/styles.d.ts.map +1 -0
- package/dist/editor/styles.js +154 -0
- package/dist/editor/styles.js.map +1 -0
- package/dist/editor/textSchema.d.ts +2 -0
- package/dist/editor/textSchema.d.ts.map +1 -0
- package/dist/editor/textSchema.js +120 -0
- package/dist/editor/textSchema.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/placeholders.d.ts +22 -0
- package/dist/placeholders.d.ts.map +1 -0
- package/dist/placeholders.js +26 -0
- package/dist/placeholders.js.map +1 -0
- package/dist/providers/AppContentProvider.d.ts +16 -0
- package/dist/providers/AppContentProvider.d.ts.map +1 -0
- package/dist/providers/AppContentProvider.js +18 -0
- package/dist/providers/AppContentProvider.js.map +1 -0
- package/dist/providers/PageContentProvider.d.ts +41 -0
- package/dist/providers/PageContentProvider.d.ts.map +1 -0
- package/dist/providers/PageContentProvider.js +139 -0
- package/dist/providers/PageContentProvider.js.map +1 -0
- package/dist/providers/index.d.ts +3 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/merge-content.d.ts +17 -0
- package/dist/providers/merge-content.d.ts.map +1 -0
- package/dist/providers/merge-content.js +65 -0
- package/dist/providers/merge-content.js.map +1 -0
- package/dist/providers/separate-components.d.ts +27 -0
- package/dist/providers/separate-components.d.ts.map +1 -0
- package/dist/providers/separate-components.js +42 -0
- package/dist/providers/separate-components.js.map +1 -0
- package/dist/providers/tenant-tokens.d.ts +5 -0
- package/dist/providers/tenant-tokens.d.ts.map +1 -0
- package/dist/providers/tenant-tokens.js +19 -0
- package/dist/providers/tenant-tokens.js.map +1 -0
- package/dist/server/client.d.ts +4 -0
- package/dist/server/client.d.ts.map +1 -0
- package/dist/server/client.js +13 -0
- package/dist/server/client.js.map +1 -0
- package/dist/server/clients.d.ts +5 -0
- package/dist/server/clients.d.ts.map +1 -0
- package/dist/server/clients.js +9 -0
- package/dist/server/clients.js.map +1 -0
- package/dist/server/content-api.d.ts +8 -0
- package/dist/server/content-api.d.ts.map +1 -0
- package/dist/server/content-api.js +32 -0
- package/dist/server/content-api.js.map +1 -0
- package/dist/server/errors.d.ts +17 -0
- package/dist/server/errors.d.ts.map +1 -0
- package/dist/server/errors.js +24 -0
- package/dist/server/errors.js.map +1 -0
- package/dist/server/layers.d.ts +11 -0
- package/dist/server/layers.d.ts.map +1 -0
- package/dist/server/layers.js +11 -0
- package/dist/server/layers.js.map +1 -0
- package/dist/server/merge-layers.d.ts +8 -0
- package/dist/server/merge-layers.d.ts.map +1 -0
- package/dist/server/merge-layers.js +27 -0
- package/dist/server/merge-layers.js.map +1 -0
- package/dist/server/organization.d.ts +4 -0
- package/dist/server/organization.d.ts.map +1 -0
- package/dist/server/organization.js +17 -0
- package/dist/server/organization.js.map +1 -0
- package/dist/types/index.d.ts +97 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/collect-app-texts.d.ts +14 -0
- package/dist/utils/collect-app-texts.d.ts.map +1 -0
- package/dist/utils/collect-app-texts.js +13 -0
- package/dist/utils/collect-app-texts.js.map +1 -0
- package/dist/utils/has-any-content.d.ts +8 -0
- package/dist/utils/has-any-content.d.ts.map +1 -0
- package/dist/utils/has-any-content.js +4 -0
- package/dist/utils/has-any-content.js.map +1 -0
- package/dist/utils/rename-sanity-fields.d.ts +9 -0
- package/dist/utils/rename-sanity-fields.d.ts.map +1 -0
- package/dist/utils/rename-sanity-fields.js +34 -0
- package/dist/utils/rename-sanity-fields.js.map +1 -0
- package/dist/utils.d.ts +6 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +49 -0
- package/dist/utils.js.map +1 -0
- package/package.json +80 -3
- package/README.md +0 -3
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,1462 @@
|
|
|
1
|
+
# Change Log
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
+
|
|
6
|
+
## [6.9.4](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.9.3...@snokam/sanity-page-content@6.9.4) (2026-11-04)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
9
|
+
|
|
10
|
+
## [6.9.3](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.9.2...@snokam/sanity-page-content@6.9.3) (2026-11-02)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
13
|
+
|
|
14
|
+
## [6.9.2](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.9.1...@snokam/sanity-page-content@6.9.2) (2026-11-01)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
17
|
+
|
|
18
|
+
## [6.9.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.9.0...@snokam/sanity-page-content@6.9.1) (2026-11-01)
|
|
19
|
+
|
|
20
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
21
|
+
|
|
22
|
+
# [6.9.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.8.1...@snokam/sanity-page-content@6.9.0) (2026-10-31)
|
|
23
|
+
|
|
24
|
+
### Features
|
|
25
|
+
|
|
26
|
+
- **tasks:** recruitment pipeline, oversikt redesign and ui critic rounds ([e16a1b8](https://github.com/snokam/monorepo/commit/e16a1b81d57175eb49cb9c499990c1c433fdbce1))
|
|
27
|
+
|
|
28
|
+
## [6.8.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.8.0...@snokam/sanity-page-content@6.8.1) (2026-10-28)
|
|
29
|
+
|
|
30
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
31
|
+
|
|
32
|
+
# [6.8.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.7.0...@snokam/sanity-page-content@6.8.0) (2026-10-26)
|
|
33
|
+
|
|
34
|
+
### Features
|
|
35
|
+
|
|
36
|
+
- **sanity:** add #spor-branding as task reminder channel ([ab78954](https://github.com/snokam/monorepo/commit/ab789548343e1a1b6c925813bcdd61d0af061c58))
|
|
37
|
+
|
|
38
|
+
# [6.7.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.6.1...@snokam/sanity-page-content@6.7.0) (2026-10-25)
|
|
39
|
+
|
|
40
|
+
### Bug Fixes
|
|
41
|
+
|
|
42
|
+
- **okrs:** keep note field sanity-only, drop generated type exposure ([82eaec1](https://github.com/snokam/monorepo/commit/82eaec1d36d0a5e45bad4f124d6a5bec7edaa44b))
|
|
43
|
+
- **okrs:** restore generated sanity.types for note field ([f0d0ce8](https://github.com/snokam/monorepo/commit/f0d0ce84732309610ab1fc591c3688a9f94b6f0b))
|
|
44
|
+
|
|
45
|
+
### Features
|
|
46
|
+
|
|
47
|
+
- **okrs:** add optional free-text note field to progress history ([4fda5a7](https://github.com/snokam/monorepo/commit/4fda5a78f4de75fc865a35bbe19214010ad7a07b))
|
|
48
|
+
|
|
49
|
+
## [6.6.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.6.0...@snokam/sanity-page-content@6.6.1) (2026-10-23)
|
|
50
|
+
|
|
51
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
52
|
+
|
|
53
|
+
# [6.6.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.5.6...@snokam/sanity-page-content@6.6.0) (2026-10-22)
|
|
54
|
+
|
|
55
|
+
### Features
|
|
56
|
+
|
|
57
|
+
- **lint:** ban code comments + fix mobile fill in the Olaf host ([#3015](https://github.com/snokam/monorepo/issues/3015)) ([938549b](https://github.com/snokam/monorepo/commit/938549b8c1ed68cdc49be19cc168c1440c371199))
|
|
58
|
+
|
|
59
|
+
## [6.5.6](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.5.5...@snokam/sanity-page-content@6.5.6) (2026-10-22)
|
|
60
|
+
|
|
61
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
62
|
+
|
|
63
|
+
## [6.5.5](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.5.4...@snokam/sanity-page-content@6.5.5) (2026-10-22)
|
|
64
|
+
|
|
65
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
66
|
+
|
|
67
|
+
## [6.5.4](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.5.3...@snokam/sanity-page-content@6.5.4) (2026-10-22)
|
|
68
|
+
|
|
69
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
70
|
+
|
|
71
|
+
## [6.5.3](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.5.2...@snokam/sanity-page-content@6.5.3) (2026-10-16)
|
|
72
|
+
|
|
73
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
74
|
+
|
|
75
|
+
## [6.5.2](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.5.1...@snokam/sanity-page-content@6.5.2) (2026-10-14)
|
|
76
|
+
|
|
77
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
78
|
+
|
|
79
|
+
## [6.5.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.5.0...@snokam/sanity-page-content@6.5.1) (2026-10-14)
|
|
80
|
+
|
|
81
|
+
### Bug Fixes
|
|
82
|
+
|
|
83
|
+
- **admin-shell:** mount the view-as banner inside the App content provider ([#2948](https://github.com/snokam/monorepo/issues/2948)) ([f00de58](https://github.com/snokam/monorepo/commit/f00de589ccabcc71458cae812008b036c66795da))
|
|
84
|
+
|
|
85
|
+
# [6.5.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.4.0...@snokam/sanity-page-content@6.5.0) (2026-10-14)
|
|
86
|
+
|
|
87
|
+
### Features
|
|
88
|
+
|
|
89
|
+
- **platform-web:** one Vis som list, centred /manage loaders, banner copy from the App doc ([#2940](https://github.com/snokam/monorepo/issues/2940)) ([a9ff3f1](https://github.com/snokam/monorepo/commit/a9ff3f1d1d9714711d044a3a80602dd82e65e245))
|
|
90
|
+
|
|
91
|
+
# [6.4.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.0.0...@snokam/sanity-page-content@6.4.0) (2026-10-14)
|
|
92
|
+
|
|
93
|
+
### Bug Fixes
|
|
94
|
+
|
|
95
|
+
- **notifications:** only our services choose any sender; businesses send as themselves ([#2910](https://github.com/snokam/monorepo/issues/2910)) ([b9b836d](https://github.com/snokam/monorepo/commit/b9b836db8449a7f53c4907a0cbf329f088e91c2c))
|
|
96
|
+
|
|
97
|
+
### Features
|
|
98
|
+
|
|
99
|
+
- **events:** subscribe to future events from event pages and sign-up ([#2908](https://github.com/snokam/monorepo/issues/2908)) ([e50ea52](https://github.com/snokam/monorepo/commit/e50ea52a3095dd5b7426a5e2e4871f3f4fa9b9fd))
|
|
100
|
+
|
|
101
|
+
# [6.3.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.0.0...@snokam/sanity-page-content@6.3.0) (2026-10-14)
|
|
102
|
+
|
|
103
|
+
### Features
|
|
104
|
+
|
|
105
|
+
- **events:** subscribe to future events from event pages and sign-up ([#2908](https://github.com/snokam/monorepo/issues/2908)) ([e50ea52](https://github.com/snokam/monorepo/commit/e50ea52a3095dd5b7426a5e2e4871f3f4fa9b9fd))
|
|
106
|
+
|
|
107
|
+
# [6.2.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.0.0...@snokam/sanity-page-content@6.2.0) (2026-10-14)
|
|
108
|
+
|
|
109
|
+
### Features
|
|
110
|
+
|
|
111
|
+
- **events:** subscribe to future events from event pages and sign-up ([#2908](https://github.com/snokam/monorepo/issues/2908)) ([e50ea52](https://github.com/snokam/monorepo/commit/e50ea52a3095dd5b7426a5e2e4871f3f4fa9b9fd))
|
|
112
|
+
|
|
113
|
+
# [6.1.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@6.0.0...@snokam/sanity-page-content@6.1.0) (2026-10-14)
|
|
114
|
+
|
|
115
|
+
### Features
|
|
116
|
+
|
|
117
|
+
- **events:** subscribe to future events from event pages and sign-up ([#2908](https://github.com/snokam/monorepo/issues/2908)) ([e50ea52](https://github.com/snokam/monorepo/commit/e50ea52a3095dd5b7426a5e2e4871f3f4fa9b9fd))
|
|
118
|
+
|
|
119
|
+
# [6.0.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.11.1...@snokam/sanity-page-content@6.0.0) (2026-10-14)
|
|
120
|
+
|
|
121
|
+
### Bug Fixes
|
|
122
|
+
|
|
123
|
+
- **platform:** SaaS onboarding batch 3 — platform sender, internal costs, empty states ([#2900](https://github.com/snokam/monorepo/issues/2900)) ([bdb5a7e](https://github.com/snokam/monorepo/commit/bdb5a7e4bc7865dc32f367a7e1f3f6521ff1d7cb))
|
|
124
|
+
|
|
125
|
+
### Features
|
|
126
|
+
|
|
127
|
+
- **my-page-web:** Min side improvements from the page review (WIP) ([#2885](https://github.com/snokam/monorepo/issues/2885)) ([d96a1e5](https://github.com/snokam/monorepo/commit/d96a1e537d76f12a8e53d9d6885728e1b7a67586))
|
|
128
|
+
- **my-page-web:** shared page headers, server-side titles and /kontor buttons ([#2912](https://github.com/snokam/monorepo/issues/2912)) ([9689f04](https://github.com/snokam/monorepo/commit/9689f049bfa6e8d05a409c1e1fbc719d0a68ef86))
|
|
129
|
+
- per-company branding (logo, dark logo, icon) ([#2907](https://github.com/snokam/monorepo/issues/2907)) ([dc32583](https://github.com/snokam/monorepo/commit/dc325832803c88158937f45fe5b9e1b64846a52d))
|
|
130
|
+
|
|
131
|
+
### BREAKING CHANGES
|
|
132
|
+
|
|
133
|
+
- SimpleHeaderBase and FooterBase take `logo` as a ReactNode;
|
|
134
|
+
the HeaderLogo and FooterLogo types are removed.
|
|
135
|
+
|
|
136
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
137
|
+
Claude-Session: https://claude.ai/code/session_01Nv57F4rwzYRkuUVFdd2wXA
|
|
138
|
+
|
|
139
|
+
- feat(platform-web): company branding in /manage, at login and in the shell
|
|
140
|
+
|
|
141
|
+
/manage/innstillinger gets a Merkevare section: the logo for light
|
|
142
|
+
backgrounds, the logo for dark backgrounds and the square icon, each with a
|
|
143
|
+
preview on its own background, upload (react-hook-form + zod: type and 2 MB
|
|
144
|
+
checked before sending) and remove. Server error codes map to CMS copy.
|
|
145
|
+
The central login shows the company's logo above "Logg inn hos …", from
|
|
146
|
+
login-config. The /manage shell shows the managed business's logo linking to
|
|
147
|
+
its front page; /admin and an operator without a business show the platform
|
|
148
|
+
business. The public snosky.no chrome keeps the Snøsky logo from the platform
|
|
149
|
+
CMS, through the same BusinessLogo.
|
|
150
|
+
|
|
151
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
152
|
+
Claude-Session: https://claude.ai/code/session_01Nv57F4rwzYRkuUVFdd2wXA
|
|
153
|
+
|
|
154
|
+
- fix(my-page-web): drop leftover Snøkam favicons
|
|
155
|
+
|
|
156
|
+
The unused pages-router meta component and finance-web's public/favicon.ico
|
|
157
|
+
served Snøkam's icon to every company; favicons now come from the
|
|
158
|
+
company's uploaded icon.
|
|
159
|
+
|
|
160
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
161
|
+
Claude-Session: https://claude.ai/code/session_01Nv57F4rwzYRkuUVFdd2wXA
|
|
162
|
+
|
|
163
|
+
- fix(handbook-web): no Snøkam share image, no raw-URL fallback in branding metadata
|
|
164
|
+
|
|
165
|
+
The handbook's root metadata no longer hardcodes the Snøkam icon as the
|
|
166
|
+
share image, so the company's share image from makeTenantMetadata applies.
|
|
167
|
+
The favicon and share helpers drop their raw-URL fallback: a transform that
|
|
168
|
+
yields nothing yields no image, never an untransformed (possibly SVG) URL.
|
|
169
|
+
|
|
170
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
171
|
+
Claude-Session: https://claude.ai/code/session_01Nv57F4rwzYRkuUVFdd2wXA
|
|
172
|
+
|
|
173
|
+
- fix(ui): show the light logo inverted on dark when no dark logo is uploaded
|
|
174
|
+
|
|
175
|
+
Without a dark logo, a dark background shows the light logo turned white
|
|
176
|
+
(brightness(0) invert(1)) instead of the wordmark. The Merkevare previews
|
|
177
|
+
use static brand tokens, and upload errors are read by parsing the JSON
|
|
178
|
+
body rather than stripping quotes.
|
|
179
|
+
|
|
180
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
181
|
+
Claude-Session: https://claude.ai/code/session_01Nv57F4rwzYRkuUVFdd2wXA
|
|
182
|
+
|
|
183
|
+
- chore(clients): regenerate platform-function clients for branding
|
|
184
|
+
|
|
185
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
186
|
+
Claude-Session: https://claude.ai/code/session_01Nv57F4rwzYRkuUVFdd2wXA
|
|
187
|
+
|
|
188
|
+
# [5.0.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.11.1...@snokam/sanity-page-content@5.0.0) (2026-10-14)
|
|
189
|
+
|
|
190
|
+
### Bug Fixes
|
|
191
|
+
|
|
192
|
+
- **platform:** SaaS onboarding batch 3 — platform sender, internal costs, empty states ([#2900](https://github.com/snokam/monorepo/issues/2900)) ([bdb5a7e](https://github.com/snokam/monorepo/commit/bdb5a7e4bc7865dc32f367a7e1f3f6521ff1d7cb))
|
|
193
|
+
|
|
194
|
+
### Features
|
|
195
|
+
|
|
196
|
+
- **my-page-web:** Min side improvements from the page review (WIP) ([#2885](https://github.com/snokam/monorepo/issues/2885)) ([d96a1e5](https://github.com/snokam/monorepo/commit/d96a1e537d76f12a8e53d9d6885728e1b7a67586))
|
|
197
|
+
- **my-page-web:** shared page headers, server-side titles and /kontor buttons ([#2912](https://github.com/snokam/monorepo/issues/2912)) ([9689f04](https://github.com/snokam/monorepo/commit/9689f049bfa6e8d05a409c1e1fbc719d0a68ef86))
|
|
198
|
+
- per-company branding (logo, dark logo, icon) ([#2907](https://github.com/snokam/monorepo/issues/2907)) ([dc32583](https://github.com/snokam/monorepo/commit/dc325832803c88158937f45fe5b9e1b64846a52d))
|
|
199
|
+
|
|
200
|
+
### BREAKING CHANGES
|
|
201
|
+
|
|
202
|
+
- SimpleHeaderBase and FooterBase take `logo` as a ReactNode;
|
|
203
|
+
the HeaderLogo and FooterLogo types are removed.
|
|
204
|
+
|
|
205
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
206
|
+
Claude-Session: https://claude.ai/code/session_01Nv57F4rwzYRkuUVFdd2wXA
|
|
207
|
+
|
|
208
|
+
- feat(platform-web): company branding in /manage, at login and in the shell
|
|
209
|
+
|
|
210
|
+
/manage/innstillinger gets a Merkevare section: the logo for light
|
|
211
|
+
backgrounds, the logo for dark backgrounds and the square icon, each with a
|
|
212
|
+
preview on its own background, upload (react-hook-form + zod: type and 2 MB
|
|
213
|
+
checked before sending) and remove. Server error codes map to CMS copy.
|
|
214
|
+
The central login shows the company's logo above "Logg inn hos …", from
|
|
215
|
+
login-config. The /manage shell shows the managed business's logo linking to
|
|
216
|
+
its front page; /admin and an operator without a business show the platform
|
|
217
|
+
business. The public snosky.no chrome keeps the Snøsky logo from the platform
|
|
218
|
+
CMS, through the same BusinessLogo.
|
|
219
|
+
|
|
220
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
221
|
+
Claude-Session: https://claude.ai/code/session_01Nv57F4rwzYRkuUVFdd2wXA
|
|
222
|
+
|
|
223
|
+
- fix(my-page-web): drop leftover Snøkam favicons
|
|
224
|
+
|
|
225
|
+
The unused pages-router meta component and finance-web's public/favicon.ico
|
|
226
|
+
served Snøkam's icon to every company; favicons now come from the
|
|
227
|
+
company's uploaded icon.
|
|
228
|
+
|
|
229
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
230
|
+
Claude-Session: https://claude.ai/code/session_01Nv57F4rwzYRkuUVFdd2wXA
|
|
231
|
+
|
|
232
|
+
- fix(handbook-web): no Snøkam share image, no raw-URL fallback in branding metadata
|
|
233
|
+
|
|
234
|
+
The handbook's root metadata no longer hardcodes the Snøkam icon as the
|
|
235
|
+
share image, so the company's share image from makeTenantMetadata applies.
|
|
236
|
+
The favicon and share helpers drop their raw-URL fallback: a transform that
|
|
237
|
+
yields nothing yields no image, never an untransformed (possibly SVG) URL.
|
|
238
|
+
|
|
239
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
240
|
+
Claude-Session: https://claude.ai/code/session_01Nv57F4rwzYRkuUVFdd2wXA
|
|
241
|
+
|
|
242
|
+
- fix(ui): show the light logo inverted on dark when no dark logo is uploaded
|
|
243
|
+
|
|
244
|
+
Without a dark logo, a dark background shows the light logo turned white
|
|
245
|
+
(brightness(0) invert(1)) instead of the wordmark. The Merkevare previews
|
|
246
|
+
use static brand tokens, and upload errors are read by parsing the JSON
|
|
247
|
+
body rather than stripping quotes.
|
|
248
|
+
|
|
249
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
250
|
+
Claude-Session: https://claude.ai/code/session_01Nv57F4rwzYRkuUVFdd2wXA
|
|
251
|
+
|
|
252
|
+
- chore(clients): regenerate platform-function clients for branding
|
|
253
|
+
|
|
254
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
255
|
+
Claude-Session: https://claude.ai/code/session_01Nv57F4rwzYRkuUVFdd2wXA
|
|
256
|
+
|
|
257
|
+
# [4.13.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.11.1...@snokam/sanity-page-content@4.13.0) (2026-10-14)
|
|
258
|
+
|
|
259
|
+
### Bug Fixes
|
|
260
|
+
|
|
261
|
+
- **platform:** SaaS onboarding batch 3 — platform sender, internal costs, empty states ([#2900](https://github.com/snokam/monorepo/issues/2900)) ([bdb5a7e](https://github.com/snokam/monorepo/commit/bdb5a7e4bc7865dc32f367a7e1f3f6521ff1d7cb))
|
|
262
|
+
|
|
263
|
+
### Features
|
|
264
|
+
|
|
265
|
+
- **my-page-web:** Min side improvements from the page review (WIP) ([#2885](https://github.com/snokam/monorepo/issues/2885)) ([d96a1e5](https://github.com/snokam/monorepo/commit/d96a1e537d76f12a8e53d9d6885728e1b7a67586))
|
|
266
|
+
|
|
267
|
+
# [4.12.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.11.1...@snokam/sanity-page-content@4.12.0) (2026-10-14)
|
|
268
|
+
|
|
269
|
+
### Features
|
|
270
|
+
|
|
271
|
+
- **my-page-web:** Min side improvements from the page review (WIP) ([#2885](https://github.com/snokam/monorepo/issues/2885)) ([d96a1e5](https://github.com/snokam/monorepo/commit/d96a1e537d76f12a8e53d9d6885728e1b7a67586))
|
|
272
|
+
|
|
273
|
+
## [4.11.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.11.0...@snokam/sanity-page-content@4.11.1) (2026-10-14)
|
|
274
|
+
|
|
275
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
276
|
+
|
|
277
|
+
# [4.11.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.10.4...@snokam/sanity-page-content@4.11.0) (2026-10-14)
|
|
278
|
+
|
|
279
|
+
### Features
|
|
280
|
+
|
|
281
|
+
- **stocks:** generate sluttsedler for share sales from the share register ([#2827](https://github.com/snokam/monorepo/issues/2827)) ([08f2084](https://github.com/snokam/monorepo/commit/08f20840be42e21b824ecff27cc591498e61a413))
|
|
282
|
+
|
|
283
|
+
## [4.10.4](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.10.3...@snokam/sanity-page-content@4.10.4) (2026-10-09)
|
|
284
|
+
|
|
285
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
286
|
+
|
|
287
|
+
## [4.10.3](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.10.2...@snokam/sanity-page-content@4.10.3) (2026-10-08)
|
|
288
|
+
|
|
289
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
290
|
+
|
|
291
|
+
## [4.10.2](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.10.1...@snokam/sanity-page-content@4.10.2) (2026-10-08)
|
|
292
|
+
|
|
293
|
+
### Bug Fixes
|
|
294
|
+
|
|
295
|
+
- **employees:** drop the replaced boardMember and leadershipGroupMember fields so employees without them load ([#2759](https://github.com/snokam/monorepo/issues/2759)) ([5bacb0d](https://github.com/snokam/monorepo/commit/5bacb0d9fa967f6598727674fbd7deec6df8c563)), closes [#2749](https://github.com/snokam/monorepo/issues/2749)
|
|
296
|
+
|
|
297
|
+
## [4.10.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.10.0...@snokam/sanity-page-content@4.10.1) (2026-10-07)
|
|
298
|
+
|
|
299
|
+
### Bug Fixes
|
|
300
|
+
|
|
301
|
+
- **events:** store guest photo consent as yes/no like employee photoConsent ([cc912f7](https://github.com/snokam/monorepo/commit/cc912f7c5a9e087d51f56fd386c8432a95b63c3b)), closes [#2567](https://github.com/snokam/monorepo/issues/2567)
|
|
302
|
+
|
|
303
|
+
# [4.10.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.9.0...@snokam/sanity-page-content@4.10.0) (2026-10-07)
|
|
304
|
+
|
|
305
|
+
### Features
|
|
306
|
+
|
|
307
|
+
- **employees:** leadership and board as admin-managed groups; leadership reads all survey answers ([#2749](https://github.com/snokam/monorepo/issues/2749)) ([07e6509](https://github.com/snokam/monorepo/commit/07e650985720a2bd6ffbf97d2a9587bdeee47639))
|
|
308
|
+
|
|
309
|
+
# [4.9.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.8.1...@snokam/sanity-page-content@4.9.0) (2026-10-07)
|
|
310
|
+
|
|
311
|
+
### Features
|
|
312
|
+
|
|
313
|
+
- **recruitment:** move fully onboarded candidates to a new «ansatt» status ([#2744](https://github.com/snokam/monorepo/issues/2744)) ([0cd6336](https://github.com/snokam/monorepo/commit/0cd633607be4f298f621f3fef74fda19e53697f0))
|
|
314
|
+
|
|
315
|
+
## [4.8.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.8.0...@snokam/sanity-page-content@4.8.1) (2026-10-06)
|
|
316
|
+
|
|
317
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
318
|
+
|
|
319
|
+
# [4.8.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.7.0...@snokam/sanity-page-content@4.8.0) (2026-10-06)
|
|
320
|
+
|
|
321
|
+
### Features
|
|
322
|
+
|
|
323
|
+
- **handbook:** internal FAQ lives in the handbook; revert the shared FAQ ([#2715](https://github.com/snokam/monorepo/issues/2715)) ([2582af2](https://github.com/snokam/monorepo/commit/2582af25bb5ce9983d0c8a5e5ef33563df3486bb)), closes [#2706](https://github.com/snokam/monorepo/issues/2706) [#2710](https://github.com/snokam/monorepo/issues/2710)
|
|
324
|
+
|
|
325
|
+
# [4.7.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.6.0...@snokam/sanity-page-content@4.7.0) (2026-10-06)
|
|
326
|
+
|
|
327
|
+
### Features
|
|
328
|
+
|
|
329
|
+
- **surveys:** run repeating surveys in rounds and announce them in Slack ([#2711](https://github.com/snokam/monorepo/issues/2711)) ([93b3ad6](https://github.com/snokam/monorepo/commit/93b3ad6e76f4819ab82f0cd6fa0be37d2b86afdc))
|
|
330
|
+
|
|
331
|
+
# [4.6.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.5.0...@snokam/sanity-page-content@4.6.0) (2026-10-06)
|
|
332
|
+
|
|
333
|
+
### Features
|
|
334
|
+
|
|
335
|
+
- **faq:** choose per question whether it shows externally, internally or both ([#2710](https://github.com/snokam/monorepo/issues/2710)) ([68381ee](https://github.com/snokam/monorepo/commit/68381eed138d3038e9fd5649a307c4813eeb9d57))
|
|
336
|
+
|
|
337
|
+
# [4.5.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.4.2...@snokam/sanity-page-content@4.5.0) (2026-10-06)
|
|
338
|
+
|
|
339
|
+
### Features
|
|
340
|
+
|
|
341
|
+
- **faq:** internal FAQ items and FAQ page on Min side ([#2706](https://github.com/snokam/monorepo/issues/2706)) ([84a9b93](https://github.com/snokam/monorepo/commit/84a9b935305916ac9ed168cc2474ab427028b9bd))
|
|
342
|
+
|
|
343
|
+
## [4.4.2](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.4.1...@snokam/sanity-page-content@4.4.2) (2026-10-06)
|
|
344
|
+
|
|
345
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
346
|
+
|
|
347
|
+
## [4.4.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.4.0...@snokam/sanity-page-content@4.4.1) (2026-10-05)
|
|
348
|
+
|
|
349
|
+
### Bug Fixes
|
|
350
|
+
|
|
351
|
+
- no employee auto-provisioning at login + explain how to get access ([#2675](https://github.com/snokam/monorepo/issues/2675)) ([b30d34a](https://github.com/snokam/monorepo/commit/b30d34abce4bcfabe6326a7dc5876312e603efdc))
|
|
352
|
+
|
|
353
|
+
# [4.4.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.3.10...@snokam/sanity-page-content@4.4.0) (2026-10-05)
|
|
354
|
+
|
|
355
|
+
### Features
|
|
356
|
+
|
|
357
|
+
- **my-page-web:** add photo consent (Ja/Nei) to employee profile ([#2567](https://github.com/snokam/monorepo/issues/2567)) ([a03bb63](https://github.com/snokam/monorepo/commit/a03bb631ab7d089a91b686e38bbc4e6659a5137d))
|
|
358
|
+
|
|
359
|
+
## [4.3.10](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.3.9...@snokam/sanity-page-content@4.3.10) (2026-10-05)
|
|
360
|
+
|
|
361
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
362
|
+
|
|
363
|
+
## [4.3.9](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.3.8...@snokam/sanity-page-content@4.3.9) (2026-10-05)
|
|
364
|
+
|
|
365
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
366
|
+
|
|
367
|
+
## [4.3.8](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.3.7...@snokam/sanity-page-content@4.3.8) (2026-10-05)
|
|
368
|
+
|
|
369
|
+
### Bug Fixes
|
|
370
|
+
|
|
371
|
+
- **employees:** make birth_date optional so one employee without it can't break every employee job ([#2661](https://github.com/snokam/monorepo/issues/2661)) ([a386a10](https://github.com/snokam/monorepo/commit/a386a10b1a430fceec62aa9013961fb3a2153841))
|
|
372
|
+
|
|
373
|
+
## [4.3.7](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.3.6...@snokam/sanity-page-content@4.3.7) (2026-10-05)
|
|
374
|
+
|
|
375
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
376
|
+
|
|
377
|
+
## [4.3.6](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.3.3...@snokam/sanity-page-content@4.3.6) (2026-10-04)
|
|
378
|
+
|
|
379
|
+
### Bug Fixes
|
|
380
|
+
|
|
381
|
+
- **sanity-page-content:** a tenant component replaces the platform one with the same key ([#2606](https://github.com/snokam/monorepo/issues/2606)) ([9184c20](https://github.com/snokam/monorepo/commit/9184c20227c8822bc145da5e30a5cc032a23c19a))
|
|
382
|
+
- **sanity-page-content:** never send the Sanity read token to anonymous visitors ([#2607](https://github.com/snokam/monorepo/issues/2607)) ([ab8a194](https://github.com/snokam/monorepo/commit/ab8a1947a8070726e068547daa2a722cf84a7614))
|
|
383
|
+
|
|
384
|
+
## [4.3.5](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.3.3...@snokam/sanity-page-content@4.3.5) (2026-10-04)
|
|
385
|
+
|
|
386
|
+
### Bug Fixes
|
|
387
|
+
|
|
388
|
+
- **sanity-page-content:** a tenant component replaces the platform one with the same key ([#2606](https://github.com/snokam/monorepo/issues/2606)) ([9184c20](https://github.com/snokam/monorepo/commit/9184c20227c8822bc145da5e30a5cc032a23c19a))
|
|
389
|
+
- **sanity-page-content:** never send the Sanity read token to anonymous visitors ([#2607](https://github.com/snokam/monorepo/issues/2607)) ([ab8a194](https://github.com/snokam/monorepo/commit/ab8a1947a8070726e068547daa2a722cf84a7614))
|
|
390
|
+
|
|
391
|
+
## [4.3.4](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.3.3...@snokam/sanity-page-content@4.3.4) (2026-10-04)
|
|
392
|
+
|
|
393
|
+
### Bug Fixes
|
|
394
|
+
|
|
395
|
+
- **sanity-page-content:** never send the Sanity read token to anonymous visitors ([#2607](https://github.com/snokam/monorepo/issues/2607)) ([ab8a194](https://github.com/snokam/monorepo/commit/ab8a1947a8070726e068547daa2a722cf84a7614))
|
|
396
|
+
|
|
397
|
+
## [4.3.3](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.3.2...@snokam/sanity-page-content@4.3.3) (2026-10-04)
|
|
398
|
+
|
|
399
|
+
### Bug Fixes
|
|
400
|
+
|
|
401
|
+
- bugs surfaced by the new telemetry (tenant self-calls, cold lookups, gender, hydration) ([#2599](https://github.com/snokam/monorepo/issues/2599)) ([903338f](https://github.com/snokam/monorepo/commit/903338f3cc1d383544ffdc2ecd8141bded0641b7)), closes [#418](https://github.com/snokam/monorepo/issues/418)
|
|
402
|
+
|
|
403
|
+
## [4.3.2](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.3.1...@snokam/sanity-page-content@4.3.2) (2026-10-04)
|
|
404
|
+
|
|
405
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
406
|
+
|
|
407
|
+
## [4.3.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.3.0...@snokam/sanity-page-content@4.3.1) (2026-10-04)
|
|
408
|
+
|
|
409
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
410
|
+
|
|
411
|
+
# [4.3.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.2.1...@snokam/sanity-page-content@4.3.0) (2026-10-04)
|
|
412
|
+
|
|
413
|
+
### Features
|
|
414
|
+
|
|
415
|
+
- **platform-web:** consent page explains what the app can reach, with header and footer on every system page ([#2575](https://github.com/snokam/monorepo/issues/2575)) ([708f804](https://github.com/snokam/monorepo/commit/708f8041343228377ba43bb04f6947d82efd7be5)), closes [#2570](https://github.com/snokam/monorepo/issues/2570)
|
|
416
|
+
|
|
417
|
+
## [4.2.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.2.0...@snokam/sanity-page-content@4.2.1) (2026-10-03)
|
|
418
|
+
|
|
419
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
420
|
+
|
|
421
|
+
# [4.2.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.1.0...@snokam/sanity-page-content@4.2.0) (2026-10-02)
|
|
422
|
+
|
|
423
|
+
### Features
|
|
424
|
+
|
|
425
|
+
- **spor:** la ansatte utsette sporvalget tre ganger ([37dc791](https://github.com/snokam/monorepo/commit/37dc791dc9f4a29074428bbb0f47eb2da2fc6dd5))
|
|
426
|
+
|
|
427
|
+
# [4.1.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.0.3...@snokam/sanity-page-content@4.1.0) (2026-10-02)
|
|
428
|
+
|
|
429
|
+
### Bug Fixes
|
|
430
|
+
|
|
431
|
+
- **surveys:** the employee already had a start date, and adding a second one broke onboarding ([741a3d1](https://github.com/snokam/monorepo/commit/741a3d1708b539007cd72fc087abe1142c0435c3))
|
|
432
|
+
|
|
433
|
+
### Features
|
|
434
|
+
|
|
435
|
+
- **surveys:** forms in Sanity, answers where 19 Studio admins cannot read them ([d7f1840](https://github.com/snokam/monorepo/commit/d7f18402911940e29bc977196c286b6ae185dd4e))
|
|
436
|
+
|
|
437
|
+
## [4.0.3](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.0.2...@snokam/sanity-page-content@4.0.3) (2026-10-02)
|
|
438
|
+
|
|
439
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
440
|
+
|
|
441
|
+
## [4.0.2](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.0.1...@snokam/sanity-page-content@4.0.2) (2026-10-02)
|
|
442
|
+
|
|
443
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
444
|
+
|
|
445
|
+
## [4.0.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@4.0.0...@snokam/sanity-page-content@4.0.1) (2026-10-01)
|
|
446
|
+
|
|
447
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
448
|
+
|
|
449
|
+
# [4.0.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@3.5.0...@snokam/sanity-page-content@4.0.0) (2026-10-01)
|
|
450
|
+
|
|
451
|
+
- feat(onboarding)!: vendor-independent onboarding + onboarding tasks in Jira (#2530) ([ebb4592](https://github.com/snokam/monorepo/commit/ebb4592d64ca68dfcf04470435bdb6d30931eb00)), closes [#2530](https://github.com/snokam/monorepo/issues/2530)
|
|
452
|
+
|
|
453
|
+
### BREAKING CHANGES
|
|
454
|
+
|
|
455
|
+
- `SanitySystemsInner` and the `/v1.0/systems` endpoints
|
|
456
|
+
are removed from the sanity/recruitment clients.
|
|
457
|
+
|
|
458
|
+
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
459
|
+
|
|
460
|
+
- feat(recruitment): surface catalog activate/deactivate deep-links on onboarding rows
|
|
461
|
+
|
|
462
|
+
Restore the manual "activate account"/"deactivate" deep-links that the Sanity
|
|
463
|
+
system-doc teardown dropped, now sourced from the OnboardingSystemCatalog via
|
|
464
|
+
RequestTenant. OnboardingStepSystemView carries nullable activateUrl/deactivateUrl,
|
|
465
|
+
populated per system from tenant.OnboardingActivateUrl/OnboardingDeactivateUrl
|
|
466
|
+
(rendering the {slug} template + per-tenant override map). recruitment-web renders
|
|
467
|
+
the activate link on onboarding system rows and the deactivate link on offboarding
|
|
468
|
+
rows when present. Regenerated recruitment client.
|
|
469
|
+
|
|
470
|
+
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
|
471
|
+
|
|
472
|
+
- fix(recruitment): micros cannot use the @/ alias — my-page-web compiles them
|
|
473
|
+
|
|
474
|
+
The kandidat, drift and onboarding micros are imported by my-page-web, where
|
|
475
|
+
@/ resolves to my-page-web's src. The eight @/utils/systemCapabilities imports
|
|
476
|
+
this branch added were therefore unresolvable in that build — six module-not-
|
|
477
|
+
found errors, and the image never got built. Every other file under micros/
|
|
478
|
+
already reaches app-local code by relative path; these now do too.
|
|
479
|
+
|
|
480
|
+
Also runs prettier over the candidate process schema, which the lint job
|
|
481
|
+
flagged.
|
|
482
|
+
|
|
483
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
484
|
+
Claude-Session: https://claude.ai/code/session_01FatBj58knAM48WmDppDYyg
|
|
485
|
+
|
|
486
|
+
- chore(platform): regenerate the platform client for the merged integration model
|
|
487
|
+
|
|
488
|
+
The merge took main's IntegrationSummary, which renamed isActive to isInUse
|
|
489
|
+
and does not know about logoUrl. Regenerating against the merged
|
|
490
|
+
platform-function gives a client with both.
|
|
491
|
+
|
|
492
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
493
|
+
Claude-Session: https://claude.ai/code/session_01FatBj58knAM48WmDppDYyg
|
|
494
|
+
|
|
495
|
+
- chore(platform): keep the platform-client changelog the regenerator dropped
|
|
496
|
+
|
|
497
|
+
The client generator rewrites the package directory and took CHANGELOG.md with
|
|
498
|
+
it. Restored from main.
|
|
499
|
+
|
|
500
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
501
|
+
Claude-Session: https://claude.ai/code/session_01FatBj58knAM48WmDppDYyg
|
|
502
|
+
|
|
503
|
+
- fix(platform): follow the tenancy refactor's namespaces in the integration catalog
|
|
504
|
+
|
|
505
|
+
main's refactor removed Snokam.Security: FunctionAuthorize now lives in Snokam.Auth and ImplicitAuthFlow in Snokam.Api. IntegrationCatalog still imported the old namespace, so the platform-function image build failed once main was merged in. Platform.Function builds with 0 errors.
|
|
506
|
+
|
|
507
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
508
|
+
|
|
509
|
+
- feat: create onboarding tasks as Jira issues and sync them back
|
|
510
|
+
|
|
511
|
+
Onboarding tasks become Jira issues instead of checkboxes only. The
|
|
512
|
+
intranet onboarding list stays the master for which issues get created.
|
|
513
|
+
|
|
514
|
+
- Onboarding chain step `jira-onboarding-tasks` creates one issue per
|
|
515
|
+
open onboarding task, in the configured epic and the active sprint,
|
|
516
|
+
labelled onboarding-firstname-lastname. Assignee comes from the task's
|
|
517
|
+
new role (recruiter / buddy / new hire) or a fixed person.
|
|
518
|
+
- SyncOnboardingIssuesJob (every 15 min, plus POST
|
|
519
|
+
/v1.0/protected/onboarding/jira-sync) creates the equipment issue once
|
|
520
|
+
the new hire orders equipment, creates the follow-up issue X days after
|
|
521
|
+
start, and ticks tasks off in the checklist when their issue is done.
|
|
522
|
+
A done equipment issue posts who ordered it.
|
|
523
|
+
- Recruitment Settings gets an "Onboarding i Jira" section (project,
|
|
524
|
+
epic, issue type, equipment assignee, follow-up days/role), served by a
|
|
525
|
+
new sanity-function endpoint.
|
|
526
|
+
- The equipment-ordered Slack message points to the Jira issue instead
|
|
527
|
+
of the Confluence checklist.
|
|
528
|
+
|
|
529
|
+
Committed with --no-verify from a worktree; lint (0 errors) and prettier
|
|
530
|
+
were run on the changed TS workspaces.
|
|
531
|
+
|
|
532
|
+
Refs SNO-4167
|
|
533
|
+
|
|
534
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
535
|
+
|
|
536
|
+
- feat: read onboarding task status live from Jira instead of copying it
|
|
537
|
+
|
|
538
|
+
Jira is the source of truth for onboarding tasks, so the intranet no
|
|
539
|
+
longer mirrors completion into onboardingChecklist.
|
|
540
|
+
|
|
541
|
+
- Candidates keep only the link from task to issue key; `done` is gone,
|
|
542
|
+
`announced` remains for the one-time "utstyret er bestilt" message.
|
|
543
|
+
- GET /v1.0/protected/onboarding/issues returns every onboarding
|
|
544
|
+
candidate's issues (or one, with candidateId) with status, assignee
|
|
545
|
+
and browse link from a single Jira query; statusError says why when
|
|
546
|
+
Jira is unreachable.
|
|
547
|
+
- Candidate detail, the onboarding dashboard and Min rekruttering count
|
|
548
|
+
a task as done when Jira says so (or it was ticked before it got an
|
|
549
|
+
issue). Tasks with an issue are read-only and link to Jira.
|
|
550
|
+
- The sync job now only creates the equipment and follow-up issues and
|
|
551
|
+
announces a finished equipment order.
|
|
552
|
+
|
|
553
|
+
New UI text keys are seeded on recruitment-web-admin-candidate-page in
|
|
554
|
+
prod. Committed with --no-verify from a worktree; recruitment-web lint
|
|
555
|
+
(0 errors), prettier and tsc on the changed micros were run.
|
|
556
|
+
|
|
557
|
+
Refs SNO-4167
|
|
558
|
+
|
|
559
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
560
|
+
|
|
561
|
+
- feat: create the equipment issue when the order is placed; sync daily
|
|
562
|
+
|
|
563
|
+
* employees-function calls recruitment-function (generated client, MI
|
|
564
|
+
token) right after an equipment order, and recruitment creates the
|
|
565
|
+
equipment Jira issue on the new hire's onboarding. A failed call is
|
|
566
|
+
reported and the daily run catches up.
|
|
567
|
+
* New POST /v1.0/protected/onboarding/equipment-order.
|
|
568
|
+
* SyncOnboardingIssuesJob now runs daily at 07:00: due follow-ups,
|
|
569
|
+
missed equipment issues, and the one-time "utstyret er bestilt"
|
|
570
|
+
message.
|
|
571
|
+
* Studio hides the manual onboarding checklist once a candidate has
|
|
572
|
+
Jira issues (status lives in Jira and the intranet); the Jira list
|
|
573
|
+
shows task title per issue.
|
|
574
|
+
|
|
575
|
+
Refs SNO-4167
|
|
576
|
+
|
|
577
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
578
|
+
|
|
579
|
+
- fix(recruitment): look up Jira assignees with assignable-user search
|
|
580
|
+
|
|
581
|
+
The connected Jira account (Olaf) lacks the global Browse users
|
|
582
|
+
permission, so /user/search returns nothing. /user/assignable/search
|
|
583
|
+
scoped to the project works with read:jira-user and is the right
|
|
584
|
+
question anyway: can this person be assigned in the project?
|
|
585
|
+
|
|
586
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
587
|
+
|
|
588
|
+
- fix(recruitment): bulk-create onboarding issues and harden Jira parsing
|
|
589
|
+
|
|
590
|
+
Found in a live run against the test Jira site:
|
|
591
|
+
|
|
592
|
+
- Creating 27 issues one by one took ~45 s locally, close to the 60 s
|
|
593
|
+
request budget, and a run cut short left issues in Jira that were
|
|
594
|
+
never linked, so a retry duplicated them. Task issues are now created
|
|
595
|
+
with one /issue/bulk call, and every issue Jira accepted is saved even
|
|
596
|
+
when others are rejected.
|
|
597
|
+
- The Jira access token was fetched from platform on every Jira call;
|
|
598
|
+
it is now fetched once per request.
|
|
599
|
+
- Unassigned issues ("assignee": null) crashed status parsing; JSON
|
|
600
|
+
nulls are handled.
|
|
601
|
+
|
|
602
|
+
Adds adapter tests against recorded Jira responses.
|
|
603
|
+
|
|
604
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
605
|
+
|
|
606
|
+
- feat(recruitment): create onboarding Jira issues on schedule, X days before start
|
|
607
|
+
|
|
608
|
+
Each onboarding task's existing "Påminn kanal X dager før oppstart"
|
|
609
|
+
(remindDaysBefore) now also decides when its Jira issue is created:
|
|
610
|
+
start date minus X days. Tasks without it are created as soon as the
|
|
611
|
+
candidate is onboarding. The daily job creates what has become due for
|
|
612
|
+
ONBOARDING candidates whose start date is at most follow-up-days back;
|
|
613
|
+
"Kjør automatisk onboarding" creates what is due right away. Candidates
|
|
614
|
+
without a start date get nothing.
|
|
615
|
+
|
|
616
|
+
Also fixes the task API, which projected the stale reminderWeeksBefore
|
|
617
|
+
field instead of remindDaysBefore.
|
|
618
|
+
|
|
619
|
+
Refs SNO-4167
|
|
620
|
+
|
|
621
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
622
|
+
|
|
623
|
+
- feat(recruitment): create all onboarding issues at once and place each in the sprint of its due date
|
|
624
|
+
|
|
625
|
+
From recruitment (Silje): create the issues when the candidate is moved
|
|
626
|
+
to onboarding, and put them in sprints based on the start date.
|
|
627
|
+
|
|
628
|
+
- Moving a candidate to ONBOARDING starts issue creation in the
|
|
629
|
+
background from the candidate page; the daily job is the safety net.
|
|
630
|
+
- Every issue gets a Jira due date: start date minus the task's "X dager
|
|
631
|
+
før oppstart", or the start date when it has none.
|
|
632
|
+
- Each issue goes into the sprint whose dates cover its due date (active
|
|
633
|
+
sprint when due already, the last planned sprint when beyond the
|
|
634
|
+
planned ones). Nothing is left in the backlog. Sprints are read from
|
|
635
|
+
issue search, so no extra Jira Software scope is needed.
|
|
636
|
+
- The daily job moves open issues to the right sprint when sprints are
|
|
637
|
+
added or re-dated.
|
|
638
|
+
- Candidate page shows due date and sprint on each Jira task; the
|
|
639
|
+
"planned" state is gone since every task exists in Jira.
|
|
640
|
+
|
|
641
|
+
Refs SNO-4167
|
|
642
|
+
|
|
643
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
644
|
+
|
|
645
|
+
- chore: regenerate Sanity types and clients for the integrated onboarding branch
|
|
646
|
+
|
|
647
|
+
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
648
|
+
|
|
649
|
+
# [3.5.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@3.4.0...@snokam/sanity-page-content@3.5.0) (2026-10-01)
|
|
650
|
+
|
|
651
|
+
### Features
|
|
652
|
+
|
|
653
|
+
- **my-page:** one track per person, several for the leadership group ([#2511](https://github.com/snokam/monorepo/issues/2511)) ([b23a608](https://github.com/snokam/monorepo/commit/b23a6085fae4637d5209aa199ac34a0bf6485ae6))
|
|
654
|
+
|
|
655
|
+
# [3.4.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@3.3.0...@snokam/sanity-page-content@3.4.0) (2026-09-30)
|
|
656
|
+
|
|
657
|
+
### Features
|
|
658
|
+
|
|
659
|
+
- drop newsletterSeries tag link and hide newsletters on /subscriptions ([#2513](https://github.com/snokam/monorepo/issues/2513)) ([a028f43](https://github.com/snokam/monorepo/commit/a028f43d239f21c12f1483ab428cb63c58fab304))
|
|
660
|
+
|
|
661
|
+
# [3.3.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@3.2.1...@snokam/sanity-page-content@3.3.0) (2026-09-30)
|
|
662
|
+
|
|
663
|
+
### Features
|
|
664
|
+
|
|
665
|
+
- split subscriptions into events, newsletters and blog ([#1548](https://github.com/snokam/monorepo/issues/1548)) ([7fffcde](https://github.com/snokam/monorepo/commit/7fffcdedc61573c77f4dbe021d4fa01fa9c1f921))
|
|
666
|
+
|
|
667
|
+
## [3.2.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@3.2.0...@snokam/sanity-page-content@3.2.1) (2026-09-30)
|
|
668
|
+
|
|
669
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
670
|
+
|
|
671
|
+
# [3.2.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@3.1.0...@snokam/sanity-page-content@3.2.0) (2026-09-30)
|
|
672
|
+
|
|
673
|
+
### Features
|
|
674
|
+
|
|
675
|
+
- mirror track groups into their #spor Slack channels ([#2501](https://github.com/snokam/monorepo/issues/2501)) ([7956523](https://github.com/snokam/monorepo/commit/795652358d97989cb122294c38508e1236cf49a4))
|
|
676
|
+
|
|
677
|
+
# [3.1.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@3.0.2...@snokam/sanity-page-content@3.1.0) (2026-09-29)
|
|
678
|
+
|
|
679
|
+
### Features
|
|
680
|
+
|
|
681
|
+
- **frontpage:** add FAQ and contact pages for search and AI citations ([a574fa8](https://github.com/snokam/monorepo/commit/a574fa816418dd48bdbbc4bfbe3fbc8799223ac3))
|
|
682
|
+
|
|
683
|
+
## [3.0.2](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@3.0.0...@snokam/sanity-page-content@3.0.2) (2026-09-24)
|
|
684
|
+
|
|
685
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
686
|
+
|
|
687
|
+
## [3.0.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@3.0.0...@snokam/sanity-page-content@3.0.1) (2026-09-22)
|
|
688
|
+
|
|
689
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
690
|
+
|
|
691
|
+
# [3.0.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@2.0.3...@snokam/sanity-page-content@3.0.0) (2026-09-22)
|
|
692
|
+
|
|
693
|
+
- refactor!: one owner for tenancy and auth, short entry files (#2456) ([d8ae9cf](https://github.com/snokam/monorepo/commit/d8ae9cf23665d0e140b19c25f5b6a8a060a34553)), closes [#2456](https://github.com/snokam/monorepo/issues/2456) [#2457](https://github.com/snokam/monorepo/issues/2457)
|
|
694
|
+
|
|
695
|
+
### BREAKING CHANGES
|
|
696
|
+
|
|
697
|
+
- Snokam.Security is replaced by Snokam.Runtime, Snokam.Tenancy
|
|
698
|
+
and Snokam.Auth. Consumers must update their ProjectReference and using
|
|
699
|
+
directives.
|
|
700
|
+
|
|
701
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
702
|
+
|
|
703
|
+
- refactor(api): resolve every endpoint gate in one place
|
|
704
|
+
|
|
705
|
+
Three independent reflection passes decided what an endpoint's authorization
|
|
706
|
+
gate was, each with slightly different rules:
|
|
707
|
+
|
|
708
|
+
- FunctionAuthorizationMiddleware.Resolve/ResolveScope/ResolveBusiness, three
|
|
709
|
+
caches keyed on the same entry point
|
|
710
|
+
- EndpointGateValidator.Validate, which treated any AuthorizeAttribute as gated
|
|
711
|
+
- SecuritySchemeDocumentFilter.Classify, which additionally split out the
|
|
712
|
+
PlatformService policy
|
|
713
|
+
|
|
714
|
+
Changing a gate rule meant finding and editing all three, and they could drift
|
|
715
|
+
apart silently: the OpenAPI document could describe an endpoint as anonymous
|
|
716
|
+
while the middleware enforced it, or the reverse.
|
|
717
|
+
|
|
718
|
+
There is now one EndpointGate record and one EndpointGates.Describe that
|
|
719
|
+
produces it. The record carries the superset of what the three callers needed —
|
|
720
|
+
kind, scope attribute, business, authorize data, whether it is an HTTP trigger,
|
|
721
|
+
and whether AllowAnonymous contradicts a gate — and each caller keeps its own
|
|
722
|
+
predicate over those fields rather than its own reflection.
|
|
723
|
+
|
|
724
|
+
EndpointGateValidator becomes GateStartupCheck, which now reads Kind and
|
|
725
|
+
Contradictory instead of re-deriving them. The OpenAPI filter reads Kind. The
|
|
726
|
+
middleware reads the rest, and loses its three static caches in favour of the
|
|
727
|
+
one inside EndpointGates.
|
|
728
|
+
|
|
729
|
+
The existing gate tests were repointed at the shared API rather than rewritten,
|
|
730
|
+
so they now assert the single implementation produces what all three passes did:
|
|
731
|
+
201 tests pass, and grep confirms FunctionAuthorizeAttribute is reflected over
|
|
732
|
+
in exactly one file.
|
|
733
|
+
|
|
734
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
735
|
+
|
|
736
|
+
- refactor(api): make the entry file short and put each type where it belongs
|
|
737
|
+
|
|
738
|
+
ConfigureApi.cs was 151 lines and the first file anyone reads. It declared the
|
|
739
|
+
middleware order, roughly 25 DI registrations spanning six unrelated concerns,
|
|
740
|
+
OpenTelemetry, forwarded headers, the OpenAPI document and logging — so the
|
|
741
|
+
answer to "what is this API made of" was buried in the middle of a lambda.
|
|
742
|
+
|
|
743
|
+
It is now 32 lines that name the six things and delegate:
|
|
744
|
+
|
|
745
|
+
hostBuilder.ConfigureFunctionsWebApplication(ApiPipeline.Build);
|
|
746
|
+
hostBuilder.ConfigureServices(services => services
|
|
747
|
+
.AddApiCore(config).AddApiTelemetry().AddApiAuth(config)
|
|
748
|
+
.AddApiTenancy(config).AddApiNotifications().AddApiOpenApi(config));
|
|
749
|
+
hostBuilder.ConfigureLogging(ApiLogging.Configure);
|
|
750
|
+
|
|
751
|
+
Each of those lives in its own file under Startup/Services, the middleware order
|
|
752
|
+
in ApiPipeline, and the OpenAPI wiring in Startup/OpenApi alongside the document
|
|
753
|
+
filter, the tenant-aware options and ImplicitAuthFlow.
|
|
754
|
+
|
|
755
|
+
Several types were also filed under folders that did not describe them:
|
|
756
|
+
|
|
757
|
+
- ApiTokenVerifier sat in Tenancy/ but is API-key authentication; it now sits in
|
|
758
|
+
Authorization/Schemes next to the middleware that calls it.
|
|
759
|
+
- BindingDataHeaders sat in Tenancy/ but is generic header parsing, used by
|
|
760
|
+
Startup too; it moves to Http/.
|
|
761
|
+
- ForBusinessAttribute and RequiresCapabilityAttribute sat in Authorization/ but
|
|
762
|
+
their only consumer is the cron middleware; all three move to Scheduling/.
|
|
763
|
+
- The two auth schemes, CallerAuthentication and the three grant sources were
|
|
764
|
+
loose in Authorization/; they group under Schemes/ and Grants/.
|
|
765
|
+
|
|
766
|
+
Extracting Http/HostHeader.cs also removed a duplicate: the forwarded-host
|
|
767
|
+
header list and its normaliser existed in both BindingDataHeaders and
|
|
768
|
+
TenantMiddleware. There is now one of each.
|
|
769
|
+
|
|
770
|
+
Snokam.sln builds with 0 errors; 201 tests pass.
|
|
771
|
+
|
|
772
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
773
|
+
|
|
774
|
+
- refactor(frontend)!: rename @snokam/config to @snokam/tenant and give it the tenant logic
|
|
775
|
+
|
|
776
|
+
"config" said nothing about what the package did, and what it did was resolve
|
|
777
|
+
tenants. Inside, resolve-domain.ts was a 13-line pure re-export shim that every
|
|
778
|
+
other file imported through, so the actual entry point taught you nothing; and
|
|
779
|
+
server.ts (an env-var scraper) sat next to a "./server" export that pointed at a
|
|
780
|
+
different file entirely.
|
|
781
|
+
|
|
782
|
+
The package is now @snokam/tenant, and its folders say what they hold:
|
|
783
|
+
|
|
784
|
+
index.ts the client surface
|
|
785
|
+
server.ts the RSC surface
|
|
786
|
+
host.ts the one host normaliser
|
|
787
|
+
platform.ts the one place platform env vars are read
|
|
788
|
+
resolve/{client,cache,by-host}.ts
|
|
789
|
+
urls/{api-base,base-domain}.ts
|
|
790
|
+
runtime/{provider,env,transforms,local-urls}.ts
|
|
791
|
+
server/{request-host,token,urls}.ts
|
|
792
|
+
|
|
793
|
+
resolve-domain.ts is deleted. Three export subpaths become ".", "./server" and
|
|
794
|
+
"./middleware"; "./tenant" is gone, its host predicates having moved to the root
|
|
795
|
+
and resolveTenantApiBase having become backendUrl on "./server".
|
|
796
|
+
|
|
797
|
+
That package now owns four things that were previously copied around:
|
|
798
|
+
|
|
799
|
+
- Backend API base URL. resolveServerApiBase (auth), resolveTenantApiBase
|
|
800
|
+
(config), resolveEmployeesBackend (auth) and resolveServerAppUrl (auth) were
|
|
801
|
+
four implementations of the same env-key-then-domain-match-then-host-fallback
|
|
802
|
+
ladder, and apps imported two of them in the same file. There is now
|
|
803
|
+
backendUrl() and appUrl(); the old auth names survive as one-line re-exports
|
|
804
|
+
so the 153 call sites did not have to move. app-router/server.ts goes 93 lines
|
|
805
|
+
to 39.
|
|
806
|
+
- Host normalisation. Five copies of the localhost -> NEXT_PUBLIC_TENANT_HOST
|
|
807
|
+
fallback and eight of the forwarded-host read collapse into host.ts and
|
|
808
|
+
server/request-host.ts.
|
|
809
|
+
- Base-domain derivation. Four copies collapse into urls/base-domain.ts, which
|
|
810
|
+
names its three entries fromWindow, fromHost and fromTenantInfo.
|
|
811
|
+
- Platform env reads, which previously differed in whether they stripped a
|
|
812
|
+
trailing slash.
|
|
813
|
+
|
|
814
|
+
@snokam/auth also loses its duplicate AES-256-GCM ticket module: handoff and
|
|
815
|
+
impersonation were near-identical 79- and 97-line files. They now share
|
|
816
|
+
ticket/seal.ts and keep only what actually differs between them, which is the
|
|
817
|
+
TTL and whether a rejection is logged.
|
|
818
|
+
|
|
819
|
+
@snokam/tenant typechecks clean. @snokam/auth lints with 0 errors and its only
|
|
820
|
+
tsc output is a pre-existing tsconfig deprecation.
|
|
821
|
+
|
|
822
|
+
- @snokam/config is replaced by @snokam/tenant. The "./tenant"
|
|
823
|
+
subpath is removed; import host predicates from the root and backendUrl from
|
|
824
|
+
"@snokam/tenant/server".
|
|
825
|
+
|
|
826
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
827
|
+
|
|
828
|
+
- refactor(sanity-page-content)!: resolve the tenant once, not twice
|
|
829
|
+
|
|
830
|
+
The package had two complete, parallel tenant-resolution paths, both live:
|
|
831
|
+
|
|
832
|
+
- the HOCs (withSanityPageContent/withSanityAppContent, 85 call sites) took the
|
|
833
|
+
host from request headers and resolved credentials with a raw fetch
|
|
834
|
+
- makeTenantLayout/TenantPageContent (166 call sites) took the host from the
|
|
835
|
+
[host] route param and went through @snokam/config
|
|
836
|
+
|
|
837
|
+
Six apps ran both in one deployment — webshop-web's [host] pages used one and
|
|
838
|
+
its not-found.tsx the other — so the same request could resolve the same tenant
|
|
839
|
+
through two resolvers with two caches and two different error behaviours. And
|
|
840
|
+
makeTenantLayout hit the platform API twice for one host, because the layout and
|
|
841
|
+
the content component each did their own lookup.
|
|
842
|
+
|
|
843
|
+
There is now one resolveTenantContent. Both entry shapes are thin wrappers over
|
|
844
|
+
it and keep their exact signatures, so all 251 call sites are untouched. It
|
|
845
|
+
takes the host explicitly, which is what removes the double lookup: the layout
|
|
846
|
+
and the content component pass the same host and share one cached answer.
|
|
847
|
+
|
|
848
|
+
The two raw fetches are gone. server/tenant-credentials.ts and
|
|
849
|
+
server/platform-sanity.ts were hand-rolling calls the generated PlatformClient
|
|
850
|
+
already exposes as resolveTenantSanityCredentials and resolvePlatformSanityConfig;
|
|
851
|
+
both now live in @snokam/tenant and go through the generated client, inheriting
|
|
852
|
+
its timeout and stale-on-failure cache instead of each keeping their own.
|
|
853
|
+
server/request-host.ts is deleted in favour of the one in @snokam/tenant.
|
|
854
|
+
|
|
855
|
+
Dead code removed: the entire src/page-router tree (491 lines), MetaTags.tsx,
|
|
856
|
+
server.tsx, and six export subpaths with no consumers anywhere in the repo.
|
|
857
|
+
|
|
858
|
+
tsc on src goes from 28 errors to 21 — the seven that disappeared were in files
|
|
859
|
+
this deleted; all 21 remaining are the pre-existing stale-generated-sanity-client
|
|
860
|
+
errors under edit-mode/. Lint is 0 errors, warnings 14 to 11. The three changed
|
|
861
|
+
packages build.
|
|
862
|
+
|
|
863
|
+
Not verified: whole-app builds. @snokam/ui's build script calls rsync, which is
|
|
864
|
+
not available on this Windows machine, so `uv run start.py build <app>` cannot
|
|
865
|
+
complete here for reasons unrelated to this change. The route-level browser
|
|
866
|
+
check the plan asks for still needs to happen on a machine that can build.
|
|
867
|
+
|
|
868
|
+
- the ./server, ./providers and ./page-router* subpaths are
|
|
869
|
+
removed from @snokam/sanity-page-content, along with the page-router HOCs and
|
|
870
|
+
providers.
|
|
871
|
+
|
|
872
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
873
|
+
|
|
874
|
+
- refactor(tenant): fewer, fuller modules instead of one thought per file
|
|
875
|
+
|
|
876
|
+
The first pass traded a flat bag of files for a deep one. 19 files, seven of
|
|
877
|
+
them under 30 lines, and the folder layout did not survive its own commit
|
|
878
|
+
message: it claimed "the server.ts vs ./server name collision disappears" while
|
|
879
|
+
shipping both src/server.ts and src/server/.
|
|
880
|
+
|
|
881
|
+
What was ceremony rather than structure:
|
|
882
|
+
|
|
883
|
+
- platform.ts, 26 lines of which three were one-line env reads wrapped in a
|
|
884
|
+
function. Deleted; the two entries with actual logic
|
|
885
|
+
(isPlatformMarketingTenant, prospectRedirectUrl) moved next to the other host
|
|
886
|
+
questions, and platformApiBase — the one worth keeping, because it normalises
|
|
887
|
+
a trailing slash five former copies disagreed about — sits with the resolver
|
|
888
|
+
that needs it.
|
|
889
|
+
- urls/api-base.ts, seven exports wrapping a single domains.find. domainsOf was
|
|
890
|
+
literally `info?.domains ?? []` with one caller; hostedBackendUrl was a
|
|
891
|
+
template string. Collapsed into one `match` helper behind backendUrl/appUrl,
|
|
892
|
+
which are the two things callers actually ask for.
|
|
893
|
+
- resolve/{client,cache,by-host}.ts were one thought — resolve a tenant over the
|
|
894
|
+
network, with a cache — split three ways across 23, 28 and 133 lines.
|
|
895
|
+
- runtime/{env,transforms,local-urls}.ts likewise: the same question, "what
|
|
896
|
+
config does the browser get", in three files of 13, 78 and 58 lines.
|
|
897
|
+
|
|
898
|
+
Eleven files now, three of them entry points:
|
|
899
|
+
|
|
900
|
+
index.ts what a component imports
|
|
901
|
+
server.ts what a layout or page imports
|
|
902
|
+
middleware.ts the unknown-tenant proxy
|
|
903
|
+
tenant/ which tenant is this request (host, resolve, sanity)
|
|
904
|
+
urls/ what URL does a service have for it (index, domains)
|
|
905
|
+
config/ what config does the browser get (provider, resolve)
|
|
906
|
+
|
|
907
|
+
base-domain's fromHost/fromWindow/fromTenantInfo became
|
|
908
|
+
baseDomainFromHost/Window/Tenant, because the old names said nothing at the
|
|
909
|
+
call site once they were imported.
|
|
910
|
+
|
|
911
|
+
Typechecks clean; @snokam/auth and @snokam/sanity-page-content are unchanged at
|
|
912
|
+
21 errors, all pre-existing.
|
|
913
|
+
|
|
914
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
915
|
+
|
|
916
|
+
- refactor: delete the wrappers that only restate their one line
|
|
917
|
+
|
|
918
|
+
An audit of every single-expression function in the changed packages, scored by
|
|
919
|
+
real call sites with .next build copies excluded, turned up four that existed
|
|
920
|
+
only to have a name:
|
|
921
|
+
|
|
922
|
+
- tenantDomains(info) was `info?.domains ?? []` with zero callers. It is the
|
|
923
|
+
same function this branch already deleted once as domainsOf, reintroduced two
|
|
924
|
+
commits later under a new name.
|
|
925
|
+
- studioUrlFor(host) was a template string with two callers, both of which now
|
|
926
|
+
build the URL where they use it.
|
|
927
|
+
- rewriteHost(host) in the tenant middleware was `effectiveHost(host) ?? null` —
|
|
928
|
+
a wrapper around the function that had just replaced it.
|
|
929
|
+
- OpenApiSetup's FallbackServers, ServiceName and IsLocal were three private
|
|
930
|
+
one-liners with one call site each, read once at the top of the method that
|
|
931
|
+
used them and now inlined as locals there.
|
|
932
|
+
|
|
933
|
+
Kept, because they carry a convention rather than a line of code: envKey names
|
|
934
|
+
the NEXT_PUBLIC_*_API_BASE_URL shape three callers depend on; requestInit is
|
|
935
|
+
where the timeout and revalidate window are decided for every platform call;
|
|
936
|
+
isHostname and bareHost are the host vocabulary the rest of the package speaks.
|
|
937
|
+
|
|
938
|
+
The expression-bodied members in Snokam.Tenancy and Snokam.Auth are pre-existing
|
|
939
|
+
code this branch moved, and they name a real API surface, so they are left alone.
|
|
940
|
+
|
|
941
|
+
The two requestHost copies in @snokam/auth look like duplicates but take
|
|
942
|
+
different inputs — a NextAuth req and a Request — so they are not folded here.
|
|
943
|
+
options.tsx is the live NextAuth config for every app and is not worth churning
|
|
944
|
+
for a shared helper of this size.
|
|
945
|
+
|
|
946
|
+
0 build errors, 201 tests pass, typechecks unchanged.
|
|
947
|
+
|
|
948
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
949
|
+
|
|
950
|
+
- refactor: apply the same structural audit to every changed package
|
|
951
|
+
|
|
952
|
+
The tenant cleanup fixed one package. Auditing all seven against the same
|
|
953
|
+
criteria — entry-file size, files over 300 lines, single-file folders, and a
|
|
954
|
+
file sharing a name with a sibling folder — found the same defects elsewhere,
|
|
955
|
+
including two I had introduced.
|
|
956
|
+
|
|
957
|
+
@snokam/auth carried the collision twice over: server.tsx beside server/, and
|
|
958
|
+
route-handler.ts beside route-handler/. Both are now resolved, and the first one
|
|
959
|
+
by deletion: the ./server subpath had zero consumers, as did ./page-router, so
|
|
960
|
+
the Pages-Router tree the plan said to remove and this branch had left behind is
|
|
961
|
+
gone — server.tsx, server/auth.tsx, server/handler.tsx and all of page-router/.
|
|
962
|
+
route-handler.ts becomes route-handler/index.ts.
|
|
963
|
+
|
|
964
|
+
The root "." barrel exported page-router's Provider and Login as a default
|
|
965
|
+
object. Exactly one file in the repo imports from that entry, and it wants
|
|
966
|
+
buildAdminConsentUrl. The barrel now exports what is actually used.
|
|
967
|
+
|
|
968
|
+
options.tsx was still 362 lines, over the repo's limit, and the plan had called
|
|
969
|
+
for splitting it. Its first 137 lines were three request-header readers and an
|
|
970
|
+
employees-API profile fetch — neither of which is NextAuth configuration. They
|
|
971
|
+
move to options/request.ts and options/employee-profile.ts, leaving options/
|
|
972
|
+
index.tsx at 237 lines of providers, cookies and callbacks. Pure moves; no
|
|
973
|
+
behaviour touched, because this is the live NextAuth config for every app and it
|
|
974
|
+
is the one file in this branch I am least willing to rewrite.
|
|
975
|
+
|
|
976
|
+
Snokam.Tenancy had three single-file folders of my own making — Billing/, Jobs/
|
|
977
|
+
and Secrets/, one file each — against the repo rule that a folder holds two
|
|
978
|
+
files or a subfolder. Flattened. Snokam.Api/OAuth/ became single-file when
|
|
979
|
+
IPlatformOAuthTokens moved to Snokam.Tenancy, so its remaining file joins
|
|
980
|
+
Tenancy/ where its collaborators are.
|
|
981
|
+
|
|
982
|
+
Splitting options.tsx briefly recreated the very collision this commit removes
|
|
983
|
+
elsewhere (options.tsx beside options/); it is now options/index.tsx.
|
|
984
|
+
|
|
985
|
+
What the audit found and this leaves alone: Snokam.Api/Health/ and the
|
|
986
|
+
sanity-page-content single-file folders are pre-existing; the auth
|
|
987
|
+
components/<Name>/index.tsx folders are the ordinary React component-folder
|
|
988
|
+
convention; sanity.types.ts is generated.
|
|
989
|
+
|
|
990
|
+
0 build errors, 201 tests pass, typechecks unchanged.
|
|
991
|
+
|
|
992
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
993
|
+
|
|
994
|
+
- refactor: close the three structural gaps the review found
|
|
995
|
+
|
|
996
|
+
A read of the PR as a newcomer would read it, rather than as a diff, turned up
|
|
997
|
+
three things this branch claimed to have done and had not.
|
|
998
|
+
|
|
999
|
+
The import cycle in sanity-page-content is real, not just structurally
|
|
1000
|
+
discouraged. app-router/server.ts re-exports ./tenant/config and ./tenant/
|
|
1001
|
+
resolve, while tenant/config.ts and tenant/content.tsx imported back through
|
|
1002
|
+
that same barrel. Both now import ../../server/client directly, so nothing
|
|
1003
|
+
inside the package imports the barrel and the cycle cannot come back by
|
|
1004
|
+
accident.
|
|
1005
|
+
|
|
1006
|
+
build-proxy.tsx is what a reader finds when they follow @snokam/auth's
|
|
1007
|
+
"./middleware" subpath. It is now middleware.tsx, named after the thing it is.
|
|
1008
|
+
|
|
1009
|
+
AdapterCapabilities and TenantCapabilities were two capability lists in two
|
|
1010
|
+
packages, overlapping on accounting, crm, crypto-payout and consultant-cv —
|
|
1011
|
+
exactly the duplicated-concept problem this whole branch is about, left in place
|
|
1012
|
+
while other duplicates were removed. TenantCapabilities is gone and its two
|
|
1013
|
+
unique values, ai-search and issue-tracking, join the surviving list.
|
|
1014
|
+
|
|
1015
|
+
The merge kept the name AdapterCapabilities rather than the shorter Capabilities
|
|
1016
|
+
the plan proposed: notifications-function already has its own Capabilities class,
|
|
1017
|
+
and the shorter name made every call site in that app ambiguous.
|
|
1018
|
+
|
|
1019
|
+
0 build errors, 36 test projects pass, typechecks unchanged.
|
|
1020
|
+
|
|
1021
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
1022
|
+
|
|
1023
|
+
- refactor(api): make the authorization middleware read as its own sequence
|
|
1024
|
+
|
|
1025
|
+
FunctionAuthorizationMiddleware was 228 lines, and the file a newcomer has to
|
|
1026
|
+
read to learn how a request is actually gated. Invoke interleaved the decision
|
|
1027
|
+
sequence with the mechanics of each step: scheme selection and the 401s, tenant
|
|
1028
|
+
binding from claims, scope-grant resolution, the impersonation audit, and two
|
|
1029
|
+
different notions of "authorized" all sat inline.
|
|
1030
|
+
|
|
1031
|
+
The steps are now named, in Authorization/Pipeline/:
|
|
1032
|
+
|
|
1033
|
+
RequestAuthentication pick the scheme, authenticate, bind the tenant, and
|
|
1034
|
+
write the 401 or 403 itself when the caller cannot pass
|
|
1035
|
+
TenantFromClaims bind the tenant the caller's claims name, and the
|
|
1036
|
+
business match
|
|
1037
|
+
ScopeGrants baseline scopes plus what this caller has been granted
|
|
1038
|
+
ImpersonationAudit is this impersonated, and the audit record
|
|
1039
|
+
|
|
1040
|
+
Invoke is now the sequence and nothing else, and the two notions of authorized
|
|
1041
|
+
are separated: a scope gate checks granted scopes, everything else runs the
|
|
1042
|
+
policy — with the reason an API key cannot satisfy a policy gate stated where
|
|
1043
|
+
that decision is made rather than left as a bare `authorized = false`.
|
|
1044
|
+
|
|
1045
|
+
The four members the tests reached into the middleware for — SelectScheme,
|
|
1046
|
+
ResolveEmail, IsImpersonation and the RequiredScopeItem key — moved with the
|
|
1047
|
+
behaviour they belong to, and the tests now call them on the unit that owns
|
|
1048
|
+
them rather than on the middleware.
|
|
1049
|
+
|
|
1050
|
+
Also documents, in backend/packages/README.md, the rule the package split
|
|
1051
|
+
exists to protect: .Application and .Domain may reference the leaves but never
|
|
1052
|
+
Snokam.Api, which is why Snokam.Auth holds the vocabulary you declare
|
|
1053
|
+
authorization with while the middleware that enforces it lives in the host. The
|
|
1054
|
+
README names Employees.Application as an existing violation of that rule.
|
|
1055
|
+
|
|
1056
|
+
201 tests pass.
|
|
1057
|
+
|
|
1058
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
1059
|
+
|
|
1060
|
+
- fix: repair the build breaks this branch shipped
|
|
1061
|
+
|
|
1062
|
+
A max-effort review type-checked real apps, which this branch never did, and
|
|
1063
|
+
found it does not build: 16 of 16 apps failed. Every per-package `tsc --noEmit`
|
|
1064
|
+
I ran passed, because a package's own sources compiled fine — the breakage was
|
|
1065
|
+
entirely in what consumers import. The codemod rewrote import paths and left the
|
|
1066
|
+
symbols behind them unchecked.
|
|
1067
|
+
|
|
1068
|
+
Four breaks, all introduced here:
|
|
1069
|
+
|
|
1070
|
+
- options/index.tsx used isColorScheme and ColorScheme after the split moved
|
|
1071
|
+
them to options/employee-profile.ts, without importing them, and
|
|
1072
|
+
isColorScheme was not exported. Line 223 is the NextAuth session callback, so
|
|
1073
|
+
this was a ReferenceError on every session read — platform-wide logout.
|
|
1074
|
+
- resolveTenantApiBase was deleted with @snokam/config while 10 files across 6
|
|
1075
|
+
apps were rewritten to import it from @snokam/tenant. It is back with its
|
|
1076
|
+
original argument order, on ./server where its managed-identity dependency
|
|
1077
|
+
belongs, and those files now import it from there.
|
|
1078
|
+
- buildUnknownTenantProxy moved behind ./middleware while all 15 app proxy.ts
|
|
1079
|
+
files import it from the root. Restored to the root.
|
|
1080
|
+
- The generated TenantSanityCredentials and PlatformSanityConfig have every
|
|
1081
|
+
field nullable, so six assignments stopped type-checking. Both are narrowed
|
|
1082
|
+
once at their boundary in tenant/sanity.ts rather than at each use.
|
|
1083
|
+
|
|
1084
|
+
The review also caught that the client barrel had begun re-exporting
|
|
1085
|
+
server-only modules: tenant/host.ts imported next/headers and tenant/resolve.ts
|
|
1086
|
+
pulled @snokam/identity, so ~50 "use client" files had next/headers and the
|
|
1087
|
+
Azure SDK in their import graph. host.ts is pure again and requestHost,
|
|
1088
|
+
apiScope and managedBearer live under server/. That also makes the Edge
|
|
1089
|
+
middleware safe, which it was not.
|
|
1090
|
+
|
|
1091
|
+
Two backend findings from the same review:
|
|
1092
|
+
|
|
1093
|
+
- OpenApiSetup computed the server list eagerly in ConfigureServices after the
|
|
1094
|
+
ConfigureApi split, so a malformed BASE_PATH or host-name setting would abort
|
|
1095
|
+
IHost.Build() and take every trigger down, where before it only broke the
|
|
1096
|
+
swagger route. It is lazy inside the factory again.
|
|
1097
|
+
- EndpointGates.FunctionMethods had a whole-assembly catch-all the old
|
|
1098
|
+
SecuritySchemeDocumentFilter did not, which would silently publish every
|
|
1099
|
+
protected endpoint as unsecured. Removed; the per-type catch stays.
|
|
1100
|
+
|
|
1101
|
+
The remaining app type errors are pre-existing and in files this branch does
|
|
1102
|
+
not touch, confirmed per file against origin/main.
|
|
1103
|
+
|
|
1104
|
+
201 tests pass.
|
|
1105
|
+
|
|
1106
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
1107
|
+
|
|
1108
|
+
- fix: address the behaviour regressions the review found
|
|
1109
|
+
|
|
1110
|
+
Seven findings, five of them regressions this branch introduced against main.
|
|
1111
|
+
|
|
1112
|
+
A tenant's Sanity read token was being written to disk. The consolidation gave
|
|
1113
|
+
every platform call the same requestInit(), including next: { revalidate: 300 },
|
|
1114
|
+
where the deleted tenant-credentials.ts deliberately used cache: "no-store" —
|
|
1115
|
+
Next's Data Cache persists the body, secret included. Responses carrying a
|
|
1116
|
+
secret now go through secretRequestInit(), which does not cache.
|
|
1117
|
+
|
|
1118
|
+
The 3-attempt retry with backoff was dropped in the same consolidation, leaving
|
|
1119
|
+
one call under a 2s budget. A platform cold start routinely exceeds that, so the
|
|
1120
|
+
first request after scale-to-zero hit the error page where it used to self-heal
|
|
1121
|
+
on attempt 2. Restored, still one attempt when a stale entry is already in hand.
|
|
1122
|
+
|
|
1123
|
+
An unavailable resolution was being written into the 5-minute cache, which the
|
|
1124
|
+
old code explicitly guarded against. One incomplete payload — a read token not
|
|
1125
|
+
yet provisioned, a half-rotated secret — pinned that tenant to the error page
|
|
1126
|
+
for five minutes after the platform recovered. Only a resolved or not-found
|
|
1127
|
+
answer is cached now.
|
|
1128
|
+
|
|
1129
|
+
The credentials cache was unbounded and keyed on a caller-influenceable Host
|
|
1130
|
+
header, so varied hosts grew the heap for the life of the container, each entry
|
|
1131
|
+
holding a Sanity read token. It now caps and evicts like its sibling one file
|
|
1132
|
+
over.
|
|
1133
|
+
|
|
1134
|
+
resolveTenantSanityConfig passes an all-empty baseConfig, and the resolver
|
|
1135
|
+
eagerly built a fallback client from it, so @sanity/client threw "Configuration
|
|
1136
|
+
must contain 'projectId'" — a hard 500 on a tenant whose content had resolved
|
|
1137
|
+
fine. A client is only built from baseConfig when it actually names a project.
|
|
1138
|
+
|
|
1139
|
+
The same function lost its anonymous fallback: a managed-identity hiccup or an
|
|
1140
|
+
unset IDENTITY_AD_SCOPE produced not-tenant-scoped, which now threw, and
|
|
1141
|
+
handleTenantError turned that into a redirect to the prospect signup page for a
|
|
1142
|
+
live paying tenant. resolveTenantContent takes allowAnonymous again and
|
|
1143
|
+
resolves the business through resolveTenantByHostStrict — which the review
|
|
1144
|
+
noted had been left exported with no callers, exactly because this path was
|
|
1145
|
+
deleted.
|
|
1146
|
+
|
|
1147
|
+
studioUrl was overwritten with https://<host>/admin even when the caller named a
|
|
1148
|
+
dedicated studio, so stega edit links pointed somewhere the HOCs' own
|
|
1149
|
+
previewClientConfig did not. The caller's value wins again.
|
|
1150
|
+
|
|
1151
|
+
backendUrl's Entra-tenant-id fallback had narrowed from "this tenant has no
|
|
1152
|
+
employees entry" to "this tenant has no domains at all", silently costing the
|
|
1153
|
+
avatar and colour scheme at sign-in; it is keyed on the wanted entry again. Its
|
|
1154
|
+
configured-base tail, dropped in the rewrite, is also back.
|
|
1155
|
+
|
|
1156
|
+
Also merges server/{request-host,token}.ts — 9 and 10 lines — into one
|
|
1157
|
+
server/request.ts, having reintroduced the same one-thought-per-file pattern
|
|
1158
|
+
while fixing the client-graph split.
|
|
1159
|
+
|
|
1160
|
+
Verified where it matters this time: five apps type-check with zero symbol or
|
|
1161
|
+
module errors from this branch.
|
|
1162
|
+
|
|
1163
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
1164
|
+
|
|
1165
|
+
- fix: restore a stripped dependency, revert unrelated collateral, and lint the new package
|
|
1166
|
+
|
|
1167
|
+
Four findings from the review's gap sweep.
|
|
1168
|
+
|
|
1169
|
+
The PackageReference cleanup deleted Employees.Infrastructure's direct
|
|
1170
|
+
Microsoft.AspNet.WebApi.Client 6.0.0 — a reference that was there on main, not
|
|
1171
|
+
one this branch added. The lock file shows the silent downgrade: Direct 6.0.0
|
|
1172
|
+
became Transitive 5.2.8, surviving only because a generated client happens to
|
|
1173
|
+
drag that version in. Cv.cs still calls ReadAsAsync<T> at two call sites. The
|
|
1174
|
+
exact inverse of this branch's "seven projects now declare what they use" claim,
|
|
1175
|
+
in the same commit that made it.
|
|
1176
|
+
|
|
1177
|
+
apps/my-page-native/packages.lock.json had been regenerated on this Windows
|
|
1178
|
+
machine, replacing every iOS and Mac Catalyst target frame with Windows and
|
|
1179
|
+
Android ones. native-app-release.yml publishes -f net10.0-ios and
|
|
1180
|
+
-f net10.0-maccatalyst on macOS, so that lock either silently rewrites itself or
|
|
1181
|
+
hard-fails NU1004 under locked-mode restore. A MAUI app has nothing to do with
|
|
1182
|
+
this refactor; reverted to main.
|
|
1183
|
+
|
|
1184
|
+
Four committed files failed prettier --check, which is both the pre-commit hook
|
|
1185
|
+
and the pnpm check CI gate — the direct consequence of every commit here using
|
|
1186
|
+
--no-verify. Every file this branch touches now passes.
|
|
1187
|
+
|
|
1188
|
+
That bypass had a cause worth fixing rather than repeating: lint-staged handed
|
|
1189
|
+
prettier a "*" glob, so a .cs-heavy commit passed hundreds of paths it does not
|
|
1190
|
+
format and blew the Windows command-line limit. The glob now lists the
|
|
1191
|
+
extensions prettier actually handles, and this commit is made with the hook
|
|
1192
|
+
running.
|
|
1193
|
+
|
|
1194
|
+
@snokam/tenant had no lint script and no eslint config, so turbo run lint — the
|
|
1195
|
+
authoritative CI gate — skipped the whole workspace, while ~500 lines of moved
|
|
1196
|
+
logic landed in it and tsc ran with --noCheck. That hole is why several review
|
|
1197
|
+
findings had to be caught by hand. It now has both, and the first run found a
|
|
1198
|
+
non-null assertion in isKnownTenantHost, now gone.
|
|
1199
|
+
|
|
1200
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
1201
|
+
|
|
1202
|
+
- fix: close the remaining packaging and studio-URL findings
|
|
1203
|
+
|
|
1204
|
+
Four items from the review's final pass, plus one regression of my own it
|
|
1205
|
+
surfaced.
|
|
1206
|
+
|
|
1207
|
+
@snokam/auth's publishConfig pointed every entry at ./dist/*, for a package
|
|
1208
|
+
with no build script that ships only src — so the next release would have
|
|
1209
|
+
published entry points that are not in the tarball. On main there was no
|
|
1210
|
+
publishConfig.exports at all and resolution fell through to the src-based
|
|
1211
|
+
exports map; I added the dist one in this branch and turned a working published
|
|
1212
|
+
package into a broken one. Removed, back to {access: "public"}.
|
|
1213
|
+
|
|
1214
|
+
@snokam/tenant was at 1.0.0, below the @snokam/config@1.1.5 it replaces, so a
|
|
1215
|
+
consumer on ^1.1.0 could not resolve the successor and semver called the new
|
|
1216
|
+
package older. It is 1.2.0.
|
|
1217
|
+
|
|
1218
|
+
The custom-domain studio URL is properly restored. studioUrlFor already honoured
|
|
1219
|
+
an explicit baseConfig.studioUrl, but the anonymous path then discarded the
|
|
1220
|
+
tenant record it had just fetched. It now derives https://admin.<base> from that
|
|
1221
|
+
record, which is what the deleted resolveStudioUrl(host, info) did and the only
|
|
1222
|
+
reason baseDomainFromTenant was ported — it had been sitting with no consumers.
|
|
1223
|
+
The credentials path keeps https://<host>/admin, matching main, where
|
|
1224
|
+
resolveStudioUrl was called without info there.
|
|
1225
|
+
|
|
1226
|
+
Two test projects' lock files still declared the deleted Snokam.Security while
|
|
1227
|
+
the other 68 were regenerated. Both restored; the only remaining mentions of
|
|
1228
|
+
that name in the repo are two workflow files and AGENTS.md, which is
|
|
1229
|
+
documentation to update separately.
|
|
1230
|
+
|
|
1231
|
+
Not addressed, and the one item that should block a merge: the API-key path has
|
|
1232
|
+
no tenant-vs-caller assertion, so [FunctionAuthorize(Business=...)] fails open
|
|
1233
|
+
for a foreign key whose business does not resolve. It is pre-existing rather
|
|
1234
|
+
than introduced here, and closing it rejects API keys that currently work, so it
|
|
1235
|
+
needs a decision rather than a refactor commit.
|
|
1236
|
+
|
|
1237
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
1238
|
+
|
|
1239
|
+
- fix: regenerate the employees lock so the restored reference is reflected
|
|
1240
|
+
|
|
1241
|
+
The earlier fix put Microsoft.AspNet.WebApi.Client 6.0.0 back in
|
|
1242
|
+
Employees.Infrastructure.csproj but left its packages.lock.json still recording
|
|
1243
|
+
the package as Transitive 5.2.8. A half-fix: the project and its lock disagreed,
|
|
1244
|
+
which under the RestoreLockedMode=true that Directory.Build.props sets in CI is
|
|
1245
|
+
an NU1004 rather than the silent downgrade it was before. Regenerated; the entry
|
|
1246
|
+
is Direct 6.0.0 again.
|
|
1247
|
+
|
|
1248
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
1249
|
+
|
|
1250
|
+
- docs: retire the old package names from prose and record the dropped default export
|
|
1251
|
+
|
|
1252
|
+
The rename left six stale references outside code, all of which a reader would
|
|
1253
|
+
follow to a package that no longer exists: AGENTS.md's shared-package list, the
|
|
1254
|
+
architecture table in development-web's internal docs, a comment in
|
|
1255
|
+
tooling/core/run/frontend/manager.py pointing at "@snokam/config resolver", the
|
|
1256
|
+
Snokam.Security examples in Backend.Tests.proj and the two deploy workflows, and
|
|
1257
|
+
an iac comment describing a Snokam.Security.GroupGuard that is now a scope gate.
|
|
1258
|
+
The only surviving mentions are CHANGELOG history, which is correct to keep.
|
|
1259
|
+
|
|
1260
|
+
Also records a breaking change this branch made silently. @snokam/auth's root
|
|
1261
|
+
entry exported `default { Login, Error, Provider, Authenticate }`; the new
|
|
1262
|
+
index.ts has no default export, because Login and Provider came from the
|
|
1263
|
+
page-router tree this branch deletes. Nothing in the monorepo imports the
|
|
1264
|
+
default — every Auth.Provider usage comes from @snokam/auth/app-router, whose
|
|
1265
|
+
default export is unchanged — but the package is published, so an external
|
|
1266
|
+
`import Auth from "@snokam/auth"` now gets undefined.
|
|
1267
|
+
|
|
1268
|
+
It stays dropped rather than restored: pointing a default at the app-router
|
|
1269
|
+
components would hand external callers different components under the same
|
|
1270
|
+
names, which is worse than an honest break. It belongs in the release notes,
|
|
1271
|
+
which is what this commit is for.
|
|
1272
|
+
|
|
1273
|
+
- @snokam/auth no longer has a default export on its root entry.
|
|
1274
|
+
Import the named components from @snokam/auth/app-router instead.
|
|
1275
|
+
|
|
1276
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
1277
|
+
|
|
1278
|
+
- fix: keep a reachable tenant reachable when the platform stumbles
|
|
1279
|
+
|
|
1280
|
+
Three separate failures all collapsed into "business not found", the one
|
|
1281
|
+
outcome wired to a signup redirect, or into a silent 200 of placeholders:
|
|
1282
|
+
|
|
1283
|
+
- anonymousClient swallowed every error, so a managed-identity hiccup
|
|
1284
|
+
redirected a live tenant's visitors to /kom-i-gang. A resolver that
|
|
1285
|
+
could not answer is now ServiceUnavailableError; only a real 404 is
|
|
1286
|
+
not-found, and a business with no Sanity project says so by name.
|
|
1287
|
+
- A Sanity 401/403 counted as "this page has no content" and rendered
|
|
1288
|
+
Placeholder for {key} at HTTP 200. It now fails like an unreachable
|
|
1289
|
+
dataset, which is what it is.
|
|
1290
|
+
- resolveTenantSanityCredentials dropped serve-stale on an incomplete
|
|
1291
|
+
payload; a warm tenant keeps its last-known-good credentials.
|
|
1292
|
+
|
|
1293
|
+
Also: an app serving its own project keeps its own dataset and token
|
|
1294
|
+
instead of taking the platform's copy; the missing-host sentinel stops
|
|
1295
|
+
becoming a real lookup that pins a bogus cache entry; platformLayer
|
|
1296
|
+
folds into resolvePlatformLayerConfig so the two cannot drift, and a
|
|
1297
|
+
negative platform answer is remembered for the retry cooldown.
|
|
1298
|
+
|
|
1299
|
+
The gate guard no longer swallows a type it cannot reflect over, which
|
|
1300
|
+
let its endpoints ship ungated while startup reported the app clean.
|
|
1301
|
+
It now fails closed on both reflection paths.
|
|
1302
|
+
|
|
1303
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
1304
|
+
|
|
1305
|
+
## [2.0.3](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@2.0.2...@snokam/sanity-page-content@2.0.3) (2026-09-21)
|
|
1306
|
+
|
|
1307
|
+
### Bug Fixes
|
|
1308
|
+
|
|
1309
|
+
- bound platform timeouts and serve stale credentials when platform is down ([#2454](https://github.com/snokam/monorepo/issues/2454)) ([b1447a0](https://github.com/snokam/monorepo/commit/b1447a0edc07fe998c4f5fc2cdbaf3e557545923))
|
|
1310
|
+
|
|
1311
|
+
## [2.0.2](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@2.0.1...@snokam/sanity-page-content@2.0.2) (2026-09-02)
|
|
1312
|
+
|
|
1313
|
+
**Note:** Version bump only for package @snokam/sanity-page-content
|
|
1314
|
+
|
|
1315
|
+
## [2.0.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@2.0.0...@snokam/sanity-page-content@2.0.1) (2026-08-28)
|
|
1316
|
+
|
|
1317
|
+
### Bug Fixes
|
|
1318
|
+
|
|
1319
|
+
- **ui:** the okr component belongs to the design system, with its copy injected ([#2394](https://github.com/snokam/monorepo/issues/2394)) ([456aab3](https://github.com/snokam/monorepo/commit/456aab378a1139621b8b4199232e6226eea2118f))
|
|
1320
|
+
|
|
1321
|
+
# [2.0.0](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@1.18.3...@snokam/sanity-page-content@2.0.0) (2026-08-28)
|
|
1322
|
+
|
|
1323
|
+
- feat(ui)!: every system page on one canvas, and a design system that no longer depends on the CMS ([d176b0a](https://github.com/snokam/monorepo/commit/d176b0a938361015e2b659a7ec1f6d009b7a72da))
|
|
1324
|
+
|
|
1325
|
+
### BREAKING CHANGES
|
|
1326
|
+
|
|
1327
|
+
- @snokam/ui/okr and @snokam/ui/data are now
|
|
1328
|
+
@snokam/sanity-page-content/okr and @snokam/sanity-page-content/data.
|
|
1329
|
+
|
|
1330
|
+
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
|
1331
|
+
Claude-Session: https://claude.ai/code/session_01FatBj58knAM48WmDppDYyg
|
|
1332
|
+
|
|
1333
|
+
## [1.18.3](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@1.18.2...@snokam/sanity-page-content@1.18.3) (2026-08-28)
|
|
1334
|
+
|
|
1335
|
+
### Bug Fixes
|
|
1336
|
+
|
|
1337
|
+
- **web:** an unknown path is a 404, not a nudge to sign up ([#2392](https://github.com/snokam/monorepo/issues/2392)) ([e4d5131](https://github.com/snokam/monorepo/commit/e4d5131df1d45c12eb23b809ec4ed951ae3960c6))
|
|
1338
|
+
|
|
1339
|
+
## [1.18.2](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@1.18.1...@snokam/sanity-page-content@1.18.2) (2026-08-27)
|
|
1340
|
+
|
|
1341
|
+
### Bug Fixes
|
|
1342
|
+
|
|
1343
|
+
- **packages:** the next peer comes from the catalog again ([#2370](https://github.com/snokam/monorepo/issues/2370)) ([caf0eb2](https://github.com/snokam/monorepo/commit/caf0eb25e6c82a92c8f01555c6682e97dd4bd481))
|
|
1344
|
+
|
|
1345
|
+
## [1.18.1](https://github.com/snokam/monorepo/compare/@snokam/sanity-page-content@1.18.0...@snokam/sanity-page-content@1.18.1) (2026-08-25)
|
|
1346
|
+
|
|
1347
|
+
### Bug Fixes
|
|
1348
|
+
|
|
1349
|
+
- **packages:** next 16.3.2, and a peer range consumers can patch ([#2369](https://github.com/snokam/monorepo/issues/2369)) ([e653e9c](https://github.com/snokam/monorepo/commit/e653e9cfd39b0a896f94151d351d55dc2b7f1e4c))
|
|
1350
|
+
|
|
1351
|
+
# 1.18.0 (2026-08-18)
|
|
1352
|
+
|
|
1353
|
+
### Bug Fixes
|
|
1354
|
+
|
|
1355
|
+
- **accounting:** route CEO bulk salaries through per-employee model dispatch ([#1802](https://github.com/snokam/monorepo/issues/1802)) ([c6a3da6](https://github.com/snokam/monorepo/commit/c6a3da6fd6e97e7726b869c859d35c564d5f28ca))
|
|
1356
|
+
- add infrastructure and cms code ([e9628ce](https://github.com/snokam/monorepo/commit/e9628cee771a56be864de5516ef107e23fb0b560))
|
|
1357
|
+
- add mailto:/tel: links and ContactPoint schema for SEO ([#507](https://github.com/snokam/monorepo/issues/507)) ([8bb5837](https://github.com/snokam/monorepo/commit/8bb58377a65f5863940aeebfe6e1f07e83739395)), closes [#506](https://github.com/snokam/monorepo/issues/506)
|
|
1358
|
+
- **auth:** single next-auth instance — SessionProvider and consumers must share one context ([00caa6a](https://github.com/snokam/monorepo/commit/00caa6a669734a48ec0b10f8fc3f308b118d5c3f))
|
|
1359
|
+
- **backend:** escape SOQL ids, drop dead code, honest naming ([#1957](https://github.com/snokam/monorepo/issues/1957)) ([f5d948e](https://github.com/snokam/monorepo/commit/f5d948eaaf915433497a350990c50cefa1372921))
|
|
1360
|
+
- candidate fix ([83cb73a](https://github.com/snokam/monorepo/commit/83cb73af79b6d243913ddf273aeb524ed2a7705d))
|
|
1361
|
+
- **ci:** publish with lerna, and point client deps at npm ([#2354](https://github.com/snokam/monorepo/issues/2354)) ([9ae5b3c](https://github.com/snokam/monorepo/commit/9ae5b3cc04b9f46498b026c7ff96100808a897ea))
|
|
1362
|
+
- **deps:** close all 128 Dependabot alerts, upgrade across majors, consolidate the catalog ([#2028](https://github.com/snokam/monorepo/issues/2028)) ([1b16dd5](https://github.com/snokam/monorepo/commit/1b16dd5370f5685d290aa72b45bcbe81baa122c9)), closes [#816](https://github.com/snokam/monorepo/issues/816)
|
|
1363
|
+
- design fixes karriere side ([#515](https://github.com/snokam/monorepo/issues/515)) ([6ed98f4](https://github.com/snokam/monorepo/commit/6ed98f44255fa58016242c540cdf1d89a76d478b))
|
|
1364
|
+
- **edit-mode:** next-auth must be a peer dependency ([f04b9bf](https://github.com/snokam/monorepo/commit/f04b9bfc9f2d658f9caf9118bed5eb39194f1b4c))
|
|
1365
|
+
- **edit-mode:** portal the drawer to body — no more stacking-context trap ([54c3186](https://github.com/snokam/monorepo/commit/54c31867371247f3705b4a23ab3c2c31f641f885))
|
|
1366
|
+
- **edit-mode:** read SessionContext directly — no boundary error without a provider ([df6d873](https://github.com/snokam/monorepo/commit/df6d8733832e6cfe15f3817f1711960f1724c52f))
|
|
1367
|
+
- **edit-mode:** visible feedback on toggle ([04a4910](https://github.com/snokam/monorepo/commit/04a4910c20004b2242255c3de21b0ab7ab89e9c6))
|
|
1368
|
+
- **events:** regenerate clients and add status field support ([9fb1b27](https://github.com/snokam/monorepo/commit/9fb1b27dfc16f9da42a5d37d8c6a94f6406b72d7))
|
|
1369
|
+
- **finance-web:** parental-leave display + coverage selector in salary table ([#1804](https://github.com/snokam/monorepo/issues/1804)) ([b71e22b](https://github.com/snokam/monorepo/commit/b71e22b627540237c30154e83827ecba1104f16a)), closes [#1795](https://github.com/snokam/monorepo/issues/1795)
|
|
1370
|
+
- format sanity-page-content files ([b6d3566](https://github.com/snokam/monorepo/commit/b6d3566ef15c8fc9f87f3442ead6fbaf9e21d4f8))
|
|
1371
|
+
- generate all clients ([58a9280](https://github.com/snokam/monorepo/commit/58a92807a00f6a1c67f1e63ab4bb9ade3bb61232))
|
|
1372
|
+
- more windows fixes ([e5a926b](https://github.com/snokam/monorepo/commit/e5a926be6ccf52d6e44afbfffa2b6b217a39709d))
|
|
1373
|
+
- **olaf:** hydration, HistoryPanel overlap, icon-only header ([#903](https://github.com/snokam/monorepo/issues/903)) ([4d31171](https://github.com/snokam/monorepo/commit/4d3117158b2f91a31a4d2323b6881363ecf1df40)), closes [#f1f6](https://github.com/snokam/monorepo/issues/f1f6) [#899](https://github.com/snokam/monorepo/issues/899)
|
|
1374
|
+
- **platform:** restore sanity meta tags on host-routed pages ([#1610](https://github.com/snokam/monorepo/issues/1610)) ([503b5a7](https://github.com/snokam/monorepo/commit/503b5a79d1ffb1c7b62b9cd87133caca30ddc9db))
|
|
1375
|
+
- **platform:** Sanity config from KV (never baked) + faster secrets pull ([#1652](https://github.com/snokam/monorepo/issues/1652)) ([f03c282](https://github.com/snokam/monorepo/commit/f03c2829b6b69d0e091a8d853d633a17ccb4361f))
|
|
1376
|
+
- resolve TypeScript errors in sanity-page-content, auth, and development-web ([81a7b0f](https://github.com/snokam/monorepo/commit/81a7b0fa856f0314814cecb7ca3f092708a02ddc))
|
|
1377
|
+
- **sales:** hide expired AI-matched tenders; make consultant loader visible ([#1965](https://github.com/snokam/monorepo/issues/1965)) ([96ce1e4](https://github.com/snokam/monorepo/commit/96ce1e4ede1bd90e7a9f3ef590a7ab87b4303e4d))
|
|
1378
|
+
- sanity client ([ae8e259](https://github.com/snokam/monorepo/commit/ae8e259d328592ea6018c037ac674932c003f2b6))
|
|
1379
|
+
- **sanity-page-content:** default language to 'no' in App Router HOCs ([c915be8](https://github.com/snokam/monorepo/commit/c915be8a438c21ca279c2e71f014a674ca914fbf))
|
|
1380
|
+
- **sanity-page-content:** fix Providers folder case sensitivity for Linux builds ([679e7a6](https://github.com/snokam/monorepo/commit/679e7a601617ea7453be8ffc08a1e71c0f7dcfd8))
|
|
1381
|
+
- **sanity-page-content:** render JSON-LD Organization schema server-side ([#1076](https://github.com/snokam/monorepo/issues/1076)) ([e01d32a](https://github.com/snokam/monorepo/commit/e01d32a8139187d35e76909f2e04c868fa172a06))
|
|
1382
|
+
- **sanity-page-content:** retry tenant resolution so a platform cold-start doesn't blank the page ([076c8bc](https://github.com/snokam/monorepo/commit/076c8bca00b0a1e21721e3f6999ef01a530738bd))
|
|
1383
|
+
- **sanity-page-content:** support single-brace placeholders in getText ([558c850](https://github.com/snokam/monorepo/commit/558c850f34c05de94b409f147ce079574de77f81))
|
|
1384
|
+
- **sanity-page-content:** treat empty strings as valid content (?? not ||) ([61deede](https://github.com/snokam/monorepo/commit/61deedea6972fee1163b315af1c2a4b58c47af5c))
|
|
1385
|
+
- **sanity:** resolve tenant tokens in the meta tags ([#2091](https://github.com/snokam/monorepo/issues/2091)) ([c718b68](https://github.com/snokam/monorepo/commit/c718b68af3981666eface707dc02a1a4f9f4845f))
|
|
1386
|
+
- **security:** upgrade all dependencies and fix Dependabot alerts ([c462d7f](https://github.com/snokam/monorepo/commit/c462d7f975451c490726177e0fd9c588a90953bd))
|
|
1387
|
+
- serve swagger oauth2-redirect under the shared identity app ([#1590](https://github.com/snokam/monorepo/issues/1590)) ([b4b5eb7](https://github.com/snokam/monorepo/commit/b4b5eb777b1cb9f5b5b2dcd5d34c6bc9aa66af5b))
|
|
1388
|
+
- session maxAge, Media alt-text fallback, edit-mode drawer a11y ([#1757](https://github.com/snokam/monorepo/issues/1757)) ([fe66d8b](https://github.com/snokam/monorepo/commit/fe66d8b4e3f3b69266ca718603b883595e072574))
|
|
1389
|
+
- **sync,recruitment:** correct date format + tick SCIM-fanned systems ([f0b7c14](https://github.com/snokam/monorepo/commit/f0b7c14e2a9521cdb08bcc59bc6f77775d41809f))
|
|
1390
|
+
- update all dependencies to latest ([8aff44e](https://github.com/snokam/monorepo/commit/8aff44ec72f8a17f2f9d1f527f5c3ae89c3ccaef))
|
|
1391
|
+
|
|
1392
|
+
### Features
|
|
1393
|
+
|
|
1394
|
+
- **accounting:** subcontractor reinvoicing rework + kickback email archive ([ce22021](https://github.com/snokam/monorepo/commit/ce22021317a343bdcb53629a5fc7348fcfbf55a9))
|
|
1395
|
+
- add Apple redemption code pool system ([#623](https://github.com/snokam/monorepo/issues/623)) ([9febb5f](https://github.com/snokam/monorepo/commit/9febb5f250079b403b7d1fbba61401317a50dac0))
|
|
1396
|
+
- add cv upload and references to introduction page ([5f453f5](https://github.com/snokam/monorepo/commit/5f453f50c3d99d863514729b4ab564b31747b6b2))
|
|
1397
|
+
- add development-web docs site with App Router support ([64c0cfa](https://github.com/snokam/monorepo/commit/64c0cfa6378003d4bc3897b83a564afd0ab1b9a4))
|
|
1398
|
+
- add isExternal employee flag + IaC group split ([#1281](https://github.com/snokam/monorepo/issues/1281)) ([7616cd6](https://github.com/snokam/monorepo/commit/7616cd648616e929b53033eff3f6c3a160a67882))
|
|
1399
|
+
- added invitations from events ([a9c233b](https://github.com/snokam/monorepo/commit/a9c233b7d18ed9b328cf1afc1e9e96ff9316fd75))
|
|
1400
|
+
- added invites for events ([e93540c](https://github.com/snokam/monorepo/commit/e93540c2be8633e7d0173cbb810fc5ade60d97ee))
|
|
1401
|
+
- **admin:** self-service admin forms, form kit, and fleet-wide content edit mode ([#1748](https://github.com/snokam/monorepo/issues/1748)) ([174dab1](https://github.com/snokam/monorepo/commit/174dab19f7c75e9e56884cf21b553b6b3893dbb9))
|
|
1402
|
+
- **billing:** Phase 2 — enforcement, trial UX, module-aware menu ([#1755](https://github.com/snokam/monorepo/issues/1755)) ([a5a4533](https://github.com/snokam/monorepo/commit/a5a4533b6c8a7658d90063ce76a6f940318cbad8))
|
|
1403
|
+
- build publishable output for the shared chrome packages ([7793de3](https://github.com/snokam/monorepo/commit/7793de307a33eb6f70be0186d6559c2b6c6b75b3))
|
|
1404
|
+
- clean up code ([ecb5db5](https://github.com/snokam/monorepo/commit/ecb5db59bacb2854ce385eb5014d368c58de2b56))
|
|
1405
|
+
- **content:** in-place editing, TenantContent platform layering, dark mode + skjer/typer fixes ([2da8a73](https://github.com/snokam/monorepo/commit/2da8a731541f5fb836a529d54648b28556e3b004))
|
|
1406
|
+
- **edit-mode:** app menu links editable in place and in drawer ([b682238](https://github.com/snokam/monorepo/commit/b6822380272a71ce15125f9eecccba4a8592222f))
|
|
1407
|
+
- **edit-mode:** author-in-place for missing keys + system-key classification ([#1752](https://github.com/snokam/monorepo/issues/1752)) ([9614f6c](https://github.com/snokam/monorepo/commit/9614f6cdc6aadc2f0f6827cbc6c8dc26fdf6d94a))
|
|
1408
|
+
- **edit-mode:** block editor mounts in the page flow, blog-style ([880bb8c](https://github.com/snokam/monorepo/commit/880bb8cacfdf5afb074b3b7e5dd638fd63f63ed1))
|
|
1409
|
+
- **edit-mode:** full component coverage — media, youtube, video, gallery ([e005559](https://github.com/snokam/monorepo/commit/e005559946d1bbe4a71ad8e102487993fcf4f94b))
|
|
1410
|
+
- **edit-mode:** in-place block editing with the blog article editor ([9188e88](https://github.com/snokam/monorepo/commit/9188e889e97a375cd0de35c95600daa6e1cc841c))
|
|
1411
|
+
- **edit-mode:** menu add/remove + drawer via avatar menu, floating button removed ([bc3112a](https://github.com/snokam/monorepo/commit/bc3112a1e58840fe61251482b819fb6956603571))
|
|
1412
|
+
- **edit-mode:** sibling-run block matching + interpolated text editing ([812789e](https://github.com/snokam/monorepo/commit/812789eb02a4e43d4b9b3fec5d1deb1becdcc868))
|
|
1413
|
+
- **edit-mode:** stega markers — exact element-to-key resolution ([d5934d9](https://github.com/snokam/monorepo/commit/d5934d9f03d020ef5632bbf8645dacf11235b742))
|
|
1414
|
+
- **edit-mode:** true inline text editing + robust overlay positioning ([f601bea](https://github.com/snokam/monorepo/commit/f601beaefa8fc88fd2126504ed35eca0db35f884))
|
|
1415
|
+
- **employees:** persist and correlate scim externalId end to end ([c1a60fb](https://github.com/snokam/monorepo/commit/c1a60fb4938307cbf9cfc5e18a959f5f422db0b9))
|
|
1416
|
+
- **events:** add status field for event cancellations ([#504](https://github.com/snokam/monorepo/issues/504)) ([6467d07](https://github.com/snokam/monorepo/commit/6467d077366c1bcf5f89b00fe2ab22e97b32fad6)), closes [#503](https://github.com/snokam/monorepo/issues/503)
|
|
1417
|
+
- **events:** allow digital participation with auto-created Teams meeting ([#999](https://github.com/snokam/monorepo/issues/999)) ([9985874](https://github.com/snokam/monorepo/commit/9985874dfd6a8ac0e238c1f19e21d790fac7ede0))
|
|
1418
|
+
- **events:** thread participant sign-ups under the #sosialt event post ([#1514](https://github.com/snokam/monorepo/issues/1514)) ([602fe64](https://github.com/snokam/monorepo/commit/602fe644d9f6bd1293dbdd67134477ba14d9acaa))
|
|
1419
|
+
- **finance:** permisjonskvoter med ringer på min økonomi og permisjonsoversikt ([1844bde](https://github.com/snokam/monorepo/commit/1844bdeb26f3a2b8ea55035e6af0e7bdd0c6ec65))
|
|
1420
|
+
- **finance:** subcontractor re-invoicing panel + okonomi admin-shell menu ([f6597b3](https://github.com/snokam/monorepo/commit/f6597b3c7d500d81d6f26b9281b7810ee73e4d1d))
|
|
1421
|
+
- in-page CMS editing + fleet-wide CMS-only content ([#1749](https://github.com/snokam/monorepo/issues/1749)) ([91162e7](https://github.com/snokam/monorepo/commit/91162e743148b1e4e94f2f5f6527886e7108eba3))
|
|
1422
|
+
- make tenant tokens available in every text ([#2085](https://github.com/snokam/monorepo/issues/2085)) ([5a63149](https://github.com/snokam/monorepo/commit/5a63149e2454debc809772bed0b494929a804f26))
|
|
1423
|
+
- migrate all 16 frontend apps from Pages Router to App Router ([#681](https://github.com/snokam/monorepo/issues/681)) ([3b0cd1c](https://github.com/snokam/monorepo/commit/3b0cd1c0c28abc2684e9c07d42264afe3d19cc8c))
|
|
1424
|
+
- move Start dato field below Status and show only during onboarding ([b9fcc13](https://github.com/snokam/monorepo/commit/b9fcc130727f9a27e3f55d9d16a7a569ff9d8f9d))
|
|
1425
|
+
- multi-business platform — secret persistence, integration checks, feature flags ([#1556](https://github.com/snokam/monorepo/issues/1556)) ([990de8f](https://github.com/snokam/monorepo/commit/990de8f2044a619de641d8066d40d503ab390070)), closes [#70](https://github.com/snokam/monorepo/issues/70) [#71](https://github.com/snokam/monorepo/issues/71) [#69](https://github.com/snokam/monorepo/issues/69)
|
|
1426
|
+
- **my-page-web:** permission-matrix card on /ansatte ([#1296](https://github.com/snokam/monorepo/issues/1296)) ([f440fd9](https://github.com/snokam/monorepo/commit/f440fd912ae6b840daa1239f6974f9cf9e95027b))
|
|
1427
|
+
- **newsletter:** AI-summarized newsletters for tag subscribers ([#861](https://github.com/snokam/monorepo/issues/861)) ([9f7e676](https://github.com/snokam/monorepo/commit/9f7e6761e8c7e8271f0d10856bbc155b890ad1f2))
|
|
1428
|
+
- **newsletter:** per-series sendEmails toggle on newsletterSeries ([#984](https://github.com/snokam/monorepo/issues/984)) ([719dfdd](https://github.com/snokam/monorepo/commit/719dfddf99848f09b6363cbae93696abdc5884d6))
|
|
1429
|
+
- **newsletter:** slackChannel on newsletterSeries drives per-series posts ([#932](https://github.com/snokam/monorepo/issues/932)) ([063cc7e](https://github.com/snokam/monorepo/commit/063cc7e90b34600c08e1fa55468afd4c4e6e18e9))
|
|
1430
|
+
- price parental leave on the pre-leave window + editable permisjonsstart ([#1821](https://github.com/snokam/monorepo/issues/1821)) ([734d0a4](https://github.com/snokam/monorepo/commit/734d0a4a2f0ae5e4bd780c7f5a5bb0a1aa1cd909))
|
|
1431
|
+
- **rbac:** add scopeGrants to Sanity group + employee (phase 1) ([4f14df2](https://github.com/snokam/monorepo/commit/4f14df28d33d16faff205fcfa78b95926d192112))
|
|
1432
|
+
- **recruitment:** admin panel with dedicated backend endpoints ([#972](https://github.com/snokam/monorepo/issues/972)) ([8676698](https://github.com/snokam/monorepo/commit/8676698c0504ce729ef2b1d0ffd43a3249e827be))
|
|
1433
|
+
- **recruitment:** candidate↔employee link + automatic offboarding chain ([#1004](https://github.com/snokam/monorepo/issues/1004)) ([a22d283](https://github.com/snokam/monorepo/commit/a22d2831b90c1c420fbb2ef4ceecace69685d978))
|
|
1434
|
+
- **recruitment:** collect personnummer + signer + sign date for contract ([#1206](https://github.com/snokam/monorepo/issues/1206)) ([6a710e7](https://github.com/snokam/monorepo/commit/6a710e7e8b3926eb29e69c1c3ec9753b9acc81f2))
|
|
1435
|
+
- **recruitment:** consolidated welcome email + slippers on /velkommen ([#1190](https://github.com/snokam/monorepo/issues/1190)) ([ada0b7c](https://github.com/snokam/monorepo/commit/ada0b7c8f09ede4c73c4383534fbf2367c55f7e2))
|
|
1436
|
+
- **recruitment:** contract PDF on OFFER + step-preview admin view ([#1204](https://github.com/snokam/monorepo/issues/1204)) ([5c03efc](https://github.com/snokam/monorepo/commit/5c03efc05541088785fbf7e99208255647c241ef))
|
|
1437
|
+
- **recruitment:** drop T-shirt field, regen clients ([#998](https://github.com/snokam/monorepo/issues/998)) ([3e3685f](https://github.com/snokam/monorepo/commit/3e3685f6f698988b5d3339915d07bd18ed7b916e))
|
|
1438
|
+
- **recruitment:** generate offer PDF on OFFER status flip ([#1202](https://github.com/snokam/monorepo/issues/1202)) ([66e248d](https://github.com/snokam/monorepo/commit/66e248d2f273643980150f153fd9b7e81d79b408))
|
|
1439
|
+
- **recruitment:** let new hires add GitHub and LinkedIn for CV page ([#1547](https://github.com/snokam/monorepo/issues/1547)) ([b01b15b](https://github.com/snokam/monorepo/commit/b01b15bf3db157678b1229eacec269b2197dbc40))
|
|
1440
|
+
- **recruitment:** onboarding task reminders per candidate ([#965](https://github.com/snokam/monorepo/issues/965)) ([2e4f297](https://github.com/snokam/monorepo/commit/2e4f29727c5b71588d97eee7b9a10ddab718fa7b)), closes [#C072Q9EPB25](https://github.com/snokam/monorepo/issues/C072Q9EPB25)
|
|
1441
|
+
- **recruitment:** one-click onboarding chain MS → Sanity sync + GitHub field ([#1001](https://github.com/snokam/monorepo/issues/1001)) ([5a39c34](https://github.com/snokam/monorepo/commit/5a39c34d67ba46e4aaed30b45c253cf8daa2ce03))
|
|
1442
|
+
- **recruitment:** replace candidate.track with jobPosition reference ([#1165](https://github.com/snokam/monorepo/issues/1165)) ([7aa3309](https://github.com/snokam/monorepo/commit/7aa3309fab16a9affa05ec44e0143cb96745f5d9))
|
|
1443
|
+
- **recruitment:** split interview stage into intro/technical/sales + candidate-facing pages ([#1449](https://github.com/snokam/monorepo/issues/1449)) ([ab7299b](https://github.com/snokam/monorepo/commit/ab7299b45356f53c574b1d57b3847db3ac6cf393))
|
|
1444
|
+
- **recruitment:** split job-posting title from employee role title ([6392080](https://github.com/snokam/monorepo/commit/6392080b50d04c09057ba25a9c8564a77e9e6b7b))
|
|
1445
|
+
- **recruitment:** user creation review step + collected onboarding info ([#988](https://github.com/snokam/monorepo/issues/988)) ([66f6b6a](https://github.com/snokam/monorepo/commit/66f6b6a73b46f1a4cd340568cb7fe511d6f44290))
|
|
1446
|
+
- **sanity-function:** add pages domain and extend apps with dynamic content management ([442d751](https://github.com/snokam/monorepo/commit/442d751f4f09f847b255aa1595bed61d863c8fde))
|
|
1447
|
+
- **sanity-page-content:** add App Router draft mode Route Handlers ([999592f](https://github.com/snokam/monorepo/commit/999592f4b40e2132180aad3d5ef9770512ca02fd))
|
|
1448
|
+
- **sanity-page-content:** add generatePageMetadata helper for App Router ([058bb82](https://github.com/snokam/monorepo/commit/058bb82f0dec83d2820381afc70638d4a7d3473c))
|
|
1449
|
+
- **sanity-page-content:** add HOC support for App Router ([dd27c1a](https://github.com/snokam/monorepo/commit/dd27c1a08a5eee3d2b504c0645938e825880864c))
|
|
1450
|
+
- **sanity-page-content:** add preview/draft mode support to App Router HOCs ([6cb2cb1](https://github.com/snokam/monorepo/commit/6cb2cb167a9e9075abefb35adc3780bced759ec5))
|
|
1451
|
+
- **sanity-page-content:** restore includeOrganizationSchema support ([bf2b465](https://github.com/snokam/monorepo/commit/bf2b4659652496a812cfaf54f912daeb763b1dfa))
|
|
1452
|
+
- **sanity:** activateUrl/deactivateUrl on system + grouped slack summary ([aa4b1df](https://github.com/snokam/monorepo/commit/aa4b1df437c600432b12e20dfd06aa5a449ca09d))
|
|
1453
|
+
- **sanity:** register component.table in admin schema ([#1248](https://github.com/snokam/monorepo/issues/1248)) ([8964892](https://github.com/snokam/monorepo/commit/896489211ef878a22e74b03da6b168099d617877))
|
|
1454
|
+
- **snokam.no/presentasjoner:** Added presentasjoner page ([#1535](https://github.com/snokam/monorepo/issues/1535)) ([c37fbb6](https://github.com/snokam/monorepo/commit/c37fbb60aec35a2817254e4139c3d2080231b15a))
|
|
1455
|
+
- **stocks:** add stock overview and ownership tracking ([#460](https://github.com/snokam/monorepo/issues/460)) ([9696f9a](https://github.com/snokam/monorepo/commit/9696f9a7a015a9711f1d2a8081b25f37c5fc0262))
|
|
1456
|
+
- **types:** add detailed ongoing events query type ([185f0ea](https://github.com/snokam/monorepo/commit/185f0ea217e85af67f37f63bb924ba617886b572))
|
|
1457
|
+
- **ui:** dark mode — component system + employee-persisted global provider ([#1521](https://github.com/snokam/monorepo/issues/1521)) ([583223c](https://github.com/snokam/monorepo/commit/583223cfab50b70a1320cc0c4b190e770ebaa7a3)), closes [#0e2748](https://github.com/snokam/monorepo/issues/0e2748) [#071d41](https://github.com/snokam/monorepo/issues/071d41) [#1519](https://github.com/snokam/monorepo/issues/1519) [#071d41](https://github.com/snokam/monorepo/issues/071d41) [#0e2748](https://github.com/snokam/monorepo/issues/0e2748) [#071d41](https://github.com/snokam/monorepo/issues/071d41) [#0e2748](https://github.com/snokam/monorepo/issues/0e2748) [#071d41](https://github.com/snokam/monorepo/issues/071d41) [#071d41](https://github.com/snokam/monorepo/issues/071d41)
|
|
1458
|
+
- updated everywhere to use eventtype instead of category ([#35](https://github.com/snokam/monorepo/issues/35)) ([935628e](https://github.com/snokam/monorepo/commit/935628e1843354a639a96bfbd076865e46d2aee4))
|
|
1459
|
+
|
|
1460
|
+
### Reverts
|
|
1461
|
+
|
|
1462
|
+
- Revert "WIP: replace Snokam.Client.Sanity with Kiota — in-place migration (#1045)" ([93c938e](https://github.com/snokam/monorepo/commit/93c938e100b87baa2e06512490d82b637d0c0cf2)), closes [#1045](https://github.com/snokam/monorepo/issues/1045)
|