fulldev-ui 0.3.0-beta.3 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/.astro/settings.json +1 -1
  2. package/package.json +10 -5
  3. package/src/components/_Block.astro +0 -5
  4. package/src/components/_Component.astro +10 -8
  5. package/src/components/_archive/Body.astro +2 -2
  6. package/src/components/_archive/Nav.astro +12 -0
  7. package/src/components/_todo/Form.astro +1 -1
  8. package/src/components/_todo/Prose.astro +7 -7
  9. package/src/components/base/Badge.astro +20 -16
  10. package/src/components/base/Button.astro +21 -34
  11. package/src/components/base/Icon.astro +3 -2
  12. package/src/components/base/Image.astro +116 -42
  13. package/src/components/base/Logo.astro +1 -1
  14. package/src/components/base/Rating.astro +27 -25
  15. package/src/components/base/checkbox/Checkbox.astro +52 -0
  16. package/src/components/base/checkbox/CheckboxElement.astro +31 -0
  17. package/src/components/base/input/Input.astro +79 -0
  18. package/src/components/base/input/InputElement.astro +60 -0
  19. package/src/components/base/radio/Radio.astro +66 -0
  20. package/src/components/base/radio/RadioElement.astro +34 -0
  21. package/src/components/base/select/Select.astro +90 -0
  22. package/src/components/base/select/SelectElement.astro +56 -0
  23. package/src/components/base/select/SelectOption.astro +32 -0
  24. package/src/components/base/switch/Switch.astro +55 -0
  25. package/src/components/base/{Switch.astro → switch/SwitchElement.astro} +15 -13
  26. package/src/components/base/table/Table.astro +55 -0
  27. package/src/components/base/table/TableBody.astro +39 -0
  28. package/src/components/base/table/TableCell.astro +30 -0
  29. package/src/components/base/table/TableFooter.astro +48 -0
  30. package/src/components/base/table/TableHead.astro +31 -0
  31. package/src/components/base/table/TableHeader.astro +44 -0
  32. package/src/components/base/table/TableRow.astro +46 -0
  33. package/src/components/base/textarea/Textarea.astro +79 -0
  34. package/src/components/base/textarea/TextareaElement.astro +61 -0
  35. package/src/components/segment/Card.astro +28 -4
  36. package/src/components/segment/Footer.astro +88 -0
  37. package/src/components/segment/Header.astro +43 -13
  38. package/src/components/segment/Section.astro +60 -25
  39. package/src/components/segment/_regels.md +32 -0
  40. package/src/components/structure/Bento.astro +38 -0
  41. package/src/components/{segment → structure}/Box.astro +2 -12
  42. package/src/components/structure/Carousel.astro +55 -0
  43. package/src/components/structure/Column.astro +46 -0
  44. package/src/components/structure/Grid.astro +33 -0
  45. package/src/components/structure/Masonry.astro +42 -0
  46. package/src/components/structure/Row.astro +44 -0
  47. package/src/components/structure/Split.astro +54 -0
  48. package/src/components/structure/Spread.astro +45 -0
  49. package/src/components/structure/Wrap.astro +44 -0
  50. package/src/components/typography/Heading.astro +37 -28
  51. package/src/components/typography/Label.astro +4 -8
  52. package/src/components/typography/Link.astro +40 -12
  53. package/src/components/typography/List.astro +12 -13
  54. package/src/components/typography/ListItem.astro +11 -10
  55. package/src/components/typography/Paragraph.astro +4 -9
  56. package/src/components/typography/Tagline.astro +11 -10
  57. package/src/components/typography/Text.astro +5 -9
  58. package/src/css/color.scss +289 -0
  59. package/src/css/size.scss +293 -0
  60. package/src/css/space.scss +94 -0
  61. package/src/css/styles.css +1 -2
  62. package/src/index.ts +29 -11
  63. package/src/integration/tailwind.ts +34 -0
  64. package/src/integration/unocss.ts +38 -0
  65. package/src/components/_archive/Row.astro +0 -26
  66. package/src/components/_todo/Footer.astro +0 -66
  67. package/src/components/_todo/todo.md +0 -10
  68. package/src/components/base/Checkbox.astro +0 -41
  69. package/src/components/base/Input.astro +0 -59
  70. package/src/components/base/Radio.astro +0 -39
  71. package/src/components/base/Select.astro +0 -69
  72. package/src/components/base/SelectOption.astro +0 -27
  73. package/src/components/base/Textarea.astro +0 -34
  74. package/src/components/base/todo.md +0 -7
  75. package/src/components/segment/Deck.astro +0 -40
  76. package/src/components/segment/Group.astro +0 -29
  77. package/src/components/typography/todo.md +0 -3
  78. package/src/css/color.css +0 -88
  79. package/src/css/props/align.scss +0 -20
  80. package/src/css/props/frame.scss +0 -153
  81. package/src/css/props/mask +0 -1
  82. package/src/css/props/position.scss +0 -33
  83. package/src/css/props/ratio +0 -1
  84. package/src/css/props/structure.scss +0 -228
  85. package/src/css/props/variant.scss +0 -130
  86. package/src/css/radix.css +0 -281
  87. package/src/css/size.css +0 -334
