@protobase/ui 0.19.5 → 0.19.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/dist/account/account-section.js +2 -2
  2. package/dist/account/account-security-page.js +2 -2
  3. package/dist/account/backup-codes.js +1 -1
  4. package/dist/account/passkeys-section.js +2 -2
  5. package/dist/account/password-dialog.js +1 -1
  6. package/dist/account/sign-in-policy-form.js +2 -2
  7. package/dist/account/sign-in-policy-page.js +2 -2
  8. package/dist/account/sign-in-providers-section.js +1 -1
  9. package/dist/account/staff-sign-in-log.js +3 -3
  10. package/dist/account/two-factor-setup.js +6 -6
  11. package/dist/action-card/action-card.js +1 -1
  12. package/dist/activity-chart/activity-chart.js +2 -2
  13. package/dist/app/delete/dialogs.js +3 -3
  14. package/dist/app/displays/display-controls.js +1 -1
  15. package/dist/app/displays/display-frame.js +1 -1
  16. package/dist/app/displays/list-cards.js +1 -1
  17. package/dist/app/displays/map-display.js +1 -1
  18. package/dist/app/displays/record-card.js +1 -1
  19. package/dist/app/embedded-list/embedded-list.js +2 -2
  20. package/dist/app/error-banner.js +1 -1
  21. package/dist/app/field-editor.js +6 -12
  22. package/dist/app/file-field.js +4 -4
  23. package/dist/app/gallery/lightbox.js +2 -2
  24. package/dist/app/gallery/photo-details.js +1 -1
  25. package/dist/app/import/import-check-step.js +2 -2
  26. package/dist/app/import/import-file-step.js +2 -2
  27. package/dist/app/import/import-mapping-step.js +1 -1
  28. package/dist/app/import/import-result-step.js +2 -2
  29. package/dist/app/import/import-select.js +2 -2
  30. package/dist/app/meta-gate.js +3 -3
  31. package/dist/app/pages/blocks/card-frame.js +4 -4
  32. package/dist/app/pages/blocks/field.js +2 -5
  33. package/dist/app/pages/blocks/stat.js +2 -2
  34. package/dist/app/pages/problem.js +1 -1
  35. package/dist/app/pages/render-node.js +1 -1
  36. package/dist/app/record-page.js +2 -2
  37. package/dist/app/record-row/record-row-body.js +3 -3
  38. package/dist/app/record-row/saved-record-row.js +1 -1
  39. package/dist/app/related-section.js +1 -1
  40. package/dist/app/relation-picker.js +1 -1
  41. package/dist/app/runtime/runtime-update.js +3 -3
  42. package/dist/app/saved/saved-list.js +1 -1
  43. package/dist/app/searches/saved-search-rows.js +2 -2
  44. package/dist/app/searches/saved-search-section.js +1 -1
  45. package/dist/app/searches/saved-searches.js +1 -1
  46. package/dist/app/searches/search-controls.js +2 -2
  47. package/dist/app/searches/search-name-dialog.js +1 -1
  48. package/dist/app/searches/update-search-dialog.js +16 -19
  49. package/dist/app/sensitive-field.js +1 -1
  50. package/dist/app/source-notice.js +3 -3
  51. package/dist/app/staff-banner.js +1 -1
  52. package/dist/app-shell/breadcrumb.js +1 -1
  53. package/dist/app-shell/global-search.js +1 -1
  54. package/dist/app-shell/page-header.js +1 -1
  55. package/dist/app-shell/profile-menu.js +3 -3
  56. package/dist/app-shell/sidebar-group.js +1 -1
  57. package/dist/app-shell/sidebar-item.js +1 -1
  58. package/dist/app-shell/sidebar.js +2 -2
  59. package/dist/assistant-dock/part-view.js +1 -4
  60. package/dist/assistant-dock/widget-view.js +1 -4
  61. package/dist/auth/auth-gate.js +2 -2
  62. package/dist/auth/auth-layout.js +1 -1
  63. package/dist/auth/code-form.js +2 -2
  64. package/dist/auth/first-run-page.js +1 -1
  65. package/dist/auth/forgot-password-form.js +2 -2
  66. package/dist/auth/provider-sign-in-page.js +1 -1
  67. package/dist/auth/reset-password-form.js +3 -3
  68. package/dist/auth/setup-required-form.js +2 -2
  69. package/dist/auth/setup-required-page.js +1 -1
  70. package/dist/auth/sign-in-form.js +5 -5
  71. package/dist/auth/sign-in-prompt.js +2 -2
  72. package/dist/auth/sign-up-details-form.js +3 -3
  73. package/dist/auth/sign-up-email-form.js +4 -4
  74. package/dist/auth/staff-sign-in-form.js +3 -3
  75. package/dist/auth/two-factor-form.js +5 -5
  76. package/dist/chat/chat-message.js +1 -1
  77. package/dist/chat/chat-thread.js +1 -1
  78. package/dist/data-grid/grid-row.js +1 -1
  79. package/dist/data-grid/header-menu.js +1 -1
  80. package/dist/data-grid/row-menu.js +1 -1
  81. package/dist/filter-panel/facet-combobox.js +1 -1
  82. package/dist/filter-panel/filter-menu.js +1 -1
  83. package/dist/filter-panel/filter-panel.js +2 -2
  84. package/dist/inline-child-table/line-menu.js +1 -1
  85. package/dist/inline-child-table/line-row.js +4 -4
  86. package/dist/inline-child-table/number-cell.js +1 -1
  87. package/dist/inline-child-table/totals-footer.js +2 -2
  88. package/dist/organizations/app-roles-picker.js +1 -1
  89. package/dist/organizations/invitation-page.js +3 -3
  90. package/dist/organizations/invitations-page.js +2 -2
  91. package/dist/organizations/members-page.js +2 -2
  92. package/dist/organizations/organization-page.js +1 -1
  93. package/dist/organizations/organizations-page.js +2 -2
  94. package/dist/package.js +1 -1
  95. package/dist/plugins/before-sign-in.js +1 -1
  96. package/dist/plugins/plugin-gate.js +1 -1
  97. package/dist/plugins/plugin-notice.js +1 -1
  98. package/dist/primitives/button.js +1 -1
  99. package/dist/primitives/dialog.js +2 -2
  100. package/dist/primitives/input.js +1 -1
  101. package/dist/primitives/menu-select.js +2 -2
  102. package/dist/primitives/responsive-dialog.js +1 -1
  103. package/dist/primitives/segmented.js +1 -1
  104. package/dist/primitives/sheet.js +1 -1
  105. package/dist/primitives/textarea.js +1 -1
  106. package/dist/record-view/action-rail.js +1 -1
  107. package/dist/record-view/field.js +1 -1
  108. package/dist/record-view/key-facts.js +2 -2
  109. package/dist/record-view/record-sidebar.js +2 -2
  110. package/dist/record-view/section.js +2 -2
  111. package/dist/record-view/spec-table.js +1 -1
  112. package/dist/shell/assets/{app-CZ4drn7G.js → app-DwKzLvfm.js} +7 -7
  113. package/dist/shell/assets/index-CwhnZIJp.css +2 -0
  114. package/dist/shell/assets/{index-BzCCIfII.js → index-Dqgcyg7M.js} +1 -1
  115. package/dist/shell/assets/{maplibre-BOsAtlAo.js → maplibre-BWjNhvrH.js} +1 -1
  116. package/dist/shell/assets/{record-map-BK_02Lmk.js → record-map-m5K2uttt.js} +1 -1
  117. package/dist/shell/assets/{records-map-Dn72A_l-.js → records-map-CA_JG9RR.js} +1 -1
  118. package/dist/shell/assets/{shared-protobase-ui-B6lrj7eA.js → shared-protobase-ui-BBqKlVLh.js} +1 -1
  119. package/dist/shell/index.html +4 -4
  120. package/dist/shell/protobase.shell.json +1 -1
  121. package/dist/side-panel/side-panel.js +1 -1
  122. package/dist/step-list/step-list.js +1 -1
  123. package/dist/styles.css +1 -1
  124. package/dist/theme.css +2 -0
  125. package/dist/toasts/toast.js +2 -2
  126. package/package.json +4 -4
  127. package/dist/shell/assets/index-BoeKjvo8.css +0 -2
