@codecavepro/brand 2.3.0 → 2.4.2

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/README.md CHANGED
@@ -97,7 +97,7 @@ Get the cuts from [Fontshare](https://www.fontshare.com/fonts/satoshi) — 300,
97
97
  700 and 900, each upright and italic, which is the ten faces these stylesheets declare.
98
98
  Bind each with a real `font-weight` descriptor rather than letting the browser
99
99
  synthesize; the design system documents why in
100
- [DESIGN.md §10.3](https://github.com/CodeCavePro/brand/blob/development/docs/DESIGN.md#103-synthesized-vs-real-font-weights).
100
+ [DESIGN.md §10.3](https://github.com/CodeCavePro/brand/blob/development/DESIGN.md#103-synthesized-vs-real-font-weights).
101
101
 
102
102
  **Do not use the `stylesheet.css` that comes in the Fontshare download.** It declares
103
103
  Bold and Black _both_ as `font-weight: bold`, and their italics likewise, so four cuts
@@ -155,7 +155,7 @@ Two things to know about it:
155
155
 
156
156
  ## The components
157
157
 
158
- 20 components and 13 icons — the buttons, the form controls and the forms
158
+ 21 components and 13 icons — the buttons, the form controls and the forms
159
159
  themselves, the nav bar, the footer link group, the article and technology
160
160
  cards, the review card and the typing effect codecave.pro renders — ship as
161
161
  **source**, byte-for-byte the files the site builds from. Not a reimplementation
@@ -308,7 +308,7 @@ the rules, the reasoning, the anti-patterns — is documented separately:
308
308
 
309
309
  - **[brand.codecave.pro](https://brand.codecave.pro/)** — the published design system:
310
310
  brand kit, foundation specimens, and a storybook of real components.
311
- - **[DESIGN.md](https://github.com/CodeCavePro/brand/blob/development/docs/DESIGN.md)** —
311
+ - **[DESIGN.md](https://github.com/CodeCavePro/brand/blob/development/DESIGN.md)** —
312
312
  the rules in full: the 26-step ramp, components, motion, anti-patterns, known
313
313
  divergences from what the site ships today.
314
314
  - **[CodeCavePro/brand](https://github.com/CodeCavePro/brand)** — the repository.
@@ -32,12 +32,12 @@ const imageUrl = (url: string) => props.resolveImage?.(url) ?? url
32
32
 
33
33
  <template>
34
34
  <a :href="`${basePath ?? ''}${article.slug}/`" :class="`mx-1 lg:mx-2 w-full h-full self-start sm:self-auto p-6 flex flex-col gap-5 sm:gap-8
35
- rounded-[2.25rem] bg-surface-secondary hover:bg-surface-secondary transition-colors cursor-pointer border-surface-tertiary border
35
+ rounded-[2.25rem] bg-surface-secondary hover:bg-surface-tertiary transition-colors cursor-pointer border-surface-tertiary border
36
36
  ${className ?? ''}`">
37
37
  <div class="flex flex-col sm:flex-row gap-5 sm:gap-8 h-fit">
38
38
  <img loading="lazy" class="sm:w-[132px] sm:h-[132px] rounded-xl object-cover"
39
39
  :src="imageUrl(article.cover.url)"
40
- :alt="article.cover.name"
40
+ :alt="article.title"
41
41
  :width="100"
42
42
  :height="100"/>
43
43
  <div class="space-y-2 sm:space-y-3">
@@ -229,7 +229,7 @@ withDefaults(defineProps<{
229
229
  visibility: hidden;
230
230
  border-radius: 1rem;
231
231
  padding: 1.25rem;
232
- background: var(--color-surface-primary-transparent);
232
+ background: var(--color-surface-primary);
233
233
  -webkit-backdrop-filter: blur(24px);
234
234
  backdrop-filter: blur(24px);
235
235
  transition: opacity 0.2s ease, visibility 0.2s;
@@ -29,7 +29,7 @@ const variantClass = computed(() => {
29
29
  case 'link':
30
30
  return `${linkBaseClass} text-hovered underline`
31
31
  default:
32
- return `${buttonBaseClass} bg-primary-500 hover:bg-primary-700 active:bg-primary-900`
32
+ return `${buttonBaseClass} px-6 py-1 bg-primary-500 hover:bg-primary-700 active:bg-primary-900`
33
33
  }
34
34
  })
35
35
  </script>
@@ -5,21 +5,25 @@ const props = defineProps<{
5
5
  id: string
6
6
  label: string
7
7
  name: string
8
- isChecked?: boolean
9
8
  modelValue?: string
10
9
  variant?: 'primary' | 'secondary'
11
10
  }>()
11
+
12
+ const emit = defineEmits<{'update:modelValue': [value: string]}>()
13
+
12
14
  const baseLabelClass = 'w-fit flex items-center cursor-pointer text-body-primary transition-colors'
15
+
13
16
  const labelClass = computed(() => {
14
17
  switch (props.variant) {
15
18
  case 'secondary':
16
- return `${baseLabelClass} gap-3 p-3 pr-4 bg-surface-primary-transparent rounded-custom border-2 border-surface-quaternary group-hover:bg-surface-tertiary`
19
+ return `${baseLabelClass} gap-3 p-3 pr-4 bg-surface-primary-transparent rounded-custom border-2 border-surface-quaternary hover:bg-surface-tertiary`
17
20
  default:
18
21
  return `${baseLabelClass} gap-2 py-2 px-3 bg-surface-secondary rounded-lg`
19
22
  }
20
23
  })
21
24
 
22
- defineEmits(['update:modelValue'])
25
+ const value = computed(() => props.id)
26
+ const isChecked = computed(() => props.modelValue === value.value)
23
27
  </script>
24
28
 
25
29
  <template>
@@ -28,13 +32,13 @@ defineEmits(['update:modelValue'])
28
32
  :class="[labelClass]"
29
33
  >
30
34
  <input
31
- type="radio"
32
- :id="id"
33
- :name="name"
34
- :value="id"
35
- class="bg-transparent border-[2px] border-surface-quaternary checked:border-action rounded-full hover:border-action"
36
- :checked="isChecked"
37
- @change="$emit('update:modelValue', id)"
35
+ :id="id"
36
+ type="radio"
37
+ :name="name"
38
+ :value="value"
39
+ class="bg-transparent border-[2px] border-surface-quaternary checked:border-action rounded-full hover:border-action"
40
+ :checked="isChecked"
41
+ @change="emit('update:modelValue', value)"
38
42
  />
39
43
  <span class="text-xs whitespace-nowrap">
40
44
  {{ label }}
@@ -0,0 +1,26 @@
1
+ <script setup lang="ts">
2
+ import Button from "../common/Button.vue";
3
+ </script>
4
+
5
+ <template>
6
+ <section
7
+ class="p-8 md:p-10 flex flex-col md:flex-row items-center justify-between gap-12 md:gap-7 rounded-3xl bg-primary-800"
8
+ >
9
+ <div class="flex-1">
10
+ <h3 class="text-heading font-bold text-[32px]">
11
+ Grab our AI trends research!
12
+ </h3>
13
+
14
+ <p class="md:mt-1 mt-4 text-body-secondary-lighter text-pretty">
15
+ We’ve researched current state of the AI in 3 industries so you don’t have to.
16
+ <br>
17
+ Check what we’ve found about yours.
18
+ </p>
19
+ </div>
20
+
21
+ <Button
22
+ title="Grab Research"
23
+ class="px-6"
24
+ />
25
+ </section>
26
+ </template>
@@ -1,13 +1,10 @@
1
1
  <script setup lang="ts">
2
2
  import Button from "../common/Button.vue";
3
+ import { computed } from 'vue'
3
4
 
4
- defineProps<{
5
+ const props = defineProps<{
5
6
  active: boolean
6
7
  name: string
7
- /* Where "Explore service" goes. The card used to switch on `name` over this
8
- * site's six service routes; that map is now @helpers/service-links.ts and
9
- * the caller passes the result, so the card reaches no route table. An empty
10
- * string renders the button inert, exactly as the switch's default did. */
11
8
  href?: string
12
9
  className?: string
13
10
  index?: number
@@ -30,11 +27,24 @@ const translate = [
30
27
  'xl:-translate-y-1/2',
31
28
  'xl:-translate-y-1/2',
32
29
  ]
30
+
31
+ const cardClass = computed(() => [
32
+ 'rounded-3xl',
33
+ 'card-wrapper',
34
+ 'cursor-pointer',
35
+ 'select-none',
36
+ 'absolute',
37
+ 'transform',
38
+ 'transition-transform',
39
+ 'duration-500',
40
+ props.index !== undefined ? rotate[props.index] : '',
41
+ props.index !== undefined && props.active ? translate[props.index] : '',
42
+ props.className,
43
+ ])
33
44
  </script>
34
45
 
35
46
  <template>
36
- <div :class="`rounded-3xl card-wrapper cursor-pointer select-none absolute transform transition-transform duration-500
37
- ${rotate[index]} ${active ? `${translate[index]}` : ''} ${className || ''}`">
47
+ <div :class="cardClass">
38
48
  <div class="card flex flex-col items-center justify-around">
39
49
  <h3 class="max-w-[8rem] text-center text-xl font-bold text-heading text-balance">
40
50
  {{ name }}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codecavepro/brand",
3
- "version": "2.3.0",
3
+ "version": "2.4.2",
4
4
  "description": "CODECAVE design system — colour, typography and layout tokens as CSS custom properties and as a typed module.",
5
5
  "license": "Unlicense",
6
6
  "type": "module",