East Blue Design System
Property Naming Guidelines
The naming contract for every component property in the GCash Design System — the four property types, the full reference catalog of variant / boolean / text / slot properties, standardized values, and the general guidelines that keep names semantic, generic, and engineering-aligned. This mirrors the team's source of truth in Notion; a component that diverges is a C2 · Variant & Property Naming finding during assessment.

At a Glance

The rules that decide 90% of naming calls. If you remember nothing else, remember these.

PascalVariant · Text · Slot names
camelBoolean properties
4Verb prefixes · is has can should
TitleProperty values
StateInteraction — never Status
StatusMeaning — never State
1Responsibility per property
4Property types · Variant Boolean Text Slot
Source of truth. All naming follows the team's Property Naming Guidelines in Notion: Property Naming Guidelines →. This page is the assessment-side mirror; when the two disagree, Notion wins.

Component Property Types

A cheat-sheet for quick reference. Every property is one of four types — knowing which decides its casing and how it's named.

CategoryDescriptionExamplesUse case
Variant Defines variations of a component, allowing designers to switch between them. Type · Size (sm, md, lg) · Device (Mobile, Tablet) · Status Structured changes, such as different button styles or states.
Boolean Toggles visibility, states, or features within a component. isVisible · isExpanded · isDisabled — true / false On/off states, e.g. showing/hiding icons, enabling/disabling inputs.
Text Stores and displays textual or numerical values dynamically. Label · Placeholder · Value Labels, dynamic text content, and numeric properties like badge counts.
Slot Allows inserting or swapping different subcomponents inside a parent component. Button · Card · Modal Embedding complex subcomponents, like placing a badge inside a card.

1 · Variant Properties

The core variations of a component — the biggest visual differences, the related components within one component set. PascalCase names, Title Case values.

PropertyExample valuesApplies toNotes
TypePrimary, Secondary, TertiaryButtons, Badges, AlertsHighest hierarchy of component variants
StateDefault, Hover, Pressed, Active, DisabledButtons, InputsInteraction behaviors
SizeSmall, Medium, Large, XlargeButtons, Inputs, Modals, AvatarsStandard sizes across components
WidthFull, Fixed, CompactButtons, Cards, ModalsDefines width behavior
HeightShort, Regular, TallModals, DropdownsAdjusts vertical scaling
SpacingCompact, Comfortable, SpaciousLists, Menus, GridsDefines gaps between elements
DensityCompact, Comfortable, Expanded, SpaciousLists, Tables, ToolbarsAdjusts padding, row height & control spacing
Color SchemeDark, Brand A, Brand BAll componentsOverall color theming customisation
Border RadiusSharp, Soft, Rounded, CircleAvatar, Cards, Buttons, InputsControls corner roundness
StatusDefault, Success, Warning, Error, InfoAlerts, Badges, FormsDefines semantic meaning
AppearanceFilled, Outlined, Soft, ElevatedButtons, CardsDefines rendering style
ShapeSquare, Rounded, Pill, CircleButtons, AvatarsDefines corner treatment
OrientationHorizontal, VerticalTabs, ListsDefines layout direction
PlacementTop, Bottom, Left, RightTooltip, PopoverDefines placement
AlignmentLeft, Center, RightTypography, LayoutDefines alignment
ToneNeutral, Positive, Warning, NegativeAlertsDefines semantic tone
ElevationNone, 1, 2, 3, 4, 5Cards, DialogsDefines elevation level
ModeView, Edit, PreviewForms, EditorsDefines operating mode
SelectionSingle, MultipleLists, TablesDefines selection behavior
Standard property — casing

Use PascalCase for all standard property names.

✅ Recommended
Variant · Size · State · Status · Appearance · Shape · Orientation · Placement · Density · Theme · Mode · HelperText · ErrorMessage · BadgeCount
❌ Avoid
variant · size · state · status · appearance · shape · orientation · placement · density · theme · mode · Helper Text · Error Message · Badge Count

2 · Boolean Properties

Binary on/off features. Use lowerCamelCase with a verb prefix. Every boolean is one of four kinds — a state, the presence of content, a capability, or a configurable behavior.

PrefixPurposeExamples
isCurrent state or conditionisDisabled · isLoading · isSelected
hasPresence of content or child elementshasLeadingIcon · hasBadge · hasFooter
canCapability or permissioncanDrag · canDismiss · canResize
shouldConfigurable behaviorshouldWrap · shouldAnimate · shouldCloseOnSelect
Use positive names — isDisabled, never disable / notVisible / hideBadge. Values are always true / false.
Full boolean catalog

