@nonsuch/component-library 0.1.0 → 0.2.1

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 (44) hide show
  1. package/README.md +40 -0
  2. package/dist/nonsuch-components.css +1 -1
  3. package/dist/nonsuch-components.js +7 -7
  4. package/fonts/_quasar-overrides.sass +12 -0
  5. package/fonts/files/FixelDisplay-Black.woff2 +0 -0
  6. package/fonts/files/FixelDisplay-BlackItalic.woff2 +0 -0
  7. package/fonts/files/FixelDisplay-Bold.woff2 +0 -0
  8. package/fonts/files/FixelDisplay-BoldItalic.woff2 +0 -0
  9. package/fonts/files/FixelDisplay-ExtraBold.woff2 +0 -0
  10. package/fonts/files/FixelDisplay-ExtraBoldItalic.woff2 +0 -0
  11. package/fonts/files/FixelDisplay-ExtraLight.woff2 +0 -0
  12. package/fonts/files/FixelDisplay-ExtraLightItalic.woff2 +0 -0
  13. package/fonts/files/FixelDisplay-Light.woff2 +0 -0
  14. package/fonts/files/FixelDisplay-LightItalic.woff2 +0 -0
  15. package/fonts/files/FixelDisplay-Medium.woff2 +0 -0
  16. package/fonts/files/FixelDisplay-MediumItalic.woff2 +0 -0
  17. package/fonts/files/FixelDisplay-Regular.woff2 +0 -0
  18. package/fonts/files/FixelDisplay-RegularItalic.woff2 +0 -0
  19. package/fonts/files/FixelDisplay-SemiBold.woff2 +0 -0
  20. package/fonts/files/FixelDisplay-SemiBoldItalic.woff2 +0 -0
  21. package/fonts/files/FixelDisplay-Thin.woff2 +0 -0
  22. package/fonts/files/FixelDisplay-ThinItalic.woff2 +0 -0
  23. package/fonts/files/FixelText-Black.woff2 +0 -0
  24. package/fonts/files/FixelText-BlackItalic.woff2 +0 -0
  25. package/fonts/files/FixelText-Bold.woff2 +0 -0
  26. package/fonts/files/FixelText-BoldItalic.woff2 +0 -0
  27. package/fonts/files/FixelText-ExtraBold.woff2 +0 -0
  28. package/fonts/files/FixelText-ExtraBoldItalic.woff2 +0 -0
  29. package/fonts/files/FixelText-ExtraLight.woff2 +0 -0
  30. package/fonts/files/FixelText-ExtraLightItalic.woff2 +0 -0
  31. package/fonts/files/FixelText-Light.woff2 +0 -0
  32. package/fonts/files/FixelText-LightItalic.woff2 +0 -0
  33. package/fonts/files/FixelText-Medium.woff2 +0 -0
  34. package/fonts/files/FixelText-MediumItalic.woff2 +0 -0
  35. package/fonts/files/FixelText-Regular.woff2 +0 -0
  36. package/fonts/files/FixelText-RegularItalic.woff2 +0 -0
  37. package/fonts/files/FixelText-SemiBold.woff2 +0 -0
  38. package/fonts/files/FixelText-SemiBoldItalic.woff2 +0 -0
  39. package/fonts/files/FixelText-Thin.woff2 +0 -0
  40. package/fonts/files/FixelText-ThinItalic.woff2 +0 -0
  41. package/fonts/files/README.md +37 -0
  42. package/fonts/fonts.css +310 -0
  43. package/fonts/global.css +34 -0
  44. package/package.json +8 -4
package/README.md CHANGED
@@ -44,6 +44,42 @@ Then import custom components as needed:
44
44
  import { NsButton } from '@nonsuch/component-library'
