add size and contained variants to uncap indicator

This commit is contained in:
Justin Edmund 2025-12-20 19:46:24 -08:00
parent ca3aa0687f
commit f7c209d5ee
3 changed files with 43 additions and 1 deletions

View file

@ -11,6 +11,7 @@
editable?: boolean editable?: boolean
interactive?: boolean interactive?: boolean
tabindex?: number tabindex?: number
size?: 'regular' | 'small'
onStarClick?: () => void onStarClick?: () => void
onFragmentClick?: (newStage: number) => void onFragmentClick?: (newStage: number) => void
onFragmentHover?: (newStage: number) => void onFragmentHover?: (newStage: number) => void
@ -23,6 +24,7 @@
editable = false, editable = false,
interactive = false, interactive = false,
tabindex, tabindex,
size = 'regular',
onStarClick, onStarClick,
onFragmentClick, onFragmentClick,
onFragmentHover onFragmentHover
@ -165,6 +167,7 @@
class:stage3={stage === 3} class:stage3={stage === 3}
class:stage4={stage === 4} class:stage4={stage === 4}
class:stage5={stage === 5} class:stage5={stage === 5}
class:small={size === 'small'}
onclick={handleClick} onclick={handleClick}
onmouseleave={interactive ? handleMouseLeave : undefined} onmouseleave={interactive ? handleMouseLeave : undefined}
bind:this={starElement} bind:this={starElement}
@ -211,6 +214,10 @@
position: relative; position: relative;
cursor: pointer; cursor: pointer;
&.small {
--size: 12px;
}
&:hover { &:hover {
transform: scale(1.2); transform: scale(1.2);
} }
@ -332,6 +339,10 @@
transform: scale(1.2); transform: scale(1.2);
} }
} }
&.small .figure {
--size: 12px;
}
} }
.popover { .popover {

View file

@ -15,6 +15,8 @@
special?: boolean | undefined special?: boolean | undefined
className?: string | undefined className?: string | undefined
editable?: boolean | undefined editable?: boolean | undefined
contained?: boolean | undefined
size?: 'regular' | 'small' | undefined
updateUncap?: ((index: number) => void) | undefined updateUncap?: ((index: number) => void) | undefined
updateTranscendence?: ((index: number) => void) | undefined updateTranscendence?: ((index: number) => void) | undefined
} }
@ -27,6 +29,7 @@
ulb?: boolean ulb?: boolean
index: number index: number
tabindex?: number tabindex?: number
size?: 'regular' | 'small'
onStarClick: (index: number, empty: boolean) => void onStarClick: (index: number, empty: boolean) => void
} }
@ -38,6 +41,7 @@
editable?: boolean editable?: boolean
interactive?: boolean interactive?: boolean
tabindex?: number tabindex?: number
size?: 'regular' | 'small'
onStarClick?: () => void onStarClick?: () => void
onFragmentClick?: (newStage: number) => void onFragmentClick?: (newStage: number) => void
onFragmentHover?: (newStage: number) => void onFragmentHover?: (newStage: number) => void
@ -58,6 +62,8 @@
special = false, special = false,
className, className,
editable = false, editable = false,
contained = false,
size = 'regular',
updateUncap, updateUncap,
updateTranscendence updateTranscendence
}: Props = $props() }: Props = $props()
@ -119,6 +125,7 @@
type, type,
editable, editable,
interactive: editable, interactive: editable,
size,
onFragmentClick: editable ? handleTranscendenceUpdate : undefined onFragmentClick: editable ? handleTranscendenceUpdate : undefined
} }
} }
@ -137,6 +144,7 @@
ulb: options.ulb, ulb: options.ulb,
special: options.special, special: options.special,
tabindex: editable ? 0 : undefined, tabindex: editable ? 0 : undefined,
size,
onStarClick: editable ? toggleStar : () => {} onStarClick: editable ? toggleStar : () => {}
} }
} }
@ -194,7 +202,7 @@
} }
</script> </script>
<div class="uncap-indicator {className || ''}"> <div class="uncap-indicator {className || ''}" class:contained class:small={size === 'small'}>
<ul class="stars"> <ul class="stars">
{#each Array(numStars) as _, i} {#each Array(numStars) as _, i}
{@const star = renderStar(i)} {@const star = renderStar(i)}
@ -210,8 +218,20 @@
</div> </div>
<style lang="scss"> <style lang="scss">
@use '$src/themes/spacing' as spacing;
.uncap-indicator { .uncap-indicator {
display: inline-block; display: inline-block;
&.contained {
background: rgba(0, 0, 0, 0.5);
border-radius: 999px;
padding: spacing.$unit;
&.small {
padding: spacing.$unit-half;
}
}
} }
.stars { .stars {

View file

@ -8,6 +8,7 @@
ulb?: boolean ulb?: boolean
index: number index: number
tabindex?: number tabindex?: number
size?: 'regular' | 'small'
onStarClick: (index: number, empty: boolean) => void onStarClick: (index: number, empty: boolean) => void
} }
@ -18,6 +19,7 @@
ulb = false, ulb = false,
index, index,
tabindex, tabindex,
size = 'regular',
onStarClick onStarClick
}: Props = $props() }: Props = $props()
@ -33,6 +35,7 @@
class:mlb={!special} class:mlb={!special}
class:flb class:flb
class:ulb class:ulb
class:small={size === 'small'}
{tabindex} {tabindex}
onclick={handleClick} onclick={handleClick}
role="button" role="button"
@ -49,6 +52,10 @@
width: var(--size); width: var(--size);
cursor: pointer; cursor: pointer;
&.small {
--size: 12px;
}
&:hover { &:hover {
transform: scale(1.2); transform: scale(1.2);
} }
@ -101,6 +108,10 @@
--size: 14px; --size: 14px;
background-size: cover; background-size: cover;
&.small {
--size: 12px;
}
&:hover { &:hover {
transform: scale(1); transform: scale(1);
} }