@ainsleydev/sveltekit-helper 0.2.0 → 0.3.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.
Files changed (37) hide show
  1. package/dist/components/Grid/Column.svelte +4 -0
  2. package/dist/components/Grid/Column.svelte.d.ts +4 -0
  3. package/dist/components/Grid/Column.svelte.d.ts.map +1 -1
  4. package/dist/components/Grid/Container.svelte +22 -0
  5. package/dist/components/Grid/Container.svelte.d.ts +22 -0
  6. package/dist/components/Grid/Container.svelte.d.ts.map +1 -1
  7. package/dist/components/Grid/Row.svelte +4 -0
  8. package/dist/components/Grid/Row.svelte.d.ts +4 -0
  9. package/dist/components/Grid/Row.svelte.d.ts.map +1 -1
  10. package/dist/components/Hamburger.svelte +12 -1
  11. package/dist/components/Hamburger.svelte.d.ts +9 -0
  12. package/dist/components/Hamburger.svelte.d.ts.map +1 -1
  13. package/dist/components/Sidebar.svelte +15 -0
  14. package/dist/components/Sidebar.svelte.d.ts +15 -0
  15. package/dist/components/Sidebar.svelte.d.ts.map +1 -1
  16. package/dist/components/index.d.ts +2 -0
  17. package/dist/components/index.d.ts.map +1 -1
  18. package/dist/components/index.js +1 -0
  19. package/dist/components/notifications/Alert.svelte +154 -0
  20. package/dist/components/notifications/Alert.svelte.d.ts +44 -0
  21. package/dist/components/notifications/Alert.svelte.d.ts.map +1 -0
  22. package/dist/components/notifications/Notice.svelte +123 -0
  23. package/dist/components/notifications/Notice.svelte.d.ts +33 -0
  24. package/dist/components/notifications/Notice.svelte.d.ts.map +1 -0
  25. package/dist/components/notifications/alertIcons.d.ts +18 -0
  26. package/dist/components/notifications/alertIcons.d.ts.map +1 -0
  27. package/dist/components/notifications/alertIcons.js +10 -0
  28. package/dist/components/notifications/index.d.ts +5 -0
  29. package/dist/components/notifications/index.d.ts.map +1 -0
  30. package/dist/components/notifications/index.js +2 -0
  31. package/dist/scss/_border-radius.scss +21 -0
  32. package/dist/scss/_breakpoints.scss +10 -0
  33. package/dist/scss/_functions.scss +6 -0
  34. package/dist/scss/_index.scss +5 -0
  35. package/dist/scss/_mixins.scss +155 -0
  36. package/dist/scss/_sizes.scss +25 -0
  37. package/package.json +8 -2
@@ -15,6 +15,10 @@ const { ...restProps } = $props();
15
15
  Content
16
16
  </Column>
17
17
  ```
18
+
19
+ CSS Custom Properties:
20
+ - `--col-gap`: Horizontal padding on desktop (default: 1rem)
21
+ - `--col-gap-mobile`: Horizontal padding on mobile (default: var(--col-gap, 0.5rem))
18
22
  -->
19
23
  <div class="col" {...restProps}>
20
24
  <slot />
@@ -27,6 +27,10 @@ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
27
27
  * Content
28
28
  * </Column>
29
29
  * ```
30
+ *
31
+ * CSS Custom Properties:
32
+ * - `--col-gap`: Horizontal padding on desktop (default: 1rem)
33
+ * - `--col-gap-mobile`: Horizontal padding on mobile (default: var(--col-gap, 0.5rem))
30
34
  */
31
35
  declare const Column: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<Record<string, any>, {
32
36
  default: {};
@@ -1 +1 @@
1
- {"version":3,"file":"Column.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/Grid/Column.svelte.ts"],"names":[],"mappings":"AAgBA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AACD,KAAK,gCAAgC,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,GACvD,CAAC,KAAK,SAAS;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,GACzB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACnC,GAAG,GACH;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,GAClB,EAAE,CAAC,CAAC;AAId;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,MAAM;;;;;;UAAqF,CAAC;AAChF,KAAK,MAAM,GAAG,YAAY,CAAC,OAAO,MAAM,CAAC,CAAC;AAC5C,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Column.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/Grid/Column.svelte.ts"],"names":[],"mappings":"AAgBA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AACD,KAAK,gCAAgC,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,GACvD,CAAC,KAAK,SAAS;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,GACzB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACnC,GAAG,GACH;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,GAClB,EAAE,CAAC,CAAC;AAId;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,MAAM;;;;;;UAAqF,CAAC;AAChF,KAAK,MAAM,GAAG,YAAY,CAAC,OAAO,MAAM,CAAC,CAAC;AAC5C,eAAe,MAAM,CAAC"}
@@ -7,6 +7,28 @@ const { ...restProps } = $props();
7
7
 
8
8
  Centre content such as rows & columns horizontally with predefined max-width.
9
9
  Uses CSS Grid to provide breakout and full-width layout options.
10
+
11
+ @example
12
+ ```svelte
13
+ <Container>
14
+ <Row>
15
+ <Column class="col-12">Content</Column>
16
+ </Row>
17
+ </Container>
18
+ ```
19
+
20
+ @example
21
+ ```svelte
22
+ <Container>
23
+ <div class="breakout">Full breakout content</div>
24
+ <div class="full-width">Full width content</div>
25
+ </Container>
26
+ ```
27
+
28
+ CSS Custom Properties:
29
+ - `--container-max-width`: Maximum content width (default: 1328px)
30
+ - `--container-breakout-max-width`: Maximum breakout width (default: 1500px)
31
+ - `--container-padding`: Horizontal padding (default: 1rem)
10
32
  -->