45
45
  ```
46
46
 
47
+ ### Fonts (Optional)
48
+
49
+ The library ships [Fixel](https://fixel.macpaw.com/) as the Nonsuch brand font with Roboto as a fallback. Three integration options:
50
+
51
+ **Option 1: Global CSS (recommended)** — makes Fixel the default for your entire app:
52
+
53
+ ```ts
54
+ import '@nonsuch/component-library/fonts/global.css'
55
+ ```
56
+
57
+ This loads all `@font-face` declarations and sets `Fixel Text` on `body` and `Fixel Display` on headings.
58
+
59
+ **Option 2: Font faces only** — load the fonts without applying them globally, then use them where you choose:
60
+
61
+ ```ts
62
+ import '@nonsuch/component-library/fonts.css'
63
+ ```
64
+
65
+ ```css
66
+ .my-element {
67
+ font-family: 'Fixel Text', 'Roboto', sans-serif;
68
+ }
69
+ ```
70
+
71
+ **Option 3: Quasar Sass variables** — integrates with Quasar's typography system:
72
+
73
+ ```sass
74
+ // src/quasar-variables.sass
75
+ @use '@nonsuch/component-library/fonts/quasar-overrides' as *
76
+ ```
77
+
78
+ ```ts
79
+ // vite.config.ts
80
+ quasar({ sassVariables: 'src/quasar-variables.sass' })
81
+ ```
82
+
47
83
  Or use Quasar components directly — they aren't re-exported through this library, so you import them from `quasar` as normal:
48
84
 
49
85
  ```ts
@@ -100,6 +136,10 @@ Each custom component lives in its own directory with co-located story and test
100
136
  - **Vite library mode** — builds to ES modules with externalized `vue` and `quasar`
101
137
  - **TypeScript** — strict mode with emitted `.d.ts` declarations
102
138
 
139
+ ## Contributing
140
+
141
+ Want to add or improve components? Check out [CONTRIBUTING.md](./CONTRIBUTING.md) for a friendly step-by-step guide — no deep Vue experience required!
142
+
103
143
  ## License
104
144
 
105
145
  MIT — see [LICENSE](./LICENSE)
