@protobase/ui 0.63.4 → 0.64.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/account/change-email-dialog.js +1 -1
- package/dist/account/devices-section.js +12 -6
- package/dist/account/messages.js +2 -333
- package/dist/account/passkeys-section.js +3 -3
- package/dist/account/password-change-dialog.js +3 -3
- package/dist/account/sign-in-policy-form.js +6 -3
- package/dist/account/sign-in-providers-section.js +1 -1
- package/dist/account/staff-sign-in-log.js +5 -5
- package/dist/action-card/messages.js +2 -5
- package/dist/activity-chart/activity-chart.js +5 -7
- package/dist/activity-chart/activity-tooltip.js +1 -1
- package/dist/activity-chart/messages.js +2 -11
- package/dist/app/app.js +2 -3
- package/dist/app/batch-failure.js +5 -1
- package/dist/app/change-confirm/messages.js +2 -13
- package/dist/app/change-confirm/use-change-confirm.js +15 -18
- package/dist/app/charts/chart-groups.js +3 -1
- package/dist/app/charts/chart-view.js +1 -1
- package/dist/app/charts/group-bars.js +1 -1
- package/dist/app/charts/messages.js +2 -23
- package/dist/app/charts/period-chart.js +1 -1
- package/dist/app/comments/comment-composer.js +1 -1
- package/dist/app/comments/comments-section.js +2 -2
- package/dist/app/comments/messages.js +2 -19
- package/dist/app/confirm-sign-in-messages.js +2 -19
- package/dist/app/confirm-sign-in.js +1 -1
- package/dist/app/create/create-page.js +3 -3
- package/dist/app/create/create-record-form.js +3 -3
- package/dist/app/create/create-route.js +1 -1
- package/dist/app/create/messages.js +2 -29
- package/dist/app/custom-section.js +2 -3
- package/dist/app/delete/blocked-delete.js +5 -2
- package/dist/app/delete/dialogs.js +21 -8
- package/dist/app/delete/messages.js +2 -63
- package/dist/app/delete/use-delete-flow.js +6 -5
- package/dist/app/displays/board-column.js +2 -2
- package/dist/app/displays/board-columns.js +1 -1
- package/dist/app/displays/board-display.js +21 -9
- package/dist/app/displays/calendar-display.js +16 -7
- package/dist/app/displays/cards-display.js +2 -2
- package/dist/app/displays/custom-display.js +1 -2
- package/dist/app/displays/list-cards.js +2 -2
- package/dist/app/displays/map-display.js +19 -6
- package/dist/app/displays/messages.js +2 -147
- package/dist/app/displays/period-controls.js +2 -2
- package/dist/app/displays/timeline-display.js +16 -7
- package/dist/app/displays/timeline-range.js +1 -1
- package/dist/app/displays/use-board-move.js +4 -4
- package/dist/app/displays/use-calendar-move.js +2 -2
- package/dist/app/document-title.js +1 -1
- package/dist/app/embedded-list/cut-off-note.js +7 -1
- package/dist/app/embedded-list/embedded-list.js +1 -1
- package/dist/app/embedded-list/embedded-row-targets.js +3 -3
- package/dist/app/embedded-list/messages.js +2 -21
- package/dist/app/export/builder-port.js +1 -1
- package/dist/app/export/export-dialog.js +14 -8
- package/dist/app/export/messages.js +2 -75
- package/dist/app/export/use-export-flow.js +9 -3
- package/dist/app/field-editor.js +3 -3
- package/dist/app/field-errors.js +18 -7
- package/dist/app/field-messages.js +2 -45
- package/dist/app/field-types/members/messages.js +2 -15
- package/dist/app/field-types/messages.js +2 -5
- package/dist/app/field-types/widget-part.js +1 -1
- package/dist/app/file-field.js +3 -3
- package/dist/app/gallery/gallery-section.js +6 -3
- package/dist/app/gallery/messages.js +2 -27
- package/dist/app/gallery/photo-details.js +3 -3
- package/dist/app/hand-order/hand-sorted-list.js +2 -3
- package/dist/app/hand-order/messages.js +2 -29
- package/dist/app/hand-order/use-hand-order.js +2 -2
- package/dist/app/history/describe-change.js +1 -1
- package/dist/app/history/history-section.js +1 -1
- package/dist/app/history/messages.js +2 -29
- package/dist/app/import/convert.js +19 -10
- package/dist/app/import/import-check-step.js +5 -5
- package/dist/app/import/import-dialog.js +5 -2
- package/dist/app/import/import-file-step.js +1 -1
- package/dist/app/import/import-mapping-step.js +3 -3
- package/dist/app/import/messages.js +2 -197
- package/dist/app/import/prepare-rows.js +11 -4
- package/dist/app/import/sheet-cell.js +1 -1
- package/dist/app/import/xlsx-reader.js +2 -2
- package/dist/app/import/zip-reader.js +4 -1
- package/dist/app/incoming-card.js +1 -1
- package/dist/app/list-actions/use-list-actions.js +4 -1
- package/dist/app/list-edit/messages.js +2 -11
- package/dist/app/list-edit/use-list-edits.js +1 -1
- package/dist/app/list-empty-state.js +7 -4
- package/dist/app/list-group-chart.js +1 -1
- package/dist/app/list-messages.js +2 -53
- package/dist/app/list-page.js +9 -9
- package/dist/app/live-update/messages.js +2 -11
- package/dist/app/map/messages.js +2 -11
- package/dist/app/messages.js +2 -139
- package/dist/app/meta-gate-messages.js +2 -13
- package/dist/app/nav-from-meta.js +2 -2
- package/dist/app/new-version/messages.js +2 -21
- package/dist/app/new-version/new-version-banner.js +1 -2
- package/dist/app/new-version/new-version-toast.js +1 -1
- package/dist/app/pages/action-inputs/action-inputs-dialog.js +1 -1
- package/dist/app/pages/action-inputs/input-answers.js +1 -1
- package/dist/app/pages/blocks/field.js +1 -1
- package/dist/app/pages/blocks/modal-form.js +3 -3
- package/dist/app/pages/blocks/settings.js +3 -3
- package/dist/app/pages/blocks/tabs.js +1 -1
- package/dist/app/pages/composed-page.js +1 -2
- package/dist/app/pages/custom-boundary.js +1 -2
- package/dist/app/pages/messages.js +2 -79
- package/dist/app/pages/record-actions.js +1 -1
- package/dist/app/pages/render-node.js +2 -3
- package/dist/app/pages/use-run-action.js +15 -7
- package/dist/app/picker/picker-combobox.js +1 -1
- package/dist/app/rank-after/dependency-rule.js +8 -2
- package/dist/app/rank-after/messages.js +2 -5
- package/dist/app/rank-after/ranked-place.js +7 -1
- package/dist/app/record-chart/messages.js +2 -25
- package/dist/app/record-chart/record-chart-section.js +2 -2
- package/dist/app/record-lines-cell.js +4 -1
- package/dist/app/record-lines.js +5 -5
- package/dist/app/record-messages.js +2 -83
- package/dist/app/record-page.js +8 -8
- package/dist/app/record-row/messages.js +2 -23
- package/dist/app/record-row/record-row-body.js +2 -2
- package/dist/app/record-row/record-row.js +3 -3
- package/dist/app/record-row/saved-record-row.js +3 -3
- package/dist/app/related-cards/messages.js +2 -15
- package/dist/app/related-cards/related-card.js +1 -1
- package/dist/app/related-cards/related-cards.js +1 -1
- package/dist/app/related-dots/dots-summary.js +1 -1
- package/dist/app/related-dots/messages.js +2 -5
- package/dist/app/related-dots/related-dots.js +2 -3
- package/dist/app/related-section.js +1 -1
- package/dist/app/relation-picker.js +1 -1
- package/dist/app/runtime/messages.js +2 -55
- package/dist/app/runtime/runtime-status.js +12 -3
- package/dist/app/saved/messages.js +2 -19
- package/dist/app/saved/saved-list.js +3 -3
- package/dist/app/search/messages.js +2 -19
- package/dist/app/search/navigation-hits.js +1 -1
- package/dist/app/search/search-model.js +9 -3
- package/dist/app/searches/messages.js +2 -93
- package/dist/app/searches/save-search-button.js +3 -3
- package/dist/app/searches/saved-search-rows.js +3 -3
- package/dist/app/searches/saved-search-section.js +4 -4
- package/dist/app/searches/saved-searches.js +14 -12
- package/dist/app/searches/search-controls.js +2 -2
- package/dist/app/searches/search-diff.js +8 -2
- package/dist/app/searches/update-search-dialog.js +10 -4
- package/dist/app/searches/use-save-search.js +2 -2
- package/dist/app/searches/use-search-row.js +2 -2
- package/dist/app/sensitive-field.js +3 -3
- package/dist/app/source-notice.js +3 -3
- package/dist/app/staff-banner.js +12 -8
- package/dist/app/use-live-save.js +2 -2
- package/dist/app/value-badge.js +3 -4
- package/dist/app-shell/global-search.js +2 -2
- package/dist/app-shell/messages.js +2 -63
- package/dist/app-shell/profile-menu.js +2 -2
- package/dist/app-shell/sidebar-group.js +2 -2
- package/dist/app-shell/sidebar.js +1 -2
- package/dist/app-shell/top-bar.js +1 -1
- package/dist/assistant-dock/messages.js +2 -23
- package/dist/auth/auth-gate.js +1 -1
- package/dist/auth/auth-messages.js +9 -88
- package/dist/auth/email-code-form.js +2 -3
- package/dist/auth/forgot-password-form.js +3 -4
- package/dist/auth/messages.js +2 -203
- package/dist/auth/provider-sign-in-page.js +3 -3
- package/dist/auth/resend-code-button.js +1 -1
- package/dist/auth/reset-password-form.js +1 -1
- package/dist/auth/reset-password-page.js +1 -1
- package/dist/auth/sign-in-form.js +3 -3
- package/dist/auth/sign-up-code-form.js +2 -3
- package/dist/auth/sign-up-details-form.js +3 -4
- package/dist/auth/staff-sign-in-form.js +3 -3
- package/dist/calls/call-guests-panel.js +2 -2
- package/dist/calls/call-lobby-notice.js +1 -1
- package/dist/calls/call-mark.js +1 -1
- package/dist/calls/call-people.js +1 -1
- package/dist/calls/call-rings.js +1 -1
- package/dist/calls/call-tile.js +2 -2
- package/dist/calls/messages.js +2 -139
- package/dist/carousel/carousel-controls.js +4 -1
- package/dist/carousel/messages.js +2 -13
- package/dist/chat/chat-message.js +1 -1
- package/dist/chat/messages.js +2 -19
- package/dist/compact-table/compact-table.js +1 -1
- package/dist/compact-table/messages.js +2 -15
- package/dist/data-grid/cell-text.js +8 -7
- package/dist/data-grid/cells.js +9 -6
- package/dist/data-grid/grid-footer.js +1 -1
- package/dist/data-grid/grid-row.js +2 -2
- package/dist/data-grid/header-menu.js +1 -1
- package/dist/data-grid/messages.js +2 -49
- package/dist/data-grid/resize-handle.js +1 -1
- package/dist/data-grid/row-reorder.js +20 -5
- package/dist/filter-panel/active-filter-chips.js +1 -1
- package/dist/filter-panel/date-presets.js +2 -2
- package/dist/filter-panel/facet-combobox.js +1 -1
- package/dist/filter-panel/facet-group.js +1 -1
- package/dist/filter-panel/messages.js +2 -49
- package/dist/filter-panel/range-filter.js +1 -1
- package/dist/format/date.js +4 -4
- package/dist/format/messages.js +2 -21
- package/dist/format/money.js +1 -1
- package/dist/format/number.js +5 -2
- package/dist/forms/messages.js +2 -21
- package/dist/forms/public-form-page.js +1 -1
- package/dist/index.js +3 -3
- package/dist/inline-child-table/inline-child-table.js +19 -4
- package/dist/inline-child-table/line-row.js +2 -2
- package/dist/inline-child-table/messages.js +2 -51
- package/dist/invitations/link-notice.js +2 -3
- package/dist/invitations/messages.js +2 -21
- package/dist/invitations/pending-invitation-row.js +1 -1
- package/dist/lists/messages.js +2 -5
- package/dist/live/columns-from-model.js +14 -31
- package/dist/live/display-value.js +1 -1
- package/dist/live/messages.js +2 -15
- package/dist/live/value-color.js +13 -3
- package/dist/live/view-fields.js +4 -2
- package/dist/locale/en.js +1399 -0
- package/dist/locale/messages.js +38 -7
- package/dist/locale/nl.js +1399 -0
- package/dist/markdown/messages.js +2 -13
- package/dist/mentions/messages.js +2 -13
- package/dist/notifications/bell/messages.js +2 -35
- package/dist/notifications/bell/notification-item.js +1 -1
- package/dist/notifications/bell/unread-label.js +1 -1
- package/dist/organizations/invitation-page.js +32 -14
- package/dist/organizations/invitations-page.js +1 -1
- package/dist/organizations/members-page.js +2 -2
- package/dist/organizations/messages.js +2 -187
- package/dist/organizations/organization-page.js +4 -4
- package/dist/organizations/organizations-page.js +1 -1
- package/dist/package.js +1 -1
- package/dist/plugins/load-plugin.js +2 -2
- package/dist/plugins/messages.js +2 -33
- package/dist/plugins/plugin-notice.js +7 -5
- package/dist/primitives/badge.d.ts +2 -1
- package/dist/primitives/dialog.d.ts +7 -2
- package/dist/primitives/dialog.js +9 -4
- package/dist/primitives/messages.js +2 -13
- package/dist/primitives/token.js +1 -1
- package/dist/record-view/field.js +3 -3
- package/dist/record-view/messages.js +2 -37
- package/dist/record-view/record-header.js +4 -4
- package/dist/roles/messages.js +2 -11
- package/dist/shell/assets/app-CN_7en9q.js +8 -0
- package/dist/shell/assets/{calls-BIXaKTs0.js → calls-D5RK7EJu.js} +2 -2
- package/dist/shell/assets/export-worker-ClXdfeuq.js +15 -0
- package/dist/shell/assets/{index-BshKxX1Z.js → index-DMaCBpbN.js} +2 -2
- package/dist/shell/assets/index-Or2wt-ck.css +2 -0
- package/dist/shell/assets/{maplibre-CjNYwEqW.js → maplibre-CRmpQfDl.js} +3 -3
- package/dist/shell/assets/parse-worker-DxsmAjef.js +18 -0
- package/dist/shell/assets/preload-helper-BgLOXTzV.js +2 -0
- package/dist/shell/assets/{record-map-DjqQGqZ2.js → record-map-DsP4sXes.js} +2 -2
- package/dist/shell/assets/{records-map-D1SJKyvj.js → records-map-WFMHgKdf.js} +2 -2
- package/dist/shell/assets/shared-protobase-ui-CP2mMFbh.js +2 -0
- package/dist/shell/assets/vendor-Kvdo8Jrw.js +73 -0
- package/dist/shell/index.html +6 -6
- package/dist/shell/protobase.shell.json +2 -2
- package/dist/shell/protobase.sw.js +2 -2
- package/dist/shell-source-maps/assets/app-CN_7en9q.js.map +1 -0
- package/dist/shell-source-maps/assets/{calls-BIXaKTs0.js.map → calls-D5RK7EJu.js.map} +1 -1
- package/dist/shell-source-maps/assets/export-worker-ClXdfeuq.js.map +1 -0
- package/dist/shell-source-maps/assets/{index-BshKxX1Z.js.map → index-DMaCBpbN.js.map} +1 -1
- package/dist/shell-source-maps/assets/{maplibre-CjNYwEqW.js.map → maplibre-CRmpQfDl.js.map} +1 -1
- package/dist/shell-source-maps/assets/parse-worker-DxsmAjef.js.map +1 -0
- package/dist/shell-source-maps/assets/preload-helper-BgLOXTzV.js.map +1 -0
- package/dist/shell-source-maps/assets/{record-map-DjqQGqZ2.js.map → record-map-DsP4sXes.js.map} +1 -1
- package/dist/shell-source-maps/assets/{records-map-D1SJKyvj.js.map → records-map-WFMHgKdf.js.map} +1 -1
- package/dist/shell-source-maps/assets/shared-protobase-ui-CP2mMFbh.js.map +1 -0
- package/dist/shell-source-maps/assets/vendor-Kvdo8Jrw.js.map +1 -0
- package/dist/side-panel/messages.js +2 -5
- package/dist/status/messages.js +2 -59
- package/dist/status/status-dialog.js +1 -1
- package/dist/toasts/messages.js +2 -5
- package/dist/users/create-user-form.js +1 -1
- package/dist/users/messages.js +2 -49
- package/package.json +5 -4
- package/dist/app-shell/nav.js +0 -85
- package/dist/locale/slotted.js +0 -14
- package/dist/mocks/activity.js +0 -24
- package/dist/mocks/rng.js +0 -20
- package/dist/mocks/users.js +0 -63
- package/dist/shell/assets/app-CBYlZ19-.js +0 -9
- package/dist/shell/assets/export-worker-3e4Zsv0a.js +0 -3
- package/dist/shell/assets/index-BvT0X9o1.css +0 -2
- package/dist/shell/assets/parse-worker-UhbwEjS0.js +0 -6
- package/dist/shell/assets/preload-helper-SYSsmQ2O.js +0 -2
- package/dist/shell/assets/shared-protobase-ui-DibYt-TM.js +0 -2
- package/dist/shell/assets/vendor-xNCj9Gc_.js +0 -63
- package/dist/shell-source-maps/assets/app-CBYlZ19-.js.map +0 -1
- package/dist/shell-source-maps/assets/export-worker-3e4Zsv0a.js.map +0 -1
- package/dist/shell-source-maps/assets/parse-worker-UhbwEjS0.js.map +0 -1
- package/dist/shell-source-maps/assets/preload-helper-SYSsmQ2O.js.map +0 -1
- package/dist/shell-source-maps/assets/shared-protobase-ui-DibYt-TM.js.map +0 -1
- package/dist/shell-source-maps/assets/vendor-xNCj9Gc_.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preload-helper-SYSsmQ2O.js","names":["createContext","useContext","forwardRef","createElement","forwardRef","createElement","__toESM","require_react","require_jsx_runtime","cn","locales","isLocale","value","pickLocale","preferred","tag","import_react","fallback","app","activeLocale","setFallbackLocale","locale","setAppLocale","browserLocale","languages","formatTags","formatTag","toKebabCase","string","toLucideIconData","iconNode","iconName","aliases","toCamelCase","out","upperNext","ch","toPascalCase","camelCase","mergeClasses","classes","className","array","index","defaultAttributes","isDefined","buildLucideIconNode","attributeNames","params","getAttributeName","attributeName","viewBoxWidth","icon","\"width\"","viewBoxHeight","\"height\"","aliasClassNames","alias","iconClassNames","classNamesFromClassName","calculatedStrokeWidth","attrName","attrs","name","children","child","nextAttrs","buildLucideIconForReact","hasA11yProp","prop","props","LucideContext","useLucideContext","Icon","rest","contextSize","contextStrokeWidth","contextAbsoluteStrokeWidth","contextNonScalingStroke","contextColor","contextClass","hasAccessibleProp","svgAttributes","builtIconNode","color","width","size","height","strokeWidth","absoluteStrokeWidth","nonScalingStroke","createLucideIcon","iconData","iconDataOrName","Component","defineMessages","values","message","catalogue","id","guarded","action","error","import_jsx_runtime","sizes","segmentedClass","active","Segmented","label","options","option","iconOnly","onChange","scriptRel","assetsURL","dep","seen","isCssPreloadUrl","url","__vitePreload","promise","deps","preloadedHrefs","cspNonceMeta","cspNonce","allSettled","promises","p","importMetaResolve","specifier","depString","importerUrl","isCss","links","i","link","res","rej","handlePreloadError","e","err","item","baseModule"],"sources":["../../../../schema/src/locale.ts","../../../src/locale/active-locale.ts","../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/shared/src/utils/toLucideIconData.mjs","../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/shared/src/build/defaultAttributes.mjs","../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/shared/src/build/buildLucideIconNode.mjs","../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/shared/src/build/buildLucideIconForReact.mjs","../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/context.mjs","../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/Icon.mjs","../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../../../src/locale/messages.ts","../../../src/lib/guarded.ts","../../../src/primitives/segmented.tsx"],"sourcesContent":["/** The languages Protobase's built-in screens come in. */\nexport const locales = ['en', 'nl'] as const\n\nexport type Locale = (typeof locales)[number]\n\nexport const isLocale = (value: unknown): value is Locale => locales.includes(value as Locale)\n\n/**\n * The first of `preferred`, language tags such as the browser's `nl-BE` or `en`, whose language the screens come in;\n * English when none is.\n */\nexport const pickLocale = (preferred: readonly string[]): Locale => {\n const language = preferred.map((tag) => tag.split('-')[0]!.toLowerCase()).find(isLocale)\n return language ?? 'en'\n}\n","import { pickLocale, type Locale } from '@protobase/schema/internal'\n\n// The built-in screens read one locale, so plain functions (formats, messages) need no context: the app's when its\n// `/meta` names one, else the fallback the app starts with, the browser's language unless given. Both only ever get\n// set to what the app decides on each render, so a part of the tree that renders later never sees another one.\nlet fallback: Locale = 'en'\nlet app: Locale | undefined\n\n/** The language the screens are in now. */\nexport const activeLocale = (): Locale => app ?? fallback\n\n/** The language the screens are in when the app sets none: the browser's, or the one the app was given. */\nexport const setFallbackLocale = (locale: Locale) => {\n fallback = locale\n}\n\n/** The language the app sets for everyone, from its `/meta`; undefined when it sets none. */\nexport const setAppLocale = (locale: Locale | undefined) => {\n app = locale\n}\n\n/** The browser's language when the screens come in it, else English. */\nexport const browserLocale = (languages = globalThis.navigator?.languages ?? []) => pickLocale(languages)\n\n// The language tag numbers and dates are written with: English as in Ireland and Britain (`6 Oct 2026`, `1,234.5`).\nconst formatTags: Record<Locale, string> = { en: 'en-GB', nl: 'nl-NL' }\n\n/** The language tag `Intl` formats numbers and dates with, for the active locale. */\nexport const formatTag = () => formatTags[activeLocale()]\n","/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string?.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toKebabCase } from './toKebabCase.mjs';\n\nfunction toLucideIconData(iconName, iconNode, aliases = []) {\n if (iconNode == null) {\n throw new Error(\"[lucide]: iconNode is required when icon name is used\");\n }\n return {\n name: toKebabCase(iconName),\n size: 24,\n node: iconNode,\n ...aliases.length > 0 ? { aliases } : {}\n };\n}\n\nexport { toLucideIconData };\n//# sourceMappingURL=toLucideIconData.mjs.map\n","/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => {\n let out = \"\";\n let upperNext = false;\n for (const ch of string) {\n if (ch === \"-\" || ch === \"_\" || ch <= \" \") {\n upperNext = out.length > 0;\n continue;\n }\n if (out.length === 0) {\n out += ch.toLowerCase();\n } else {\n out += upperNext ? ch.toUpperCase() : ch;\n }\n upperNext = false;\n }\n return out;\n};\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { mergeClasses } from '../utils/mergeClasses.mjs';\n\nfunction isDefined(value) {\n return value !== null && value !== void 0;\n}\nfunction buildLucideIconNode(icon, params = {}) {\n const attributeNames = params.attributeNames ?? {};\n const getAttributeName = (attributeName) => attributeNames[attributeName] ?? attributeName;\n const viewBoxWidth = icon.size ?? icon.width ?? defaultAttributes[\"width\"];\n const viewBoxHeight = icon.size ?? icon.height ?? defaultAttributes[\"height\"];\n const aliasClassNames = icon.aliases?.filter((alias) => typeof alias === \"string\" && alias.trim() !== \"\").map((alias) => `lucide-${alias}`) ?? [];\n const iconClassNames = [...icon.name ? [`lucide-${icon.name}`] : [], ...aliasClassNames];\n const classNamesFromClassName = params.className?.split(\" \").filter(Boolean) ?? [];\n const className = params.includeDefaultClasses === false ? mergeClasses(...classNamesFromClassName) : mergeClasses(\"lucide\", ...iconClassNames, ...classNamesFromClassName);\n const calculatedStrokeWidth = params.absoluteStrokeWidth ? Number(params.strokeWidth ?? defaultAttributes[\"stroke-width\"]) * Number(icon.size ?? icon.width ?? defaultAttributes[\"width\"]) / Number(params.size ?? params.width ?? defaultAttributes[\"width\"]) : params.strokeWidth ?? defaultAttributes[\"stroke-width\"];\n const attributes = {\n ...Object.entries(defaultAttributes).reduce((attrs, [attrName, value]) => {\n attrs[getAttributeName(attrName)] = value;\n return attrs;\n }, {}),\n ...\"color\" in params && params.color && {\n [getAttributeName(\"stroke\")]: params.color\n },\n ...\"size\" in params && isDefined(params.size) && {\n [getAttributeName(\"width\")]: params.size,\n [getAttributeName(\"height\")]: params.size\n },\n ...\"width\" in params && isDefined(params.width) && {\n [getAttributeName(\"width\")]: params.width\n },\n ...\"height\" in params && isDefined(params.height) && {\n [getAttributeName(\"height\")]: params.height\n },\n [getAttributeName(\"stroke-width\")]: calculatedStrokeWidth,\n ...className && {\n [getAttributeName(\"class\")]: className\n },\n [getAttributeName(\"viewBox\")]: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,\n ...params.hasA11yProp === false ? {\n [getAttributeName(\"aria-hidden\")]: \"true\"\n } : {},\n ...\"attributes\" in params && params.attributes\n };\n return [\n \"svg\",\n attributes,\n icon.node.map((child) => {\n const [name, attrs, children] = child;\n const nextAttrs = params.nonScalingStroke ? { [getAttributeName(\"vector-effect\")]: \"non-scaling-stroke\", ...attrs } : attrs;\n return children ? [name, nextAttrs, children] : [name, nextAttrs];\n })\n ];\n}\n\nexport { buildLucideIconNode as default };\n//# sourceMappingURL=buildLucideIconNode.mjs.map\n","/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport buildLucideIconNode from './buildLucideIconNode.mjs';\n\nfunction buildLucideIconForReact(icon, params = {}) {\n return buildLucideIconNode(icon, {\n ...params,\n attributeNames: {\n ...params.attributeNames,\n class: \"className\",\n \"stroke-width\": \"strokeWidth\",\n \"stroke-linecap\": \"strokeLinecap\",\n \"stroke-linejoin\": \"strokeLinejoin\",\n \"vector-effect\": \"vectorEffect\"\n }\n });\n}\n\nexport { buildLucideIconForReact as default };\n//# sourceMappingURL=buildLucideIconForReact.mjs.map\n","/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, nonScalingStroke, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport buildLucideIconForReact from './shared/src/build/buildLucideIconForReact.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({\n color,\n size,\n width,\n height,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className = \"\",\n children,\n iconNode = [],\n icon = {\n node: iconNode,\n aliases: [],\n size: 24\n },\n ...rest\n }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n nonScalingStroke: contextNonScalingStroke = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const hasAccessibleProp = Boolean(children) || hasA11yProp(rest);\n const [name, svgAttributes, builtIconNode = []] = buildLucideIconForReact(icon, {\n color: color ?? contextColor,\n width: width ?? size ?? contextSize,\n height: height ?? size ?? contextSize,\n strokeWidth: strokeWidth ?? contextStrokeWidth,\n absoluteStrokeWidth: absoluteStrokeWidth ?? contextAbsoluteStrokeWidth,\n nonScalingStroke: nonScalingStroke ?? contextNonScalingStroke,\n className: mergeClasses(contextClass, className),\n hasA11yProp: hasAccessibleProp,\n attributes: rest\n });\n return createElement(\n name,\n {\n ref,\n ...svgAttributes\n },\n [\n ...builtIconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { toLucideIconData } from './shared/src/utils/toLucideIconData.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nfunction createLucideIcon(iconDataOrName, iconNode = [], aliases = []) {\n const iconData = typeof iconDataOrName === \"string\" ? toLucideIconData(iconDataOrName, iconNode, aliases) : iconDataOrName;\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n icon: iconData,\n className,\n ...props\n })\n );\n if (iconData.name) {\n Component.displayName = toPascalCase(iconData.name);\n }\n return Component;\n}\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","import type { Locale } from '@protobase/schema/internal'\nimport { activeLocale } from './active-locale'\n\n/** A built-in text: fixed, or made from the values it names, such as a count. */\ntype Message = string | ((...values: never[]) => string)\n\n/** A translation of `M`: every message of it, taking the same values. */\nexport type Translation<M extends Record<string, Message>> = { [K in keyof M]: M[K] extends string ? string : M[K] }\n\ntype Values<T> = T extends (...values: infer V) => string ? V : []\n\n/**\n * An area's built-in texts in every language the screens come in, keyed by id: the lookup returns the one for the\n * active locale, `text('search')` or `text('rows', 3)`. Dutch must translate every English text, which the types check.\n */\nexport const defineMessages = <M extends Record<string, Message>>(catalogue: { en: M } & Record<Exclude<Locale, 'en'>, Translation<M>>) =>\n <K extends keyof M>(id: K, ...values: Values<M[K]>): string => {\n const message = (catalogue[activeLocale()] as M)[id]\n return typeof message === 'function' ? (message as (...values: unknown[]) => string)(...values) : (message as string)\n }\n","/** Runs a storage access; storage can be unavailable (private windows, blocked site data), which is a DOMException. Anything else is a bug. */\nexport const guarded = <T>(action: () => T, fallback: T) => {\n try {\n return action()\n } catch (error) {\n if (!(error instanceof DOMException)) throw error\n return fallback\n }\n}\n","import type { ComponentType } from 'react'\nimport { cn } from '../lib/cn'\n\nexport type SegmentedOption<T extends string> = { value: T; label: string; icon?: ComponentType<{ className?: string }> }\n\n/**\n * `md` matches a medium Button, for a switch that sits among buttons. `iconOnly` draws each option as its icon alone,\n * its label the button's name, for a row without room for the words.\n */\nexport type SegmentedProps<T extends string> = { value: T; options: Array<SegmentedOption<T>>; onChange: (value: T) => void; label?: string; size?: 'sm' | 'md'; iconOnly?: boolean }\n\nconst sizes = { sm: { group: 'h-7', option: 'px-2.5 text-body' }, md: { group: 'h-8', option: 'px-3 text-body' } }\n\n/** A segmented switch's classes, for a row of links that looks like one: the group, and each option, `active` the chosen. */\nexport const segmentedClass = {\n group: (size: 'sm' | 'md' = 'sm') => cn('inline-flex', sizes[size].group, 'rounded-md bg-muted p-0.5'),\n option: (active: boolean, size: 'sm' | 'md' = 'sm') =>\n cn('inline-flex items-center gap-1.5 rounded', sizes[size].option, 'font-medium transition-colors', active ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground hover:text-foreground'),\n}\n\nexport const Segmented = <T extends string>({ value, options, onChange, label, size = 'sm', iconOnly = false }: SegmentedProps<T>) => (\n <span role=\"group\" aria-label={label} className={segmentedClass.group(size)}>\n {options.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n aria-pressed={option.value === value}\n {...(iconOnly && { 'aria-label': option.label, title: option.label })}\n onClick={() => onChange(option.value)}\n className={segmentedClass.option(option.value === value, size)}\n >\n {option.icon && <option.icon className=\"size-3.5\" />}\n {!iconOnly && option.label}\n </button>\n ))}\n </span>\n)\n"],"ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13],"mappings":"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","debugId":"12612b26-4363-4ab7-b9ff-f110e2f70544"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared-protobase-ui-DibYt-TM.js","names":["useMemo","text","_Fragment","useState","__toESM","require_react","require_jsx_runtime","keepPreviousData","useQuery","useQueryClient","CarouselControls","text","useFieldControl","CodeForm","Spinner","Composer","AppLink","mentionedIds","Section","emptyDraft","shownImage","pluginApi","ResponsiveDialog","useGuardedPress","keys","allowDelayMs","ApiProvider","protobaseVersion","Dialog","callsChannelEvent","AuthLayout","useOptionalAuth","usePlugin","Button","text$1","dayIn","useRecord","viewerZone","ChatThread","Field","useApiToken","CarouselTrack","mergeUi","buttonClass","SidePanel","Textarea","MentionBox","RouteLink","isFramed","useClient","ResendCodeButton","useMeta","useArmedAfterFocus","useResourceClient","useOptionalListDisplay","useListDisplay","useCarousel","diffStats","useMembers","useMarkNotificationsRead","useFacets","FieldList","useStatuses","usePresence","useLayoutRecord","useAssistant","Token","SignInPrompt","AssistantDock","FileImage","DiffView","defineUi","StepList","definePlugin","useInbox","fetchLabels","CallView","formatWeekdayDate","ChatMessage","Input","Form","ActionInputError","PartView","RelationPicker","isConflict","StatusMark","useUnreadNotifications","useHistogram","useBackendData","OtpInput","MenuSelect","useUpdateRecord","LogoMark","usePushNotifications","useSeries","App","AvailabilityMark","useAssistantClient","Markdown","parseDiff","statusRefreshMs","MentionedText","useAppAddress","ActionCard","useList","CompactTable","useOwnStatus","uiFromModule","useAdminMeta","Segmented","createLucideIcon","cn","__iconData","Phone","dayBefore","day","sameChatDay","a","zone","b","chatDayLabel","time","today","now","import_jsx_runtime","ChatDivider","shown","label","line","tone","RecordLink","rest","display","around","name","resource","row","recordKey","import_react","signedInUserOf","state","useSignedInUser","useRecordCallAddress","joining","address","target","to","open","href","RecordCall","useRecordCalls","client","queryClient","key","query","queryKey","channel","offCalls","message","offStatus","status","call","CallMark","isPending","ongoing","join","className","count","box","carouselSlides","images","image","Carousel","slides","carousel","fit","Choices","options","option","value","onChange","usePickedLabels","sorted","ids","view","RecordPicker","resources","props","views","known","setKnown","fetched","labelOf","remember","current","chosen"],"sources":["../../../../../node_modules/.bun/lucide-react@1.52.0+0ac650c021fb1b59/node_modules/lucide-react/dist/esm/icons/phone.mjs","../../../src/chat/chat-day.ts","../../../src/chat/chat-divider.tsx","../../../src/app/displays/record-link.tsx","../../../src/auth/use-signed-in-user.ts","../../../src/calls/use-record-call-address.ts","../../../src/calls/record-call.tsx","../../../src/calls/use-record-calls.ts","../../../src/calls/call-mark.tsx","../../../src/carousel/carousel-images.ts","../../../src/carousel/carousel.tsx","../../../src/primitives/choices.tsx","../../../src/app/use-picked-labels.ts","../../../src/app/record-picker.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.52.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"phone\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384\",\n key: \"9njp5v\"\n }\n ]\n ]\n};\n__iconData.node;\nconst Phone = createLucideIcon(__iconData);\n\nexport { __iconData, Phone as default };\n//# sourceMappingURL=phone.mjs.map\n","import { formatWeekdayDate } from '../format/date'\nimport { dayIn, viewerZone } from '../format/zone'\nimport { text } from './messages'\n\nconst dayBefore = (day: string) => new Date(Date.parse(`${day}T00:00:00Z`) - 86_400_000).toISOString().slice(0, 10)\n\n/** Whether two ISO timestamps fall on the same day in `zone`, the viewer's unless given: a day divider goes between two messages that do not. */\nexport const sameChatDay = (a: string, b: string, zone = viewerZone()) => dayIn(Date.parse(a), zone) === dayIn(Date.parse(b), zone)\n\n/** The label of the divider above a day's first message, sent at `time`: \"Today\", \"Yesterday\" or \"Mon, 26 Oct 2026\", as the viewer's calendar in `zone` has it. */\nexport const chatDayLabel = (time: string, now = Date.now(), zone = viewerZone()) => {\n const day = dayIn(Date.parse(time), zone)\n const today = dayIn(now, zone)\n if (day === today) return text('today')\n if (day === dayBefore(today)) return text('yesterday')\n return formatWeekdayDate(Date.parse(`${day}T00:00:00Z`))\n}\n","import { cn } from '../lib/cn'\nimport { text } from './messages'\n\nexport type ChatDividerProps =\n /** A muted line between the messages of two days, labelled with the later one, such as by `chatDayLabel`. */\n | { tone?: 'day'; label: string }\n /** A line above the first message the reader has not seen, \"New messages\" unless labelled otherwise. */\n | { tone: 'new'; label?: string }\n\n/**\n * A line across a chat with a label in its middle, between the messages of two days or above the new ones. Marked\n * `data-chat-divider`, so a thread keeps the reader's place on the message below it, not on the divider.\n */\nexport const ChatDivider = ({ tone = 'day', label }: ChatDividerProps) => {\n const shown = label ?? text('newMessages')\n const line = cn('h-px flex-1', tone === 'new' ? 'bg-danger' : 'bg-border')\n return (\n <div role=\"separator\" aria-label={shown} data-tone={tone} data-chat-divider=\"\" className=\"flex items-center gap-3 text-xs font-medium\">\n <span className={line} />\n <span className={tone === 'new' ? 'text-danger' : 'text-muted-foreground'}>{shown}</span>\n <span className={line} />\n </div>\n )\n}\n","import type { AnchorHTMLAttributes } from 'react'\nimport type { KeyValue } from '@protobase/schema'\nimport { useLayoutRecord } from '../pages/record-scope'\nimport { AppLink } from '../use-app-address'\nimport { useOptionalListDisplay } from './display-context'\nimport type { ListDisplayRow } from './list-displays'\n\ntype Target = { row: ListDisplayRow; resource?: never; recordKey?: never } | { row?: never; resource?: string; recordKey: KeyValue | readonly KeyValue[] }\n\n/**\n * A link to a record's page, through the app's addresses: a list display's `row`, or a `recordKey` of `resource`. The\n * resource defaults to the list display's or the record's around it, so a custom component never writes a path.\n */\nexport const RecordLink = ({ row, resource, recordKey, ...rest }: AnchorHTMLAttributes<HTMLAnchorElement> & Target) => {\n const display = useOptionalListDisplay()\n const around = useLayoutRecord()\n const name = resource ?? display?.resource ?? around?.model.name\n if (name === undefined) throw new Error('RecordLink needs a resource outside a list display or a record')\n return <AppLink to={{ kind: 'record', resource: name, key: row ? row.key : recordKey }} {...rest} />\n}\n","import { useMemo } from 'react'\nimport { useOptionalAuth, type AuthState } from './auth-provider'\n\n/** Who is signed in: their user id, the id `.author()` stores and mentions hold, and their name. */\nexport type SignedInUser = { id: string; name?: string }\n\n/** The signed-in person of an auth state; none while it loads, for a visitor, and before the sign-in finished. */\nexport const signedInUserOf = (state: AuthState | undefined): SignedInUser | undefined => {\n if (state?.kind !== 'signed-in') return\n const { id, name } = state.user\n return { id, ...(name && { name }) }\n}\n\n/**\n * The signed-in person, from the session the app already holds, such as for a filter on their own user id;\n * `undefined` while the session loads, for a visitor and when nobody is signed in.\n */\nexport const useSignedInUser = (): SignedInUser | undefined => {\n const state = useOptionalAuth()?.state\n return useMemo(() => signedInUserOf(state), [state])\n}\n","import { useAppAddress } from '../app/use-app-address'\n\n/**\n * A record's call as the app's address holds it: whether the page joins it (`call=join`), the link that joins it, as a\n * ring's Accept and a call mark's Join open it, and the link back to the record without the call, as Leave opens it.\n */\nexport const useRecordCallAddress = (resource: string, recordKey: string) => {\n const { address, href, open } = useAppAddress()\n const joining = address?.kind === 'record' && address.resource === resource && address.key === recordKey && address.call === 'join'\n const target = (to: string) => ({ href: to, onFollow: () => open(to) })\n return { joining, join: target(href({ kind: 'record', resource, key: recordKey, call: 'join' })), leave: target(href({ kind: 'record', resource, key: recordKey })) }\n}\n","import { CallView, type CallViewProps } from './call-view'\nimport { useRecordCallAddress } from './use-record-call-address'\n\nexport type RecordCallProps = Omit<CallViewProps, 'leave'> & { resource: string; recordKey: string }\n\n/**\n * The record's call view while the app's address joins it (`call=join`, as Accept and Join open it), and nothing\n * otherwise: put it beside the record's own content, such as on a full-area record page. Leave goes back to the record.\n */\nexport const RecordCall = ({ resource, recordKey, ...rest }: RecordCallProps) => {\n const { joining, leave } = useRecordCallAddress(resource, recordKey)\n if (!joining) return null\n return <CallView key={`${resource}/${recordKey}`} leave={leave} {...rest} />\n}\n","import { useQuery, useQueryClient } from '@tanstack/react-query'\nimport { useEffect } from 'react'\nimport type { RecordCall } from '@protobase/client'\nimport { callsChannelEvent } from '@protobase/schema/internal'\nimport { useClient } from '../data/api-provider'\nimport { keys } from '../data/query-keys'\n\n/**\n * A record's latest calls, the one going on first, kept current over the record's channel, on the one socket the page\n * shares for every channel it holds: the server sends the calls there whenever they change, so following a record's\n * calls opens no connection of its own on a page that holds a channel already. Read again whenever the channel joins,\n * as after a lost connection.\n */\nexport const useRecordCalls = (resource: string, recordKey: string) => {\n const client = useClient()\n const queryClient = useQueryClient()\n const key = keys.recordCalls(resource, recordKey)\n const query = useQuery({ queryKey: key, queryFn: () => client.calls(resource, recordKey) })\n\n useEffect(() => {\n const queryKey = keys.recordCalls(resource, recordKey)\n const channel = client.channel(resource, recordKey)\n // Only the server's own message: anyone on the channel can broadcast under the same event.\n const offCalls = channel.on(callsChannelEvent, (message) => message.server && queryClient.setQueryData<RecordCall[]>(queryKey, (message.payload as { items: RecordCall[] }).items))\n const offStatus = channel.onStatus((status) => status.state === 'joined' && void queryClient.invalidateQueries({ queryKey }))\n return () => {\n offCalls()\n offStatus()\n channel.leave()\n }\n }, [client, queryClient, resource, recordKey])\n\n return { ...query, ongoing: query.data?.find((call) => call.ended_at === null) }\n}\n","import { Phone } from 'lucide-react'\nimport { cn } from '../lib/cn'\nimport { buttonClass } from '../primitives/button'\nimport { RouteLink } from '../primitives/route-link'\nimport { text } from './messages'\nimport { useRecordCalls } from './use-record-calls'\nimport { useRecordCallAddress } from './use-record-call-address'\n\nexport type CallMarkProps = { resource: string; recordKey: string; className?: string }\n\n/**\n * A record's call, for the app to place where it wants, such as a conversation's header: Start call while there is\n * none, and \"Call in progress · 3 · Join\" while one goes on, live. Start call and Join are links to the record's page\n * that joins its call (`call=join`); on that page itself, Join is left out.\n */\nexport const CallMark = ({ resource, recordKey, className }: CallMarkProps) => {\n const { ongoing, isPending } = useRecordCalls(resource, recordKey)\n const { joining, join } = useRecordCallAddress(resource, recordKey)\n if (isPending) return null\n if (!ongoing) {\n if (joining) return null\n return (\n <RouteLink to={join} className={cn(buttonClass({ size: 'sm' }), className)}>\n <Phone className=\"size-3.5\" />\n {text('startCall')}\n </RouteLink>\n )\n }\n const count = ongoing.members.length\n return (\n <span role=\"status\" className={cn('inline-flex items-center gap-1.5 rounded-md bg-success-soft px-2 py-0.5 text-body text-foreground', className)}>\n <Phone className=\"size-3.5 text-success\" />\n {text('inProgress')}\n <span aria-hidden>·</span>\n <span aria-label={text('people', count)}>{count}</span>\n {!joining && (\n <>\n <span aria-hidden>·</span>\n <RouteLink to={join} className={buttonClass({ variant: 'primary', size: 'sm' })}>\n {text('join')}\n </RouteLink>\n </>\n )}\n </span>\n )\n}\n","import type { StoredFile } from '@protobase/client'\nimport { shownImage } from '../live/file-values'\n\n/** An image a carousel shows: a link with what it shows, or a file field's value, as records carry it. */\nexport type CarouselImage = { src: string; alt: string } | (StoredFile & { alt?: string })\n\n// A frame up to about half a page wide: of a file's variants, the smallest that covers it is drawn, the file itself when none does\nconst box = { width: 640, height: 480 }\n\n/** What each slide draws, in order: a file that is missing or is no raster image is left out. */\nexport const carouselSlides = (images: readonly CarouselImage[]) =>\n images.flatMap((image) => {\n if ('src' in image) return [{ image: { url: image.src }, alt: image.alt }]\n const shown = shownImage(image, box)\n return shown ? [{ image: shown, alt: image.alt ?? '' }] : []\n })\n","import { cn } from '../lib/cn'\nimport { FileImage } from '../live/file-image'\nimport { CarouselControls } from './carousel-controls'\nimport { carouselSlides, type CarouselImage } from './carousel-images'\nimport { CarouselTrack } from './carousel-track'\nimport { useCarousel } from './use-carousel'\n\nexport type CarouselProps = {\n /** The images in order: links with what each shows, or file field values. */\n images: readonly CarouselImage[]\n /** What the images are, read out with the carousel. */\n label?: string\n /** `cover` fills the frame and crops what overflows it, the default; `contain` shows each image whole. */\n fit?: 'cover' | 'contain'\n /** Whether a swipe steps through the images; off, it scrolls what the carousel sits in, such as a row that scrolls sideways. */\n swipe?: boolean\n /** The frame's classes, such as its aspect ratio, border and rounding. */\n className?: string\n}\n\n/**\n * Images side by side in a frame that snaps image by image, swiped on a touch screen or moved by arrows on hover, with\n * dots marking the one in view; the record cards' photos step the same way. A single image shows without arrows or dots.\n */\nexport const Carousel = ({ images, label, fit = 'cover', swipe = true, className }: CarouselProps) => {\n const slides = carouselSlides(images)\n const carousel = useCarousel(slides.length)\n return (\n <div role=\"group\" aria-roledescription=\"carousel\" aria-label={label} className={cn('group/carousel relative overflow-hidden', className)}>\n <CarouselTrack\n data-carousel-track\n carousel={carousel}\n swipe={swipe}\n slides={slides.map(({ image, alt }) => (\n <FileImage image={image} alt={alt} loading=\"lazy\" className={cn('size-full', fit === 'cover' ? 'object-cover' : 'object-contain')} />\n ))}\n />\n <CarouselControls carousel={carousel} count={slides.length} swipe={swipe} reveal=\"group-hover/carousel:opacity-100\" className=\"inset-0\" />\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '../lib/cn'\n\nexport type ChoiceOption<T extends string> = { value: T; label: string; description?: ReactNode; disabled?: boolean }\n\n/**\n * `name` groups the radio buttons, so that the arrow keys move between them; `label` names the group for screen\n * readers. A disabled option shows and cannot be chosen.\n */\nexport type ChoicesProps<T extends string> = { name: string; label?: string; options: Array<ChoiceOption<T>>; value: T | undefined; onChange: (value: T) => void }\n\n/** One of a few options, each a card of its own row with a line that says what it means; the chosen one is outlined. */\nexport const Choices = <T extends string>({ name, label, options, value, onChange }: ChoicesProps<T>) => (\n <div role=\"radiogroup\" aria-label={label} className=\"flex flex-col gap-2\">\n {options.map((option) => (\n <label\n key={option.value}\n className={cn(\n 'block rounded-lg border p-3 transition-colors has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary',\n option.disabled ? 'cursor-default bg-background opacity-60' : option.value === value ? 'cursor-pointer border-primary bg-primary-soft' : 'cursor-pointer bg-background hover:bg-surface',\n )}\n >\n <input type=\"radio\" name={name} value={option.value} checked={option.value === value} disabled={option.disabled} onChange={() => onChange(option.value)} className=\"sr-only\" />\n <span className={cn('block font-medium', option.value === value && 'text-primary-text')}>{option.label}</span>\n {option.description && <span className=\"mt-0.5 block text-xs leading-snug text-muted-foreground\">{option.description}</span>}\n </label>\n ))}\n </div>\n)\n","import { keepPreviousData, useQuery, useQueryClient } from '@tanstack/react-query'\nimport type { ResourceModel, ViewModel } from '@protobase/schema'\nimport { useClient } from '../data/api-provider'\nimport { keys } from '../data/query-keys'\nimport { fetchLabels, type Labels } from '../live/relation-labels'\n\n/** The names of the chosen records, fetched in one list call; the previous names stay while the next ones load. */\nexport const usePickedLabels = (target: ResourceModel, view: ViewModel | undefined, ids: string[]): Labels => {\n const client = useClient()\n const queryClient = useQueryClient()\n const sorted = [...new Set(ids)].sort()\n const labels = useQuery({\n queryKey: keys.pickedLabels(target.name, sorted.join(',')),\n enabled: sorted.length > 0,\n placeholderData: keepPreviousData,\n queryFn: () => fetchLabels(queryClient, client, target, sorted, view),\n })\n return labels.data ?? new Map()\n}\n","import { useState } from 'react'\nimport { Token } from '../primitives/token'\nimport { useAdminMeta } from './meta-gate'\nimport { RelationPicker } from './relation-picker'\nimport { usePickedLabels } from './use-picked-labels'\n\ntype One = {\n multiple?: false\n /** The chosen record's key, as text; `undefined` for none. */\n value: string | undefined\n onChange: (key: string) => void\n}\n\ntype Several = {\n multiple: true\n /** The chosen records' keys, as text. */\n value: string[]\n onChange: (keys: string[]) => void\n}\n\nexport type RecordPickerProps = (One | Several) & {\n /** The name of the resource whose records it picks. */\n resource: string\n invalid?: boolean\n}\n\n/**\n * Picks records of a resource of the app with the create form's relation picker: type to narrow them by their search\n * fields or title, scroll for more, choose with the mouse or the keyboard. With `multiple`, each choice is added as a\n * token that can be taken off again, and choosing a chosen record takes it off.\n */\nexport const RecordPicker = (props: RecordPickerProps) => {\n const { resources, views } = useAdminMeta()\n const target = resources[props.resource]\n if (!target) throw new Error(`RecordPicker: the app has no resource named \"${props.resource}\"`)\n if (target.primaryKey.length !== 1) throw new Error(`RecordPicker: \"${props.resource}\" has a composite key, which a picker cannot name`)\n const view = views[props.resource]\n const keys = props.multiple ? props.value : props.value === undefined ? [] : [props.value]\n // The names of records chosen here, so a choice shows its name before the names are fetched.\n const [known, setKnown] = useState<Record<string, string>>({})\n const fetched = usePickedLabels(target, view, keys)\n const labelOf = (key: string) => known[key] ?? fetched.get(key) ?? key\n const remember = (key: string, label: string) => setKnown((current) => ({ ...current, [key]: label }))\n\n if (!props.multiple) {\n const { value, onChange } = props\n return (\n <RelationPicker\n target={target}\n view={view}\n value={value ?? ''}\n label={value === undefined ? undefined : labelOf(value)}\n invalid={props.invalid}\n onChange={(key, label) => {\n remember(key, label)\n onChange(key)\n }}\n />\n )\n }\n\n const { value, onChange } = props\n return (\n <div className=\"flex flex-col gap-2\">\n <RelationPicker\n target={target}\n view={view}\n value=\"\"\n chosen={value}\n several\n invalid={props.invalid}\n onChange={(key, label) => {\n remember(key, label)\n onChange(value.includes(key) ? value.filter((chosen) => chosen !== key) : [...value, key])\n }}\n />\n {value.length > 0 && (\n <div className=\"flex flex-wrap gap-1\">\n {value.map((key) => (\n <Token key={key} label={labelOf(key)} onRemove={() => onChange(value.filter((chosen) => chosen !== key))} />\n ))}\n </div>\n )}\n </div>\n )\n}\n"],"ignoreList":[0],"mappings":"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","debugId":"e26d8b7e-4cc8-4a36-8172-12419c81befa"}
|