The approved boolean vocabulary, grouped by kind. Reuse these before inventing a new one.

State — is* (32)
PropertyApplies toPurpose
isDisabledButtons, Fields, Selects, Toggles, MenusControls whether the component is interactive.
isLoadingButtons, Cards, Dialogs, TablesDisplays a loading state while content is processing.
isSelectedTabs, Cards, Menu Items, Segmented ControlsIndicates the component is currently selected.
isCheckedCheckboxes, SwitchesIndicates whether the control is checked.
isIndeterminateCheckboxes, Progress IndicatorsRepresents a partially selected or unknown state.
isExpandedAccordions, Sidebars, Tree ViewsControls whether collapsible content is expanded.
isCollapsedAccordions, PanelsIndicates collapsed content. Avoid using together with isExpanded.
isOpenDropdowns, Menus, Popovers, ModalsControls whether an overlay is visible.
isActiveNavigation Items, Tabs, ButtonsIndicates the currently active item.
isFocusedInputs, ButtonsDisplays the focused state.
isHoveredInteractive ComponentsDisplays the hover state.
isPressedButtons, Icon ButtonsDisplays the pressed state.
isVisitedLinksIndicates a previously visited link.
isReadOnlyInputs, Textareas, SelectsPrevents editing while keeping content selectable.
isRequiredInputs, FormsIndicates the field is mandatory.
isOptionalFormsExplicitly marks optional fields.
isInvalidInputs, FormsIndicates validation has failed.
isValidInputs, FormsIndicates validation passed.
isErrorInputs, AlertsShows an error state. Prefer Status = Error where applicable.
isSuccessAlerts, ToastsShows a success state.
isWarningAlerts, BannersShows a warning state.
isStickyHeaders, ToolbarsKeeps the component fixed during scrolling.
isDraggableCards, Rows, ListsEnables drag interactions.
isResizablePanels, TablesAllows resizing.
isScrollableLists, ContainersEnables scrolling behavior.
isDismissibleAlerts, Toasts, BannersAllows the user to dismiss the component.
isClosableDialogs, Drawers, ModalsShows a close action.
isEditableText Fields, TablesAllows editing.
isClickableCards, TilesMakes the component clickable.
isSkeletonCards, Lists, TablesDisplays placeholder loading UI.
isVisibleAny componentControls visibility.
isHiddenAny componentHides the component. Avoid pairing with isVisible.
Content — has* (25)
PropertyApplies toPurpose
hasLeadingIconButtons, Inputs, ChipsDisplays an icon before the label.
hasTrailingIconButtons, InputsDisplays an icon after the label.
hasAvatarList Items, CardsDisplays an avatar.
hasImageCards, Empty StatesDisplays an image.
hasIllustrationEmpty States, OnboardingDisplays an illustration.
hasThumbnailLists, CardsDisplays a thumbnail.
hasBadgeNavigation, IconsDisplays a badge.
hasCounterTabs, NavigationDisplays a numeric counter.
hasLabelInputs, TogglesDisplays a label.
hasDescriptionCards, AlertsDisplays supporting description text.
hasHelperTextInputsDisplays helper text.
hasValueInputsThe field holds entered content. Use only where the filled state changes the component’s geometry — otherwise derive it from value presence in code rather than adding a variant axis.
hasSupportingTextCards, ListsDisplays supporting content.
hasPrefixInputsDisplays leading content inside the field.
hasSuffixInputsDisplays trailing content inside the field.
hasDividerLists, MenusDisplays a divider.
hasBorderCards, ContainersDisplays a border.
hasShadowCards, ModalsDisplays elevation shadow.
hasHeaderCards, PanelsDisplays a header section.
hasFooterCards, PanelsDisplays a footer section.
hasActionsCards, DialogsDisplays an action area.
hasCloseButtonDialogs, ToastsDisplays a close button.
hasBackButtonNavigation BarsDisplays a back button.
hasClearButtonSearch FieldsDisplays a clear action.
hasTooltipIcons, InputsDisplays a tooltip.
hasOverflowMenuCards, ListsDisplays a "More" menu.
Capability — can* (9)
PropertyApplies toPurpose
canDismissAlerts, ToastsAllows the component to be dismissed.
canDragCards, ListsAllows drag-and-drop interactions.
canResizePanels, Split ViewsAllows resizing.
canSearchDropdowns, TablesEnables search functionality.
canFilterTables, ListsEnables filtering.
canSortTablesEnables sorting.
canClearSearch FieldsAllows clearing the current value.
canCopyCode Blocks, InputsAllows copy actions.
canEditTables, FormsAllows editing.
Behavior — should* (8)
PropertyApplies toPurpose
shouldWrapTypography, ChipsWraps content onto multiple lines.
shouldTruncateTypography, TablesTruncates overflowing text.
shouldAnimateInteractive ComponentsEnables animations.
shouldAutoFocusInputs, DialogsAutomatically focuses on load.
shouldCloseOnSelectDropdowns, MenusCloses after an item is selected.
shouldCloseOnOutsideClickPopovers, DialogsCloses when clicking outside.
shouldLoopCarouselsLoops through items continuously.
shouldStickToViewportTooltips, PopoversKeeps the overlay within the viewport.