@@ -8,12 +8,12 @@ const AccountSection = ({ title, status, description, children }) => /* @__PURE_
8
8
  /* @__PURE__ */ jsxs("div", {
9
9
  className: "flex flex-wrap items-center gap-2",
10
10
  children: [/* @__PURE__ */ jsx("h2", {
11
- className: "text-[15px] font-semibold",
11
+ className: "text-[16px] font-semibold",
12
12
  children: title
13
13
  }), status]
14
14
  }),
15
15
  /* @__PURE__ */ jsx("p", {
16
- className: "mt-1 text-[13px] text-muted-foreground",
16
+ className: "mt-1 text-muted-foreground",
17
17
  children: description
18
18
  }),
19
19
  children && /* @__PURE__ */ jsx("div", {
@@ -69,10 +69,10 @@ const AccountSecurityPage = ({ email }) => {
69
69
  })
70
70
  ] }) : error ? /* @__PURE__ */ jsx("p", {
71
71
  role: "alert",
72
- className: "text-[13px] text-danger-text",
72
+ className: "text-danger-text",
73
73
  children: error
74
74
  }) : /* @__PURE__ */ jsxs("div", {
75
- className: "flex items-center gap-2 text-[13px] text-muted-foreground",
75
+ className: "flex items-center gap-2 text-muted-foreground",
76
76
  children: [/* @__PURE__ */ jsx(Spinner, {}), " Loading"]
77
77
  })]
78
78
  });
