contain-css-svelte 0.0.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 (74) hide show
  1. package/README.md +58 -0
  2. package/dist/Card.svelte +172 -0
  3. package/dist/Card.svelte.d.ts +27 -0
  4. package/dist/controls/Button.svelte +74 -0
  5. package/dist/controls/Button.svelte.d.ts +28 -0
  6. package/dist/controls/Checkbox.svelte +111 -0
  7. package/dist/controls/Checkbox.svelte.d.ts +18 -0
  8. package/dist/controls/Input.svelte +33 -0
  9. package/dist/controls/Input.svelte.d.ts +22 -0
  10. package/dist/controls/MiniButton.svelte +78 -0
  11. package/dist/controls/MiniButton.svelte.d.ts +31 -0
  12. package/dist/controls/RadioButton.svelte +109 -0
  13. package/dist/controls/RadioButton.svelte.d.ts +25 -0
  14. package/dist/controls/Select.svelte +135 -0
  15. package/dist/controls/Select.svelte.d.ts +20 -0
  16. package/dist/controls/Slider.svelte +45 -0
  17. package/dist/controls/Slider.svelte.d.ts +29 -0
  18. package/dist/controls/TabItem.svelte +56 -0
  19. package/dist/controls/TabItem.svelte.d.ts +29 -0
  20. package/dist/cssprops.d.ts +1 -0
  21. package/dist/cssprops.js +189 -0
  22. package/dist/dropdowns/DropdownMenu.svelte +234 -0
  23. package/dist/dropdowns/DropdownMenu.svelte.d.ts +19 -0
  24. package/dist/index.d.ts +23 -0
  25. package/dist/index.js +24 -0
  26. package/dist/layout/Bar.svelte +57 -0
  27. package/dist/layout/Bar.svelte.d.ts +27 -0
  28. package/dist/layout/Column.svelte +40 -0
  29. package/dist/layout/Column.svelte.d.ts +19 -0
  30. package/dist/layout/Columns.svelte +21 -0
  31. package/dist/layout/Columns.svelte.d.ts +27 -0
  32. package/dist/layout/Container.svelte +105 -0
  33. package/dist/layout/Container.svelte.d.ts +27 -0
  34. package/dist/layout/FormItem.svelte +97 -0
  35. package/dist/layout/FormItem.svelte.d.ts +35 -0
  36. package/dist/layout/GridLayout.svelte +22 -0
  37. package/dist/layout/GridLayout.svelte.d.ts +16 -0
  38. package/dist/layout/Hero.svelte +86 -0
  39. package/dist/layout/Hero.svelte.d.ts +23 -0
  40. package/dist/layout/MenuList.svelte +108 -0
  41. package/dist/layout/MenuList.svelte.d.ts +29 -0
  42. package/dist/layout/Page.svelte +189 -0
  43. package/dist/layout/Page.svelte.d.ts +31 -0
  44. package/dist/layout/ResponsiveText.svelte +99 -0
  45. package/dist/layout/ResponsiveText.svelte.d.ts +26 -0
  46. package/dist/layout/Row.svelte +39 -0
  47. package/dist/layout/Row.svelte.d.ts +19 -0
  48. package/dist/layout/Sidebar.svelte +264 -0
  49. package/dist/layout/Sidebar.svelte.d.ts +23 -0
  50. package/dist/layout/SplitPane.svelte +160 -0
  51. package/dist/layout/SplitPane.svelte.d.ts +21 -0
  52. package/dist/layout/TabBar.svelte +49 -0
  53. package/dist/layout/TabBar.svelte.d.ts +28 -0
  54. package/dist/layout/Tile.svelte +172 -0
  55. package/dist/layout/Tile.svelte.d.ts +27 -0
  56. package/dist/misc/Code.svelte +27 -0
  57. package/dist/misc/Code.svelte.d.ts +18 -0
  58. package/dist/sass/_containers.scss +117 -0
  59. package/dist/sass/_mixins.scss +309 -0
  60. package/dist/typography/TextLayout.svelte +46 -0
  61. package/dist/typography/TextLayout.svelte.d.ts +27 -0
  62. package/dist/util.d.ts +3 -0
  63. package/dist/util.js +13 -0
  64. package/dist/vars/affordances.css +26 -0
  65. package/dist/vars/colors.css +345 -0
  66. package/dist/vars/defaults.css +14 -0
  67. package/dist/vars/layout.css +39 -0
  68. package/dist/vars/themes/lightordark.css +39 -0
  69. package/dist/vars/themes/purple.css +18 -0
  70. package/dist/vars/themes/typography-airy.css +13 -0
  71. package/dist/vars/themes/typography-browser.css +20 -0
  72. package/dist/vars/themes/typography-carbon.css +20 -0
  73. package/dist/vars/typography.css +16 -0
  74. package/package.json +52 -0