3 · Text Properties

Editable text or numeric content displayed within a component. Use PascalCase for all Text Property names. Grouped by content role.

Primary content
PropertyDefinitionExample
PreambleIntroductory text displayed before the primary heading to provide context or categorization.NEW FEATURE
TitleThe primary heading of a component, page, dialog, or section.Manage Team Members
SubtitleSecondary heading that supports or expands on the Title.Invite and organize your workspace.
BlurbA short summary or promotional paragraph that highlights the purpose or value of the content.Collaborate seamlessly with your team in one secure workspace.
DescriptionSupporting body text that provides additional details or instructions.Use your company email address.
Form content
PropertyDefinitionExample
LabelIdentifies a field or input.Email Address
PlaceholderSample text shown inside an empty field.Enter your email
ValueThe current input value.john@email.com
HelperTextGuidance shown alongside a field.Must contain at least 8 characters.
HintShort instructional or contextual recommendation shown before interaction.Use your company email address.
ErrorMessageValidation feedback displayed when the user's input is invalid.Email address is required.
Supporting content
PropertyDefinitionExample
SupportingTextSupplemental information that provides additional context or explanation.Last updated 2 days ago.
CaptionSmall descriptive text associated with another element, such as an image, chart, or table.Figure 1. Monthly Sales Report
Metadata
PropertyDefinitionExample
BadgeCountNumeric value displayed inside a badge or notification indicator.99+
PriceMonetary value displayed by the component.$249.99
DateCalendar date.July 16, 2026
TimeTime value.10:30 AM
DateTimeCombined date and time.July 16, 2026 · 10:30 AM
ReferenceNumberHuman-readable identifier used to reference a record or transaction.REF-2026-001245
TransactionIDUnique identifier assigned to a transaction.TXN-8A73D21F
OrderNumberIdentifier assigned to a customer order.ORD-105248
InvoiceNumberIdentifier assigned to an invoice.INV-2026-00482
TicketNumberIdentifier assigned to a support or service ticket.TKT-009312
Definitions for the Form-content rows are normalized here for clarity; the canonical definitions live in the Notion Property Catalog.

4 · Node (Slot / Preset) Properties

Slots let components swap or embed subcomponents dynamically — custom content, badges, or nested elements.

Slot categoryNaming patternExampleApplies toNotes
Content slotcontent · {object}-contentcontent · modal-contentCards, Modals, Panels, List Items, Sections — any component where content is swappedEntire content areas, allowing flexible replacements like custom sections, states, or placeholders.
Element slot{element}section-header · table-footerTabs, Menus, Breadcrumbs, Sidebars, Modals, Tables, CardsStructural elements within components — headers, footers, navigation slots.
Asset slotcomponent-{asset type}
(icon, background, video…)
modal-bg · status-iconCards, Banners, Media Components — any component with visual assetsVisual assets — seamless swapping of images, icons, and media elements.
Addon slotaddon · {object}-addon · addon-{position}addon · avatarAddon · addon-leftInputs, Text Areas — any component with additional elementsAdd-on elements — prefix/suffix icons, decorative elements, etc.

5 · Property Values

Use Title Case for all variant values, drawn from the standard sets — so the same concept reads the same everywhere. Avoid lowercase, uppercase, or implementation-specific values.

PropertyStandard values
SizeXS · SM · MD · LG · XL
VariantPrimary · Secondary · Ghost
State (interaction)Default · Hover · Pressed · Focused · Disabled
Status (semantic)Success · Warning · Error · Pending
ThemeLight · Dark
OrientationHorizontal · Vertical
DO — semantic
Variant = Primary
Status = Success
Tone = Positive
DON'T — appearance
Variant = Blue
Status = Green
Booleans as Yes / No

