fluentui-svelte 0.1.2 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -6
- package/dist/components/auto-suggest-box/auto-suggest-box.svelte +74 -56
- package/dist/components/auto-suggest-box/docs/llms.md +46 -13
- package/dist/components/auto-suggest-box/option.svelte +2 -1
- package/dist/components/auto-suggest-box/types.d.ts +5 -0
- package/dist/components/avatar/avatar.svelte +1 -1
- package/dist/components/avatar/docs/llms.md +20 -14
- package/dist/components/badge/badge-icon.svelte +5 -8
- package/dist/components/badge/badge.svelte +6 -2
- package/dist/components/badge/docs/llms.md +29 -16
- package/dist/components/button/button.svelte +13 -7
- package/dist/components/button/docs/llms.md +33 -24
- package/dist/components/button/types.d.ts +5 -1
- package/dist/components/calendar-date-picker/docs/llms.md +17 -7
- package/dist/components/calendar-view/calendar-view-header.svelte +2 -2
- package/dist/components/calendar-view/calendar-view-header.svelte.d.ts +2 -17
- package/dist/components/calendar-view/calendar-view-months.svelte +1 -1
- package/dist/components/calendar-view/calendar-view-years.svelte +1 -1
- package/dist/components/calendar-view/calendar-view.svelte +66 -52
- package/dist/components/calendar-view/docs/llms.md +42 -30
- package/dist/components/card/card-context.svelte.d.ts +2 -0
- package/dist/components/card/card-context.svelte.js +2 -0
- package/dist/components/card/card-footer.svelte +37 -0
- package/dist/components/card/card-footer.svelte.d.ts +4 -0
- package/dist/components/card/card-header.svelte +81 -0
- package/dist/components/card/card-header.svelte.d.ts +4 -0
- package/dist/components/card/card-preview.svelte +64 -0
- package/dist/components/card/card-preview.svelte.d.ts +4 -0
- package/dist/components/card/card.svelte +242 -0
- package/dist/components/card/card.svelte.d.ts +39 -0
- package/dist/components/card/docs/llms.md +226 -0
- package/dist/components/card/types.d.ts +129 -0
- package/dist/components/card/types.js +1 -0
- package/dist/components/checkbox/checkbox.svelte +5 -3
- package/dist/components/checkbox/docs/llms.md +18 -12
- package/dist/components/date-picker/docs/llms.md +25 -15
- package/dist/components/dialog/dialog-surface.svelte +8 -8
- package/dist/components/dialog/dialog.svelte +41 -39
- package/dist/components/dialog/docs/llms.md +59 -34
- package/dist/components/divider/docs/llms.md +14 -9
- package/dist/components/dropdown/docs/llms.md +34 -15
- package/dist/components/dropdown/dropdown.svelte +4 -2
- package/dist/components/dropdown-select/docs/llms.md +28 -14
- package/dist/components/expander/docs/llms.md +19 -12
- package/dist/components/flyout/docs/llms.md +17 -11
- package/dist/components/hyperlink/docs/llms.md +11 -7
- package/dist/components/info-bar/docs/llms.md +15 -9
- package/dist/components/label/docs/llms.md +15 -11
- package/dist/components/list-view/docs/llms.md +34 -24
- package/dist/components/list-view/list-view-item.svelte +10 -4
- package/dist/components/list-view/list-view.svelte +68 -63
- package/dist/components/menu/context-menu-trigger.svelte +45 -40
- package/dist/components/menu/docs/llms.md +63 -34
- package/dist/components/menu/menu-item-checkbox.svelte +4 -2
- package/dist/components/menu/menu-item-radio.svelte +4 -2
- package/dist/components/menu/menu-item-switch.svelte +4 -2
- package/dist/components/menu/menu-item.svelte +6 -2
- package/dist/components/menu/menu-popover.svelte +21 -10
- package/dist/components/menu/menu-trigger.svelte +22 -9
- package/dist/components/menu/menu.svelte +98 -87
- package/dist/components/number-box/docs/llms.md +10 -6
- package/dist/components/persona/docs/llms.md +19 -14
- package/dist/components/progress-bar/docs/llms.md +18 -10
- package/dist/components/progress-ring/docs/llms.md +19 -12
- package/dist/components/radio-button/docs/llms.md +13 -8
- package/dist/components/skeleton/docs/llms.md +13 -8
- package/dist/components/slider/docs/llms.md +33 -21
- package/dist/components/slider/slider.svelte +13 -11
- package/dist/components/text-box/docs/llms.md +23 -17
- package/dist/components/textarea/docs/llms.md +16 -7
- package/dist/components/time-picker/docs/llms.md +20 -10
- package/dist/components/toggle-switch/docs/llms.md +13 -9
- package/dist/components/tooltip/docs/llms.md +24 -10
- package/dist/components/tree-view/docs/llms.md +53 -35
- package/dist/components/tree-view/tree-view-item-content.svelte +1 -1
- package/dist/components/tree-view/tree-view-item.svelte +3 -3
- package/dist/components/tree-view/tree-view.svelte +89 -93
- package/dist/css/class-darkmode.css +3 -1
- package/dist/css/media-darkmode.css +3 -1
- package/dist/css/theme.css +3 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +6 -0
- package/dist/internal/components/render-soc/render-soc.svelte +17 -23
- package/dist/internal/components/render-soc/render-soc.svelte.d.ts +16 -16
- package/dist/providers/fluentui-svelte/fluentui-svelte.svelte +15 -15
- package/dist/types/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -40,7 +40,11 @@ export type ButtonProps<T extends ButtonGenerics = 'button'> = {
|
|
|
40
40
|
/** The icon used to indicate the button triggers a menu.
|
|
41
41
|
* @type Snippet | Component
|
|
42
42
|
*/
|
|
43
|
-
indicatorIcon?: Snippet<
|
|
43
|
+
indicatorIcon?: Snippet<[{
|
|
44
|
+
class: string;
|
|
45
|
+
}]> | Component<{
|
|
46
|
+
class: string;
|
|
47
|
+
}>;
|
|
44
48
|
} & PolymorphicProps<T>;
|
|
45
49
|
export type ButtonElementDOMType = {
|
|
46
50
|
button: HTMLButtonElement;
|
|
@@ -20,13 +20,23 @@ The `CalendarDatePicker` combines a button trigger with a `CalendarView` popup.
|
|
|
20
20
|
|
|
21
21
|
## Component Props
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
| `
|
|
29
|
-
| `
|
|
23
|
+
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
24
|
+
<!-- props:CalendarDatePickerProps -->
|
|
25
|
+
|
|
26
|
+
| Name | Type | Default | Description |
|
|
27
|
+
| ------------------------------------------------------------------------------------------------ | --------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
|
|
28
|
+
| `ref` _bindable_ | `HTMLDivElement` | | The DOM reference of the picker element. |
|
|
29
|
+
| `value` _bindable_ | `Date` | `null` | `null` | The selected date. |
|
|
30
|
+
| `format` | `Intl.DateTimeFormatOptions` | `{ year: 'numeric', month: 'numeric', day: 'numeric' }` | The options used to format the date rendered on the trigger. |
|
|
31
|
+
| `calendarPosition` | `Partial<ComputePositionConfig>` | | The floating UI configuration object of the calendar popup. Keys left out keep their default. |
|
|
32
|
+
| `onChange` | `(event: Event, value: Date` | `null) => void` | | Called whenever the selected date changes. |
|
|
33
|
+
| `popupLabel` | `string` | `'Choose a date'` | The accessible name of the calendar popup, which is announced as a dialog. |
|
|
34
|
+
| `triggerRef` _bindable_ | `HTMLButtonElement` | | The DOM reference of the trigger button. |
|
|
35
|
+
| `popupRef` _bindable_ | `HTMLDivElement` | | The DOM reference of the calendar popup. |
|
|
36
|
+
| `locale`, `blackoutDates`, `headers`, `minDate`, `maxDate`, `weekStart` from `CalendarViewProps` | | | |
|
|
37
|
+
| Element Attributes (`div`) | | | |
|
|
38
|
+
|
|
39
|
+
<!-- /props:CalendarDatePickerProps -->
|
|
30
40
|
|
|
31
41
|
`locale`, `blackoutDates`, `headers`, `minDate`, `maxDate` and `weekStart` are forwarded
|
|
32
42
|
straight to the underlying `CalendarView`. All `div` HTML attributes are forwarded to the
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
throw new Error('CalendarViewHeader must be used within a CalendarView');
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
let locale = context.config.locale;
|
|
10
|
+
let locale = $derived(context.config.locale);
|
|
11
11
|
|
|
12
|
-
let weekStart = context.config.weekStart;
|
|
12
|
+
let weekStart = $derived(context.config.weekStart);
|
|
13
13
|
</script>
|
|
14
14
|
|
|
15
15
|
<!--
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
$$bindings?: Bindings;
|
|
4
|
-
} & Exports;
|
|
5
|
-
(internal: unknown, props: {
|
|
6
|
-
$$events?: Events;
|
|
7
|
-
$$slots?: Slots;
|
|
8
|
-
}): Exports & {
|
|
9
|
-
$set?: any;
|
|
10
|
-
$on?: any;
|
|
11
|
-
};
|
|
12
|
-
z_$$bindings?: Bindings;
|
|
13
|
-
}
|
|
14
|
-
declare const CalendarViewHeader: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
-
[evt: string]: CustomEvent<any>;
|
|
16
|
-
}, {}, {}, string>;
|
|
17
|
-
type CalendarViewHeader = InstanceType<typeof CalendarViewHeader>;
|
|
1
|
+
declare const CalendarViewHeader: import("svelte").Component<Record<string, never>, {}, "">;
|
|
2
|
+
type CalendarViewHeader = ReturnType<typeof CalendarViewHeader>;
|
|
18
3
|
export default CalendarViewHeader;
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
const { selectMonth, updatePage } = CalendarContext.methods;
|
|
24
24
|
|
|
25
|
-
let { locale, minDate, headers, maxDate, selectionMode } = CalendarContext.config;
|
|
25
|
+
let { locale, minDate, headers, maxDate, selectionMode } = $derived(CalendarContext.config);
|
|
26
26
|
|
|
27
27
|
let { value, range, page, pageAnimationDirection } = $derived(CalendarContext.state);
|
|
28
28
|
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
const { selectYear, updatePage } = CalendarContext.methods;
|
|
23
23
|
|
|
24
|
-
let { locale, minDate, maxDate, selectionMode } = CalendarContext.config;
|
|
24
|
+
let { locale, minDate, maxDate, selectionMode } = $derived(CalendarContext.config);
|
|
25
25
|
|
|
26
26
|
let { value, range, page, pageAnimationDirection } = $derived(CalendarContext.state);
|
|
27
27
|
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
import { getReducedMotion } from '../../providers/fluentui-svelte/fluentui-svelte.js';
|
|
32
32
|
import type {
|
|
33
33
|
AnimationDirection,
|
|
34
|
+
CalendarViewContext,
|
|
34
35
|
CalendarViewProps,
|
|
35
|
-
CalendarViewState,
|
|
36
36
|
DateComparisonPrecision,
|
|
37
37
|
View
|
|
38
38
|
} from './types.js';
|
|
@@ -197,59 +197,70 @@
|
|
|
197
197
|
updateView(e, 'months', year);
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
const
|
|
201
|
-
get value() {
|
|
202
|
-
return value;
|
|
203
|
-
},
|
|
204
|
-
set value(v) {
|
|
205
|
-
value = v;
|
|
206
|
-
},
|
|
207
|
-
get range() {
|
|
208
|
-
return range;
|
|
209
|
-
},
|
|
210
|
-
set range(v) {
|
|
211
|
-
range = v;
|
|
212
|
-
},
|
|
213
|
-
get view() {
|
|
214
|
-
return view;
|
|
215
|
-
},
|
|
216
|
-
set view(v) {
|
|
217
|
-
view = v;
|
|
218
|
-
},
|
|
219
|
-
get page() {
|
|
220
|
-
return page;
|
|
221
|
-
},
|
|
222
|
-
set page(v) {
|
|
223
|
-
page = v;
|
|
224
|
-
},
|
|
225
|
-
get viewAnimationDirection() {
|
|
226
|
-
return viewAnimationDirection;
|
|
227
|
-
},
|
|
228
|
-
set viewAnimationDirection(v) {
|
|
229
|
-
viewAnimationDirection = v;
|
|
230
|
-
},
|
|
231
|
-
get pageAnimationDirection() {
|
|
232
|
-
return pageAnimationDirection;
|
|
233
|
-
},
|
|
234
|
-
set pageAnimationDirection(v) {
|
|
235
|
-
pageAnimationDirection = v;
|
|
236
|
-
}
|
|
237
|
-
};
|
|
238
|
-
|
|
239
|
-
// svelte-ignore state_referenced_locally
|
|
240
|
-
setCalendarViewContext({
|
|
200
|
+
const context: CalendarViewContext = $state({
|
|
241
201
|
config: {
|
|
242
|
-
minDate
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
202
|
+
get minDate() {
|
|
203
|
+
return minDate;
|
|
204
|
+
},
|
|
205
|
+
get maxDate() {
|
|
206
|
+
return maxDate;
|
|
207
|
+
},
|
|
208
|
+
get locale() {
|
|
209
|
+
return locale;
|
|
210
|
+
},
|
|
211
|
+
get weekStart() {
|
|
212
|
+
return weekStart;
|
|
213
|
+
},
|
|
214
|
+
get blackoutDates() {
|
|
215
|
+
return blackoutDates;
|
|
216
|
+
},
|
|
217
|
+
get selectionMode() {
|
|
218
|
+
return selectionMode;
|
|
219
|
+
},
|
|
220
|
+
get blackoutBreaksRange() {
|
|
221
|
+
return blackoutBreaksRange;
|
|
222
|
+
},
|
|
223
|
+
get headers() {
|
|
224
|
+
return headers;
|
|
225
|
+
}
|
|
250
226
|
},
|
|
251
|
-
|
|
252
|
-
|
|
227
|
+
state: {
|
|
228
|
+
get value() {
|
|
229
|
+
return value;
|
|
230
|
+
},
|
|
231
|
+
set value(v) {
|
|
232
|
+
value = v;
|
|
233
|
+
},
|
|
234
|
+
get range() {
|
|
235
|
+
return range;
|
|
236
|
+
},
|
|
237
|
+
set range(v) {
|
|
238
|
+
range = v;
|
|
239
|
+
},
|
|
240
|
+
get view() {
|
|
241
|
+
return view;
|
|
242
|
+
},
|
|
243
|
+
set view(v) {
|
|
244
|
+
view = v;
|
|
245
|
+
},
|
|
246
|
+
get page() {
|
|
247
|
+
return page;
|
|
248
|
+
},
|
|
249
|
+
set page(v) {
|
|
250
|
+
page = v;
|
|
251
|
+
},
|
|
252
|
+
get viewAnimationDirection() {
|
|
253
|
+
return viewAnimationDirection;
|
|
254
|
+
},
|
|
255
|
+
set viewAnimationDirection(v) {
|
|
256
|
+
viewAnimationDirection = v;
|
|
257
|
+
},
|
|
258
|
+
get pageAnimationDirection() {
|
|
259
|
+
return pageAnimationDirection;
|
|
260
|
+
},
|
|
261
|
+
set pageAnimationDirection(v) {
|
|
262
|
+
pageAnimationDirection = v;
|
|
263
|
+
}
|
|
253
264
|
},
|
|
254
265
|
events: {
|
|
255
266
|
onChange: (e, value) => onChange?.(e, value),
|
|
@@ -264,6 +275,9 @@
|
|
|
264
275
|
clearSelection
|
|
265
276
|
}
|
|
266
277
|
});
|
|
278
|
+
|
|
279
|
+
setCalendarViewContext(context);
|
|
280
|
+
|
|
267
281
|
$effect.pre(() => {
|
|
268
282
|
pageAnimationDuration = getCSSDuration('--fs-normal-duration') || 333;
|
|
269
283
|
|
|
@@ -82,40 +82,52 @@ changing it from the header button leaves focus on the button.
|
|
|
82
82
|
|
|
83
83
|
## CalendarView Props
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
| `
|
|
91
|
-
| `
|
|
92
|
-
| `
|
|
93
|
-
| `
|
|
94
|
-
| `
|
|
95
|
-
| `
|
|
96
|
-
| `
|
|
97
|
-
| `
|
|
98
|
-
| `
|
|
99
|
-
| `
|
|
100
|
-
| `
|
|
101
|
-
| `
|
|
102
|
-
| `
|
|
85
|
+
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
86
|
+
<!-- props:CalendarViewProps -->
|
|
87
|
+
|
|
88
|
+
| Name | Type | Default | Description |
|
|
89
|
+
| -------------------------- | ------------------------------------------------------------------- | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
90
|
+
| `ref` _bindable_ | `HTMLDivElement` | | The DOM reference of the calendar element. |
|
|
91
|
+
| `value` _bindable_ | `Date` | `Date[]` | `null` | `null` | The selected date, or an array of dates when `selectionMode` is `'multiple'`. Unused by `'range'`. |
|
|
92
|
+
| `selectionMode` | `'single'` | `'multiple'` | `'range'` | `'single'` | How many dates the grid hands out, and in what shape. |
|
|
93
|
+
| `range` _bindable_ | `{ start: Date` | `null; end: Date` | `null; }` | `{ start: null, end: null }` | The picked range. Only read and written when `selectionMode` is `'range'`, and `end` stays `null` until the range is closed. |
|
|
94
|
+
| `blackoutBreaksRange` | `boolean` | `false` | Stop a range from spanning a blacked-out date. |
|
|
95
|
+
| `blackoutDates` | `Date[]` | | Dates that are rendered but cannot be selected. |
|
|
96
|
+
| `headers` | `boolean` | | Labels the first cell of a month or a year with its name. |
|
|
97
|
+
| `minDate` | `Date` | | The earliest selectable date. |
|
|
98
|
+
| `maxDate` | `Date` | | The latest selectable date. |
|
|
99
|
+
| `view` | `'days'` | `'months'` | `'years'` | `'days'` | The calendar page the view opens on. |
|
|
100
|
+
| `locale` | `string` | `'en-US'` | The locale used to format weekday and month names. |
|
|
101
|
+
| `weekStart` | `number` | `1` | The first day of the week, where 0 is Sunday. |
|
|
102
|
+
| `floating` | `CalendarViewFloating` | | Renders the calendar as a popup anchored to a reference element instead of inline. |
|
|
103
|
+
| `onChange` | `(event: Event, value: Date` | `Date[]` | `null) => void` | | Called whenever the selection changes. Not called in `'range'` mode. |
|
|
104
|
+
| `onRangeChange` | `(event: Event, range: CalendarDateRange) => void` | | Fired on every step of a range, including the one that leaves `end` null. |
|
|
105
|
+
| `onViewChange` | `(event: Event, view: View) => void` | | Called whenever the active calendar page changes. |
|
|
106
|
+
| Element Attributes (`div`) | | | |
|
|
107
|
+
|
|
108
|
+
<!-- /props:CalendarViewProps -->
|
|
103
109
|
|
|
104
110
|
All `div` HTML attributes are forwarded to the root element.
|
|
105
111
|
|
|
106
112
|
## CalendarViewItem Props
|
|
107
113
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
|
112
|
-
|
|
|
113
|
-
| `
|
|
114
|
-
| `
|
|
115
|
-
| `
|
|
116
|
-
| `
|
|
117
|
-
| `
|
|
118
|
-
| `
|
|
119
|
-
| `
|
|
114
|
+
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
115
|
+
<!-- props:CalendarViewItemProps -->
|
|
116
|
+
|
|
117
|
+
| Name | Type | Default | Description |
|
|
118
|
+
| -------------------------- | ------------------------------------------- | ------- | ------------------------------------------------------------------------------------------ |
|
|
119
|
+
| `selected` | `boolean` | | Renders the cell as the selected one. |
|
|
120
|
+
| `disabled` | `boolean` | | Disables the user interaction. |
|
|
121
|
+
| `current` | `boolean` | | Marks the cell as the current date. |
|
|
122
|
+
| `outOfRange` | `boolean` | | Renders the cell as belonging to a neighbouring page. |
|
|
123
|
+
| `blackout` | `boolean` | | Renders the cell as blacked out, so it reads as unavailable rather than disabled. |
|
|
124
|
+
| `rangePosition` | `'start'` | `'between'` | `'end'` | | Set on the days a range covers, which paints the band behind them. |
|
|
125
|
+
| `header` | `string` | | A small label rendered above the cell content. |
|
|
126
|
+
| `variant` | `'day'` | `'monthYear'` | `'day'` | Which shape the cell takes: a circle for a day, a rounded rectangle for a month or a year. |
|
|
127
|
+
| `children` | `Snippet` | | The content of the cell. |
|
|
128
|
+
| `buttonAttributes` | `HTMLButtonAttributes` | | The attributes to spread on the inner button element. |
|
|
129
|
+
| Element Attributes (`div`) | | | |
|
|
130
|
+
|
|
131
|
+
<!-- /props:CalendarViewItemProps -->
|
|
120
132
|
|
|
121
133
|
All `div` HTML attributes are forwarded to the cell element.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { CardFooterProps } from './types.js';
|
|
3
|
+
import { RenderSoC } from '../../internal/index.js';
|
|
4
|
+
import { getCardContext } from './card-context.svelte.js';
|
|
5
|
+
|
|
6
|
+
let { ref = $bindable(), class: classes, action, ...attributes }: CardFooterProps = $props();
|
|
7
|
+
|
|
8
|
+
const context = getCardContext();
|
|
9
|
+
|
|
10
|
+
if (!context) throw new Error('Card context is not available. Make sure this component is used within a Card.');
|
|
11
|
+
|
|
12
|
+
const { config } = context;
|
|
13
|
+
|
|
14
|
+
const showFloatingAction = $derived(config.showFloatingAction);
|
|
15
|
+
const selectable = $derived(config.selectable);
|
|
16
|
+
|
|
17
|
+
// Rendered through `_action`, so the invariant is enforced during SSR and on every prop update.
|
|
18
|
+
const _action = $derived.by(() => {
|
|
19
|
+
if (action && selectable) throw new Error('Action cannot be used with selectable cards.');
|
|
20
|
+
return action;
|
|
21
|
+
});
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<div bind:this={ref} class={['fs-card-footer', showFloatingAction && 'with-action', classes]} {...attributes}>
|
|
25
|
+
{#if _action}
|
|
26
|
+
<RenderSoC SoC={_action} />
|
|
27
|
+
{/if}
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<style>
|
|
31
|
+
.fs-card-footer {
|
|
32
|
+
display: flex;
|
|
33
|
+
gap: 0.5rem;
|
|
34
|
+
padding: 0.5rem;
|
|
35
|
+
justify-content: space-between;
|
|
36
|
+
}
|
|
37
|
+
</style>
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { CardHeaderProps } from './types.js';
|
|
3
|
+
import { RenderSoC } from '../../internal/index.js';
|
|
4
|
+
import { getCardContext } from './card-context.svelte.js';
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
ref = $bindable(),
|
|
8
|
+
class: classes,
|
|
9
|
+
title,
|
|
10
|
+
image,
|
|
11
|
+
imageAlt = '',
|
|
12
|
+
description,
|
|
13
|
+
action,
|
|
14
|
+
...attributes
|
|
15
|
+
}: CardHeaderProps = $props();
|
|
16
|
+
|
|
17
|
+
const context = getCardContext();
|
|
18
|
+
|
|
19
|
+
if (!context) throw new Error('Card context is not available. Make sure this component is used within a Card.');
|
|
20
|
+
|
|
21
|
+
const { config } = context;
|
|
22
|
+
|
|
23
|
+
const showFloatingAction = $derived(config.showFloatingAction);
|
|
24
|
+
const selectable = $derived(config.selectable);
|
|
25
|
+
const id = $derived(config.id);
|
|
26
|
+
|
|
27
|
+
// Rendered through `_action`, so the invariant is enforced during SSR and on every prop update.
|
|
28
|
+
const _action = $derived.by(() => {
|
|
29
|
+
if (action && selectable) throw new Error('Action cannot be used with selectable cards.');
|
|
30
|
+
return action;
|
|
31
|
+
});
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
<div bind:this={ref} class={['fs-card-header', showFloatingAction && 'with-action', classes]} {...attributes}>
|
|
35
|
+
{#if typeof image === 'string'}
|
|
36
|
+
<img src={image} alt={imageAlt} />
|
|
37
|
+
{:else if image}
|
|
38
|
+
<RenderSoC SoC={image} />
|
|
39
|
+
{/if}
|
|
40
|
+
{#if description}
|
|
41
|
+
<div class="fs-card-header-content">
|
|
42
|
+
{#if typeof title === 'string'}
|
|
43
|
+
<h4 class="body" id={`${id}-title`}>{title}</h4>
|
|
44
|
+
{:else if title}
|
|
45
|
+
<RenderSoC SoC={title} id={`${id}-title`} />
|
|
46
|
+
{/if}
|
|
47
|
+
{#if typeof description === 'string'}
|
|
48
|
+
<p class="caption">{description}</p>
|
|
49
|
+
{:else if description}
|
|
50
|
+
<RenderSoC SoC={description} />
|
|
51
|
+
{/if}
|
|
52
|
+
</div>
|
|
53
|
+
{:else if typeof title === 'string'}
|
|
54
|
+
<h4 class="body" id={`${id}-title`}>{title}</h4>
|
|
55
|
+
{:else if title}
|
|
56
|
+
<RenderSoC SoC={title} id={`${id}-title`} />
|
|
57
|
+
{/if}
|
|
58
|
+
{#if _action}
|
|
59
|
+
<RenderSoC SoC={_action} />
|
|
60
|
+
{/if}
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<style>
|
|
64
|
+
.fs-card-header {
|
|
65
|
+
display: flex;
|
|
66
|
+
align-items: center;
|
|
67
|
+
gap: 0.5rem;
|
|
68
|
+
padding: 0.5rem;
|
|
69
|
+
&.with-action:nth-child(2) {
|
|
70
|
+
padding-right: 2.4rem;
|
|
71
|
+
}
|
|
72
|
+
& :global(img) {
|
|
73
|
+
width: 48px;
|
|
74
|
+
}
|
|
75
|
+
& .fs-card-header-content {
|
|
76
|
+
display: flex;
|
|
77
|
+
flex-direction: column;
|
|
78
|
+
margin-right: auto;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
</style>
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { CardPreviewProps } from './types.js';
|
|
3
|
+
import { getCardContext } from './card-context.svelte.js';
|
|
4
|
+
|
|
5
|
+
let { ref = $bindable(), logoSrc, logoAlt = '', class: classes, children, ...attrs }: CardPreviewProps = $props();
|
|
6
|
+
|
|
7
|
+
const context = getCardContext();
|
|
8
|
+
|
|
9
|
+
if (!context) throw new Error('Card context is not available. Make sure this component is used within a Card.');
|
|
10
|
+
|
|
11
|
+
const { config, state: _state } = context;
|
|
12
|
+
|
|
13
|
+
const showFloatingAction = $derived(config.showFloatingAction);
|
|
14
|
+
|
|
15
|
+
const orientation = $derived(_state.orientation);
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<div class={['fs-card-preview', showFloatingAction && 'with-action', orientation, classes]} bind:this={ref} {...attrs}>
|
|
19
|
+
{@render children?.()}
|
|
20
|
+
<img src={logoSrc} alt={logoAlt} class="fs-card-preview-logo" />
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<style>
|
|
24
|
+
.fs-card-preview {
|
|
25
|
+
display: flex;
|
|
26
|
+
flex-direction: column;
|
|
27
|
+
align-items: center;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
position: relative;
|
|
30
|
+
overflow: hidden;
|
|
31
|
+
/* 2nd child (After floating Checkbox) */
|
|
32
|
+
&:first-child,
|
|
33
|
+
&.with-action:nth-child(2) {
|
|
34
|
+
border-radius: var(--fs-control-overlay-border-radius) var(--fs-control-overlay-border-radius) 0 0;
|
|
35
|
+
}
|
|
36
|
+
&:last-child {
|
|
37
|
+
border-radius: 0 0 var(--fs-control-overlay-border-radius) var(--fs-control-overlay-border-radius);
|
|
38
|
+
}
|
|
39
|
+
&.horizontal {
|
|
40
|
+
&:first-child,
|
|
41
|
+
&.with-action:nth-child(2) {
|
|
42
|
+
border-radius: var(--fs-control-overlay-border-radius) 0 0 var(--fs-control-overlay-border-radius);
|
|
43
|
+
}
|
|
44
|
+
&:last-child {
|
|
45
|
+
border-radius: 0 var(--fs-control-overlay-border-radius) var(--fs-control-overlay-border-radius) 0;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
&:only-child {
|
|
49
|
+
border-radius: var(--fs-control-overlay-border-radius);
|
|
50
|
+
}
|
|
51
|
+
& :global(img:not(.fs-card-preview-logo)) {
|
|
52
|
+
width: 100%;
|
|
53
|
+
height: auto;
|
|
54
|
+
}
|
|
55
|
+
& .fs-card-preview-logo {
|
|
56
|
+
width: 32px;
|
|
57
|
+
height: auto;
|
|
58
|
+
position: absolute;
|
|
59
|
+
bottom: 0.5rem;
|
|
60
|
+
left: 0.5rem;
|
|
61
|
+
z-index: 1;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
</style>
|