@@ -0,0 +1,97 @@
1
+ <script>
2
+ export let fullWidth = false;
3
+ export let globalInputStyles = true;
4
+ </script>
5
+
6
+ <div class="form-item" class:fullWidth class:globalInputStyles>
7
+ <slot name="before" />
8
+ <label>
9
+ <span class="label">
10
+ <slot name="label" />
11
+ </span>
12
+ <span class="input">
13
+ <slot />
14
+ </span>
15
+ </label>
16
+ <slot name="after" />
17
+ </div>
18
+
19
+ <style>/* Convenience groupings */
20
+ /* Warning: because we define a fallback
21
+ media query, the media query can override the container
22
+ if we stack a bunch of these in a row and aren't thoughtful about the order.
23
+ Put min-width queries *after* max-width queries so that smaller
24
+ container queries don't get their styles overridden by large media queries.
25
+ */
26
+ .form-item {
27
+ display: flex;
28
+ align-items: var(--form-label-align, baseline);
29
+ justify-content: var(--form-label-justify, flex-start);
30
+ gap: var(--form-label-horizontal-gap, var(--padding));
31
+ padding-top: var(--padding, form-item, 8px);
32
+ padding-bottom: var(--padding, form-item, 8px);
33
+ font-family: var(--form-item-font-family, var(--ui-font-family, var(--font-family, sans-serif)));
34
+ text-transform: var(--form-item-text-transform, var(--ui-text-transform, var(--text-transform, none)));
35
+ text-decoration: var(--form-item-text-decoration, var(--ui-text-decoration, var(--text-decoration, none)));
36
+ font-size: var(--form-item-font-size, var(--ui-font-size, var(--font-size, 16px)));
37
+ font-weight: var(--form-item-font-weight, var(--ui-font-weight, var(--font-weight, 400)));
38
+ line-height: var(--form-item-line-height, var(--ui-line-height, var(--line-height, 1.5)));
39
+ letter-spacing: var(--form-item-letter-spacing, var(--ui-letter-spacing, var(--letter-spacing, 0.05em)));
40
+ box-sizing: border-box;
41
+ }
42
+ label {
43
+ display: contents;
44
+ }
45
+ .label {
46
+ box-sizing: border-box;
47
+ width: var(--form-label-width, 12em);
48
+ text-align: var(--form-label-text-align, right);
49
+ }
50
+ .input {
51
+ box-sizing: border-box;
52
+ width: var(--form-input-fixed-width, var(--form-input-width));
53
+ }
54
+ :global(.fullWidth) .input {
55
+ box-sizing: border-box;
56
+ width: var(--form-input-fixed-width, 100%);
57
+ }
58
+ :global(.fullWidth) .input :global(input) {
59
+ box-sizing: border-box;
60
+ width: 100%;
61
+ }
62
+ @container (max-width: 400px) {
63
+ .form-item {
64
+ flex-direction: column;
65
+ align-items: flex-start;
66
+ gap: var(--form-label-vertical-gap, var(--space));
67
+ }
68
+ .label {
69
+ text-align: left;
70
+ }
71
+ .form-item {
72
+ width: auto;
73
+ text-align: left;
74
+ font-size: var(--font-size-small);
75
+ }
76
+ .form-item {
77
+ width: var(--form-input-fixed-width, var(--form-input-width));
78
+ }
79
+ }
80
+ /* Global Input Styles */
81
+ .globalInputStyles :global(input) {
82
+ font-family: var(--form-input-font-family, var(--input-font-family, var(--ui-font-family, var(--font-family, sans-serif))));
83
+ text-transform: var(--form-input-text-transform, var(--input-text-transform, var(--ui-text-transform, var(--text-transform, none))));
84
+ text-decoration: var(--form-input-text-decoration, var(--input-text-decoration, var(--ui-text-decoration, var(--text-decoration, none))));
85
+ font-size: var(--form-input-font-size, var(--input-font-size, var(--ui-font-size, var(--font-size, 16px))));
86
+ font-weight: var(--form-input-font-weight, var(--input-font-weight, var(--ui-font-weight, var(--font-weight, 400))));
87
+ line-height: var(--form-input-line-height, var(--input-line-height, var(--ui-line-height, var(--line-height, 1.5))));
88
+ letter-spacing: var(--form-input-letter-spacing, var(--input-letter-spacing, var(--ui-letter-spacing, var(--letter-spacing, 0.05em))));
89
+ box-sizing: border-box;
90
+ border: var(--form-input-border, var(--input-border, var(--ui-border, var(--border, none))));
91
+ border-top: var(--form-input-border-top, var(--input-border-top, var(--ui-border-top, var(--border-top, var(--form-input-border, var(--input-border, var(--ui-border, var(--border, none))))))));
92
+ border-right: var(--form-input-border-right, var(--input-border-right, var(--ui-border-right, var(--border-right, var(--form-input-border, var(--input-border, var(--ui-border, var(--border, none))))))));
93
+ border-bottom: var(--form-input-border-bottom, var(--input-border-bottom, var(--ui-border-bottom, var(--border-bottom, var(--form-input-border, var(--input-border, var(--ui-border, var(--border, none))))))));
94
+ border-left: var(--form-input-border-left, var(--input-border-left, var(--ui-border-left, var(--border-left, var(--form-input-border, var(--input-border, var(--ui-border, var(--border, none))))))));
95
+ padding: var(--form-input-padding, var(--input-padding, var(--ui-padding, var(--padding, 4px))));
96
+ border-radius: var(--form-input-square-radius, var(--input-square-radius, var(--ui-square-radius, var(--square-radius, 0))));
97
+ }</style>
@@ -0,0 +1,35 @@
1
+ /** @typedef {typeof __propDef.props} FormItemProps */
2
+ /** @typedef {typeof __propDef.events} FormItemEvents */
3
+ /** @typedef {typeof __propDef.slots} FormItemSlots */
4
+ export default class FormItem extends SvelteComponent<{
5
+ fullWidth?: boolean | undefined;
6
+ globalInputStyles?: boolean | undefined;
7
+ }, {
8
+ [evt: string]: CustomEvent<any>;
9
+ }, {
10
+ before: {};
11
+ label: {};
12
+ default: {};
13
+ after: {};
14
+ }> {
15
+ }
16
+ export type FormItemProps = typeof __propDef.props;
17
+ export type FormItemEvents = typeof __propDef.events;
18
+ export type FormItemSlots = typeof __propDef.slots;
19
+ import { SvelteComponent } from "svelte";
20
+ declare const __propDef: {
21
+ props: {
22
+ fullWidth?: boolean | undefined;
23
+ globalInputStyles?: boolean | undefined;
24
+ };
25
+ events: {
26
+ [evt: string]: CustomEvent<any>;
27
+ };
28
+ slots: {
29
+ before: {};
30
+ label: {};
31
+ default: {};
32
+ after: {};
33
+ };
34
+ };
35
+ export {};
@@ -0,0 +1,22 @@
1
+ <script>import { onMount } from "svelte";
2
+ let grid;
3
+ </script>
4
+
5
+ <div class="grid-layout">
6
+ <slot />
7
+ </div>
8
+
9
+ <style>/* Convenience groupings */
10
+ /* Warning: because we define a fallback
11
+ media query, the media query can override the container
12
+ if we stack a bunch of these in a row and aren't thoughtful about the order.
13
+ Put min-width queries *after* max-width queries so that smaller
14
+ container queries don't get their styles overridden by large media queries.
15
+ */
16
+ .grid-layout {
17
+ display: flex;
18
+ flex-wrap: wrap;
19
+ justify-content: center;
20
+ /*@include box-props(grid-layout);*/
21
+ gap: var(--grid-layout-gap, var(--gap, 8px));
22
+ }</style>
@@ -0,0 +1,16 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {
8
+ default: {};
9
+ };
10
+ };
11
+ export type GridLayoutProps = typeof __propDef.props;
12
+ export type GridLayoutEvents = typeof __propDef.events;
13
+ export type GridLayoutSlots = typeof __propDef.slots;
14
+ export default class GridLayout extends SvelteComponent<GridLayoutProps, GridLayoutEvents, GridLayoutSlots> {
15
+ }
16
+ export {};
@@ -0,0 +1,86 @@
1
+ <script>import { injectVars } from "../util";
2
+ export let bg = null;
3
+ export let fg = null;
4
+ export let padding = null;
5
+ export let width = null;
6
+ export let height = null;
7
+ let cssVars = injectVars($$props, "hero", [
8
+ "bg",
9
+ "fg",
10
+ "padding",
11
+ "width",
12
+ "height"
13
+ ]);
14
+ </script>
15
+
16
+ <div class="hero">
17
+ <slot />
18
+ </div>
19
+
20
+ <style>/* Convenience groupings */
21
+ /* Warning: because we define a fallback
22
+ media query, the media query can override the container
23
+ if we stack a bunch of these in a row and aren't thoughtful about the order.
24
+ Put min-width queries *after* max-width queries so that smaller
25
+ container queries don't get their styles overridden by large media queries.
26
+ */
27
+ .hero {
28
+ background: var(--hero-bg, var(--container-bg, var(--bg, white)));
29
+ color: var(--hero-fg, var(--container-fg, var(--fg, black)));
30
+ font-family: var(--hero-font-family, var(--container-font-family, var(--font-family, sans-serif)));
31
+ text-transform: var(--hero-text-transform, var(--container-text-transform, var(--text-transform, none)));
32
+ text-decoration: var(--hero-text-decoration, var(--container-text-decoration, var(--text-decoration, none)));
33
+ font-size: var(--hero-font-size, var(--container-font-size, var(--font-size, 16px)));
34
+ font-weight: var(--hero-font-weight, var(--container-font-weight, var(--font-weight, 400)));
35
+ line-height: var(--hero-line-height, var(--container-line-height, var(--line-height, 1.5)));
36
+ letter-spacing: var(--hero-letter-spacing, var(--container-letter-spacing, var(--letter-spacing, 0.05em)));
37
+ display: grid;
38
+ place-content: center;
39
+ width: var(--hero-width, 100%);
40
+ height: var(--hero-height, 100vh);
41
+ font-size: var(--hero-font-size, 2rem);
42
+ box-sizing: border-box;
43
+ animation-name: fade-in;
44
+ animation-duration: var(--hero-animation-duration, 1s);
45
+ animation-timing-function: var(--hero-animation-timing-function, ease-in-out);
46
+ }
47
+ .hero :global(p), .hero :global(blockquote), .hero :global(dl), .hero :global(ul), .hero :global(ol) {
48
+ max-width: var(--hero-line-width, var(--container-line-width, var(--line-width, 40em)));
49
+ font-family: var(--hero-body-font-family, var(--container-body-font-family, var(--body-font-family, var(--font-family))));
50
+ line-height: var(--hero-line-height, var(--container-line-height, var(--line-height, 1.5)));
51
+ margin-left: auto;
52
+ margin-right: auto;
53
+ font-weight: var(--hero-body-font-weight, var(--container-body-font-weight, var(--body-font-weight, var(--normal))));
54
+ }
55
+ .hero :global(h1),
56
+ .hero :global(h2),
57
+ .hero :global(h3),
58
+ .hero :global(h4),
59
+ .hero :global(h5),
60
+ .hero :global(h6) {
61
+ max-width: var(--hero-line-width, var(--container-line-width, var(--line-width, 40em)));
62
+ font-family: var(--hero-heading-font-family, var(--container-heading-font-family, var(--heading-font-family, var(--font-family))));
63
+ line-height: var(--hero-heading-line-height, var(--container-heading-line-height, var(--heading-line-height, var(--line-height))));
64
+ margin-left: auto;
65
+ margin-right: auto;
66
+ color: var(--heading-color, hero, container, var(--fg));
67
+ font-weight: var(--heading-font-weight, hero, container, var(--bold));
68
+ }
69
+ .hero h1,
70
+ .hero h2,
71
+ .hero h3,
72
+ .hero h4,
73
+ .hero h5,
74
+ .hero h6 {
75
+ text-align: center;
76
+ }
77
+ @keyframes fade-in {
78
+ 0% {
79
+ filter: blur(3px);
80
+ opacity: 0;
81
+ }
82
+ 100% {
83
+ filter: blur(0);
84
+ opacity: 1;
85
+ }
86
+ }</style>
@@ -0,0 +1,23 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ [x: string]: any;
5
+ bg?: string | null | undefined;
6
+ fg?: string | null | undefined;
7
+ padding?: string | null | undefined;
8
+ width?: string | null | undefined;
9
+ height?: string | null | undefined;
10
+ };
11
+ events: {
12
+ [evt: string]: CustomEvent<any>;
13
+ };
14
+ slots: {
15
+ default: {};
16
+ };
17
+ };
18
+ export type HeroProps = typeof __propDef.props;
19
+ export type HeroEvents = typeof __propDef.events;
20
+ export type HeroSlots = typeof __propDef.slots;
21
+ export default class Hero extends SvelteComponent<HeroProps, HeroEvents, HeroSlots> {
22
+ }
23
+ export {};
@@ -0,0 +1,108 @@
1
+ <script>import { injectVars } from "../util";
2
+ export let fg = null;
3
+ export let bg = null;
4
+ export let itemPadding = null;
5
+ export let itemWidth = null;
6
+ export let itemHeight = null;
7
+ export let itemFg = null;
8
+ export let itemBg = null;
9
+ export let itemEvenFg = null;
10
+ export let itemEvenBg = null;
11
+ export let itemActiveFg = null;
12
+ export let itemActiveBg = null;
13
+ let style = injectVars($$props, "menu", [
14
+ "fg",
15
+ "bg",
16
+ "itemPadding",
17
+ "itemWidth",
18
+ "itemHeight",
19
+ "itemFg",
20
+ "itemBg",
21
+ "itemEvenFg",
22
+ "itemEvenBg",
23
+ "itemActiveFg",
24
+ "itemActiveBg"
25
+ ]);
26
+ </script>
27
+
28
+ <ul {style} class="menu">
29
+ <slot />
30
+ </ul>
31
+
32
+ <style>/* Convenience groupings */
33
+ /* Warning: because we define a fallback
34
+ media query, the media query can override the container
35
+ if we stack a bunch of these in a row and aren't thoughtful about the order.
36
+ Put min-width queries *after* max-width queries so that smaller
37
+ container queries don't get their styles overridden by large media queries.
38
+ */
39
+ .menu {
40
+ list-style: none;
41
+ padding: 0;
42
+ margin: 0;
43
+ background: var(--menu-bg, var(--container-bg, var(--bg, white)));
44
+ color: var(--menu-fg, var(--container-fg, var(--fg, black)));
45
+ }
46
+ .menu :global(a), .menu :global(button), .menu :global(input[type="submit"]), .menu :global(.button) {
47
+ display: flex;
48
+ justify-content: var(--menu-item-justify, center);
49
+ align-items: var(--menu-item-align, center);
50
+ width: var(--menu-item-width, 100%);
51
+ height: var(--menu-item-height);
52
+ text-decoration: none;
53
+ font-family: var(--menu-item-font-family, var(--button-font-family, var(--ui-font-family, var(--control-font-family, var(--font-family, sans-serif)))));
54
+ text-transform: var(--menu-item-text-transform, var(--button-text-transform, var(--ui-text-transform, var(--control-text-transform, var(--text-transform, none)))));
55
+ text-decoration: var(--menu-item-text-decoration, var(--button-text-decoration, var(--ui-text-decoration, var(--control-text-decoration, var(--text-decoration, none)))));
56
+ font-size: var(--menu-item-font-size, var(--button-font-size, var(--ui-font-size, var(--control-font-size, var(--font-size, 16px)))));
57
+ font-weight: var(--menu-item-font-weight, var(--button-font-weight, var(--ui-font-weight, var(--control-font-weight, var(--font-weight, 400)))));
58
+ line-height: var(--menu-item-line-height, var(--button-line-height, var(--ui-line-height, var(--control-line-height, var(--line-height, 1.5)))));
59
+ letter-spacing: var(--menu-item-letter-spacing, var(--button-letter-spacing, var(--ui-letter-spacing, var(--control-letter-spacing, var(--letter-spacing, 0.05em)))));
60
+ background: var(--menu-item-bg, var(--button-bg, var(--control-bg, var(--bg, white))));
61
+ color: var(--menu-item-fg, var(--button-fg, var(--control-fg, var(--fg, black))));
62
+ box-sizing: border-box;
63
+ border: var(--menu-item-border, var(--button-border, var(--control-border, var(--border, none))));
64
+ border-top: var(--menu-item-border-top, var(--button-border-top, var(--control-border-top, var(--border-top, var(--menu-item-border, var(--button-border, var(--control-border, var(--border, none))))))));
65
+ border-right: var(--menu-item-border-right, var(--button-border-right, var(--control-border-right, var(--border-right, var(--menu-item-border, var(--button-border, var(--control-border, var(--border, none))))))));
66
+ border-bottom: var(--menu-item-border-bottom, var(--button-border-bottom, var(--control-border-bottom, var(--border-bottom, var(--menu-item-border, var(--button-border, var(--control-border, var(--border, none))))))));
67
+ border-left: var(--menu-item-border-left, var(--button-border-left, var(--control-border-left, var(--border-left, var(--menu-item-border, var(--button-border, var(--control-border, var(--border, none))))))));
68
+ padding: var(--menu-item-padding, var(--button-padding, var(--control-padding, var(--padding, 4px))));
69
+ border-radius: var(--menu-item-square-radius, var(--button-square-radius, var(--control-square-radius, var(--square-radius, 0))));
70
+ cursor: pointer;
71
+ transition: filter, transform var(--button-transition, var(--control-transition, var(--transition, 300ms)));
72
+ }
73
+ .menu :global(a):hover, .menu :global(button):hover, .menu :global(input[type="submit"]):hover, .menu :global(.button):hover {
74
+ filter: var(--menu-item-hover-filter, var(--button-hover-filter, var(--control-hover-filter, var(--hover-filter, brightness(1.1)))));
75
+ transform: var(--menu-item-hover-transform, var(--button-hover-transform, var(--control-hover-transform, var(--hover-transform, none))));
76
+ }
77
+ .menu :global(a):active, .menu :global(button):active, .menu :global(input[type="submit"]):active, .menu :global(.button):active {
78
+ filter: var(--menu-item-hover-filter, var(--button-hover-filter, var(--control-hover-filter, var(--hover-filter, brightness(0.9)))));
79
+ transform: var(--menu-item-hover-transform, var(--button-hover-transform, var(--control-hover-transform, var(--hover-transform, translate(var(--space), var(--space))))));
80
+ }
81
+ .menu :global(.active) {
82
+ background: var(--menu-item-active-bg, var(--primary-bg, var(--menu-item-bg, var(--button-bg, var(--control-bg, var(--container-bg, var(--bg, white)))))));
83
+ color: var(--menu-item-active-fg, var(--primary-fg, var(--menu-item-fg, var(--button-fg, var(--control-fg, var(--container-fg, var(--fg, black)))))));
84
+ }
85
+ /* & :global(li:nth-of-type(even)) > {
86
+ @include global-buttons {
87
+ @include color-props(
88
+ menu-item-even,
89
+ stripe,
90
+ menu-item,
91
+ button,
92
+ control
93
+ );
94
+ }
95
+ }
96
+
97
+ & :global(li:nth-of-type(even)) :global(.active),
98
+ :global(li:nth-of-type(odd)) :global(.active) {
99
+ @include color-props(
100
+ menu-item-active,
101
+ primary,
102
+ menu-item,
103
+ button,
104
+ control,
105
+ container
106
+ );
107
+ }
108
+ } */</style>
@@ -0,0 +1,29 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ [x: string]: any;
5
+ fg?: string | null | undefined;
6
+ bg?: string | null | undefined;
7
+ itemPadding?: string | null | undefined;
8
+ itemWidth?: string | null | undefined;
9
+ itemHeight?: string | null | undefined;
10
+ itemFg?: string | null | undefined;
11
+ itemBg?: string | null | undefined;
12
+ itemEvenFg?: string | null | undefined;
13
+ itemEvenBg?: string | null | undefined;
14
+ itemActiveFg?: string | null | undefined;
15
+ itemActiveBg?: string | null | undefined;
16
+ };
17
+ events: {
18
+ [evt: string]: CustomEvent<any>;
19
+ };
20
+ slots: {
21
+ default: {};
22
+ };
23
+ };
24
+ export type MenuListProps = typeof __propDef.props;
25
+ export type MenuListEvents = typeof __propDef.events;
26
+ export type MenuListSlots = typeof __propDef.slots;
27
+ export default class MenuList extends SvelteComponent<MenuListProps, MenuListEvents, MenuListSlots> {
28
+ }
29
+ export {};
@@ -0,0 +1,189 @@
1
+ <script>import { injectVars } from "../util";
2
+ import { onDestroy, onMount } from "svelte";
3
+ export let right = false;
4
+ export let sticky = false;
5
+ export let hideSidebar = false;
6
+ export let hideHeader = false;
7
+ export let hideFooter = false;
8
+ export let contentPadding = null;
9
+ export let width = null;
10
+ export let height = null;
11
+ export let bg = null;
12
+ export let fg = null;
13
+ let style = injectVars($$props, "page", [
14
+ "bg",
15
+ "fg",
16
+ "contentPadding",
17
+ "width",
18
+ "height"
19
+ ]);
20
+ let hasSidebar;
21
+ let hasHeader;
22
+ let hasFooter;
23
+ $:
24
+ hasSidebar = $$slots.sidebar && !hideSidebar;
25
+ $:
26
+ hasHeader = $$slots.header && !hideHeader;
27
+ $:
28
+ hasFooter = $$slots.footer && !hideFooter;
29
+ $:
30
+ console.log(
31
+ "Update to flags: header,footer,sidebar=",
32
+ hasHeader,
33
+ hasFooter,
34
+ hasSidebar
35
+ );
36
+ let freeze = false;
37
+ let pageElement;
38
+ function handleScroll() {
39
+ if (sticky) {
40
+ const rect = pageElement.getBoundingClientRect();
41
+ const computedTopStyle = getComputedStyle(pageElement).getPropertyValue("top");
42
+ const computedTop = parseFloat(computedTopStyle);
43
+ const isSticking = rect.top <= computedTop;
44
+ console.log("Freeze = ", !isSticking);
45
+ freeze = !isSticking;
46
+ }
47
+ }
48
+ onMount(() => {
49
+ if (sticky) {
50
+ console.log("Add scroll handler in a sec");
51
+ let el = document.querySelector(window.location.hash);
52
+ console.log("Hash", window.location.hash, "points to ", el);
53
+ el?.scrollIntoView();
54
+ window.addEventListener("scroll", handleScroll);
55
+ }
56
+ return () => {
57
+ if (window) {
58
+ window.removeEventListener("scroll", handleScroll);
59
+ }
60
+ };
61
+ });
62
+ </script>
63
+
64
+ <section
65
+ class="page"
66
+ class:freeze
67
+ class:right
68
+ class:sticky
69
+ class:hasHeader
70
+ class:hasSidebar
71
+ class:hasFooter
72
+ bind:this={pageElement}
73
+ {style}
74
+ >
75
+ <header>
76
+ <slot name="header" />
77
+ </header>
78
+ <div class="side-by-side">
79
+ <div class="aside">
80
+ <slot name="sidebar" />
81
+ </div>
82
+ <div class="content">
83
+ <slot />
84
+ </div>
85
+ </div>
86
+ <footer>
87
+ <slot name="footer" />
88
+ </footer>
89
+ </section>
90
+
91
+ <style>/* Convenience groupings */
92
+ /* Warning: because we define a fallback
93
+ media query, the media query can override the container
94
+ if we stack a bunch of these in a row and aren't thoughtful about the order.
95
+ Put min-width queries *after* max-width queries so that smaller
96
+ container queries don't get their styles overridden by large media queries.
97
+ */
98
+ header {
99
+ display: none;
100
+ }
101
+ .hasHeader > header {
102
+ display: block;
103
+ }
104
+ footer {
105
+ display: none;
106
+ }
107
+ .hasFooter > footer {
108
+ display: block;
109
+ }
110
+ .aside {
111
+ display: none;
112
+ }
113
+ .hasSidebar > div > .aside {
114
+ display: flex;
115
+ }
116
+ .page {
117
+ background: var(--page-bg, var(--bg, white));
118
+ color: var(--page-fg, var(--fg, black));
119
+ border: var(--page-border);
120
+ height: var(--page-height, 100vh);
121
+ width: var(--page-width, 100%);
122
+ container-type: size;
123
+ display: flex;
124
+ flex-direction: column;
125
+ align-items: stretch;
126
+ justify-content: stretch;
127
+ }
128
+ .page.sticky {
129
+ position: sticky;
130
+ top: 0;
131
+ }
132
+ .header {
133
+ flex-shrink: 1;
134
+ }
135
+ .content {
136
+ overflow-y: auto;
137
+ scrollbar-width: var(--page-content-scrollbar-width, var(--page-scrollbar-width, var(--scrollbar-width, thin)));
138
+ scrollbar-color: var(--page-content-scrollbar-thumb-bg, var(--page-scrollbar-thumb-bg, var(--scrollbar-thumb-bg, #888))) var(--page-content-scrollbar-track-bg, var(--page-scrollbar-track-bg, var(--scrollbar-track-bg, var(--border-color))));
139
+ box-sizing: border-box;
140
+ padding: var(--page-content-padding, var(--padding, 4px));
141
+ border: var(--page-content-border, var(--border, none));
142
+ border-top: var(--page-content-border-top, var(--border-top, var(--page-content-border, var(--border, none))));
143
+ border-right: var(--page-content-border-right, var(--border-right, var(--page-content-border, var(--border, none))));
144
+ border-bottom: var(--page-content-border-bottom, var(--border-bottom, var(--page-content-border, var(--border, none))));
145
+ border-left: var(--page-content-border-left, var(--border-left, var(--page-content-border, var(--border, none))));
146
+ border-radius: var(--page-content-border-radius, var(--border-radius, none));
147
+ }
148
+ .content::-webkit-scrollbar {
149
+ width: var(--page-content-scrollbar-width, var(--page-scrollbar-width, var(--scrollbar-width, var(--space-md))));
150
+ height: var(--page-content-scrollbar-height, var(--page-scrollbar-height, var(--scrollbar-height, var(--gap))));
151
+ }
152
+ .content::-webkit-scrollbar-track {
153
+ background: var(--page-content-scrollbar-track-bg, var(--page-scrollbar-track-bg, var(--scrollbar-track-bg, var(--bg))));
154
+ }
155
+ .content::-webkit-scrollbar-thumb {
156
+ background: var(--page-content-scrollbar-thumb-bg, var(--page-scrollbar-thumb-bg, var(--scrollbar-thumb-bg, var(--stripe-bg))));
157
+ border-radius: var(--page-content-scrollbar-thumb-radius, var(--page-scrollbar-thumb-radius, var(--scrollbar-thumb-radius, var(--border-radius))));
158
+ }
159
+ .content::-webkit-scrollbar-thumb:hover {
160
+ background: var(--page-content-scrollbar-thumb-hover-bg, var(--page-scrollbar-thumb-hover-bg, var(--scrollbar-thumb-hover-bg, var(--secondary-bg))));
161
+ }
162
+ .aside {
163
+ flex: 0 0 auto;
164
+ }
165
+ .side-by-side {
166
+ flex-grow: 1;
167
+ display: flex;
168
+ flex-direction: row;
169
+ align-items: stretch;
170
+ justify-content: stretch;
171
+ overflow: hidden;
172
+ margin: 0;
173
+ box-sizing: border-box;
174
+ gap: var(--column-gap);
175
+ padding: var(--padding);
176
+ }
177
+ .right .side-by-side {
178
+ flex-direction: row-reverse;
179
+ }
180
+ .page .content {
181
+ container-type: size;
182
+ height: 100%;
183
+ width: 100%;
184
+ background: var(--bg);
185
+ color: var(--text);
186
+ }
187
+ .page.sticky.freeze :global(*) {
188
+ overflow: hidden;
189
+ }</style>
@@ -0,0 +1,31 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ [x: string]: any;
5
+ right?: boolean | undefined;
6
+ sticky?: boolean | undefined;
7
+ hideSidebar?: boolean | undefined;
8
+ hideHeader?: boolean | undefined;
9
+ hideFooter?: boolean | undefined;
10
+ contentPadding?: string | null | undefined;
11
+ width?: string | null | undefined;
12
+ height?: string | null | undefined;
13
+ bg?: string | null | undefined;
14
+ fg?: string | null | undefined;
15
+ };
16
+ events: {
17
+ [evt: string]: CustomEvent<any>;
18
+ };
19
+ slots: {
20
+ header: {};
21
+ sidebar: {};
22
+ default: {};
23
+ footer: {};
24
+ };
25
+ };
26
+ export type PageProps = typeof __propDef.props;
27
+ export type PageEvents = typeof __propDef.events;
28
+ export type PageSlots = typeof __propDef.slots;
29
+ export default class Page extends SvelteComponent<PageProps, PageEvents, PageSlots> {
30
+ }
31
+ export {};