nucleus-core-ts 0.9.801 → 0.9.802

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.
@@ -14,42 +14,47 @@ export function ConnectionBasicFields({ draft, errors, disabled, onChange }) {
14
14
  const labels = useLabels();
15
15
  return /*#__PURE__*/ _jsxs("section", {
16
16
  "aria-label": labels.connectionForm.sectionLabel,
17
- className: "flex flex-col gap-3",
17
+ className: "flex flex-col gap-4",
18
18
  children: [
19
- /*#__PURE__*/ _jsx(Field, {
20
- error: errors.name,
21
- htmlFor: "connection-name",
22
- label: labels.connectionForm.name,
23
- children: /*#__PURE__*/ _jsx("input", {
24
- "aria-describedby": describedBy('connection-name', false, Boolean(errors.name)),
25
- className: theme.field.input,
26
- disabled: disabled,
27
- id: "connection-name",
28
- onChange: (event)=>onChange({
29
- name: event.target.value
30
- }),
31
- placeholder: labels.connectionForm.namePlaceholder,
32
- type: "text",
33
- value: draft.name
34
- })
35
- }),
36
- /*#__PURE__*/ _jsx(Field, {
37
- error: errors.slug,
38
- hint: labels.connectionForm.slugHint,
39
- htmlFor: "connection-slug",
40
- label: labels.connectionForm.slug,
41
- children: /*#__PURE__*/ _jsx("input", {
42
- "aria-describedby": describedBy('connection-slug', true, Boolean(errors.slug)),
43
- className: theme.field.input,
44
- disabled: disabled,
45
- id: "connection-slug",
46
- onChange: (event)=>onChange({
47
- slug: event.target.value
48
- }),
49
- placeholder: "hr-service",
50
- type: "text",
51
- value: draft.slug
52
- })
19
+ /*#__PURE__*/ _jsxs("div", {
20
+ className: "grid grid-cols-1 gap-4 sm:grid-cols-2",
21
+ children: [
22
+ /*#__PURE__*/ _jsx(Field, {
23
+ error: errors.name,
24
+ htmlFor: "connection-name",
25
+ label: labels.connectionForm.name,
26
+ children: /*#__PURE__*/ _jsx("input", {
27
+ "aria-describedby": describedBy('connection-name', false, Boolean(errors.name)),
28
+ className: theme.field.input,
29
+ disabled: disabled,
30
+ id: "connection-name",
31
+ onChange: (event)=>onChange({
32
+ name: event.target.value
33
+ }),
34
+ placeholder: labels.connectionForm.namePlaceholder,
35
+ type: "text",
36
+ value: draft.name
37
+ })
38
+ }),
39
+ /*#__PURE__*/ _jsx(Field, {
40
+ error: errors.slug,
41
+ hint: labels.connectionForm.slugHint,
42
+ htmlFor: "connection-slug",
43
+ label: labels.connectionForm.slug,
44
+ children: /*#__PURE__*/ _jsx("input", {
45
+ "aria-describedby": describedBy('connection-slug', true, Boolean(errors.slug)),
46
+ className: theme.field.input,
47
+ disabled: disabled,
48
+ id: "connection-slug",
49
+ onChange: (event)=>onChange({
50
+ slug: event.target.value
51
+ }),
52
+ placeholder: "hr-service",
53
+ type: "text",
54
+ value: draft.slug
55
+ })
56
+ })
57
+ ]
53
58
  }),
54
59
  /*#__PURE__*/ _jsx(Field, {
55
60
  error: errors.baseUrl,
@@ -86,58 +91,63 @@ export function ConnectionBasicFields({ draft, errors, disabled, onChange }) {
86
91
  })
87
92
  }),
88
93
  /*#__PURE__*/ _jsxs("div", {
89
- className: theme.field.wrapper,
94
+ className: "grid grid-cols-1 gap-4 sm:grid-cols-2",
90
95
  children: [
91
- /*#__PURE__*/ _jsxs("label", {
92
- className: cn(theme.field.label, 'flex items-center gap-2'),
93
- htmlFor: "connection-enabled",
96
+ /*#__PURE__*/ _jsxs("div", {
97
+ className: cn(theme.field.wrapper, 'rounded-xl border border-slate-200 p-3 dark:border-slate-800'),
94
98
  children: [
95
- /*#__PURE__*/ _jsx("input", {
96
- "aria-describedby": "connection-enabled-hint",
97
- checked: draft.enabled,
98
- className: CHECKBOX,
99
- disabled: disabled,
100
- id: "connection-enabled",
101
- onChange: (event)=>onChange({
102
- enabled: event.target.checked
99
+ /*#__PURE__*/ _jsxs("label", {
100
+ className: cn(theme.field.label, 'flex items-center gap-2 normal-case tracking-normal text-slate-700 text-sm dark:text-slate-200'),
101
+ htmlFor: "connection-enabled",
102
+ children: [
103
+ /*#__PURE__*/ _jsx("input", {
104
+ "aria-describedby": "connection-enabled-hint",
105
+ checked: draft.enabled,
106
+ className: CHECKBOX,
107
+ disabled: disabled,
108
+ id: "connection-enabled",
109
+ onChange: (event)=>onChange({
110
+ enabled: event.target.checked
111
+ }),
112
+ type: "checkbox"
103
113
  }),
104
- type: "checkbox"
114
+ labels.connectionForm.enabled
115
+ ]
105
116
  }),
106
- labels.connectionForm.enabled
117
+ /*#__PURE__*/ _jsx("span", {
118
+ className: theme.field.hint,
119
+ id: "connection-enabled-hint",
120
+ children: labels.connectionForm.enabledHint
121
+ })
107
122
  ]
108
123
  }),
109
- /*#__PURE__*/ _jsx("span", {
110
- className: theme.field.hint,
111
- id: "connection-enabled-hint",
112
- children: labels.connectionForm.enabledHint
113
- })
114
- ]
115
- }),
116
- /*#__PURE__*/ _jsxs("div", {
117
- className: theme.field.wrapper,
118
- children: [
119
- /*#__PURE__*/ _jsxs("label", {
120
- className: cn(theme.field.label, 'flex items-center gap-2'),
121
- htmlFor: "connection-tls-verify",
124
+ /*#__PURE__*/ _jsxs("div", {
125
+ className: cn(theme.field.wrapper, 'rounded-xl border border-slate-200 p-3 dark:border-slate-800'),
122
126
  children: [
123
- /*#__PURE__*/ _jsx("input", {
124
- "aria-describedby": "connection-tls-verify-hint",
125
- checked: draft.tlsVerify,
126
- className: CHECKBOX,
127
- disabled: disabled,
128
- id: "connection-tls-verify",
129
- onChange: (event)=>onChange({
130
- tlsVerify: event.target.checked
127
+ /*#__PURE__*/ _jsxs("label", {
128
+ className: cn(theme.field.label, 'flex items-center gap-2 normal-case tracking-normal text-slate-700 text-sm dark:text-slate-200'),
129
+ htmlFor: "connection-tls-verify",
130
+ children: [
131
+ /*#__PURE__*/ _jsx("input", {
132
+ "aria-describedby": "connection-tls-verify-hint",
133
+ checked: draft.tlsVerify,
134
+ className: CHECKBOX,
135
+ disabled: disabled,
136
+ id: "connection-tls-verify",
137
+ onChange: (event)=>onChange({
138
+ tlsVerify: event.target.checked
139
+ }),
140
+ type: "checkbox"
131
141
  }),
132
- type: "checkbox"
142
+ labels.connectionForm.tlsVerify
143
+ ]
133
144
  }),
134
- labels.connectionForm.tlsVerify
145
+ /*#__PURE__*/ _jsx("span", {
146
+ className: theme.field.hint,
147
+ id: "connection-tls-verify-hint",
148
+ children: draft.tlsVerify ? labels.connectionForm.tlsVerifyOnHint : labels.connectionForm.tlsVerifyOffHint
149
+ })
135
150
  ]
136
- }),
137
- /*#__PURE__*/ _jsx("span", {
138
- className: theme.field.hint,
139
- id: "connection-tls-verify-hint",
140
- children: draft.tlsVerify ? labels.connectionForm.tlsVerifyOnHint : labels.connectionForm.tlsVerifyOffHint
141
151
  })
142
152
  ]
143
153
  }),
@@ -7,106 +7,120 @@
7
7
  *
8
8
  * An app can replace any slice of this with {@link extendIntegrationsTheme}
9
9
  * without forking the components.
10
- */ /** Shared so a control and its skeleton cannot drift apart in height. */ const CONTROL = 'h-10 rounded-lg text-sm sm:h-9';
10
+ */ /** Shared so a control and its skeleton cannot drift apart in height. */ const CONTROL = 'h-11 rounded-lg text-sm sm:h-10';
11
+ /**
12
+ * Micro-caps for field labels.
13
+ *
14
+ * A form of twenty identical `text-sm` labels reads as a wall. Making the label
15
+ * smaller and wider-tracked than its value gives every row an obvious top and
16
+ * bottom, which is what lets an eye skip the ones it does not need.
17
+ */ const LABEL = 'font-semibold text-[11px] uppercase tracking-wider';
11
18
  export const integrationsPageTheme = {
12
- container: 'flex flex-col gap-4 text-slate-900 sm:gap-5 dark:text-slate-100',
19
+ container: 'flex flex-col gap-5 text-slate-900 sm:gap-6 dark:text-slate-100',
13
20
  header: {
14
- wrapper: 'flex flex-col gap-2 sm:flex-row sm:items-end sm:justify-between',
15
- title: 'font-semibold text-lg tracking-tight sm:text-xl',
16
- subtitle: 'text-slate-600 text-sm dark:text-slate-400',
21
+ wrapper: 'flex flex-col gap-2 border-slate-200 border-b pb-4 sm:flex-row sm:items-end sm:justify-between dark:border-slate-800',
22
+ title: 'font-bold text-slate-900 text-xl tracking-tight sm:text-2xl dark:text-slate-50',
23
+ subtitle: 'max-w-2xl text-slate-600 text-sm leading-relaxed dark:text-slate-400',
17
24
  actions: 'flex flex-wrap items-center gap-2'
18
25
  },
19
- // One column on a phone; the connection list becomes a rail from lg upward,
20
- // where there is finally room for both without either being cramped.
26
+ // The rail is a chooser, not the work. It gets the narrower column and the
27
+ // detail gets the rest before this they were near enough equal, so a form
28
+ // of twenty fields was squeezed beside a list of one.
21
29
  layout: {
22
- split: 'grid grid-cols-1 gap-4 lg:grid-cols-[minmax(0,20rem)_minmax(0,1fr)] lg:gap-5',
30
+ split: 'grid grid-cols-1 gap-5 lg:grid-cols-[minmax(0,17rem)_minmax(0,1fr)] lg:gap-6',
23
31
  aside: 'flex min-w-0 flex-col gap-3',
24
- main: 'flex min-w-0 flex-col gap-4'
32
+ main: 'flex min-w-0 flex-col gap-4 sm:gap-5'
25
33
  },
34
+ // Cards sit on a tinted page, so a white surface separates on its own instead
35
+ // of relying on a shadow that light mode barely renders.
26
36
  card: {
27
- wrapper: 'rounded-xl border border-slate-200 bg-white shadow-sm dark:border-slate-800 dark:bg-slate-900',
28
- header: 'flex flex-col gap-2 border-slate-200 border-b px-4 py-3 sm:flex-row sm:items-center sm:justify-between dark:border-slate-800',
29
- title: 'font-medium text-slate-900 text-sm dark:text-slate-100',
30
- body: 'flex flex-col gap-3 p-4',
31
- footer: 'flex flex-wrap items-center justify-end gap-2 border-slate-200 border-t px-4 py-3 dark:border-slate-800'
37
+ wrapper: 'overflow-hidden rounded-2xl border border-slate-200/80 bg-white shadow-slate-200/50 shadow-sm dark:border-slate-800 dark:bg-slate-900 dark:shadow-none',
38
+ header: 'flex flex-col gap-2 border-slate-200/80 border-b bg-slate-50/80 px-4 py-3 sm:flex-row sm:items-center sm:justify-between sm:px-5 dark:border-slate-800 dark:bg-slate-950/40',
39
+ title: 'font-semibold text-slate-900 text-sm dark:text-slate-100',
40
+ body: 'flex flex-col gap-4 p-4 sm:gap-5 sm:p-5',
41
+ footer: 'flex flex-wrap items-center justify-end gap-2 border-slate-200/80 border-t bg-slate-50/80 px-4 py-3 sm:px-5 dark:border-slate-800 dark:bg-slate-950/40'
32
42
  },
33
43
  list: {
34
44
  wrapper: 'flex flex-col gap-1.5',
35
- item: 'flex w-full flex-col gap-0.5 rounded-lg border border-transparent px-3 py-2.5 text-left transition-colors hover:bg-slate-100 dark:hover:bg-slate-800',
36
- itemSelected: 'border-sky-300 bg-sky-50 hover:bg-sky-50 dark:border-sky-700 dark:bg-sky-950 dark:hover:bg-sky-950',
37
- itemTitle: 'truncate font-medium text-slate-900 text-sm dark:text-slate-100',
45
+ item: 'flex w-full flex-col gap-0.5 rounded-xl border border-transparent px-3 py-2.5 text-left transition-all hover:border-slate-200 hover:bg-white dark:hover:border-slate-700 dark:hover:bg-slate-900',
46
+ // A selected row is the only thing on the rail that carries the accent, so
47
+ // it is legible at a glance from across the screen.
48
+ itemSelected: 'border-sky-400 bg-white shadow-sky-100 shadow-sm hover:border-sky-400 hover:bg-white dark:border-sky-600 dark:bg-slate-900 dark:shadow-none',
49
+ itemTitle: 'truncate font-semibold text-slate-900 text-sm dark:text-slate-100',
38
50
  itemMeta: 'truncate text-slate-500 text-xs dark:text-slate-400',
39
- empty: 'rounded-lg border border-slate-200 border-dashed px-4 py-8 text-center text-slate-500 text-sm dark:border-slate-700 dark:text-slate-400',
51
+ empty: 'rounded-xl border border-slate-300 border-dashed px-4 py-10 text-center text-slate-500 text-sm leading-relaxed dark:border-slate-700 dark:text-slate-400',
40
52
  // Watched by the infinite scroller; the next page is requested when it appears.
41
53
  sentinel: 'h-8 w-full shrink-0'
42
54
  },
43
55
  tabs: {
44
- wrapper: 'flex gap-1 overflow-x-auto rounded-lg border border-slate-200 bg-slate-50 p-1 dark:border-slate-800 dark:bg-slate-900',
45
- button: 'shrink-0 rounded-md px-3 py-1.5 font-medium text-sm transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-sky-500 focus-visible:outline-offset-2',
56
+ wrapper: 'flex gap-1 overflow-x-auto rounded-xl border border-slate-200 bg-slate-50 p-1 dark:border-slate-800 dark:bg-slate-900',
57
+ button: 'shrink-0 rounded-lg px-3 py-1.5 font-medium text-sm transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-sky-500 focus-visible:outline-offset-2',
46
58
  active: 'bg-white text-slate-900 shadow-sm dark:bg-slate-800 dark:text-slate-100',
47
59
  inactive: 'text-slate-600 hover:text-slate-900 dark:text-slate-400 dark:hover:text-slate-100'
48
60
  },
49
61
  // A step is a card, not a tab: it has to carry a name, a sentence saying what
50
62
  // the step is for, and a line of evidence that it is done. Four of those do
51
- // not fit on a phone side by side, so they stack and become a row at sm.
63
+ // not fit on a phone side by side, so they stack and become a row at lg.
52
64
  steps: {
53
65
  intro: 'text-slate-600 text-sm leading-relaxed sm:max-w-3xl dark:text-slate-400',
54
- wrapper: 'grid grid-cols-1 gap-2 sm:grid-cols-2 lg:grid-cols-4',
55
- item: 'flex min-w-0 items-start gap-2.5 rounded-xl border border-slate-200 bg-white px-3 py-2.5 text-left transition-colors hover:border-slate-300 focus-visible:outline focus-visible:outline-2 focus-visible:outline-sky-500 focus-visible:outline-offset-2 dark:border-slate-800 dark:bg-slate-900 dark:hover:border-slate-700',
56
- itemActive: 'border-sky-400 bg-sky-50 ring-1 ring-sky-400 hover:border-sky-400 dark:border-sky-600 dark:bg-sky-950 dark:ring-sky-600',
57
- itemDone: 'border-emerald-200 dark:border-emerald-900',
58
- itemLocked: 'opacity-70',
59
- marker: 'flex size-6 shrink-0 items-center justify-center rounded-full border font-semibold text-[11px] tabular-nums',
60
- markerActive: 'border-sky-500 bg-sky-500 text-white dark:border-sky-500 dark:bg-sky-500',
66
+ wrapper: 'grid grid-cols-1 gap-2.5 sm:grid-cols-2 lg:grid-cols-4',
67
+ item: 'flex min-w-0 items-start gap-3 rounded-2xl border border-slate-200/80 bg-white px-3.5 py-3 text-left shadow-slate-200/40 shadow-sm transition-all hover:border-slate-300 hover:shadow dark:border-slate-800 dark:bg-slate-900 dark:shadow-none dark:hover:border-slate-700',
68
+ itemActive: 'border-sky-400 bg-sky-50/60 ring-1 ring-sky-400 hover:border-sky-400 dark:border-sky-600 dark:bg-sky-950/40 dark:ring-sky-600',
69
+ itemDone: 'border-emerald-200 dark:border-emerald-900/70',
70
+ itemLocked: 'opacity-60',
71
+ marker: 'flex size-7 shrink-0 items-center justify-center rounded-full border font-bold text-[11px] tabular-nums',
72
+ markerActive: 'border-sky-500 bg-sky-500 text-white shadow-sky-200 shadow-sm dark:border-sky-500 dark:bg-sky-500 dark:shadow-none',
61
73
  markerDone: 'border-emerald-300 bg-emerald-100 text-emerald-700 dark:border-emerald-800 dark:bg-emerald-950 dark:text-emerald-400',
62
74
  markerLocked: 'border-slate-200 bg-slate-100 text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-500',
63
- name: 'font-semibold text-slate-900 text-sm dark:text-slate-100',
64
- purpose: 'mt-0.5 text-slate-600 text-xs leading-snug dark:text-slate-400',
65
- evidence: 'mt-1 font-medium text-[11px] text-emerald-700 dark:text-emerald-400'
75
+ name: 'font-semibold text-slate-900 text-sm tracking-tight dark:text-slate-100',
76
+ purpose: 'mt-1 text-slate-600 text-xs leading-relaxed dark:text-slate-400',
77
+ evidence: 'mt-1.5 font-semibold text-[11px] text-emerald-700 dark:text-emerald-400'
66
78
  },
67
79
  field: {
68
80
  wrapper: 'flex flex-col gap-1.5',
69
- label: 'font-medium text-slate-700 text-xs dark:text-slate-300',
70
- input: `w-full border border-slate-300 bg-white px-3 text-slate-900 outline-none transition-colors placeholder:text-slate-400 focus:border-sky-500 focus:ring-2 focus:ring-sky-500/20 disabled:opacity-60 dark:border-slate-700 dark:bg-slate-950 dark:text-slate-100 dark:placeholder:text-slate-500 ${CONTROL}`,
71
- hint: 'text-slate-500 text-xs dark:text-slate-400',
72
- error: 'text-rose-600 text-xs dark:text-rose-400'
81
+ label: `${LABEL} text-slate-500 dark:text-slate-400`,
82
+ input: `w-full border border-slate-300 bg-white px-3 text-slate-900 outline-none transition-all placeholder:text-slate-400 focus:border-sky-500 focus:ring-4 focus:ring-sky-500/15 disabled:opacity-60 dark:border-slate-700 dark:bg-slate-950 dark:text-slate-100 dark:placeholder:text-slate-500 ${CONTROL}`,
83
+ hint: 'text-slate-500 text-xs leading-relaxed dark:text-slate-400',
84
+ error: 'font-medium text-rose-600 text-xs dark:text-rose-400'
73
85
  },
74
86
  button: {
75
- primary: `inline-flex items-center justify-center gap-1.5 bg-sky-600 px-3.5 font-medium text-white transition-colors hover:bg-sky-700 disabled:opacity-50 dark:bg-sky-500 dark:hover:bg-sky-400 dark:text-slate-950 ${CONTROL}`,
76
- secondary: `inline-flex items-center justify-center gap-1.5 border border-slate-300 bg-white px-3.5 font-medium text-slate-700 transition-colors hover:bg-slate-50 disabled:opacity-50 dark:border-slate-700 dark:bg-slate-900 dark:text-slate-200 dark:hover:bg-slate-800 ${CONTROL}`,
77
- ghost: `inline-flex items-center justify-center gap-1.5 px-2.5 font-medium text-slate-600 transition-colors hover:bg-slate-100 hover:text-slate-900 disabled:opacity-50 dark:text-slate-400 dark:hover:bg-slate-800 dark:hover:text-slate-100 ${CONTROL}`,
78
- danger: `inline-flex items-center justify-center gap-1.5 bg-rose-600 px-3.5 font-medium text-white transition-colors hover:bg-rose-700 disabled:opacity-50 dark:bg-rose-600 dark:hover:bg-rose-500 ${CONTROL}`
87
+ primary: `inline-flex items-center justify-center gap-1.5 rounded-lg bg-sky-600 px-4 font-semibold text-white shadow-sky-200 shadow-sm transition-all hover:bg-sky-700 hover:shadow disabled:opacity-50 disabled:shadow-none dark:bg-sky-500 dark:text-slate-950 dark:shadow-none dark:hover:bg-sky-400 ${CONTROL}`,
88
+ secondary: `inline-flex items-center justify-center gap-1.5 rounded-lg border border-slate-300 bg-white px-4 font-semibold text-slate-700 transition-colors hover:border-slate-400 hover:bg-slate-50 disabled:opacity-50 dark:border-slate-700 dark:bg-slate-900 dark:text-slate-200 dark:hover:bg-slate-800 ${CONTROL}`,
89
+ ghost: `inline-flex items-center justify-center gap-1.5 rounded-lg px-3 font-semibold text-slate-600 transition-colors hover:bg-slate-100 hover:text-slate-900 disabled:opacity-50 dark:text-slate-400 dark:hover:bg-slate-800 dark:hover:text-slate-100 ${CONTROL}`,
90
+ danger: `inline-flex items-center justify-center gap-1.5 rounded-lg bg-rose-600 px-4 font-semibold text-white shadow-rose-200 shadow-sm transition-all hover:bg-rose-700 disabled:opacity-50 dark:bg-rose-600 dark:shadow-none dark:hover:bg-rose-500 ${CONTROL}`
79
91
  },
80
92
  badge: {
81
- base: 'inline-flex items-center gap-1 rounded-full border px-2 py-0.5 font-medium text-xs',
82
- neutral: 'border-slate-200 bg-slate-100 text-slate-700 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300',
93
+ base: 'inline-flex items-center gap-1 rounded-full border px-2.5 py-0.5 font-semibold text-[11px]',
94
+ neutral: 'border-slate-200 bg-slate-100 text-slate-600 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300',
83
95
  success: 'border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-800 dark:bg-emerald-950 dark:text-emerald-400',
84
96
  warning: 'border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-800 dark:bg-amber-950 dark:text-amber-400',
85
97
  danger: 'border-rose-200 bg-rose-50 text-rose-700 dark:border-rose-800 dark:bg-rose-950 dark:text-rose-400',
86
98
  info: 'border-sky-200 bg-sky-50 text-sky-700 dark:border-sky-800 dark:bg-sky-950 dark:text-sky-400'
87
99
  },
100
+ // The counts are the point of the preview, so they are the largest type on
101
+ // the screen — before this they were the same size as the labels beneath them.
88
102
  stat: {
89
- grid: 'grid grid-cols-2 gap-2 xs:grid-cols-3 sm:grid-cols-4 lg:grid-cols-6',
90
- cell: 'flex flex-col items-center gap-0.5 rounded-lg border border-slate-200 bg-white px-2 py-3 text-center dark:border-slate-800 dark:bg-slate-900',
91
- value: 'font-semibold text-lg tabular-nums',
92
- label: 'text-[11px] text-slate-500 leading-tight dark:text-slate-400'
103
+ grid: 'grid grid-cols-2 gap-2.5 xs:grid-cols-3 sm:grid-cols-4 lg:grid-cols-6',
104
+ cell: 'flex flex-col items-center gap-1 rounded-xl border border-slate-200/80 bg-white px-2 py-3.5 text-center shadow-slate-200/40 shadow-sm dark:border-slate-800 dark:bg-slate-900 dark:shadow-none',
105
+ value: 'font-bold text-2xl tabular-nums tracking-tight',
106
+ label: `${LABEL} text-slate-500 leading-tight dark:text-slate-400`
93
107
  },
94
108
  notice: {
95
- info: 'rounded-lg border border-sky-200 bg-sky-50 p-3 dark:border-sky-900 dark:bg-sky-950',
96
- warning: 'rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-900 dark:bg-amber-950',
97
- danger: 'rounded-lg border border-rose-200 bg-rose-50 p-3 dark:border-rose-900 dark:bg-rose-950',
98
- title: 'font-medium text-sm',
99
- body: 'mt-0.5 text-sm leading-relaxed opacity-90'
109
+ info: 'rounded-xl border border-sky-200 bg-sky-50 p-3.5 text-sky-900 dark:border-sky-900 dark:bg-sky-950 dark:text-sky-100',
110
+ warning: 'rounded-xl border border-amber-200 bg-amber-50 p-3.5 text-amber-900 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-100',
111
+ danger: 'rounded-xl border border-rose-200 bg-rose-50 p-3.5 text-rose-900 dark:border-rose-900 dark:bg-rose-950 dark:text-rose-100',
112
+ title: 'font-semibold text-sm',
113
+ body: 'mt-1 text-sm leading-relaxed opacity-90'
100
114
  },
101
- code: 'block overflow-x-auto rounded-lg border border-slate-200 bg-slate-50 p-3 font-mono text-[11px] text-slate-700 leading-relaxed sm:text-xs dark:border-slate-800 dark:bg-slate-950 dark:text-slate-300',
115
+ code: 'block max-h-80 overflow-auto rounded-xl border border-slate-200 bg-slate-50 p-3.5 font-mono text-[11px] text-slate-700 leading-relaxed sm:text-xs dark:border-slate-800 dark:bg-slate-950 dark:text-slate-300',
102
116
  skeleton: {
103
- line: 'h-3 animate-pulse rounded bg-slate-200 dark:bg-slate-800',
104
- block: 'animate-pulse rounded-lg bg-slate-200 dark:bg-slate-800'
117
+ line: 'h-3 animate-pulse rounded-full bg-slate-200 dark:bg-slate-800',
118
+ block: 'animate-pulse rounded-xl bg-slate-200 dark:bg-slate-800'
105
119
  },
106
120
  progress: {
107
- track: 'h-1.5 w-full overflow-hidden rounded-full bg-slate-200 dark:bg-slate-800',
121
+ track: 'h-2 w-full overflow-hidden rounded-full bg-slate-200 dark:bg-slate-800',
108
122
  bar: 'h-full rounded-full bg-sky-600 transition-[width] duration-300 ease-out dark:bg-sky-500',
109
- label: 'text-slate-600 text-xs tabular-nums dark:text-slate-400'
123
+ label: 'font-medium text-slate-600 text-xs tabular-nums dark:text-slate-400'
110
124
  }
111
125
  };
112
126
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nucleus-core-ts",
3
- "version": "0.9.801",
3
+ "version": "0.9.802",
4
4
  "description": "Production-ready, enterprise-grade TypeScript framework for building multi-tenant APIs",
5
5
  "author": "Hidayet Can Özcan <hidayetcan@gmail.com>",
6
6
  "license": "SEE LICENSE IN LICENSE",