| <script lang="ts"> |
| let className = ""; |
| export { className as class }; |
| export let classes: Record<string, boolean> = {}; |
| let styleName = ""; |
| export { styleName as style }; |
| export let styles: Record<string, string | number | undefined> = {}; |
| export let disabled = false; |
| export let bold = false; |
| export let italic = false; |
| export let centerAlign = false; |
| export let tableAlign = false; |
| export let minWidth = 0; |
| export let multiline = false; |
| export let tooltip: string | undefined = undefined; |
| export let checkboxId: bigint | undefined = undefined; |
|
|
| $: extraClasses = Object.entries(classes) |
| .flatMap(([className, stateName]) => (stateName ? [className] : [])) |
| .join(" "); |
| $: extraStyles = Object.entries(styles) |
| .flatMap((styleAndValue) => (styleAndValue[1] !== undefined ? [`${styleAndValue[0]}: ${styleAndValue[1]};`] : [])) |
| .join(" "); |
| </script> |
|
|
| <label |
| class={`text-label ${className} ${extraClasses}`.trim()} |
| class:disabled |
| class:bold |
| class:italic |
| class:multiline |
| class:center-align={centerAlign} |
| class:table-align={tableAlign} |
| style:min-width={minWidth > 0 ? `${minWidth}px` : undefined} |
| style={`${styleName} ${extraStyles}`.trim() || undefined} |
| title={tooltip} |
| for={checkboxId !== undefined ? `checkbox-input-${checkboxId}` : undefined} |
| > |
| <slot /> |
| </label> |
|
|
| <style lang="scss" global> |
| .text-label { |
| line-height: 18px; |
| white-space: nowrap; |
| // Force Safari to not draw a text cursor, even though this element has `user-select: none` |
| cursor: default; |
|
|
| &.disabled { |
| color: var(--color-8-uppergray); |
| } |
|
|
| &.bold { |
| font-weight: 700; |
| } |
|
|
| &.italic { |
| font-style: italic; |
| } |
|
|
| &.multiline { |
| white-space: pre-wrap; |
| margin: 4px 0; |
| } |
|
|
| &.center-align { |
| text-align: center; |
| } |
|
|
| &.table-align { |
| flex: 0 0 30%; |
| text-align: right; |
| } |
| } |
| </style> |
|
|