11
33
  <div class="container" {...restProps}>
12
34
  <slot />
@@ -19,6 +19,28 @@ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
19
19
  /**
20
20
  * Centre content such as rows & columns horizontally with predefined max-width.
21
21
  * Uses CSS Grid to provide breakout and full-width layout options.
22
+ *
23
+ * @example
24
+ * ```svelte
25
+ * <Container>
26
+ * <Row>
27
+ * <Column class="col-12">Content</Column>
28
+ * </Row>
29
+ * </Container>
30
+ * ```
31
+ *
32
+ * @example
33
+ * ```svelte
34
+ * <Container>
35
+ * <div class="breakout">Full breakout content</div>
36
+ * <div class="full-width">Full width content</div>
37
+ * </Container>
38
+ * ```
39
+ *
40
+ * CSS Custom Properties:
41
+ * - `--container-max-width`: Maximum content width (default: 1328px)
42
+ * - `--container-breakout-max-width`: Maximum breakout width (default: 1500px)
43
+ * - `--container-padding`: Horizontal padding (default: 1rem)
22
44
  */
23
45
  declare const Container: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<Record<string, any>, {
24
46
  default: {};
@@ -1 +1 @@
1
- {"version":3,"file":"Container.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/Grid/Container.svelte.ts"],"names":[],"mappings":"AAgBA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AACD,KAAK,gCAAgC,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,GACvD,CAAC,KAAK,SAAS;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,GACzB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACnC,GAAG,GACH;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,GAClB,EAAE,CAAC,CAAC;AAId;;;GAGG;AACH,QAAA,MAAM,SAAS;;;;;;UAAqF,CAAC;AACnF,KAAK,SAAS,GAAG,YAAY,CAAC,OAAO,SAAS,CAAC,CAAC;AAClD,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Container.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/Grid/Container.svelte.ts"],"names":[],"mappings":"AAgBA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AACD,KAAK,gCAAgC,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,GACvD,CAAC,KAAK,SAAS;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,GACzB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACnC,GAAG,GACH;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,GAClB,EAAE,CAAC,CAAC;AAId;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,QAAA,MAAM,SAAS;;;;;;UAAqF,CAAC;AACnF,KAAK,SAAS,GAAG,YAAY,CAAC,OAAO,SAAS,CAAC,CAAC;AAClD,eAAe,SAAS,CAAC"}
@@ -26,6 +26,10 @@ const { noGaps = false, ...restProps }: RowProps = $props();
26
26
  <Column></Column>
27
27
  </Row>
28
28
  ```
29
+
30
+ CSS Custom Properties:
31
+ - `--row-gap`: Gap between columns (default: 1rem)
32
+ - `--row-gap-mobile`: Gap on mobile screens (default: var(--row-gap, 0.5rem))
29
33
  -->
30
34
  <div class="row" class:row--no-gaps={noGaps} {...restProps}>
31
35
  <slot />
@@ -35,6 +35,10 @@ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
35
35
  * <Column></Column>
36
36
  * </Row>
37
37
  * ```
38
+ *
39
+ * CSS Custom Properties:
40
+ * - `--row-gap`: Gap between columns (default: 1rem)
41
+ * - `--row-gap-mobile`: Gap on mobile screens (default: var(--row-gap, 0.5rem))
38
42
  */