@@ -1,59 +0,0 @@
1
- ---
2
- import type { ComponentProps, HTMLTag, Polymorphic } from 'astro/types'
3
- import Component from '../_Component.astro'
4
-
5
- type Props<As extends HTMLTag = 'input'> = Polymorphic<{ as: As }> &
6
- ComponentProps<typeof Component> & {
7
- variant?: 'outline'
8
- }
9
-
10
- const { as = 'input', variant = 'outline', ...rest } = Astro.props
11
- ---
12
-
13
- <Component
14
- class:list={['input']}
15
- if={true}
16
- {as}
17
- {variant}
18
- {...rest}
19
- />
20
-
21
- <style is:global lang="scss">
22
- @import '../../css/utils.scss';
23
-
24
- @include component('input') {
25
- display: flex;
26
- position: relative;
27
- align-items: center;
28
- outline: none;
29
- box-shadow: inset 0 0 0 var(--border-width) var(--border-outline);
30
- border: 0px;
31
- border-radius: var(--radius-1);
32
- background-color: var(--input-background);
33
- padding: var(--element-2);
34
- width: 100%;
35
- min-width: var(--element-2);
36
- height: calc(var(--text-label) + 2 * var(--element-3));
37
- color: var(--foreground);
38
- font-weight: var(--font-weight);
39
- font-size: var(--text-label);
40
- line-height: 1.25;
41
- font-family: var(--font-family);
42
-
43
- &:hover {
44
- outline: none;
45
- box-shadow: inset 0 0 0 1px var(--border-hover);
46
- }
47
-
48
- &:focus {
49
- outline: none;
50
- box-shadow: inset 0 0 0 3px var(--border-hover);
51
- }
52
-
53
- &:disabled {
54
- opacity: 50%;
55
- cursor: not-allowed;
56
- pointer-events: none;
57
- }
58
- }
59
- </style>
@@ -1,39 +0,0 @@
1
- ---
2
- import type { ComponentProps } from 'astro/types'
3
-
4
- type Props = ComponentProps<typeof Component>
5
-
6
- const { as = 'input', type = 'radio', name, ...rest } = Astro.props
7
- ---
8
-
9
- <Component
10
- class:list={['radio']}
11
- if={true}
12
- {as}
13
- type="radio"
14
- {...rest}
15
- />
16
-
17
- <style is:global lang="scss">
18
- @import '../../css/utils.scss';
19
-
20
- @include component('radio') {
21
- border-width: var(--border-width);
22
- border-color: var(--border-color);
23
- border-radius: var(--full-border-radius-2);
24
- background: var(--background);
25
- min-width: var(--element-2);
26
- accent-color: var(--10);
27
- font-size: var(--text-body);
28
-
29
- &:hover {
30
- border: var(--border-color-hover);
31
- background: var(--background-hover);
32
- }
33
-
34
- &:active {
35
- border: var(--border-color-active);
36
- background: var(--background-active);
37
- }
38
- }
39
- </style>
@@ -1,69 +0,0 @@
1
- ---
2
- // TODO clean up the styling. Since before every component in Fullui was just one element, we should decide how we are going to handle situation like this where extra elements are needed.
3
- // I think we should split it up into multiple components, like SelectIcon etc. gr Sil
4
- import type { ComponentProps, Polymorphic } from 'astro/types'
5
- import { isObject } from 'radash'
6
- import Component from '../_Component.astro'
7
- import Icon from './Icon.astro'
8
- import SelectOption from './SelectOption.astro'
9
-
10
- type Props<As extends 'select'> = Polymorphic<{ as: As }> &
11
- ComponentProps<typeof Component> & {
12
- options?: (ComponentProps<typeof SelectOption> | string)[]
13
- }
14
-
15
- const { as = 'select', options, ...rest } = Astro.props
16
- ---
17
-
18
- <Component
19
- as="div"
20
- class:list="select-wrapper"
21
- {...rest}
22
- >
23
- <Component
24
- as="select"
25
- if={options}
26
- class:list={['select input']}
27
- {...rest}
28
- >
29
- <slot name="before" />
30
- {
31
- options?.map((option: any) => {
32
- if (isObject(option)) return <SelectOption {...option} />
33
- else return <SelectOption text={option} />
34
- })
35
- }
36
- <slot />
37
- </Component>
38
- <div class="select-icon-wrapper">
39
- <Icon
40
- class="select-icon"
41
- name="chevron-down"
42
- />
43
- </div>
44
- </Component>
45
-
46
- <style is:global lang="scss">
47
- @import '../../css/utils.scss';
48
-
49
- @include component('select') {
50
- appearance: none;
51
- }
52
-
53
- .select-icon-wrapper {
54
- display: flex;
55
- position: absolute;
56
- top: 0;
57
- right: var(--element-2);
58
- align-items: center;
59
- margin: 0 !important;
60
- padding: 0;
61
- height: 100%;
62
- pointer-events: none;
63
- }
64
-
65
- .full.select-wrapper {
66
- position: relative;
67
- width: 100%;
68
- }
69
- </style>
@@ -1,27 +0,0 @@
1
- ---
2
- import type { HTMLAttributes } from 'astro/types'
3
-
4
- type Props = Omit<HTMLAttributes<'option'>, 'slot'> & {
5
- text?: string
6
- }
7
-
8
- const { text, ...rest } = Astro.props
9
- ---
10
-
11
- <option
12
- class:list={['option']}
13
- {...rest}
14
- >
15
- {text}
16
- <slot />
17
- </option>
18
-
19
- <style>
20
- .full.option {
21
- color: var(--foreground);
22
- font-weight: var(--font-weight);
23
- font-size: var(--text-label);
24
- line-height: 1;
25
- font-family: var(--font-family);
26
- }
27
- </style>
@@ -1,34 +0,0 @@
1
- ---
2
- import type { ComponentProps, HTMLTag, Polymorphic } from 'astro/types'
3
- import Component from '../_Component.astro'
4
-
5
- type Props<As extends HTMLTag = 'textarea'> = Polymorphic<{ as: As }> &
6
- ComponentProps<typeof Component>
7
-
8
- const {
9
- as = 'textarea',
10
- rows = '5',
11
- variant = 'outline',
12
- name,
13
- ...rest
14
- } = Astro.props
15
- ---
16
-
17
- <Component
18
- class:list={['textarea input']}
19
- if={true}
20
- {rows}
21
- {variant}
22
- {as}
23
- {...rest}
24
- />
25
-
26
- <style is:global lang="scss">
27
- @import '../../css/utils.scss';
28
-
29
- @include component('textarea') {
30
- height: calc((var(--text-1) + 2 * var(--element-3)) * 2);
31
- min-height: calc((var(--text-1) + 2 * var(--element-3)) * 1);
32
- resize: vertical;
33
- }
34
- </style>
@@ -1,7 +0,0 @@
1
- # Chores
2
-
3
- # New components
4
- - Stat (for displaying a number with a label)
5
- - Spinner (for loading states)
6
- - Bubble (for whatsapp chat bubbles etc)
7
- - Divider (for separating with a light border)
@@ -1,40 +0,0 @@
1
- ---
2
- import type { HTMLTag, Polymorphic } from 'astro/types'
3
- import Component from '../_Component.astro'
4
-
5
- type Props<As extends HTMLTag = 'div'> = Polymorphic<{ as: As }> & {
6
- scheme?: 'light' | 'dark'
7
- color?: 'base' | 'brand'
8
- compact?: boolean
9
- size?: 'sm' | 'md' | 'lg' | 'xl'
10
- structure?: 'grid' | 'carousel' | 'masonry' | 'bento' | 'row' | 'split'
11
- frame?: 'wrapper' | 'container'
12
- }
13
-
14
- const { as = 'div', structure = 'grid', ...rest } = Astro.props
15
- ---
16
-
17
- <Component
18
- class:list={['deck']}
19
- {as}
20
- {structure}
21
- {...rest}
22
- >
23
- <slot />
24
- </Component>
25
-
26
- <style is:global lang="scss">
27
- @import '../../css/utils.scss';
28
-
29
- @include component('deck') {
30
- position: relative;
31
- width: 100%;
32
-
33
- // &.frame-fill {
34
- // margin-right: calc(var(--space-gutter) * -1);
35
- // margin-left: calc(var(--space-gutter) * -1);
36
- // padding: 0 var(--space-gutter) var(--space-3);
37
- // width: calc(100% + var(--space-gutter) * 2);
38
- // }
39
- }
40
- </style>
@@ -1,29 +0,0 @@
1
- ---
2
- import type { ComponentProps, HTMLTag, Polymorphic } from 'astro/types'
3
- import Component from '../_Component.astro'
4
-
5
- type Props<As extends HTMLTag = 'div'> = Polymorphic<{ as: As }> &
6
- ComponentProps<typeof Component> & {
7
- color?: 'base' | 'brand'
8
- size?: 'sm' | 'md' | 'lg'
9
- structure?: 'row' | 'column' | 'wrap'
10
- }
11
-
12
- const { ...rest } = Astro.props
13
- ---
14
-
15
- <Component
16
- class:list={['group']}
17
- {...rest}
18
- >
19
- <slot />
20
- </Component>
21
-
22
- <style is:global lang="scss">
23
- @import '../../css/utils.scss';
24
-
25
- @include component('group') {
26
- justify-content: stretch;
27
- align-items: center;
28
- }
29
- </style>
@@ -1,3 +0,0 @@
1
- # New components
2
- - Highlight (for highlighint stuff in headings for example, with a primary background etc. Should accept same variants as badge)
3
-
package/src/css/color.css DELETED
@@ -1,88 +0,0 @@
1
- :root,
2
- .light,
3
- .light-theme,
4
- .theme-light,
5
- [data-theme='light'],
6
- .dark,
7
- .dark-theme,
8
- .theme-dark,
9
- [data-theme='dark'] {
10
- --base-background: var(--base-1);
11
- --base-background-surface: var(--base-surface);
12
- --base-background-subtle: var(--base-2);
13
- --base-background-soft: var(--base-3);
14
- --base-background-hover: var(--base-4);
15
- --base-background-active: var(--base-5);
16
- --base-border: var(--base-6);
17
- --base-border-outline: var(--base-7);
18
- --base-border-hover: var(--base-8);
19
- --base-solid: var(--base-9);
20
- --base-solid-hover: var(--base-10);
21
- --base-solid-contrast: var(--base-contrast);
22
- --base-foreground: var(--base-11);
23
- --base-foreground-contrast: var(--base-12);
24
-
25
- --brand-background: var(--brand-1);
26
- --brand-background-surface: var(--brand-surface);
27
- --brand-background-subtle: var(--brand-2);
28
- --brand-background-soft: var(--brand-3);
29
- --brand-background-hover: var(--brand-4);
30
- --brand-background-active: var(--brand-5);
31
- --brand-border: var(--brand-6);
32
- --brand-border-outline: var(--brand-7);
33
- --brand-border-hover: var(--brand-8);
34
- --brand-solid: var(--brand-9);
35
- --brand-solid-hover: var(--brand-10);
36
- --brand-solid-contrast: var(--brand-contrast);
37
- --brand-foreground: var(--brand-11);
38
- --brand-foreground-contrast: var(--brand-12);
39
- }
40
-
41
- /* --------------------------- */
42
- /* Generate colors */
43
- /* --------------------------- */
44
-
45
- :where(:root),
46
- :where(.theme-light),
47
- :where(.theme-dark),
48
- .color-base,
49
- .color-base
50
- [class*='theme-']:not(.color-base [class*='color-'] [class*='theme-']):not(
51
- .color-base [class*='color-'][class*='theme-']
52
- ) {
53
- --background: var(--base-background);
54
- --background-surface: var(--base-background-surface);
55
- --background-subtle: var(--base-background-subtle);
56
- --background-soft: var(--base-background-soft);
57
- --background-hover: var(--base-background-hover);
58
- --background-active: var(--base-background-active);
59
- --border: var(--base-border);
60
- --border-outline: var(--base-border-outline);
61
- --border-hover: var(--base-border-hover);
62
- --solid: var(--base-solid);
63
- --solid-hover: var(--base-solid-hover);
64
- --solid-contrast: var(--base-solid-contrast);
65
- --foreground: var(--base-foreground);
66
- --foreground-contrast: var(--base-foreground-contrast);
67
- }
68
-
69
- .color-brand,
70
- .color-brand
71
- [class*='theme-']:not(.color-brand [class*='color-'] [class*='theme-']):not(
72
- .color-brand [class*='color-'][class*='theme-']
73
- ) {
74
- --background: var(--brand-background);
75
- --background-surface: var(--brand-background-surface);
76
- --background-subtle: var(--brand-background-subtle);
77
- --background-soft: var(--brand-background-soft);
78
- --background-hover: var(--brand-background-hover);
79
- --background-active: var(--brand-background-active);
80
- --border: var(--brand-border);
81
- --border-outline: var(--brand-border-outline);
82
- --border-hover: var(--brand-border-hover);
83
- --solid: var(--brand-solid);
84
- --solid-hover: var(--brand-solid-hover);
85
- --solid-contrast: var(--brand-solid-contrast);
86
- --foreground: var(--brand-foreground);
87
- --foreground-contrast: var(--brand-foreground-contrast);
88
- }
@@ -1,20 +0,0 @@
1
- .align-start {
2
- align-items: flex-start;
3
- }
4
-
5
- .align-center {
6
- align-items: center;
7
- text-align: var(--space-x, center);
8
-
9
- & > * > * {
10
- text-align: left;
11
- }
12
- }
13
-
14
- .align-end {
15
- align-items: flex-end;
16
- }
17
-
18
- .align-stretch {
19
- align-items: stretch;
20
- }
@@ -1,153 +0,0 @@
1
- :root {
2
- --screen: 1536px;
3
- }
4
-
5
- .frame-wrapper,
6
- .frame-viewport,
7
- .frame-container,
8
- .frame-panel {
9
- --gutter: max(4vw, calc(100vw - var(--screen)) / 2);
10
- }
11
-
12
- .frame-wrapper,
13
- .frame-viewport {
14
- --inner-x: var(--gutter);
15
-
16
- padding-right: var(--gutter);
17
- padding-left: var(--gutter);
18
- width: 100%;
19
- max-width: 100%;
20
- overflow: hidden;
21
-
22
- &:is(.split > &) {
23
- @media (min-width: 768px) {
24
- &:not(:first-child) {
25
- padding-left: 0;
26
- }
27
-
28
- &:not(:last-child) {
29
- padding-right: 0;
30
- }
31
- }
32
- }
33
- }
34
-
35
- .frame-viewport {
36
- min-height: 100%;
37
- }
38
-
39
- .frame-container {
40
- margin-right: var(--gutter);
41
- margin-left: var(--gutter);
42
- max-width: calc(100% - var(--gutter) * 2);
43
-
44
- &:is(.split > &) {
45
- @media (min-width: 768px) {
46
- &:not(:first-child) {
47
- margin-left: 0;
48
- }
49
-
50
- &:not(:last-child) {
51
- margin-right: 0;
52
- }
53
- }
54
- }
55
- }
56
-
57
- .frame-panel {
58
- --inner-x: var(--space-6);
59
- --inner-y: var(--space-6);
60
-
61
- position: relative;
62
- border-radius: var(--radius-3);
63
- padding: var(--inner-y) var(--inner-x);
64
- width: 100%;
65
- overflow: hidden;
66
-
67
- &.section {
68
- --inner-x: min(var(--gutter), var(--space-6));
69
-
70
- margin-right: var(--gutter);
71
- margin-left: var(--gutter);
72
- max-width: calc(100% - var(--gutter) * 2);
73
- }
74
- }
75
-
76
- .frame-inset {
77
- &:is(.structure-column > &) {
78
- margin-right: calc(var(--inner-x) * -1);
79
- margin-left: calc(var(--inner-x) * -1);
80
- width: calc(100% + var(--inner-x) * 2);
81
-
82
- &:first-child {
83
- margin-top: calc(var(--inner-y) * -1);
84
- height: calc(100% + var(--inner-y) * 1);
85
- }
86
-
87
- &:last-child {
88
- margin-bottom: calc(var(--inner-y) * -1);
89
- height: calc(100% + var(--inner-y) * 1);
90
- }
91
- }
92
-
93
- &:is(.structure-split > &) {
94
- @media (max-width: 1023.999px) {
95
- margin-right: calc(var(--inner-x) * -1);
96
- margin-left: calc(var(--inner-x) * -1);
97
- width: calc(100% + var(--inner-x) * 2);
98
-
99
- &:first-child {
100
- margin-top: calc(var(--inner-y) * -1);
101
- height: calc(100% + var(--inner-y) * 1);
102
- }
103
-
104
- &:last-child {
105
- margin-bottom: calc(var(--inner-y) * -1);
106
- height: calc(100% + var(--inner-y) * 1);
107
- }
108
- }
109
-
110
- @media (min-width: 1024px) {
111
- margin-top: calc(var(--inner-y) * -1);
112
- margin-bottom: calc(var(--inner-y) * -1);
113
- height: calc(100% + var(--inner-y) * 2);
114
-
115
- &:first-child {
116
- margin-left: calc(var(--inner-x) * -1);
117
- width: calc(100% + var(--inner-x) * 1);
118
- }
119
-
120
- &:last-child {
121
- margin-right: calc(var(--inner-x) * -1);
122
- width: calc(100% + var(--inner-x) * 1);
123
- }
124
- }
125
- }
126
- }
127
-
128
- .frame-cover {
129
- width: 100%;
130
- height: 100%;
131
- object-fit: cover;
132
- }
133
-
134
- .frame-background {
135
- position: absolute;
136
- top: 0;
137
- right: 0;
138
- bottom: 0;
139
- left: 0;
140
- order: 1;
141
- z-index: -1;
142
- margin: 0 !important;
143
- border-radius: 0;
144
- width: 100%;
145
- height: 100%;
146
- max-height: 100%;
147
- object-fit: cover;
148
-
149
- ~ .full {
150
- position: relative;
151
- z-index: 1;
152
- }
153
- }
@@ -1 +0,0 @@
1
-
@@ -1,33 +0,0 @@
1
- .position-background {
2
- position: absolute;
3
- top: 0;
4
- right: 0;
5
- bottom: 0;
6
- left: 0;
7
- order: 1;
8
- z-index: -1;
9
- margin: 0 !important;
10
- border-radius: 0;
11
- width: 100%;
12
- height: 100%;
13
- max-height: 100%;
14
- object-fit: cover;
15
-
16
- ~ .full {
17
- position: relative;
18
- z-index: 1;
19
- }
20
- }
21
-
22
- .position-cover {
23
- width: 100%;
24
- height: 100%;
25
- object-fit: cover;
26
- }
27
-
28
- .position-container {
29
- width: 100%;
30
- height: 100%;
31
- object-fit: contain;
32
- object-position: center;
33
- }
@@ -1 +0,0 @@
1
-