@@ -1 +1 @@
1
- .ns-button[data-v-5eac18a7]{font-weight:500;letter-spacing:.02em}
1
+ .ns-button[data-v-e1d8675d]{font-family:Fixel Text,Roboto,sans-serif;font-weight:500;letter-spacing:.02em}
@@ -1,6 +1,6 @@
1
- import r from "quasar/src/components/btn/QBtn.js";
2
- import { defineComponent as u, openBlock as d, createBlock as l, mergeProps as s, withCtx as c, renderSlot as f } from "vue";
3
- const p = /* @__PURE__ */ u({
1
+ import a from "quasar/src/components/btn/QBtn.js";
2
+ import { defineComponent as d, openBlock as u, createBlock as l, mergeProps as s, withCtx as c, renderSlot as f } from "vue";
3
+ const p = /* @__PURE__ */ d({
4
4
  __name: "NsButton",
5
5
  props: {
6
6
  color: { default: "primary" },
@@ -10,7 +10,7 @@ const p = /* @__PURE__ */ u({
10
10
  rounded: { type: Boolean, default: !0 }
11
11
  },
12
12
  setup(e) {
13
- return (t, o) => (d(), l(r, s(t.$attrs, {
13
+ return (t, o) => (u(), l(a, s(t.$attrs, {
14
14
  color: e.color,
15
15
  size: e.size,
16
16
  unelevated: e.unelevated,
@@ -26,10 +26,10 @@ const p = /* @__PURE__ */ u({
26
26
  }
27
27
  }), i = (e, t) => {
28
28
  const o = e.__vccOpts || e;
29
- for (const [n, a] of t)
30
- o[n] = a;
29
+ for (const [n, r] of t)
30
+ o[n] = r;
31
31
  return o;
32
- }, B = /* @__PURE__ */ i(p, [["__scopeId", "data-v-5eac18a7"]]);
32
+ }, B = /* @__PURE__ */ i(p, [["__scopeId", "data-v-e1d8675d"]]);
33
33
  export {
34
34
  B as NsButton
35
35
  };
@@ -0,0 +1,12 @@
1
+ // Quasar Sass variable overrides for Fixel font
2
+ //
3
+ // For consumers using @quasar/vite-plugin, reference this file
4
+ // in your own Sass variables to set Fixel as Quasar's default font:
5
+ //
6
+ // // src/quasar-variables.sass
7
+ // @use '@nonsuch/component-library/fonts/quasar-overrides' as *
8
+ //
9
+ // Then in vite.config.ts:
10
+ // quasar({ sassVariables: 'src/quasar-variables.sass' })
11
+
12
+ $body-font-family: 'Fixel Text', 'Roboto', sans-serif
Binary file
Binary file
@@ -0,0 +1,37 @@
1
+ # Font Files
2
+
3
+ Place your Fixel `.woff2` files here following this naming convention:
4
+
5
+ ## Fixel Text (body text, buttons, labels)
6
+
7
+ ```text
8
+ FixelText-Regular.woff2
9
+ FixelText-Medium.woff2
10
+ FixelText-SemiBold.woff2
11
+ FixelText-Bold.woff2
12
+ FixelText-RegularItalic.woff2
13
+ FixelText-MediumItalic.woff2
14
+ FixelText-SemiBoldItalic.woff2
15
+ FixelText-BoldItalic.woff2
16
+ ```
17
+
18
+ ## Fixel Display (headings, large text)
19
+
20
+ ```text
21
+ FixelDisplay-Regular.woff2
22
+ FixelDisplay-Medium.woff2
23
+ FixelDisplay-SemiBold.woff2
24
+ FixelDisplay-Bold.woff2
25
+ ```
26
+
27
+ ## Where to get the files
28
+
29
+ Download from <https://fixel.macpaw.com/> and place the `.woff2` versions here.
30
+
31
+ If your download only includes `.otf` or `.ttf`, you can convert to `.woff2` using
32
+ a tool like <https://cloudconvert.com/ttf-to-woff2> for optimal web performance.
33
+
34
+ ## Adding more weights
35
+
36
+ If you need additional weights (Thin, ExtraLight, Light, ExtraBold, Black),
37
+ add the `.woff2` files here and update `../fonts.css` with matching `@font-face` rules.
@@ -0,0 +1,310 @@
1
+ /*
2
+ * Fixel Font — @font-face declarations
3
+ * https://fixel.macpaw.com/
4
+ *
5
+ * Import this file to load the font faces without applying them globally:
6
+ * import '@nonsuch/component-library/fonts.css'
7
+ *
8
+ * Or use global.css to also set Fixel as the default body/heading font:
9
+ * import '@nonsuch/component-library/fonts/global.css'
10
+ *
11
+ * Font families available after import:
12
+ * font-family: 'Fixel Text', 'Roboto', sans-serif; — body, UI elements
13
+ * font-family: 'Fixel Display', 'Roboto', sans-serif; — headings, hero text
14
+ */
15
+
16
+ /* ========================================================================
17
+ Fixel Text — body text, buttons, labels, UI elements
18
+ ======================================================================== */
19
+
20
+ /* Thin (100) */
21
+ @font-face {
22
+ font-family: 'Fixel Text';
23
+ font-style: normal;
24
+ font-weight: 100;
25
+ font-display: swap;
26
+ src: url('./files/FixelText-Thin.woff2') format('woff2');
27
+ }
28
+ @font-face {
29
+ font-family: 'Fixel Text';
30
+ font-style: italic;
31
+ font-weight: 100;
32
+ font-display: swap;
33
+ src: url('./files/FixelText-ThinItalic.woff2') format('woff2');
34
+ }
35
+
36
+ /* ExtraLight (200) */
37
+ @font-face {
38
+ font-family: 'Fixel Text';
39
+ font-style: normal;
40
+ font-weight: 200;
41
+ font-display: swap;
42
+ src: url('./files/FixelText-ExtraLight.woff2') format('woff2');
43
+ }
44
+ @font-face {
45
+ font-family: 'Fixel Text';
46
+ font-style: italic;
47
+ font-weight: 200;
48
+ font-display: swap;
49
+ src: url('./files/FixelText-ExtraLightItalic.woff2') format('woff2');
50
+ }
51
+
52
+ /* Light (300) */
53
+ @font-face {
54
+ font-family: 'Fixel Text';
55
+ font-style: normal;
56
+ font-weight: 300;
57
+ font-display: swap;
58
+ src: url('./files/FixelText-Light.woff2') format('woff2');
59
+ }
60
+ @font-face {
61
+ font-family: 'Fixel Text';
62
+ font-style: italic;
63
+ font-weight: 300;
64
+ font-display: swap;
65
+ src: url('./files/FixelText-LightItalic.woff2') format('woff2');
66
+ }
67
+
68
+ /* Regular (400) */
69
+ @font-face {
70
+ font-family: 'Fixel Text';
71
+ font-style: normal;
72
+ font-weight: 400;
73
+ font-display: swap;
74
+ src: url('./files/FixelText-Regular.woff2') format('woff2');
75
+ }
76
+ @font-face {
77
+ font-family: 'Fixel Text';
78
+ font-style: italic;
79
+ font-weight: 400;
80
+ font-display: swap;
81
+ src: url('./files/FixelText-RegularItalic.woff2') format('woff2');
82
+ }
83
+
84
+ /* Medium (500) */
85
+ @font-face {
86
+ font-family: 'Fixel Text';
87
+ font-style: normal;
88
+ font-weight: 500;
89
+ font-display: swap;
90
+ src: url('./files/FixelText-Medium.woff2') format('woff2');
91
+ }
92
+ @font-face {
93
+ font-family: 'Fixel Text';
94
+ font-style: italic;
95
+ font-weight: 500;
96
+ font-display: swap;
97
+ src: url('./files/FixelText-MediumItalic.woff2') format('woff2');
98
+ }
99
+
100
+ /* SemiBold (600) */
101
+ @font-face {
102
+ font-family: 'Fixel Text';
103
+ font-style: normal;
104
+ font-weight: 600;
105
+ font-display: swap;
106
+ src: url('./files/FixelText-SemiBold.woff2') format('woff2');
107
+ }
108
+ @font-face {
109
+ font-family: 'Fixel Text';
110
+ font-style: italic;
111
+ font-weight: 600;
112
+ font-display: swap;
113
+ src: url('./files/FixelText-SemiBoldItalic.woff2') format('woff2');
114
+ }
115
+
116
+ /* Bold (700) */
117
+ @font-face {
118
+ font-family: 'Fixel Text';
119
+ font-style: normal;
120
+ font-weight: 700;
121
+ font-display: swap;
122
+ src: url('./files/FixelText-Bold.woff2') format('woff2');
123
+ }
124
+ @font-face {
125
+ font-family: 'Fixel Text';
126
+ font-style: italic;
127
+ font-weight: 700;
128
+ font-display: swap;
129
+ src: url('./files/FixelText-BoldItalic.woff2') format('woff2');
130
+ }
131
+
132
+ /* ExtraBold (800) */
133
+ @font-face {
134
+ font-family: 'Fixel Text';
135
+ font-style: normal;
136
+ font-weight: 800;
137
+ font-display: swap;
138
+ src: url('./files/FixelText-ExtraBold.woff2') format('woff2');
139
+ }
140
+ @font-face {
141
+ font-family: 'Fixel Text';
142
+ font-style: italic;
143
+ font-weight: 800;
144
+ font-display: swap;
145
+ src: url('./files/FixelText-ExtraBoldItalic.woff2') format('woff2');
146
+ }
147
+
148
+ /* Black (900) */
149
+ @font-face {
150
+ font-family: 'Fixel Text';
151
+ font-style: normal;
152
+ font-weight: 900;
153
+ font-display: swap;
154
+ src: url('./files/FixelText-Black.woff2') format('woff2');
155
+ }
156
+ @font-face {
157
+ font-family: 'Fixel Text';
158
+ font-style: italic;
159
+ font-weight: 900;
160
+ font-display: swap;
161
+ src: url('./files/FixelText-BlackItalic.woff2') format('woff2');
162
+ }
163
+
164
+ /* ========================================================================
165
+ Fixel Display — headings and large text
166
+ ======================================================================== */
167
+
168
+ /* Thin (100) */
169
+ @font-face {
170
+ font-family: 'Fixel Display';
171
+ font-style: normal;
172
+ font-weight: 100;
173
+ font-display: swap;
174
+ src: url('./files/FixelDisplay-Thin.woff2') format('woff2');
175
+ }
176
+ @font-face {
177
+ font-family: 'Fixel Display';
178
+ font-style: italic;
179
+ font-weight: 100;
180
+ font-display: swap;
181
+ src: url('./files/FixelDisplay-ThinItalic.woff2') format('woff2');
182
+ }
183
+
184
+ /* ExtraLight (200) */
185
+ @font-face {
186
+ font-family: 'Fixel Display';
187
+ font-style: normal;
188
+ font-weight: 200;
189
+ font-display: swap;
190
+ src: url('./files/FixelDisplay-ExtraLight.woff2') format('woff2');
191
+ }
192
+ @font-face {
193
+ font-family: 'Fixel Display';
194
+ font-style: italic;
195
+ font-weight: 200;
196
+ font-display: swap;
197
+ src: url('./files/FixelDisplay-ExtraLightItalic.woff2') format('woff2');
198
+ }
199
+
200
+ /* Light (300) */
201
+ @font-face {
202
+ font-family: 'Fixel Display';
203
+ font-style: normal;
204
+ font-weight: 300;
205
+ font-display: swap;
206
+ src: url('./files/FixelDisplay-Light.woff2') format('woff2');
207
+ }
208
+ @font-face {
209
+ font-family: 'Fixel Display';
210
+ font-style: italic;
211
+ font-weight: 300;
212
+ font-display: swap;
213
+ src: url('./files/FixelDisplay-LightItalic.woff2') format('woff2');
214
+ }
215
+
216
+ /* Regular (400) */
217
+ @font-face {
218
+ font-family: 'Fixel Display';
219
+ font-style: normal;
220
+ font-weight: 400;
221
+ font-display: swap;
222
+ src: url('./files/FixelDisplay-Regular.woff2') format('woff2');
223
+ }
224
+ @font-face {
225
+ font-family: 'Fixel Display';
226
+ font-style: italic;
227
+ font-weight: 400;
228
+ font-display: swap;
229
+ src: url('./files/FixelDisplay-RegularItalic.woff2') format('woff2');
230
+ }
231
+
232
+ /* Medium (500) */
233
+ @font-face {
234
+ font-family: 'Fixel Display';
235
+ font-style: normal;
236
+ font-weight: 500;
237
+ font-display: swap;
238
+ src: url('./files/FixelDisplay-Medium.woff2') format('woff2');
239
+ }
240
+ @font-face {
241
+ font-family: 'Fixel Display';
242
+ font-style: italic;
243
+ font-weight: 500;
244
+ font-display: swap;
245
+ src: url('./files/FixelDisplay-MediumItalic.woff2') format('woff2');
246
+ }
247
+
248
+ /* SemiBold (600) */
249
+ @font-face {
250
+ font-family: 'Fixel Display';
251
+ font-style: normal;
252
+ font-weight: 600;
253
+ font-display: swap;
254
+ src: url('./files/FixelDisplay-SemiBold.woff2') format('woff2');
255
+ }
256
+ @font-face {
257
+ font-family: 'Fixel Display';
258
+ font-style: italic;
259
+ font-weight: 600;
260
+ font-display: swap;
261
+ src: url('./files/FixelDisplay-SemiBoldItalic.woff2') format('woff2');
262
+ }
263
+
264
+ /* Bold (700) */
265
+ @font-face {
266
+ font-family: 'Fixel Display';
267
+ font-style: normal;
268
+ font-weight: 700;
269
+ font-display: swap;
270
+ src: url('./files/FixelDisplay-Bold.woff2') format('woff2');
271
+ }
272
+ @font-face {
273
+ font-family: 'Fixel Display';
274
+ font-style: italic;
275
+ font-weight: 700;
276
+ font-display: swap;
277
+ src: url('./files/FixelDisplay-BoldItalic.woff2') format('woff2');
278
+ }
279
+
280
+ /* ExtraBold (800) */
281
+ @font-face {
282
+ font-family: 'Fixel Display';
283
+ font-style: normal;
284
+ font-weight: 800;
285
+ font-display: swap;
286
+ src: url('./files/FixelDisplay-ExtraBold.woff2') format('woff2');
287
+ }
288
+ @font-face {
289
+ font-family: 'Fixel Display';
290
+ font-style: italic;
291
+ font-weight: 800;
292
+ font-display: swap;
293
+ src: url('./files/FixelDisplay-ExtraBoldItalic.woff2') format('woff2');
294
+ }
295
+
296
+ /* Black (900) */
297
+ @font-face {
298
+ font-family: 'Fixel Display';
299
+ font-style: normal;
300
+ font-weight: 900;
301
+ font-display: swap;
302
+ src: url('./files/FixelDisplay-Black.woff2') format('woff2');
303
+ }
304
+ @font-face {
305
+ font-family: 'Fixel Display';
306
+ font-style: italic;
307
+ font-weight: 900;
308
+ font-display: swap;
309
+ src: url('./files/FixelDisplay-BlackItalic.woff2') format('woff2');
310
+ }
@@ -0,0 +1,34 @@
1
+ /*
2
+ * Fixel Font — Global application defaults
3
+ *
4
+ * Import this ONE file to load Fixel AND apply it as the default font:
5
+ * import '@nonsuch/component-library/fonts/global.css'
6
+ *
7
+ * This sets:
8
+ * - body / all UI text → Fixel Text
9
+ * - h1–h6 headings → Fixel Display
10
+ * - Roboto fallback for both
11
+ */
12
+
13
+ @import './fonts.css';
14
+
15
+ /* Apply Fixel Text as the default body font */
16
+ body {
17
+ font-family: 'Fixel Text', 'Roboto', sans-serif;
18
+ }
19
+
20
+ /* Apply Fixel Display to headings */
21
+ h1,
22
+ h2,
23
+ h3,
24
+ h4,
25
+ h5,
26
+ h6,
27
+ .text-h1,
28
+ .text-h2,
29
+ .text-h3,
30
+ .text-h4,
31
+ .text-h5,
32
+ .text-h6 {
33
+ font-family: 'Fixel Display', 'Roboto', sans-serif;
34
+ }
package/package.json CHANGED
@@ -1,16 +1,17 @@
1
1
  {
2
2
  "name": "@nonsuch/component-library",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "A Vue 3 component library built on Quasar with opinionated defaults and custom components.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "license": "MIT",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/nonsuch/componentLibrary.git"
10
+ "url": "git+https://github.com/Nonsuch-io/componentLibrary.git"
11
11
  },
12
12
  "files": [
13
- "dist"
13
+ "dist",
14
+ "fonts"
14
15
  ],
15
16
  "main": "./dist/nonsuch-components.js",
16
17
  "module": "./dist/nonsuch-components.js",
@@ -20,7 +21,10 @@
20
21
  "types": "./dist/index.d.ts",
21
22
  "import": "./dist/nonsuch-components.js"
22
23
  },
23
- "./style.css": "./dist/style.css"
24
+ "./style.css": "./dist/style.css",
25
+ "./fonts.css": "./fonts/fonts.css",
26
+ "./fonts/global.css": "./fonts/global.css",
27
+ "./fonts/quasar-overrides": "./fonts/_quasar-overrides.sass"
24
28
  },
25
29
  "scripts": {
26
30
  "dev": "storybook dev -p 6006",