39
43
  declare const Row: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<RowProps, {
40
44
  default: {};
@@ -1 +1 @@
1
- {"version":3,"file":"Row.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/Grid/Row.svelte.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAiBF,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AACD,KAAK,gCAAgC,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,GACvD,CAAC,KAAK,SAAS;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,GACzB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACnC,GAAG,GACH;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,GAClB,EAAE,CAAC,CAAC;AAId;;;;;;;;;;;;;;;;GAgBG;AACH,QAAA,MAAM,GAAG;;;;;;UAAqF,CAAC;AAC7E,KAAK,GAAG,GAAG,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC;AACtC,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"Row.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/Grid/Row.svelte.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,QAAQ,GAAG;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAiBF,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AACD,KAAK,gCAAgC,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,GACvD,CAAC,KAAK,SAAS;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,GACzB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACnC,GAAG,GACH;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,GAClB,EAAE,CAAC,CAAC;AAId;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,GAAG;;;;;;UAAqF,CAAC;AAC7E,KAAK,GAAG,GAAG,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC;AACtC,eAAe,GAAG,CAAC"}
@@ -40,12 +40,23 @@ export type HamburgerProps = {
40
40
  ```svelte
41
41
  <Hamburger gap="1rem">
42
42
  ```
43
+
44
+ CSS Custom Properties:
45
+ - `--hamburger-gap`: Distance from top and right edges (default: 0.8rem)
46
+ - `--hamburger-z-index`: Stacking order (default: 10000)
47
+ - `--hamburger-colour`: Icon color (default: var(--colour-base-light))
48
+ - `--hamburger-layer-width`: Width of each line (default: 24px)
49
+ - `--hamburger-layer-height`: Height of each line (default: 2px)
50
+ - `--hamburger-layer-spacing`: Gap between lines (default: 5px)
51
+ - `--hamburger-border-radius`: Rounding of lines (default: 2px)
43
52
  -->
44
53
  <div class="hamburger-wrapper {className}" style="--hamburger-gap: {gap}" aria-label="Toggle Menu">
45
54
  <SvelteHamburger
46
55
  type={style}
47
56
  bind:open={isOpen}
48
- on:change={() => onChange?.(isOpen)}
57
+ onclick={() => {
58
+ onChange?.(isOpen);
59
+ }}
49
60
  --color="var(--hamburger-colour, var(--colour-base-light))"
50
61
  --layer-width="var(--hamburger-layer-width, 24px)"
51
62
  --layer-height="var(--hamburger-layer-height, 2px)"
@@ -20,6 +20,15 @@ export type HamburgerProps = {
20
20
  * ```svelte
21
21
  * <Hamburger gap="1rem">
22
22
  * ```
23
+ *
24
+ * CSS Custom Properties:
25
+ * - `--hamburger-gap`: Distance from top and right edges (default: 0.8rem)
26
+ * - `--hamburger-z-index`: Stacking order (default: 10000)
27
+ * - `--hamburger-colour`: Icon color (default: var(--colour-base-light))
28
+ * - `--hamburger-layer-width`: Width of each line (default: 24px)
29
+ * - `--hamburger-layer-height`: Height of each line (default: 2px)
30
+ * - `--hamburger-layer-spacing`: Gap between lines (default: 5px)
31
+ * - `--hamburger-border-radius`: Rounding of lines (default: 2px)
23
32
  */
24
33
  declare const Hamburger: import("svelte").Component<HamburgerProps, {}, "isOpen">;
25
34
  type Hamburger = ReturnType<typeof Hamburger>;
@@ -1 +1 @@
1
- {"version":3,"file":"Hamburger.svelte.d.ts","sourceRoot":"","sources":["../../src/components/Hamburger.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG;IAE5B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC,CAAC;AA4BF;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,SAAS,0DAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Hamburger.svelte.d.ts","sourceRoot":"","sources":["../../src/components/Hamburger.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG;IAE5B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC,CAAC;AA8BF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,QAAA,MAAM,SAAS,0DAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -135,6 +135,21 @@ export type SidebarProps = {
135
135
  <nav>...</nav>
136
136
  </Sidebar>
137
137
  ```
138
+
139
+ CSS Custom Properties:
140
+ - `--sidebar-width`: Mobile sidebar width (default: 50vw)
141
+ - `--sidebar-min-width`: Minimum sidebar width (default: 270px)
142
+ - `--sidebar-top`: Desktop sticky position from top (default: 160px)
143
+ - `--sidebar-overlay-opacity`: Overlay opacity when open (default: 0.3)
144
+ - `--sidebar-background`: Sidebar background color (default: var(--colour-base-black))
145
+ - `--sidebar-border-colour`: Border color (default: rgba(255, 255, 255, 0.1))
146
+ - `--sidebar-overlay-colour`: Overlay background color (default: var(--colour-grey-900))
147
+ - `--sidebar-inner-padding`: Content padding (default: 2rem 1.8rem 0 1.8rem)
148
+ - `--sidebar-toggle-background`: Toggle button background (default: var(--colour-base-black))
149
+ - `--sidebar-toggle-colour`: Toggle button text color (default: var(--colour-base-light))
150
+ - `--sidebar-toggle-padding`: Toggle button padding (default: 0.25rem 1.5rem)
151
+ - `--sidebar-toggle-radius`: Toggle button border radius (default: 0.375rem)
152
+ - `--sidebar-toggle-font-size`: Toggle button font size (default: 0.9rem)
138
153
  -->
139
154
  <aside
140
155
  class="sidebar sidebar--{toggleStyle} sidebar--{position} {className}"
@@ -34,6 +34,21 @@ export type SidebarProps = {
34
34
  * <nav>...</nav>
35
35
  * </Sidebar>
36
36
  * ```
37
+ *
38
+ * CSS Custom Properties:
39
+ * - `--sidebar-width`: Mobile sidebar width (default: 50vw)
40
+ * - `--sidebar-min-width`: Minimum sidebar width (default: 270px)
41
+ * - `--sidebar-top`: Desktop sticky position from top (default: 160px)
42
+ * - `--sidebar-overlay-opacity`: Overlay opacity when open (default: 0.3)
43
+ * - `--sidebar-background`: Sidebar background color (default: var(--colour-base-black))
44
+ * - `--sidebar-border-colour`: Border color (default: rgba(255, 255, 255, 0.1))
45
+ * - `--sidebar-overlay-colour`: Overlay background color (default: var(--colour-grey-900))
46
+ * - `--sidebar-inner-padding`: Content padding (default: 2rem 1.8rem 0 1.8rem)
47
+ * - `--sidebar-toggle-background`: Toggle button background (default: var(--colour-base-black))
48
+ * - `--sidebar-toggle-colour`: Toggle button text color (default: var(--colour-base-light))
49
+ * - `--sidebar-toggle-padding`: Toggle button padding (default: 0.25rem 1.5rem)
50
+ * - `--sidebar-toggle-radius`: Toggle button border radius (default: 0.375rem)
51
+ * - `--sidebar-toggle-font-size`: Toggle button font size (default: 0.9rem)
37
52
  */
38
53
  declare const Sidebar: import("svelte").Component<SidebarProps, {}, "isOpen">;
39
54
  type Sidebar = ReturnType<typeof Sidebar>;
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.svelte.d.ts","sourceRoot":"","sources":["../../src/components/Sidebar.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC,CAAC;AAiIF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,QAAA,MAAM,OAAO,wDAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Sidebar.svelte.d.ts","sourceRoot":"","sources":["../../src/components/Sidebar.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,MAAM,YAAY,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC,CAAC;AAiIF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,QAAA,MAAM,OAAO,wDAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
@@ -1,3 +1,5 @@
1
1
  export { default as Sidebar } from './Sidebar.svelte';
2
2
  export { default as Hamburger } from './Hamburger.svelte';
3
+ export { Alert, Notice } from './notifications';
4
+ export type { AlertProps, AlertType, NoticeProps, NoticeType } from './notifications';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export { default as Sidebar } from './Sidebar.svelte';
2
2
  export { default as Hamburger } from './Hamburger.svelte';
3
+ export { Alert, Notice } from './notifications';
@@ -0,0 +1,154 @@
1
+ <script lang="ts" module>
2
+ import type { Icon as IconType } from '@lucide/svelte';
3
+ import type { Snippet } from 'svelte';
4
+
5
+ export type AlertType = 'info' | 'warning' | 'success' | 'error';
6
+
7
+ export type AlertProps = {
8
+ type?: AlertType;
9
+ title?: string;
10
+ children?: Snippet;
11
+ visible?: boolean;
12
+ dismiss?: boolean;
13
+ icon?: typeof IconType;
14
+ };
15
+ </script>
16
+
17
+ <script lang="ts">
18
+ import { X } from '@lucide/svelte'
19
+ import { fade } from 'svelte/transition'
20
+
21
+ import { alertIcons } from './alertIcons.js'
22
+
23
+ let {
24
+ type = 'info',
25
+ title = '',
26
+ children,
27
+ visible = $bindable(true),
28
+ dismiss = false,
29
+ icon: customIcon,
30
+ ...restProps
31
+ }: AlertProps = $props()
32
+
33
+ const iconDetail = $derived(alertIcons[type])
34
+ const Icon = $derived(customIcon || iconDetail.icon)
35
+ const hide = () => (visible = false)
36
+ const ariaLive = $derived(type === 'error' ? 'assertive' : 'polite')
37
+ </script>
38
+
39
+ <!--
40
+ @component
41
+
42
+ Full-width alert component for displaying important messages with optional body text.
43
+ Supports title, children content, and custom icons with dismissible functionality.
44
+
45
+ @example
46
+ ```svelte
47
+ <Alert type="info" title="New features available">
48
+ Check out the latest updates in your dashboard.
49
+ </Alert>
50
+
51
+ <Alert type="warning" title="Maintenance scheduled" dismiss />
52
+
53
+ <Alert type="error" title="Payment failed" dismiss>
54
+ Your card was declined. Please update your payment method.
55
+ </Alert>
56
+ ```
57
+
58
+ CSS Custom Properties:
59
+ - `--_alert-gap`: Gap between icon and content (default: 12px)
60
+ - `--_alert-padding`: Internal padding (default: 24px)
61
+ - `--_alert-border-radius`: Border radius (default: 6px)
62
+ - `--_alert-bg`: Background color (default: rgba(255, 255, 255, 0.02))
63
+ - `--_alert-content-gap`: Gap between title and text (default: 8px)
64
+ - `--_alert-title-font-weight`: Title font weight (default: var(--font-weight-semibold))
65
+ - `--_alert-title-colour`: Title text color (default: rgba(255, 255, 255, 1))
66
+ - `--_alert-text-line-height`: Text line height (default: 1.4)
67
+ - `--_alert-text-colour`: Text color (default: rgba(255, 255, 255, 50%))
68
+ - `--_alert-icon-colour`: Icon color (set automatically based on type)
69
+ -->
70
+ {#if visible}
71
+ <div
72
+ class="alert alert--{type}"
73
+ role="alert"
74
+ aria-live={ariaLive}
75
+ aria-atomic="true"
76
+ style="--_alert-icon-colour: {iconDetail.colour}"
77
+ transition:fade={{ duration: 300 }}
78
+ {...restProps}
79
+ >
80
+ <!-- Icon -->
81
+ <figure class="alert__icon">
82
+ <Icon size={24} color={iconDetail.colour} strokeWidth={1.2}></Icon>
83
+ </figure>
84
+ <!-- Content -->
85
+ <div class="alert__content">
86
+ {#if title}
87
+ <p class="alert__title">
88
+ {title}
89
+ </p>
90
+ {/if}
91
+ {#if children}
92
+ <p class="alert__text">
93
+ {@render children()}
94
+ </p>
95
+ {/if}
96
+ </div>
97
+ <!-- Dismiss -->
98
+ {#if dismiss}
99
+ <button class="alert__dismiss" onclick={hide} aria-label="Close Alert">
100
+ <X size={24} color={iconDetail.colour} />
101
+ </button>
102
+ {/if}
103
+ </div>
104
+ {/if}
105
+
106
+ <style>.alert {
107
+ position: relative;
108
+ display: flex;
109
+ gap: var(--_alert-gap, 0.75rem);
110
+ width: 100%;
111
+ border-radius: var(--_alert-border-radius, 6px);
112
+ padding: var(--_alert-padding, 1.5rem);
113
+ background-color: var(--_alert-bg, rgba(255, 255, 255, 0.02));
114
+ }
115
+ .alert__icon {
116
+ display: flex;
117
+ align-items: center;
118
+ justify-content: center;
119
+ margin: 0;
120
+ flex-shrink: 0;
121
+ }
122
+ .alert__content {
123
+ display: grid;
124
+ gap: var(--_alert-content-gap, 0.5rem);
125
+ }
126
+ .alert__title {
127
+ font-weight: var(--_alert-title-font-weight, var(--font-weight-semibold));
128
+ margin: 0;
129
+ line-height: 1;
130
+ color: var(--_alert-title-colour, rgb(255, 255, 255));
131
+ }
132
+ .alert__title:empty {
133
+ display: none;
134
+ }
135
+ .alert__text {
136
+ margin: 0;
137
+ line-height: var(--_alert-text-line-height, 1.4);
138
+ color: var(--_alert-text-colour, rgba(255, 255, 255, 0.5));
139
+ }
140
+ .alert__dismiss {
141
+ cursor: pointer;
142
+ margin-left: auto;
143
+ display: flex;
144
+ align-items: center;
145
+ justify-content: center;
146
+ background: none;
147
+ border: none;
148
+ padding: 0;
149
+ color: var(--_alert-icon-colour);
150
+ }
151
+ .alert :global(svg) {
152
+ min-width: 1.4rem;
153
+ min-height: 1.4rem;
154
+ }</style>
@@ -0,0 +1,44 @@
1
+ import type { Icon as IconType } from '@lucide/svelte';
2
+ import type { Snippet } from 'svelte';
3
+ export type AlertType = 'info' | 'warning' | 'success' | 'error';
4
+ export type AlertProps = {
5
+ type?: AlertType;
6
+ title?: string;
7
+ children?: Snippet;
8
+ visible?: boolean;
9
+ dismiss?: boolean;
10
+ icon?: typeof IconType;
11
+ };
12
+ /**
13
+ * Full-width alert component for displaying important messages with optional body text.
14
+ * Supports title, children content, and custom icons with dismissible functionality.
15
+ *
16
+ * @example
17
+ * ```svelte
18
+ * <Alert type="info" title="New features available">
19
+ * Check out the latest updates in your dashboard.
20
+ * </Alert>
21
+ *
22
+ * <Alert type="warning" title="Maintenance scheduled" dismiss />
23
+ *
24
+ * <Alert type="error" title="Payment failed" dismiss>
25
+ * Your card was declined. Please update your payment method.
26
+ * </Alert>
27
+ * ```
28
+ *
29
+ * CSS Custom Properties:
30
+ * - `--_alert-gap`: Gap between icon and content (default: 12px)
31
+ * - `--_alert-padding`: Internal padding (default: 24px)
32
+ * - `--_alert-border-radius`: Border radius (default: 6px)
33
+ * - `--_alert-bg`: Background color (default: rgba(255, 255, 255, 0.02))
34
+ * - `--_alert-content-gap`: Gap between title and text (default: 8px)
35
+ * - `--_alert-title-font-weight`: Title font weight (default: var(--font-weight-semibold))
36
+ * - `--_alert-title-colour`: Title text color (default: rgba(255, 255, 255, 1))
37
+ * - `--_alert-text-line-height`: Text line height (default: 1.4)
38
+ * - `--_alert-text-colour`: Text color (default: rgba(255, 255, 255, 50%))
39
+ * - `--_alert-icon-colour`: Icon color (set automatically based on type)
40
+ */
41
+ declare const Alert: import("svelte").Component<AlertProps, {}, "visible">;
42
+ type Alert = ReturnType<typeof Alert>;
43
+ export default Alert;
44
+ //# sourceMappingURL=Alert.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/notifications/Alert.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjE,MAAM,MAAM,UAAU,GAAG;IACxB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,QAAQ,CAAC;CACvB,CAAC;AAiEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,QAAA,MAAM,KAAK,uDAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
@@ -0,0 +1,123 @@
1
+ <script lang="ts" module>
2
+ import type { Icon as IconType } from '@lucide/svelte';
3
+
4
+ export type NoticeType = 'info' | 'warning' | 'success' | 'error';
5
+
6
+ export type NoticeProps = {
7
+ type?: NoticeType;
8
+ title: string;
9
+ visible?: boolean;
10
+ dismiss?: boolean;
11
+ icon?: typeof IconType;
12
+ };
13
+ </script>
14
+
15
+ <script lang="ts">
16
+ import { X } from '@lucide/svelte'
17
+ import { fade } from 'svelte/transition'
18
+
19
+ import { alertIcons } from './alertIcons'
20
+
21
+ let {
22
+ type = 'info',
23
+ title = '',
24
+ visible = $bindable(true),
25
+ dismiss = false,
26
+ icon: customIcon,
27
+ ...restProps
28
+ }: NoticeProps = $props()
29
+
30
+ const iconDetail = $derived(alertIcons[type])
31
+ const Icon = $derived(customIcon || iconDetail.icon)
32
+ const hide = () => (visible = false)
33
+ const ariaLive = $derived(type === 'error' ? 'assertive' : 'polite')
34
+ </script>
35
+
36
+ <!--
37
+ @component
38
+
39
+ Inline notification component for displaying brief messages with icons.
40
+ Compact design suitable for inline alerts, badges, or status indicators.
41
+
42
+ @example
43
+ ```svelte
44
+ <Notice type="success" title="Upload complete" />
45
+ <Notice type="warning" title="Session expiring" dismiss />
46
+ <Notice type="error" title="Connection failed" icon={CustomIcon} />
47
+ ```
48
+
49
+ CSS Custom Properties:
50
+ - `--_notice-gap`: Gap between icon and title (default: 12px)
51
+ - `--_notice-padding`: Internal padding (default: 0.8rem 12px)
52
+ - `--_notice-border-radius`: Border radius (default: 6px)
53
+ - `--_notice-bg`: Background color (default: rgba(255, 255, 255, 0.025))
54
+ - `--_notice-font-size`: Title font size (default: 1rem)
55
+ - `--_notice-title-colour`: Title text color (default: rgba(255, 255, 255, 1))
56
+ - `--_notice-icon-colour`: Icon color (set automatically based on type)
57
+ -->
58
+ {#if visible}
59
+ <div
60
+ class="notice notice--{type}"
61
+ role="alert"
62
+ aria-live={ariaLive}
63
+ aria-atomic="true"
64
+ style="--_notice-icon-colour: {iconDetail.colour}"
65
+ transition:fade={{ duration: 300 }}
66
+ {...restProps}
67
+ >
68
+ <!-- Icon -->
69
+ <figure class="notice__icon">
70
+ <Icon size={20} color={iconDetail.colour} strokeWidth={1.2}></Icon>
71
+ </figure>
72
+ <!-- Title -->
73
+ <p class="notice__title">
74
+ {title}
75
+ </p>
76
+ <!-- Dismiss -->
77
+ {#if dismiss}
78
+ <button class="notice__dismiss" onclick={hide} aria-label="Close Notice">
79
+ <X size={20} color={iconDetail.colour} />
80
+ </button>
81
+ {/if}
82
+ </div>
83
+ {/if}
84
+
85
+ <style>.notice {
86
+ position: relative;
87
+ display: inline-flex;
88
+ width: auto;
89
+ gap: var(--_notice-gap, 0.75rem);
90
+ padding: var(--_notice-padding, 0.8rem 0.75rem);
91
+ border-radius: var(--_notice-border-radius, 6px);
92
+ background-color: var(--_notice-bg, rgba(255, 255, 255, 0.025));
93
+ align-items: center;
94
+ }
95
+ .notice__icon {
96
+ display: flex;
97
+ align-items: center;
98
+ justify-content: center;
99
+ margin: 0;
100
+ flex-shrink: 0;
101
+ }
102
+ .notice__title {
103
+ margin: 0;
104
+ font-size: var(--_notice-font-size, 1rem);
105
+ font-weight: var(--font-weight-medium);
106
+ color: var(--_notice-title-colour, rgb(255, 255, 255));
107
+ line-height: 1;
108
+ }
109
+ .notice__dismiss {
110
+ cursor: pointer;
111
+ margin-left: auto;
112
+ display: flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ background: none;
116
+ border: none;
117
+ padding: 0;
118
+ color: var(--_notice-icon-colour);
119
+ }
120
+ .notice :global(svg) {
121
+ min-width: 1.4rem;
122
+ min-height: 1.4rem;
123
+ }</style>
@@ -0,0 +1,33 @@
1
+ import type { Icon as IconType } from '@lucide/svelte';
2
+ export type NoticeType = 'info' | 'warning' | 'success' | 'error';
3
+ export type NoticeProps = {
4
+ type?: NoticeType;
5
+ title: string;
6
+ visible?: boolean;
7
+ dismiss?: boolean;
8
+ icon?: typeof IconType;
9
+ };
10
+ /**
11
+ * Inline notification component for displaying brief messages with icons.
12
+ * Compact design suitable for inline alerts, badges, or status indicators.
13
+ *
14
+ * @example
15
+ * ```svelte
16
+ * <Notice type="success" title="Upload complete" />
17
+ * <Notice type="warning" title="Session expiring" dismiss />
18
+ * <Notice type="error" title="Connection failed" icon={CustomIcon} />
19
+ * ```
20
+ *
21
+ * CSS Custom Properties:
22
+ * - `--_notice-gap`: Gap between icon and title (default: 12px)
23
+ * - `--_notice-padding`: Internal padding (default: 0.8rem 12px)
24
+ * - `--_notice-border-radius`: Border radius (default: 6px)
25
+ * - `--_notice-bg`: Background color (default: rgba(255, 255, 255, 0.025))
26
+ * - `--_notice-font-size`: Title font size (default: 1rem)
27
+ * - `--_notice-title-colour`: Title text color (default: rgba(255, 255, 255, 1))
28
+ * - `--_notice-icon-colour`: Icon color (set automatically based on type)
29
+ */
30
+ declare const Notice: import("svelte").Component<NoticeProps, {}, "visible">;
31
+ type Notice = ReturnType<typeof Notice>;
32
+ export default Notice;
33
+ //# sourceMappingURL=Notice.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Notice.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/notifications/Notice.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,QAAQ,CAAC;CACvB,CAAC;AAuDF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,MAAM,wDAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type Icon as IconType } from '@lucide/svelte';
2
+ /**
3
+ * Notification type variants
4
+ */
5
+ type NotificationType = 'info' | 'warning' | 'success' | 'error';
6
+ /**
7
+ * Icon configuration for notification types
8
+ */
9
+ type IconDetail = {
10
+ icon: typeof IconType;
11
+ colour: string;
12
+ };
13
+ /**
14
+ * Icon mapping for notification types
15
+ */
16
+ export declare const alertIcons: Record<NotificationType, IconDetail>;
17
+ export {};
18
+ //# sourceMappingURL=alertIcons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alertIcons.d.ts","sourceRoot":"","sources":["../../../src/components/notifications/alertIcons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,IAAI,IAAI,QAAQ,EAAuB,MAAM,gBAAgB,CAAC;AAElG;;GAEG;AACH,KAAK,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjE;;GAEG;AACH,KAAK,UAAU,GAAG;IACjB,IAAI,EAAE,OAAO,QAAQ,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAK3D,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { CircleCheck, CircleX, Info, TriangleAlert } from '@lucide/svelte';
2
+ /**
3
+ * Icon mapping for notification types
4
+ */
5
+ export const alertIcons = {
6
+ info: { icon: Info, colour: 'var(--colour-semantic-info)' },
7
+ success: { icon: CircleCheck, colour: 'var(--colour-semantic-success)' },
8
+ warning: { icon: TriangleAlert, colour: 'var(--colour-semantic-warning)' },
9
+ error: { icon: CircleX, colour: 'var(--colour-semantic-error)' },
10
+ };
@@ -0,0 +1,5 @@
1
+ export { default as Alert } from './Alert.svelte';
2
+ export { default as Notice } from './Notice.svelte';
3
+ export type { AlertProps, AlertType } from './Alert.svelte';
4
+ export type { NoticeProps, NoticeType } from './Notice.svelte';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/notifications/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC5D,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default as Alert } from './Alert.svelte';
2
+ export { default as Notice } from './Notice.svelte';
@@ -0,0 +1,21 @@
1
+ @use 'sass:map';
2
+
3
+ $border-radius-2: 2px;
4
+ $border-radius-4: 4px;
5
+ $border-radius-6: 6px;
6
+ $border-radius-8: 8px;
7
+ $border-radius-12: 12px;
8
+ $border-radius-16: 16px;
9
+ $border-radius-32: 32px;
10
+ $border-radius-full: 9999999px;
11
+
12
+ $border-radius: (
13
+ '2': $border-radius-2,
14
+ '4': $border-radius-4,
15
+ '6': $border-radius-6,
16
+ '8': $border-radius-8,
17
+ '12': $border-radius-12,
18
+ '16': $border-radius-16,
19
+ '32': $border-radius-32,
20
+ 'full': $border-radius-full,
21
+ );
@@ -0,0 +1,10 @@
1
+ @use 'sass:map';
2
+
3
+ $breakpoints: (
4
+ 'small': 320,
5
+ 'mobile': 568,
6
+ 'tablet': 768,
7
+ 'desktop': 1024,
8
+ 'wide': 1280,
9
+ 'ultrawide': 1920,
10
+ );
@@ -0,0 +1,6 @@
1
+ @use 'sass:math';
2
+
3
+ @function px-to-rem($value) {
4
+ $remValue: math.div($value, 16) + rem;
5
+ @return $remValue;
6
+ }
@@ -0,0 +1,5 @@
1
+ @forward 'breakpoints';
2
+ @forward 'border-radius';
3
+ @forward 'functions';
4
+ @forward 'sizes';
5
+ @forward 'mixins';
@@ -0,0 +1,155 @@
1
+ @use 'sass:meta';
2
+ @use 'sass:math';
3
+ @use 'sass:map';
4
+ @use 'breakpoints';
5
+
6
+ // Media Queries
7
+ // ==========================================================================
8
+
9
+ @mixin mq($size) {
10
+ @if map.has-key(breakpoints.$breakpoints, $size) {
11
+ $breakpoint: map.get(breakpoints.$breakpoints, $size);
12
+ @media screen and (min-width: $breakpoint * 1px) {
13
+ @content;
14
+ }
15
+ } @else if meta.type-of($size) == number {
16
+ @if math.is-unitless($size) {
17
+ @error 'When using a number with @mq() make sure to include a unit';
18
+ } @else {
19
+ @media screen and (min-width: $size) {
20
+ @content;
21
+ }
22
+ }
23
+ } @else {
24
+ @error 'The keyword #{$size} is not in the $breakpoints map';
25
+ }
26
+ }
27
+
28
+ @mixin mq-max($size) {
29
+ @if map.has-key(breakpoints.$breakpoints, $size) {
30
+ $breakpoint: map.get(breakpoints.$breakpoints, $size);
31
+ @media screen and (max-width: $breakpoint * 1px) {
32
+ @content;
33
+ }
34
+ } @else if meta.type-of($size) == number {
35
+ @if math.is-unitless($size) {
36
+ @error 'When using a number with @mq() make sure to include a unit';
37
+ } @else {
38
+ @media screen and (max-width: $size) {
39
+ @content;
40
+ }
41
+ }
42
+ } @else {
43
+ @error 'The keyword #{$size} is not in the $breakpoints map';
44
+ }
45
+ }
46
+
47
+ @mixin media-small-phones {
48
+ @media (width <= 350px) {
49
+ @content;
50
+ }
51
+ }
52
+
53
+ //// Pixel to REM Converter
54
+ //// ==========================================================================
55
+ //
56
+ //// @author Ainsley Clark
57
+ //// @param {Number} $pxValue - Pixel amount to convert
58
+ //// @param {String} $property [font-size] - Property to convert
59
+ //// @param {Number} $standard-size - Initial base rem size
60
+ //@mixin px-to-rem($pxValue, $property: 'font-size', $standard-size: 16) {
61
+ // #{$property}: $pxValue + px;
62
+ // #{$property}: $pxValue / å $standard-size + rem;
63
+ //}
64
+
65
+ // Type
66
+ // ==========================================================================
67
+
68
+ @mixin ellipsis($lines) {
69
+ display: -webkit-box;
70
+ -webkit-line-clamp: $lines;
71
+ -webkit-box-orient: vertical;
72
+ overflow: hidden;
73
+ }
74
+
75
+ @function strip-unit($value) {
76
+ @return math.div($value, $value * 0 + 1);
77
+ }
78
+
79
+ // Usage:
80
+ // @include fluid-type(34px, 98px);
81
+ @mixin fluid-type($min-font-size, $max-font-size) {
82
+ $u1: math.unit($type-fluid-start-size);
83
+ $u2: math.unit($type-fluid-end-size);
84
+ $u3: math.unit($min-font-size);
85
+ $u4: math.unit($max-font-size);
86
+
87
+ @if $u1 == $u2 and $u1 == $u3 and $u1 == $u4 {
88
+ & {
89
+ font-size: $min-font-size;
90
+
91
+ @media screen and (min-width: $type-fluid-start-size) {
92
+ font-size: calc(
93
+ #{$min-font-size} + #{strip-unit($max-font-size - $min-font-size)} *
94
+ (
95
+ (100vw - #{$type-fluid-start-size}) /
96
+ #{strip-unit($type-fluid-end-size - $type-fluid-start-size)}
97
+ )
98
+ );
99
+ }
100
+
101
+ @media screen and (min-width: $type-fluid-end-size) {
102
+ font-size: $max-font-size;
103
+ }
104
+ }
105
+ }
106
+ }
107
+
108
+ // Landscape Mixin
109
+ // ==========================================================================
110
+
111
+ @mixin landscape {
112
+ @media screen and (orientation: landscape) {
113
+ @content;
114
+ }
115
+ }
116
+
117
+ // Browser
118
+ // ==========================================================================
119
+
120
+ @mixin ie11 {
121
+ @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
122
+ @content;
123
+ }
124
+ }
125
+
126
+ @mixin ie11andedge {
127
+ // stylelint-disable-next-line media-feature-name-no-unknown
128
+ @media screen and (min-device-pixel-ratio: 0) and (-ms-high-contrast: none),
129
+ (-ms-high-contrast: active) {
130
+ @content;
131
+ }
132
+ }
133
+
134
+ @mixin firefox {
135
+ // stylelint-disable-next-line media-feature-name-no-unknown
136
+ @media screen and (min-device-pixel-ratio: 0) and (resolution >= 0.001dpcm) {
137
+ @content;
138
+ }
139
+ }
140
+
141
+ @mixin safari {
142
+ @media not all and (resolution >= 0.001dpcm) {
143
+ @supports (-webkit-appearance: none) {
144
+ @content;
145
+ }
146
+ }
147
+ }
148
+
149
+ // Full Height
150
+ // ==========================================================================
151
+
152
+ @mixin full-height {
153
+ height: 100vh; /* Use vh as a fallback for browsers that do not support Custom Properties */
154
+ height: 100svh;
155
+ }
@@ -0,0 +1,25 @@
1
+ @use 'sass:map';
2
+ @use 'functions' as f;
3
+
4
+ $size-2: f.px-to-rem(2);
5
+ $size-4: f.px-to-rem(4);
6
+ $size-8: f.px-to-rem(8);
7
+ $size-12: f.px-to-rem(12);
8
+ $size-16: f.px-to-rem(16);
9
+ $size-24: f.px-to-rem(24);
10
+ $size-32: f.px-to-rem(32);
11
+ $size-40: f.px-to-rem(40);
12
+ $size-48: f.px-to-rem(48);
13
+
14
+ $sizes: (
15
+ '0': 0,
16
+ '2': $size-2,
17
+ '4': $size-4,
18
+ '8': $size-8,
19
+ '12': $size-12,
20
+ '16': $size-16,
21
+ '24': $size-24,
22
+ '32': $size-32,
23
+ '40': $size-40,
24
+ '48': $size-48,
25
+ );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ainsleydev/sveltekit-helper",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "SvelteKit utilities, components and helpers for ainsley.dev builds",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -44,6 +44,11 @@
44
44
  "svelte": "./dist/components/payload/index.js",
45
45
  "default": "./dist/components/payload/index.js"
46
46
  },
47
+ "./components/notifications": {
48
+ "types": "./dist/components/notifications/index.d.ts",
49
+ "svelte": "./dist/components/notifications/index.js",
50
+ "default": "./dist/components/notifications/index.js"
51
+ },
47
52
  "./utils/forms": {
48
53
  "types": "./dist/utils/forms/index.d.ts",
49
54
  "import": "./dist/utils/forms/index.js"
@@ -73,7 +78,8 @@
73
78
  }
74
79
  },
75
80
  "dependencies": {
76
- "svelte-hamburgers": "^4.1.0"
81
+ "svelte-hamburgers": "^5.0.0",
82
+ "@lucide/svelte": "^0.562.0"
77
83
  },
78
84
  "devDependencies": {
79
85
  "@sveltejs/kit": "^2.0.0",