6 · General Guidelines

The principles that catch the naming mistakes casing alone won't.

Use semantic names

Property names should communicate purpose, not appearance.

Recommended
Variant = Primary
Status = Success
Tone = Positive
Avoid
Variant = Blue
Status = Green
Keep property names generic

Names should describe reusable behaviors rather than component-specific implementations. The component itself already provides the context.

Recommended
Variant
Label
Description
ReferenceNumber
Avoid
ButtonVariant
PriceLabel
NavigationDescription
Separate structure from content

Structural elements are controlled with Boolean properties; displayed content uses Text Properties.

Structure — booleans
hasHeader
hasFooter
hasActions
Content — text
Title
Subtitle
Description
Separate State from Status

State represents interaction; Status represents semantic meaning. Never fold one into the other.

State — interaction
Default · Hover · Pressed · Focused · Disabled
Status — meaning
Success · Warning · Error · Pending
Recommended
State = Hover
Status = Success
Avoid
State = Success
Keep properties focused

Each property should represent a single responsibility — no catch-alls.

Good
Variant
State
Status
Avoid
Style
Configuration
Settings
Use positive boolean names

Booleans describe the desired state, not the absence of one.

Recommended
isDisabled
hasBadge
canDismiss
shouldWrap
Avoid
disable
hideBadge
notVisible
Maintain consistent terminology

Use the same property name for the same concept across the whole system — unless they genuinely represent different content roles.

Use
HelperText
Do not introduce
SupportText
AssistiveText
HintText
Align with engineering

Align design property names with engineering props. Exact parity isn't required, but terminology should stay conceptually aligned.

DesignDevelopment
isDisabledisDisabled
hasLeadingIconhasLeadingIcon
Variantvariant
Sizesize
State vs Status — and the form-validation exception

State describes how the user is interacting with a component — Default, Pressed, Focused, Disabled. Status describes what the system is reporting about it — Success, Warning, Error, Info. Keeping them on separate axes means a component can be focused and in error at the same time, which a single merged axis cannot express.

Recommended
State = Default | Pressed | Disabled
Status = Success | Warning | Error
Avoid
State = Default | Pressed | Success | Error

The exception — form fields. Text-entry components may carry Error on the State axis rather than splitting into a second property. This is deliberate and system-wide, not a per-component oversight:

  • A form field in error is in a distinct interaction state, not merely reporting a status — it has failed validation and is asking for input again.
  • Splitting the axis multiplies the variant count for a combination that does not occur in practice: a field is not meaningfully focused and in error as two independent dimensions at design time, because focus is transient and error persists until the value changes.
  • Every major design system models field validation this way, so splitting it would make GCash fields harder to map to native components, not easier.

Components covered by the exception: Search Field, Amount Text Field, Text Area, and any future text-entry sibling. Everything else follows the two-axis rule above. Record the exception in the component description so a consumer can tell a deliberate choice from an omission.

Optimize for readability

Names should be concise and easy to scan in the Figma properties panel.

Good
Label
Description
BadgeCount
ReferenceNumber
Avoid
NavigationComponentLabel
ProductCardDescription
UserReferenceIdentifier

7 · Standardize Content Hierarchy

When a component has multiple text layers, name them from this ordered vocabulary — top to bottom, most prominent first. A standardized hierarchy improves consistency across the system.

GroupOrder
PrimaryPreamble · Title · Subtitle · Blurb · Description
FormLabel · Placeholder · Value · HelperText · Hint · ErrorMessage
SupportingSupportingText · Caption
MetadataBadgeCount · Price · Date · ReferenceNumber

8 · Maintain a Property Catalog

All approved properties are documented in the Property Catalog — the single source of truth for all component properties. Each entry includes:

FieldWhat it records
Property NameThe approved name (correct casing + prefix).
Property TypeVariant · Boolean · Text · Slot.
DefinitionWhat the property means / controls.
Allowed ValuesThe standardized value set.
Applies ToWhich components use it.
Usage NotesCaveats, pairings to avoid, engineering alignment.
ExampleA representative value.
Assessment tie-in. A component whose properties diverge from this catalog — spaced multi-word names, State=Success, component-specific text names, negative booleans, appearance-based values — is flagged under C2 · Variant & Property Naming. The recurring anti-pattern is a fleet of independent has* booleans; prefer collapsing to named slots plus a content enum (how Empty State went from 7 booleans to a clean 2×2).