@@ -12,7 +12,7 @@ const BackupCodes = ({ codes }) => {
12
12
  className: "flex flex-col gap-3",
13
13
  children: [/* @__PURE__ */ jsx("ul", {
14
14
  "aria-label": "Backup codes",
15
- className: "grid grid-cols-2 gap-x-4 gap-y-1 rounded-md border bg-surface p-3 font-mono text-[13px]",
15
+ className: "grid grid-cols-2 gap-x-4 gap-y-1 rounded-md border bg-surface p-3 font-mono",
16
16
  children: codes.map((code) => /* @__PURE__ */ jsx("li", { children: code }, code))
17
17
  }), /* @__PURE__ */ jsxs("div", {
18
18
  className: "flex flex-wrap gap-2",
@@ -51,7 +51,7 @@ const PasskeysSection = ({ rule, passkeys, onAdd, onRename, onRemove }) => {
51
51
  /* @__PURE__ */ jsxs("span", {
52
52
  className: "min-w-0 flex-1",
53
53
  children: [/* @__PURE__ */ jsx("span", {
54
- className: "block truncate text-[13px] font-medium",
54
+ className: "block truncate font-medium",
55
55
  children: passkey.name ?? "Passkey"
56
56
  }), /* @__PURE__ */ jsxs("span", {
57
57
  className: "block text-xs text-muted-foreground",
@@ -110,7 +110,7 @@ const PasskeysSection = ({ rule, passkeys, onAdd, onRename, onRemove }) => {
110
110
  children: "Save"
111
111
  })] }),
112
112
  children: [/* @__PURE__ */ jsxs("label", {
113
- className: "flex flex-col gap-1.5 text-[13px] font-medium",
113
+ className: "flex flex-col gap-1.5 font-medium",
114
114
  children: ["Name", /* @__PURE__ */ jsx(Input, {
115
115
  autoFocus: true,
116
116
  value: name,
@@ -37,7 +37,7 @@ const PasswordDialog = ({ title, description, confirmLabel, danger, needsPasswor
37
37
  children: confirmLabel
38
38
  })] }),
39
39
  children: [needsPassword && /* @__PURE__ */ jsxs("label", {
40
- className: "flex flex-col gap-1.5 text-[13px] font-medium",
40
+ className: "flex flex-col gap-1.5 font-medium",
41
41
  children: ["Your password", /* @__PURE__ */ jsx(Input, {
42
42
  type: "password",
43
43
  autoComplete: "current-password",
@@ -59,11 +59,11 @@ const SignInPolicyForm = ({ state, onSave, busy, error, notice }) => {
59
59
  className: "min-w-0",
60
60
  children: [
61
61
  /* @__PURE__ */ jsx("h2", {
62
- className: "text-[13px] font-semibold",
62
+ className: "font-semibold",
63
63
  children: row.label
64
64
  }),
65
65
  /* @__PURE__ */ jsx("p", {
66
- className: "mt-0.5 text-[13px] text-muted-foreground",
66
+ className: "mt-0.5 text-muted-foreground",
67
67
  children: row.description
68
68
  }),
69
69
  note && /* @__PURE__ */ jsx("p", {
@@ -60,10 +60,10 @@ const SignInPolicyPage = () => {
60
60
  onSave: (policy) => void save(policy)
61
61
  }, state.savedAt ?? "default"), state.operator && /* @__PURE__ */ jsx(StaffSignIns, { operator: state.operator })] }) : error ? /* @__PURE__ */ jsx("p", {
62
62
  role: "alert",
63
- className: "text-[13px] text-danger-text",
63
+ className: "text-danger-text",
64
64
  children: error
65
65
  }) : /* @__PURE__ */ jsxs("div", {
66
- className: "flex items-center gap-2 text-[13px] text-muted-foreground",
66
+ className: "flex items-center gap-2 text-muted-foreground",
67
67
  children: [/* @__PURE__ */ jsx(Spinner, {}), " Loading"]
68
68
  })]
69
69
  });
@@ -32,7 +32,7 @@ const SignInProvidersSection = ({ providers, linked, onConnect, error: returned
32
32
  children: [
33
33
  /* @__PURE__ */ jsx(Link2, { className: "size-4 shrink-0 text-muted-foreground" }),
34
34
  /* @__PURE__ */ jsx("span", {
35
- className: "min-w-0 flex-1 truncate text-[13px] font-medium",
35
+ className: "min-w-0 flex-1 truncate font-medium",
36
36
  children: provider.name
37
37
  }),
38
38
  linked.includes(provider.id) ? /* @__PURE__ */ jsx(Badge, {
@@ -20,7 +20,7 @@ const StaffSignInLog = ({ signIns, operator, error, now = Date.now() }) => /* @_
20
20
  children: [
21
21
  /* @__PURE__ */ jsx(SectionError, { message: error }),
22
22
  signIns && signIns.length === 0 && /* @__PURE__ */ jsx("p", {
23
- className: "text-[13px] text-muted-foreground",
23
+ className: "text-muted-foreground",
24
24
  children: "No staff has signed in as anyone yet."
25
25
  }),
26
26
  signIns && signIns.length > 0 && /* @__PURE__ */ jsx("ul", {
@@ -29,7 +29,7 @@ const StaffSignInLog = ({ signIns, operator, error, now = Date.now() }) => /* @_
29
29
  className: "flex flex-col gap-1.5 p-3",
30
30
  children: [
31
31
  /* @__PURE__ */ jsxs("div", {
32
- className: "flex flex-wrap items-center gap-x-2 gap-y-1 text-[13px]",
32
+ className: "flex flex-wrap items-center gap-x-2 gap-y-1",
33
33
  children: [
34
34
  /* @__PURE__ */ jsx("span", {
35
35
  className: "font-medium break-all",
@@ -46,7 +46,7 @@ const StaffSignInLog = ({ signIns, operator, error, now = Date.now() }) => /* @_
46
46
  ]
47
47
  }),
48
48
  /* @__PURE__ */ jsx("p", {
49
- className: "text-[13px] break-words",
49
+ className: "break-words",
50
50
  children: entry.reason
51
51
  }),
52
52
  /* @__PURE__ */ jsxs("div", {
@@ -65,7 +65,7 @@ const TwoFactorSetup = ({ offerEmailedCodes, needsPassword, onStartApp, onConfir
65
65
  className: "flex flex-col gap-4",
66
66
  children: [
67
67
  /* @__PURE__ */ jsx("p", {
68
- className: "text-[13px] text-muted-foreground",
68
+ className: "text-muted-foreground",
69
69
  children: "Two-factor authentication is on. Keep these backup codes somewhere safe: each one signs you in once if you lose your phone. They are not shown again."
70
70
  }),
71
71
  /* @__PURE__ */ jsx(BackupCodes, { codes: step.codes }),
@@ -85,7 +85,7 @@ const TwoFactorSetup = ({ offerEmailedCodes, needsPassword, onStartApp, onConfir
85
85
  },
86
86
  children: [
87
87
  /* @__PURE__ */ jsx("p", {
88
- className: "text-[13px] text-muted-foreground",
88
+ className: "text-muted-foreground",
89
89
  children: "Scan this code with your authenticator app, then enter the 6-digit code it shows."
90
90
  }),
91
91
  /* @__PURE__ */ jsxs("div", {
@@ -96,13 +96,13 @@ const TwoFactorSetup = ({ offerEmailedCodes, needsPassword, onStartApp, onConfir
96
96
  }), /* @__PURE__ */ jsxs("p", {
97
97
  className: "text-center text-xs text-muted-foreground",
98
98
  children: ["Can't scan it? Enter this key in the app:", /* @__PURE__ */ jsx("span", {
99
- className: "mt-1 block break-all font-mono text-[13px] text-foreground",
99
+ className: "mt-1 block break-all font-mono text-body text-foreground",
100
100
  children: totpKey(step.setup.totpURI)
101
101
  })]
102
102
  })]
103
103
  }),
104
104
  /* @__PURE__ */ jsxs("label", {
105
- className: "flex flex-col gap-1.5 text-[13px] font-medium",
105
+ className: "flex flex-col gap-1.5 font-medium",
106
106
  children: ["Code from the app", /* @__PURE__ */ jsx(OtpInput, {
107
107
  name: "code",
108
108
  required: true,
@@ -147,7 +147,7 @@ const TwoFactorSetup = ({ offerEmailedCodes, needsPassword, onStartApp, onConfir
147
147
  onClick: () => setChoice(option.value),
148
148
  className: cn("rounded-md border p-3 text-left transition-colors", choice === option.value ? "border-primary bg-primary-soft" : "border-border-strong hover:bg-muted"),
149
149
  children: [/* @__PURE__ */ jsx("span", {
150
- className: "block text-[13px] font-medium",
150
+ className: "block font-medium",
151
151
  children: option.label
152
152
  }), /* @__PURE__ */ jsx("span", {
153
153
  className: "mt-0.5 block text-xs text-muted-foreground",
@@ -156,7 +156,7 @@ const TwoFactorSetup = ({ offerEmailedCodes, needsPassword, onStartApp, onConfir
156
156
  }, option.value))
157
157
  }),
158
158
  needsPassword && /* @__PURE__ */ jsxs("label", {
159
- className: "flex flex-col gap-1.5 text-[13px] font-medium",
159
+ className: "flex flex-col gap-1.5 font-medium",
160
160
  children: ["Your password", /* @__PURE__ */ jsx(Input, {
161
161
  type: "password",
162
162
  name: "password",
@@ -38,7 +38,7 @@ const ActionCard = ({ title, tone = "neutral", badge, note, actions = [], onActi
38
38
  !frameless && /* @__PURE__ */ jsxs("header", {
39
39
  className: cn("flex items-center gap-2 px-3 py-2", frames[tone].header),
40
40
  children: [/* @__PURE__ */ jsx("h3", {
41
- className: "min-w-0 flex-1 text-[13px] font-semibold",
41
+ className: "min-w-0 flex-1 font-semibold",
42
42
  children: title
43
43
  }), badge && /* @__PURE__ */ jsx("span", {
44
44
  className: "shrink-0 text-xs font-medium",
@@ -29,11 +29,11 @@ const ActivityChart = ({ title = "Orders created", noun = "orders", defaultGranu
29
29
  className: "flex items-baseline gap-2",
30
30
  children: [
31
31
  /* @__PURE__ */ jsx("h2", {
32
- className: "text-[13px] font-semibold",
32
+ className: "font-semibold",
33
33
  children: title
34
34
  }),
35
35
  /* @__PURE__ */ jsx("span", {
36
- className: "text-[13px] font-semibold tabular-nums",
36
+ className: "font-semibold tabular-nums",
37
37
  children: formatInt(totalCount(series))
38
38
  }),
39
39
  /* @__PURE__ */ jsxs("span", {
@@ -32,10 +32,10 @@ const ConflictDialog = ({ title, changes, busy, onReview, onDeleteAnyway, onCanc
32
32
  children: "Delete anyway"
33
33
  })] }),
34
34
  children: changes.length === 0 ? /* @__PURE__ */ jsx("p", {
35
- className: "text-[13px] text-muted-foreground",
35
+ className: "text-muted-foreground",
36
36
  children: "No visible fields differ; the record was saved again with the same values."
37
37
  }) : /* @__PURE__ */ jsx("ul", {
38
- className: "divide-y rounded-md border text-[13px]",
38
+ className: "divide-y rounded-md border",
39
39
  children: changes.map((change) => /* @__PURE__ */ jsxs("li", {
40
40
  className: "grid grid-cols-[96px_1fr] gap-3 px-3 py-2",
41
41
  children: [/* @__PURE__ */ jsx("span", {
@@ -91,7 +91,7 @@ const BulkDeleteDialog = (props) => {
91
91
  children: "Done"
92
92
  }),
93
93
  children: props.failures.length > 0 && /* @__PURE__ */ jsx("ul", {
94
- className: "max-h-48 divide-y overflow-y-auto rounded-md border text-[13px]",
94
+ className: "max-h-48 divide-y overflow-y-auto rounded-md border",
95
95
  children: props.failures.map((failure) => /* @__PURE__ */ jsxs("li", {
96
96
  className: "px-3 py-2",
97
97
  children: [/* @__PURE__ */ jsx("span", {
@@ -54,7 +54,7 @@ const SortMenu = ({ model, view, display, orderBy, onChange, className }) => {
54
54
  "aria-label": "Sort",
55
55
  value: `${current.columnId} ${current.direction}`,
56
56
  onChange: (event) => onChange(event.target.value),
57
- className: cn("h-8 rounded-md border border-border-strong bg-background px-2.5 text-[13px] shadow-sm focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20", className),
57
+ className: cn("h-8 rounded-md border border-border-strong bg-background px-2.5 shadow-sm focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20", className),
58
58
  children: names.flatMap((name) => directions.map(([direction, word]) => /* @__PURE__ */ jsxs("option", {
59
59
  value: `${name} ${direction}`,
60
60
  children: [
@@ -9,7 +9,7 @@ const DisplayState = ({ list, empty, loading, children }) => /* @__PURE__ */ jsx
9
9
  title: "Could not load rows",
10
10
  error: list.error
11
11
  }) : list.rows.length === 0 ? /* @__PURE__ */ jsx("p", {
12
- className: "py-8 text-center text-[13px] text-muted-foreground",
12
+ className: "py-8 text-center text-muted-foreground",
13
13
  children: empty
14
14
  }) : children
15
15
  });
@@ -25,7 +25,7 @@ const ListCards = ({ model, view, display, list }) => {
25
25
  error: list.error
26
26
  });
27
27
  if (!list.source || list.source.total === 0) return /* @__PURE__ */ jsxs("p", {
28
- className: "py-8 text-center text-[13px] text-muted-foreground",
28
+ className: "py-8 text-center text-muted-foreground",
29
29
  children: [
30
30
  "No ",
31
31
  plural.toLowerCase(),
@@ -102,7 +102,7 @@ const MapDisplay = ({ model, view, display, filter, orderBy, fields, at, onMove,
102
102
  empty && /* @__PURE__ */ jsx("div", {
103
103
  className: "pointer-events-none absolute inset-x-3 top-3 z-10 flex justify-center",
104
104
  children: /* @__PURE__ */ jsxs("p", {
105
- className: "pointer-events-auto flex items-center gap-3 rounded-full border border-border bg-background px-4 py-1.5 text-[13px] text-muted-foreground shadow",
105
+ className: "pointer-events-auto flex items-center gap-3 rounded-full border border-border bg-background px-4 py-1.5 text-muted-foreground shadow",
106
106
  role: "status",
107
107
  children: [fitting ? `No ${plural} match.` : `No ${plural} in this part of the map.`, !fitting && /* @__PURE__ */ jsx(Button, {
108
108
  size: "sm",
@@ -141,7 +141,7 @@ const RecordCard = ({ model, view, display, row, swipe = true, mark }) => {
141
141
  resource: model.name,
142
142
  key: row.key
143
143
  },
144
- className: "flex h-full flex-col gap-1.5 rounded-lg border border-border bg-background p-3 text-[13px] hover:border-border-strong hover:bg-surface focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30",
144
+ className: "flex h-full flex-col gap-1.5 rounded-lg border border-border bg-background p-3 hover:border-border-strong hover:bg-surface focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30",
145
145
  children: [mark && !pictured && /* @__PURE__ */ jsx(Badge, {
146
146
  tone: "blue",
147
147
  className: "self-start",
@@ -86,7 +86,7 @@ const EmbeddedList = ({ model, view, filter, sort, columns, limit, display, empt
86
86
  display
87
87
  }),
88
88
  onClick: viewAll?.onOpen,
89
- className: "flex items-center gap-1 self-end text-[13px] font-medium text-primary-text hover:underline",
89
+ className: "flex items-center gap-1 self-end font-medium text-primary-text hover:underline",
90
90
  children: [viewAll ? viewAll.label : /* @__PURE__ */ jsxs(Fragment$1, { children: ["View all ", /* @__PURE__ */ jsx("span", {
91
91
  className: "sr-only",
92
92
  children: plural.toLowerCase()
@@ -102,7 +102,7 @@ const EmbeddedList = ({ model, view, filter, sort, columns, limit, display, empt
102
102
  });
103
103
  if (!source || source.total === 0) {
104
104
  const nothing = /* @__PURE__ */ jsx("p", {
105
- className: "text-[13px] text-muted-foreground",
105
+ className: "text-muted-foreground",
106
106
  children: empty ?? "Nothing here yet."
107
107
  });
108
108
  return viewAll && link ? /* @__PURE__ */ jsxs("div", {
@@ -12,7 +12,7 @@ const describe = (error) => {
12
12
  };
13
13
  const ErrorBanner = ({ error, title }) => /* @__PURE__ */ jsxs("div", {
14
14
  role: "alert",
15
- className: "flex gap-2.5 rounded-lg border border-danger/30 bg-danger-soft px-3 py-2 text-[13px] text-danger-text",
15
+ className: "flex gap-2.5 rounded-lg border border-danger/30 bg-danger-soft px-3 py-2 text-danger-text",
16
16
  children: [/* @__PURE__ */ jsx(TriangleAlert, { className: "mt-0.5 size-4 shrink-0" }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
17
17
  className: "font-medium",
18
18
  children: title
@@ -50,7 +50,7 @@ const BuiltInEditor = ({ field, hints, value, stored, relationLabel, relationTo,
50
50
  })
51
51
  });
52
52
  if (field.type === "boolean" && locked) return /* @__PURE__ */ jsx("div", {
53
- className: "py-1.5 text-[13px] text-muted-foreground",
53
+ className: "py-1.5 text-muted-foreground",
54
54
  children: displayValue(field, stored, hints)
55
55
  });
56
56
  if (field.type === "boolean") return /* @__PURE__ */ jsx(Switch, {
@@ -61,7 +61,7 @@ const BuiltInEditor = ({ field, hints, value, stored, relationLabel, relationTo,
61
61
  if (field.type === "relation") {
62
62
  const label = relationLabel ?? String(stored ?? "—");
63
63
  return /* @__PURE__ */ jsx("div", {
64
- className: "py-1.5 text-[13px]",
64
+ className: "py-1.5",
65
65
  children: relationTo ? /* @__PURE__ */ jsx(AppLink, {
66
66
  to: relationTo,
67
67
  className: "font-medium text-primary-text hover:underline",
@@ -71,13 +71,13 @@ const BuiltInEditor = ({ field, hints, value, stored, relationLabel, relationTo,
71
71
  }
72
72
  const multiline = Boolean(hints?.multiline) && field.type === "text";
73
73
  if (!isEditable(field) || locked) return /* @__PURE__ */ jsx("div", {
74
- className: cn("py-1.5 text-[13px] tabular-nums", field.type === "decimal" || field.type === "integer" ? "font-medium" : "text-muted-foreground", multiline && "whitespace-pre-line break-words"),
74
+ className: cn("py-1.5 tabular-nums", field.type === "decimal" || field.type === "integer" ? "font-medium" : "text-muted-foreground", multiline && "whitespace-pre-line break-words"),
75
75
  children: displayValue(field, stored, hints)
76
76
  });
77
77
  if (field.type === "enum") return /* @__PURE__ */ jsxs("select", {
78
78
  value: String(value),
79
79
  onChange: (event) => onChange(event.target.value),
80
- className: "h-8 w-full rounded-md border border-border-strong bg-background px-2 text-[13px] shadow-sm focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20",
80
+ className: "h-8 w-full rounded-md border border-border-strong bg-background px-2 shadow-sm focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20",
81
81
  children: [value === "" && /* @__PURE__ */ jsx("option", {
82
82
  value: "",
83
83
  children: "Choose..."
@@ -94,14 +94,8 @@ const BuiltInEditor = ({ field, hints, value, stored, relationLabel, relationTo,
94
94
  });
95
95
  return /* @__PURE__ */ jsx(Input, {
96
96
  invalid,
97
- leading: hints?.prefix ? /* @__PURE__ */ jsx("span", {
98
- className: "text-[13px]",
99
- children: hints.prefix
100
- }) : void 0,
101
- trailing: hints?.suffix ? /* @__PURE__ */ jsx("span", {
102
- className: "text-[13px]",
103
- children: hints.suffix.trim()
104
- }) : void 0,
97
+ leading: hints?.prefix ? /* @__PURE__ */ jsx("span", { children: hints.prefix }) : void 0,
98
+ trailing: hints?.suffix ? /* @__PURE__ */ jsx("span", { children: hints.suffix.trim() }) : void 0,
105
99
  placeholder,
106
100
  className: cn(numeric.has(field.type) && "text-right tabular-nums"),
107
101
  value: String(value),
@@ -27,11 +27,11 @@ const Thumbnail = ({ value }) => {
27
27
  const FileSummary = ({ value }) => {
28
28
  const shown = fileShown(value);
29
29
  if (!shown) return /* @__PURE__ */ jsx("div", {
30
- className: "py-1.5 text-[13px] text-muted-foreground",
30
+ className: "py-1.5 text-muted-foreground",
31
31
  children: "—"
32
32
  });
33
33
  if ("missing" in shown) return /* @__PURE__ */ jsx("div", {
34
- className: "py-1.5 text-[13px] text-danger-text",
34
+ className: "py-1.5 text-danger-text",
35
35
  children: "The file is missing from storage"
36
36
  });
37
37
  const url = "url" in shown ? shown.url : void 0;
@@ -39,7 +39,7 @@ const FileSummary = ({ value }) => {
39
39
  return /* @__PURE__ */ jsxs("div", {
40
40
  className: "flex min-w-0 items-center gap-3 py-1",
41
41
  children: [/* @__PURE__ */ jsx(Thumbnail, { value }), /* @__PURE__ */ jsxs("div", {
42
- className: "min-w-0 text-[13px]",
42
+ className: "min-w-0",
43
43
  children: [url && !url.startsWith("blob:") ? /* @__PURE__ */ jsx("a", {
44
44
  href: url,
45
45
  target: "_blank",
@@ -158,7 +158,7 @@ const FileField = ({ field, hints, resource, value, locked, invalid, onChange })
158
158
  },
159
159
  onDragLeave: () => setDragging(false),
160
160
  onDrop: drop,
161
- className: cn("flex items-center gap-3 rounded-md border border-dashed px-3 py-2.5 text-[13px] text-muted-foreground", dragging ? "border-primary bg-primary/5" : invalid ? "border-danger" : "border-border-strong"),
161
+ className: cn("flex items-center gap-3 rounded-md border border-dashed px-3 py-2.5 text-muted-foreground", dragging ? "border-primary bg-primary/5" : invalid ? "border-danger" : "border-border-strong"),
162
162
  children: [
163
163
  /* @__PURE__ */ jsx(Upload, { className: "size-4 shrink-0" }),
164
164
  /* @__PURE__ */ jsx("span", {
@@ -77,7 +77,7 @@ const Lightbox = ({ title, photos, index, onIndex, onClose, details, detailsTitl
77
77
  children: [/* @__PURE__ */ jsxs("div", {
78
78
  className: "flex shrink-0 items-center justify-between gap-2 p-3",
79
79
  children: [/* @__PURE__ */ jsx("span", {
80
- className: "rounded-full bg-background/85 px-3 py-1 text-[13px] font-medium tabular-nums text-foreground",
80
+ className: "rounded-full bg-background/85 px-3 py-1 font-medium tabular-nums text-foreground",
81
81
  "aria-live": "polite",
82
82
  children: `${index + 1} / ${count}`
83
83
  }), /* @__PURE__ */ jsxs("div", {
@@ -141,7 +141,7 @@ const Lightbox = ({ title, photos, index, onIndex, onClose, details, detailsTitl
141
141
  "aria-label": detailsTitle,
142
142
  className: "min-h-dvh w-[360px] shrink-0 border-l border-border bg-background p-5 text-foreground",
143
143
  children: [/* @__PURE__ */ jsx("h2", {
144
- className: "mb-3 text-[15px] font-semibold",
144
+ className: "mb-3 text-[16px] font-semibold",
145
145
  children: detailsTitle
146
146
  }), shownDetails]
147
147
  }),
@@ -34,7 +34,7 @@ const PhotoDetails = ({ model, view, photoKey, fields }) => {
34
34
  resource: model.name,
35
35
  key: photoKey
36
36
  },
37
- className: "mt-3 inline-block text-[13px] font-medium text-primary-text hover:underline",
37
+ className: "mt-3 inline-block font-medium text-primary-text hover:underline",
38
38
  children: `Open ${singular}`
39
39
  })] });
40
40
  };
@@ -37,7 +37,7 @@ const ProblemList = ({ rows }) => /* @__PURE__ */ jsxs("ul", {
37
37
  })]
38
38
  });
39
39
  const ImportChecking = ({ rows }) => /* @__PURE__ */ jsxs("p", {
40
- className: "flex items-center gap-2 text-[13px] text-muted-foreground",
40
+ className: "flex items-center gap-2 text-muted-foreground",
41
41
  role: "status",
42
42
  children: [
43
43
  /* @__PURE__ */ jsx(Spinner, { className: "size-3.5" }),
@@ -54,7 +54,7 @@ const ImportCheckStep = ({ check, model, resources, views, columns, headers, fil
54
54
  const view = views[model.name];
55
55
  const shown = columns.map((column) => model.fields[column.field]);
56
56
  return /* @__PURE__ */ jsxs("div", {
57
- className: "flex flex-col gap-4 text-[13px]",
57
+ className: "flex flex-col gap-4",
58
58
  children: [
59
59
  /* @__PURE__ */ jsx(ImportCounts, {
60
60
  label: "Check",
@@ -8,7 +8,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
8
8
  const ImportFileStep = ({ file, sheets, sheet, reading, onChoose, onSheet }) => {
9
9
  const id = useId();
10
10
  return /* @__PURE__ */ jsxs("div", {
11
- className: "flex flex-col gap-4 text-[13px]",
11
+ className: "flex flex-col gap-4",
12
12
  children: [
13
13
  /* @__PURE__ */ jsxs("div", {
14
14
  className: "flex flex-col gap-1.5",
@@ -27,7 +27,7 @@ const ImportFileStep = ({ file, sheets, sheet, reading, onChoose, onSheet }) =>
27
27
  const chosen = event.target.files?.[0];
28
28
  if (chosen) onChoose(chosen);
29
29
  },
30
- className: "text-[13px] file:mr-3 file:h-8 file:rounded-md file:border file:border-border-strong file:bg-background file:px-3 file:font-medium file:text-foreground max-sm:file:min-h-11"
30
+ className: "file:mr-3 file:h-8 file:rounded-md file:border file:border-border-strong file:bg-background file:px-3 file:font-medium file:text-foreground max-sm:file:min-h-11"
31
31
  }),
32
32
  /* @__PURE__ */ jsx("p", {
33
33
  className: "text-xs text-muted-foreground",
@@ -48,7 +48,7 @@ const ImportMappingStep = ({ flow, model, resources, views, canUpdate }) => {
48
48
  }));
49
49
  const keys = matchFields(model);
50
50
  return /* @__PURE__ */ jsxs("div", {
51
- className: "flex flex-col gap-5 text-[13px]",
51
+ className: "flex flex-col gap-5",
52
52
  children: [
53
53
  canUpdate && /* @__PURE__ */ jsxs("div", {
54
54
  className: "flex flex-col gap-1.5",
@@ -10,7 +10,7 @@ const count = (value) => value.toLocaleString("en-IE");
10
10
  const ImportProgressStep = ({ progress, total, cancelling }) => {
11
11
  const done = progress.created + progress.updated + progress.failed;
12
12
  return /* @__PURE__ */ jsxs("div", {
13
- className: "flex flex-col gap-2 text-[13px]",
13
+ className: "flex flex-col gap-2",
14
14
  children: [/* @__PURE__ */ jsxs("div", {
15
15
  className: "flex items-baseline justify-between gap-2 text-xs",
16
16
  children: [/* @__PURE__ */ jsx("span", {
@@ -40,7 +40,7 @@ const ImportProgressStep = ({ progress, total, cancelling }) => {
40
40
  };
41
41
  /** What the import did: created, updated, skipped and failed rows, and the rows it did not write with the reasons, to download. */
42
42
  const ImportSummary = ({ result, stopped, headers, fileName }) => /* @__PURE__ */ jsxs("div", {
43
- className: "flex flex-col gap-4 text-[13px]",
43
+ className: "flex flex-col gap-4",
44
44
  children: [
45
45
  stopped !== void 0 && /* @__PURE__ */ jsx(ErrorBanner, {
46
46
  title: "The import stopped. The rows counted below were saved.",
@@ -10,7 +10,7 @@ const ImportSelect = ({ label, name, value, options, onChange, help, className }
10
10
  children: [
11
11
  /* @__PURE__ */ jsx("label", {
12
12
  htmlFor: id,
13
- className: "text-[13px] font-medium",
13
+ className: "font-medium",
14
14
  children: label
15
15
  }),
16
16
  /* @__PURE__ */ jsx("select", {
@@ -18,7 +18,7 @@ const ImportSelect = ({ label, name, value, options, onChange, help, className }
18
18
  "aria-label": name,
19
19
  value,
20
20
  onChange: (event) => onChange(event.target.value),
21
- className: "h-8 w-full min-w-0 rounded-md border border-border-strong bg-background px-2 text-[13px] shadow-sm focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20 max-sm:min-h-11",
21
+ className: "h-8 w-full min-w-0 rounded-md border border-border-strong bg-background px-2 shadow-sm focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20 max-sm:min-h-11",
22
22
  children: options.map((option) => /* @__PURE__ */ jsx("option", {
23
23
  value: option.value,
24
24
  children: option.label
@@ -19,10 +19,10 @@ const Notice = ({ title, children }) => /* @__PURE__ */ jsx("div", {
19
19
  children: /* @__PURE__ */ jsxs("div", {
20
20
  className: "max-w-md text-center",
21
21
  children: [/* @__PURE__ */ jsx("h1", {
22
- className: "text-[15px] font-semibold",
22
+ className: "text-[16px] font-semibold",
23
23
  children: title
24
24
  }), /* @__PURE__ */ jsx("p", {
25
- className: "mt-1 text-[13px] text-muted-foreground",
25
+ className: "mt-1 text-muted-foreground",
26
26
  children
27
27
  })]
28
28
  })
@@ -69,7 +69,7 @@ const WithSources = ({ meta, children }) => {
69
69
  const MetaGate = ({ children }) => {
70
70
  const meta = useMeta();
71
71
  if (meta.isPending) return /* @__PURE__ */ jsxs("div", {
72
- className: "flex h-full min-h-48 items-center justify-center gap-2 text-[13px] text-muted-foreground",
72
+ className: "flex h-full min-h-48 items-center justify-center gap-2 text-muted-foreground",
73
73
  children: [/* @__PURE__ */ jsx(Spinner, {}), " Loading"]
74
74
  });
75
75
  if (meta.error) return /* @__PURE__ */ jsx(Notice, {
@@ -10,10 +10,10 @@ const CardFrame = ({ title, description, actions, className, bodyClassName, chil
10
10
  children: [/* @__PURE__ */ jsxs("div", {
11
11
  className: "min-w-0",
12
12
  children: [title && /* @__PURE__ */ jsx("h2", {
13
- className: "text-[15px] font-semibold tracking-tight",
13
+ className: "text-[16px] font-semibold tracking-tight",
14
14
  children: title
15
15
  }), description && /* @__PURE__ */ jsx("p", {
16
- className: "mt-0.5 text-[13px] text-muted-foreground",
16
+ className: "mt-0.5 text-muted-foreground",
17
17
  children: description
18
18
  })]
19
19
  }), actions && /* @__PURE__ */ jsx("div", {
@@ -21,13 +21,13 @@ const CardFrame = ({ title, description, actions, className, bodyClassName, chil
21
21
  children: actions
22
22
  })]
23
23
  }), /* @__PURE__ */ jsx("div", {
24
- className: cn("min-w-0 flex-1 p-4 text-[13px]", bodyClassName),
24
+ className: cn("min-w-0 flex-1 p-4", bodyClassName),
25
25
  children
26
26
  })]
27
27
  });
28
28
  /** A short line in place of content: nothing to show, or not loaded yet. */
29
29
  const Quiet = ({ children }) => /* @__PURE__ */ jsx("p", {
30
- className: "text-[13px] text-muted-foreground",
30
+ className: "text-muted-foreground",
31
31
  children
32
32
  });
33
33
  //#endregion
@@ -25,10 +25,7 @@ const FieldBlock = ({ node }) => {
25
25
  value: value.value,
26
26
  format
27
27
  });
28
- if (label === false) return /* @__PURE__ */ jsx("div", {
29
- className: "text-[13px]",
30
- children: shown
31
- });
28
+ if (label === false) return /* @__PURE__ */ jsx("div", { children: shown });
32
29
  const text = label ?? fieldLabel(name, value.state === "ready" ? views[value.model.name]?.fields[value.field.name]?.label : void 0);
33
30
  return /* @__PURE__ */ jsxs("div", {
34
31
  className: "min-w-0",
@@ -36,7 +33,7 @@ const FieldBlock = ({ node }) => {
36
33
  className: "text-xs text-muted-foreground",
37
34
  children: text
38
35
  }), /* @__PURE__ */ jsx("div", {
39
- className: "mt-0.5 truncate text-[13px]",
36
+ className: "mt-0.5 truncate",
40
37
  children: shown
41
38
  })]
42
39
  });
@@ -14,7 +14,7 @@ const Count = ({ model, filter }) => {
14
14
  const count = useCount(model, filter);
15
15
  if (count.isPending) return /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-16" });
16
16
  if (count.error) return /* @__PURE__ */ jsx("span", {
17
- className: "text-[13px] text-danger-text",
17
+ className: "text-danger-text",
18
18
  children: "Could not count"
19
19
  });
20
20
  return /* @__PURE__ */ jsx(AppLink, {
@@ -54,7 +54,7 @@ const StatBlock = ({ node }) => {
54
54
  bodyClassName: "flex flex-col",
55
55
  children: [
56
56
  /* @__PURE__ */ jsx("p", {
57
- className: "text-[13px] text-muted-foreground break-words",
57
+ className: "text-muted-foreground break-words",
58
58
  children: label
59
59
  }),
60
60
  /* @__PURE__ */ jsxs("div", {
@@ -3,7 +3,7 @@ import { jsx } from "react/jsx-runtime";
3
3
  /** A warning in place of something the app cannot draw, such as a component no one registered. */
4
4
  const Problem = ({ children }) => /* @__PURE__ */ jsx("div", {
5
5
  role: "alert",
6
- className: "rounded-lg border border-dashed border-warning bg-warning-soft p-3 text-[13px] text-warning-text",
6
+ className: "rounded-lg border border-dashed border-warning bg-warning-soft p-3 text-warning-text",
7
7
  children
8
8
  });
9
9
  //#endregion
@@ -49,7 +49,7 @@ const renderChildren = (children) => {
49
49
  const [first] = run;
50
50
  if (!isInline(first)) return /* @__PURE__ */ jsx(RenderNode, { node: first }, index);
51
51
  return /* @__PURE__ */ jsx("p", {
52
- className: "text-[13px] leading-relaxed",
52
+ className: "leading-6",
53
53
  children: run.map((child, position) => typeof child === "string" ? /* @__PURE__ */ jsx(Fragment, { children: child }, position) : /* @__PURE__ */ jsx(RenderNode, { node: child }, position))
54
54
  }, index);
55
55
  });