@bigtablet/design-system 1.16.2 → 1.17.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 +29 -0
- package/dist/vanilla/bigtablet.css +1060 -0
- package/dist/vanilla/bigtablet.css.map +1 -0
- package/dist/vanilla/bigtablet.js +778 -0
- package/dist/vanilla/bigtablet.min.css +1 -0
- package/dist/vanilla/bigtablet.min.css.map +1 -0
- package/dist/vanilla/bigtablet.min.js +35 -0
- package/dist/vanilla/examples/index.html +548 -0
- package/package.json +17 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--bt-color-primary: #000000;--bt-color-primary-hover: #333333;--bt-color-background: #ffffff;--bt-color-background-secondary: #fafafa;--bt-color-background-neutral: #F3F3F3;--bt-color-background-muted: #f0f0f0;--bt-color-text-primary: #1a1a1a;--bt-color-text-secondary: #666666;--bt-color-text-tertiary: #999999;--bt-text-inverse: #ffffff;--bt-text-disabled: #9ca3af;--bt-color-border: #e5e5e5;--bt-color-border-light: rgba(0, 0, 0, 0.08);--bt-color-success: #10b981;--bt-color-error: #ef4444;--bt-color-warning: #f59e0b;--bt-color-info: #3b82f6;--bt-color-overlay: rgba(0, 0, 0, 0.5);--bt-spacing-xs: 0.25rem;--bt-spacing-sm: 0.5rem;--bt-spacing-md: 0.75rem;--bt-spacing-lg: 1rem;--bt-spacing-xl: 1.25rem;--bt-spacing-2xl: 1.5rem;--bt-spacing-3xl: 1.75rem;--bt-font-family: Pretendard, sans-serif;--bt-font-size-xs: 0.75rem;--bt-font-size-sm: 0.875rem;--bt-font-size-base: 0.9375rem;--bt-font-size-md: 1rem;--bt-font-size-lg: 1.125rem;--bt-font-size-xl: 1.25rem;--bt-font-weight-regular: 400;--bt-font-weight-medium: 500;--bt-font-weight-semibold: 600;--bt-font-weight-bold: 700;--bt-line-height-normal: 1.5;--bt-radius-sm: 6px;--bt-radius-md: 8px;--bt-radius-lg: 12px;--bt-radius-full: 9999px;--bt-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.04);--bt-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.04);--bt-shadow-lg: 0 8px 20px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06);--bt-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);--bt-transition-fast: 0.1s ease-in-out;--bt-transition-base: 0.2s ease-in-out;--bt-transition-slow: 0.3s ease-in-out;--bt-z-modal: 10000;--bt-z-toast: 10001}.bt-button{display:inline-flex;align-items:center;justify-content:center;gap:var(--bt-spacing-sm);border-radius:var(--bt-radius-md);border:none;cursor:pointer;font-family:var(--bt-font-family);font-weight:var(--bt-font-weight-medium);transition:background var(--bt-transition-base),color var(--bt-transition-base),box-shadow var(--bt-transition-base),transform var(--bt-transition-base)}.bt-button:disabled{cursor:not-allowed;opacity:.6}.bt-button--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-button--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-button--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-button--primary{background:var(--bt-color-primary);color:var(--bt-color-background)}.bt-button--primary:hover:not(:disabled){background:var(--bt-color-primary-hover)}.bt-button--primary:active:not(:disabled){transform:scale(0.98)}.bt-button--secondary{background:rgba(0,0,0,0);border:1px solid var(--bt-color-border);color:var(--bt-color-text-primary)}.bt-button--secondary:hover:not(:disabled){background:var(--bt-color-background-secondary)}.bt-button--secondary:active:not(:disabled){transform:scale(0.98)}.bt-button--ghost{background:rgba(0,0,0,0);color:var(--bt-color-text-primary)}.bt-button--ghost:hover:not(:disabled){background:rgba(0,0,0,.05)}.bt-button--ghost:active:not(:disabled){transform:scale(0.96)}.bt-button--danger{background:var(--bt-color-error);color:var(--bt-color-background)}.bt-button--danger:hover:not(:disabled){background:rgb(235.7842364532, 30.4157635468, 30.4157635468)}.bt-button--danger:active:not(:disabled){transform:scale(0.98)}.bt-button--full-width{width:100%}.bt-text-field{display:flex;flex-direction:column}.bt-text-field--full-width{width:100%}.bt-text-field__label{margin-bottom:var(--bt-spacing-xs);color:var(--bt-color-text-primary);font-size:var(--bt-font-size-sm);font-weight:var(--bt-font-weight-medium);line-height:var(--bt-line-height-normal)}.bt-text-field__wrap{position:relative;display:inline-flex;width:100%;align-items:center}.bt-text-field__input{width:100%;border-radius:var(--bt-radius-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary);background:var(--bt-color-background);transition:border-color var(--bt-transition-base),box-shadow var(--bt-transition-base),background var(--bt-transition-base)}.bt-text-field__input::placeholder{color:var(--bt-color-text-tertiary)}.bt-text-field__input:disabled{cursor:not-allowed;background:var(--bt-color-background-secondary);color:var(--bt-color-text-tertiary);opacity:.7}.bt-text-field__input--outline{border:1px solid var(--bt-color-border)}.bt-text-field__input--outline:hover:not(:disabled){border-color:var(--bt-color-border-light)}.bt-text-field__input--outline:focus-visible{outline:none;border-color:var(--bt-color-primary);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-text-field__input--filled{background:var(--bt-color-background-secondary);border:1px solid rgba(0,0,0,0)}.bt-text-field__input--filled:focus-visible{outline:none;border-color:var(--bt-color-primary);background:var(--bt-color-background);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-text-field__input--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-text-field__input--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-text-field__input--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-text-field__input--error{border-color:var(--bt-color-error) !important;box-shadow:0 0 0 3px rgba(239,68,68,.15) !important}.bt-text-field__input--success{border-color:var(--bt-color-success) !important;box-shadow:0 0 0 3px rgba(16,185,129,.15) !important}.bt-text-field__helper{margin-top:var(--bt-spacing-xs);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-secondary)}.bt-text-field__helper--error{color:var(--bt-color-error)}.bt-text-field__helper--success{color:var(--bt-color-success)}.bt-text-field__icon{position:absolute;display:inline-flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;color:var(--bt-color-text-secondary)}.bt-text-field__icon--left{left:var(--bt-spacing-md)}.bt-text-field__icon--right{right:var(--bt-spacing-md)}.bt-checkbox{display:inline-flex;align-items:center;gap:var(--bt-spacing-sm);cursor:pointer;user-select:none;position:relative}.bt-checkbox__input{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.bt-checkbox__box{width:1.125rem;height:1.125rem;box-sizing:border-box;border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-sm);background:var(--bt-color-background);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base);display:inline-block;position:relative}.bt-checkbox__label{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-checkbox--sm .bt-checkbox__box{width:1rem;height:1rem}.bt-checkbox--sm .bt-checkbox__label{font-size:var(--bt-font-size-sm)}.bt-checkbox--lg .bt-checkbox__box{width:1.25rem;height:1.25rem}.bt-checkbox--lg .bt-checkbox__label{font-size:var(--bt-font-size-md)}.bt-checkbox__input:focus-visible+.bt-checkbox__box{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-primary)}.bt-checkbox__input:disabled+.bt-checkbox__box,.bt-checkbox__input:disabled~.bt-checkbox__label{opacity:.6;cursor:not-allowed}.bt-checkbox__input:checked+.bt-checkbox__box{background:var(--bt-color-primary);border-color:var(--bt-color-primary)}.bt-checkbox__input:checked+.bt-checkbox__box::after{content:"";position:absolute;left:50%;top:50%;width:.28rem;height:.55rem;border:2px solid var(--bt-color-background);border-top:0;border-left:0;transform:translate(-50%, -58%) rotate(45deg)}.bt-radio{position:relative;display:inline-flex;align-items:center;gap:var(--bt-spacing-sm);cursor:pointer;user-select:none}.bt-radio__input{position:absolute;inset:0;opacity:0;cursor:pointer;margin:0}.bt-radio__dot{width:1.125rem;height:1.125rem;box-sizing:border-box;border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-full);background:var(--bt-color-background);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base);position:relative;display:inline-block}.bt-radio__label{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-radio--sm .bt-radio__dot{width:1rem;height:1rem}.bt-radio--sm .bt-radio__label{font-size:var(--bt-font-size-sm)}.bt-radio--lg .bt-radio__dot{width:1.25rem;height:1.25rem}.bt-radio--lg .bt-radio__label{font-size:var(--bt-font-size-md)}.bt-radio__input:focus-visible+.bt-radio__dot{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-primary)}.bt-radio__input:checked+.bt-radio__dot{border-color:var(--bt-color-primary)}.bt-radio__input:checked+.bt-radio__dot::after{content:"";position:absolute;left:50%;top:50%;width:60%;height:60%;transform:translate(-50%, -50%);background:var(--bt-color-primary);border-radius:9999px}.bt-radio__input:disabled+.bt-radio__dot,.bt-radio__input:disabled~.bt-radio__label{opacity:.6;cursor:not-allowed}.bt-switch{position:relative;display:inline-flex;align-items:center;width:40px;height:22px;padding:2px;border-radius:var(--bt-radius-full);background:var(--bt-color-border);transition:background var(--bt-transition-base);cursor:pointer;border:none}.bt-switch__thumb{width:18px;height:18px;background:var(--bt-color-background);border-radius:var(--bt-radius-full);transition:transform var(--bt-transition-base);transform:translateX(0)}.bt-switch--on{background:var(--bt-color-primary)}.bt-switch--on .bt-switch__thumb{transform:translateX(18px)}.bt-switch--sm{width:34px;height:18px}.bt-switch--sm .bt-switch__thumb{width:14px;height:14px}.bt-switch--sm.bt-switch--on .bt-switch__thumb{transform:translateX(16px)}.bt-switch--lg{width:48px;height:26px}.bt-switch--lg .bt-switch__thumb{width:22px;height:22px}.bt-switch--lg.bt-switch--on .bt-switch__thumb{transform:translateX(22px)}.bt-switch--disabled{opacity:.6;cursor:not-allowed}.bt-select{position:relative;display:inline-flex;flex-direction:column;width:100%;gap:var(--bt-spacing-xs);font-family:var(--bt-font-family)}.bt-select__label{font-size:var(--bt-font-size-sm);font-weight:var(--bt-font-weight-medium);line-height:var(--bt-line-height-normal);color:var(--bt-color-text-primary)}.bt-select__control{width:100%;display:inline-flex;align-items:center;justify-content:space-between;gap:var(--bt-spacing-sm);cursor:pointer;color:var(--bt-color-text-primary);background:var(--bt-color-background);border-radius:var(--bt-radius-md);transition:border-color var(--bt-transition-base),box-shadow var(--bt-transition-base),background var(--bt-transition-base);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal);border:none;text-align:left}.bt-select__control:disabled,.bt-select__control.is-disabled{cursor:not-allowed;opacity:.7;background:var(--bt-color-background-secondary);color:var(--bt-color-text-tertiary)}.bt-select__control--outline{border:1px solid var(--bt-color-border)}.bt-select__control--outline:hover:not(.is-disabled){border-color:var(--bt-color-border-light)}.bt-select__control--outline.is-open{border-color:var(--bt-color-primary);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-select__control--filled{background:var(--bt-color-background-secondary);border:1px solid rgba(0,0,0,0)}.bt-select__control--filled.is-open{background:var(--bt-color-background);border-color:var(--bt-color-primary);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-select__control--sm{padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-size:var(--bt-font-size-sm)}.bt-select__control--md{padding:var(--bt-spacing-md) var(--bt-spacing-xl);font-size:var(--bt-font-size-base)}.bt-select__control--lg{padding:var(--bt-spacing-lg) var(--bt-spacing-2xl);font-size:var(--bt-font-size-md)}.bt-select__value{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bt-select__placeholder{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--bt-color-text-tertiary)}.bt-select__icon{display:inline-flex;align-items:center;justify-content:center;color:var(--bt-color-text-secondary);transition:transform var(--bt-transition-base)}.bt-select__icon.is-open{transform:rotate(180deg)}.bt-select__list{position:absolute;z-index:var(--bt-z-modal);top:100%;left:0;width:100%;min-width:100%;box-sizing:border-box;margin-top:var(--bt-spacing-xs);background:var(--bt-color-background);border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-md);box-shadow:var(--bt-shadow-md);max-height:18rem;overflow-y:auto;overflow-x:hidden;padding:var(--bt-spacing-xs) 0;list-style:none;margin:var(--bt-spacing-xs) 0 0 0}.bt-select__list--up{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bt-spacing-xs)}.bt-select__option{width:100%;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:var(--bt-spacing-sm);padding:var(--bt-spacing-sm) var(--bt-spacing-lg);cursor:pointer;color:var(--bt-color-text-primary);background:rgba(0,0,0,0);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);line-height:var(--bt-line-height-normal)}.bt-select__option:hover,.bt-select__option.is-active{background:var(--bt-color-background-secondary)}.bt-select__option.is-selected{font-weight:var(--bt-font-weight-medium)}.bt-select__option.is-disabled{cursor:not-allowed;color:var(--bt-color-text-tertiary)}.bt-modal{position:fixed;inset:0;display:none;place-items:center;background:var(--bt-color-overlay);z-index:var(--bt-z-modal)}.bt-modal.is-open{display:grid}.bt-modal__panel{background:var(--bt-color-background);border-radius:var(--bt-radius-lg);box-shadow:var(--bt-shadow-lg);max-width:calc(100% - 32px);overflow:hidden}.bt-modal__header{padding:var(--bt-spacing-lg);border-bottom:1px solid var(--bt-color-border);color:var(--bt-color-text-primary);font-size:var(--bt-font-size-xl);font-weight:var(--bt-font-weight-semibold);line-height:1.3}.bt-modal__body{padding:var(--bt-spacing-lg)}.bt-modal__footer{padding:var(--bt-spacing-lg);border-top:1px solid var(--bt-color-border);display:flex;justify-content:flex-end;gap:var(--bt-spacing-sm)}@keyframes bt-alert-fade-in{from{opacity:0}to{opacity:1}}@keyframes bt-alert-slide-up{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.bt-alert__overlay{position:fixed;inset:0;background:var(--bt-color-overlay);display:none;align-items:center;justify-content:center;z-index:var(--bt-z-modal);animation:bt-alert-fade-in var(--bt-transition-base)}.bt-alert__overlay.is-open{display:flex}.bt-alert__modal{background:var(--bt-color-background);border-radius:var(--bt-radius-lg);min-width:320px;max-width:480px;box-shadow:var(--bt-shadow-xl);animation:bt-alert-slide-up var(--bt-transition-slow);overflow:hidden}.bt-alert__title{font-size:var(--bt-font-size-lg);font-weight:var(--bt-font-weight-semibold);line-height:var(--bt-line-height-normal);color:var(--bt-color-info);padding:var(--bt-spacing-md) var(--bt-spacing-xl) var(--bt-spacing-xs)}.bt-alert__message{font-size:var(--bt-font-size-base);color:var(--bt-color-text-secondary);padding:var(--bt-spacing-xl);line-height:1.75}.bt-alert__actions{display:flex;gap:var(--bt-spacing-sm);align-items:center;padding:0 var(--bt-spacing-xl) var(--bt-spacing-xl);justify-content:flex-end}.bt-alert--info .bt-alert__title{color:var(--bt-color-info)}.bt-alert--success .bt-alert__title{color:var(--bt-color-success)}.bt-alert--warning .bt-alert__title{color:var(--bt-color-warning)}.bt-alert--error .bt-alert__title{color:var(--bt-color-error)}.bt-card{background:var(--bt-color-background);border-radius:var(--bt-radius-lg)}.bt-card--bordered{border:1px solid var(--bt-color-border)}.bt-card--shadow-sm{box-shadow:var(--bt-shadow-sm)}.bt-card--shadow-md{box-shadow:var(--bt-shadow-md)}.bt-card--shadow-lg{box-shadow:var(--bt-shadow-lg)}.bt-card--p-sm{padding:var(--bt-spacing-sm)}.bt-card--p-md{padding:var(--bt-spacing-lg)}.bt-card--p-lg{padding:var(--bt-spacing-2xl)}.bt-card__title{font-size:var(--bt-font-size-xl);font-weight:var(--bt-font-weight-semibold);line-height:1.3;margin-bottom:var(--bt-spacing-md);color:var(--bt-color-text-primary)}@keyframes bt-spinner-spin{to{transform:rotate(360deg)}}.bt-spinner{display:inline-block;box-sizing:border-box;border-radius:50%;border:2px solid var(--bt-color-border);border-top-color:var(--bt-color-primary);animation:bt-spinner-spin .8s linear infinite}.bt-spinner--sm{width:16px;height:16px}.bt-spinner--md{width:24px;height:24px}.bt-spinner--lg{width:32px;height:32px}.bt-spinner--xl{width:48px;height:48px}.bt-pagination{display:flex;align-items:center;justify-content:center;gap:var(--bt-spacing-sm);margin-top:var(--bt-spacing-3xl)}.bt-pagination__item{border:1px solid var(--bt-color-border);background:var(--bt-color-background);border-radius:var(--bt-radius-md);padding:6px 10px;min-width:36px;font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-primary);cursor:pointer;transition:background var(--bt-transition-base),border-color var(--bt-transition-base)}.bt-pagination__item:hover:not(:disabled){background:var(--bt-color-background-secondary)}.bt-pagination__item:disabled{opacity:.5;cursor:not-allowed}.bt-pagination__pages{display:flex;align-items:center;gap:6px}.bt-pagination__page{border:0;background:rgba(0,0,0,0);min-width:36px;height:36px;border-radius:var(--bt-radius-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-sm);color:var(--bt-color-text-secondary);cursor:pointer;transition:background var(--bt-transition-base),color var(--bt-transition-base)}.bt-pagination__page:hover{background:var(--bt-color-background-secondary);color:var(--bt-color-text-primary)}.bt-pagination__page--active{color:var(--bt-color-text-primary);font-weight:var(--bt-font-weight-semibold)}.bt-pagination__ellipsis{min-width:20px;text-align:center;font-size:var(--bt-font-size-sm);color:var(--bt-color-text-tertiary)}.bt-date-picker{display:flex;flex-direction:column;gap:var(--bt-spacing-xs)}.bt-date-picker__label{color:var(--bt-color-text-primary);margin-bottom:var(--bt-spacing-xs);font-weight:var(--bt-font-weight-medium);font-size:var(--bt-font-size-sm);line-height:var(--bt-line-height-normal)}.bt-date-picker__label-required{margin-left:var(--bt-spacing-xs);color:var(--bt-color-error)}.bt-date-picker__fields{display:flex;gap:var(--bt-spacing-sm)}.bt-date-picker__select{min-width:88px;height:44px;padding:0 var(--bt-spacing-md);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);color:var(--bt-color-text-primary);background-color:var(--bt-color-background);border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-sm);cursor:pointer;transition:border-color var(--bt-transition-fast),box-shadow var(--bt-transition-fast),background-color var(--bt-transition-fast);appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--bt-color-text-secondary) 50%),linear-gradient(135deg, var(--bt-color-text-secondary) 50%, transparent 50%);background-position:calc(100% - 16px) calc(50% - 3px),calc(100% - 11px) calc(50% - 3px);background-size:5px 5px;background-repeat:no-repeat}.bt-date-picker__select:hover:not(:disabled){border-color:var(--bt-color-primary);background-color:var(--bt-color-background-secondary)}.bt-date-picker__select:focus-visible{outline:none;border-color:var(--bt-color-primary);box-shadow:0 0 0 3px rgba(0,0,0,.15)}.bt-date-picker__select:disabled{cursor:not-allowed;color:var(--bt-text-disabled);background-color:var(--bt-color-background-secondary);border-color:var(--bt-color-border-light)}.bt-date-picker--full-width{width:100%}.bt-date-picker--full-width .bt-date-picker__fields{width:100%}.bt-date-picker--full-width .bt-date-picker__select{flex:1;min-width:0}.bt-file-input{position:relative;display:inline-flex;align-items:center}.bt-file-input:hover .bt-file-input__label{border-color:var(--bt-color-border-light)}.bt-file-input__control{position:absolute;inset:0;opacity:0;cursor:pointer}.bt-file-input__label{border:1px solid var(--bt-color-border);border-radius:var(--bt-radius-md);background:var(--bt-color-background);padding:var(--bt-spacing-sm) var(--bt-spacing-lg);font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);color:var(--bt-color-text-primary);transition:background var(--bt-transition-base),border-color var(--bt-transition-base),box-shadow var(--bt-transition-base)}.bt-file-input__control:focus-visible+.bt-file-input__label{box-shadow:0 0 0 3px var(--bt-color-border-light);border-color:var(--bt-color-primary)}.bt-file-input--disabled{cursor:not-allowed}.bt-file-input--disabled .bt-file-input__control{cursor:not-allowed}.bt-file-input--disabled .bt-file-input__label{opacity:.6;cursor:not-allowed}.bt-file-input--disabled:hover .bt-file-input__label{border-color:var(--bt-color-border)}.bt-toast{font-family:var(--bt-font-family);font-size:var(--bt-font-size-base);border-radius:var(--bt-radius-md);box-shadow:var(--bt-shadow-lg)}.bt-hidden{display:none !important}.bt-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}/*# sourceMappingURL=bigtablet.min.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../src/vanilla/bigtablet.scss"],"names":[],"mappings":"AAWA,MAEE,4BACA,kCAGA,+BACA,yCACA,uCACA,qCAGA,iCACA,mCACA,kCACA,2BACA,4BAGA,2BACA,6CAGA,4BACA,0BACA,4BACA,yBAGA,uCAGA,yBACA,wBACA,yBACA,sBACA,yBACA,yBACA,0BAGA,yCACA,2BACA,4BACA,+BACA,wBACA,4BACA,2BACA,8BACA,6BACA,+BACA,2BACA,6BAGA,oBACA,oBACA,qBACA,yBAGA,8CACA,8EACA,8EACA,0FAGA,uCACA,uCACA,uCAGA,oBACA,oBAMF,WACE,oBACA,mBACA,uBACA,yBACA,kCACA,YACA,eACA,kCACA,yCACA,yJAKA,oBACE,mBACA,WAIF,eACE,kDACA,iCAGF,eACE,kDACA,mCAGF,eACE,mDACA,iCAIF,oBACE,mCACA,iCAEA,yCACE,yCAGF,0CACE,sBAIJ,sBACE,yBACA,wCACA,mCAEA,2CACE,gDAGF,4CACE,sBAIJ,kBACE,yBACA,mCAEA,uCACE,2BAGF,wCACE,sBAIJ,mBACE,iCACA,iCAEA,wCACE,6DAGF,yCACE,sBAIJ,uBACE,WAOJ,eACE,aACA,sBAEA,2BACE,WAGF,sBACE,mCACA,mCACA,iCACA,yCACA,yCAGF,qBACE,kBACA,oBACA,WACA,mBAGF,sBACE,WACA,kCACA,kCACA,mCACA,yCACA,mCACA,sCACA,4HAIA,mCACE,oCAGF,+BACE,mBACA,gDACA,oCACA,WAIF,+BACE,wCAEA,oDACE,0CAGF,6CACE,aACA,qCACA,qCAIJ,8BACE,gDACA,+BAEA,4CACE,aACA,qCACA,sCACA,qCAKJ,0BACE,kDACA,iCAGF,0BACE,kDACA,mCAGF,0BACE,mDACA,iCAIF,6BACE,8CACA,oDAGF,+BACE,gDACA,qDAIJ,uBACE,gCACA,iCACA,qCAEA,8BACE,4BAGF,gCACE,8BAIJ,qBACE,kBACA,oBACA,mBACA,uBACA,cACA,eACA,qCAEA,2BACE,0BAGF,4BACE,2BAQN,aACE,oBACA,mBACA,yBACA,eACA,iBACA,kBAEA,oBACE,kBACA,UACA,WACA,gBACA,mBACA,qBACA,mBAGF,kBACE,eACA,gBACA,sBACA,wCACA,kCACA,sCACA,4HAGA,qBACA,kBAGF,oBACE,kCACA,mCACA,yCACA,mCAKA,mCACE,WACA,YAEF,qCACE,iCAKF,mCACE,cACA,eAEF,qCACE,iCAKJ,oDACE,kDACA,qCAGF,gGAEE,WACA,mBAGF,8CACE,mCACA,qCAGF,qDACE,WACA,kBACA,SACA,QACA,aACA,cACA,4CACA,aACA,cACA,8CAOJ,UACE,kBACA,oBACA,mBACA,yBACA,eACA,iBAEA,iBACE,kBACA,QACA,UACA,eACA,SAGF,eACE,eACA,gBACA,sBACA,wCACA,oCACA,sCACA,4HAGA,kBACA,qBAGF,iBACE,kCACA,mCACA,yCACA,mCAKA,6BACE,WACA,YAEF,+BACE,iCAKF,6BACE,cACA,eAEF,+BACE,iCAKJ,8CACE,kDACA,qCAGF,wCACE,qCAGF,+CACE,WACA,kBACA,SACA,QACA,UACA,WACA,gCACA,mCACA,qBAGF,oFAEE,WACA,mBAOJ,WACE,kBACA,oBACA,mBACA,WACA,YACA,YACA,oCACA,kCACA,gDACA,eACA,YAEA,kBACE,WACA,YACA,sCACA,oCACA,+CACA,wBAGF,eACE,mCAEA,iCACE,2BAKJ,eACE,WACA,YAEA,iCACE,WACA,YAGF,+CACE,2BAIJ,eACE,WACA,YAEA,iCACE,WACA,YAGF,+CACE,2BAIJ,qBACE,WACA,mBAOJ,WACE,kBACA,oBACA,sBACA,WACA,yBACA,kCAEA,kBACE,iCACA,yCACA,yCACA,mCAGF,oBACE,WACA,oBACA,mBACA,8BACA,yBACA,eACA,mCACA,sCACA,kCACA,4HAGA,mCACA,yCACA,YACA,gBAEA,6DAEE,mBACA,WACA,gDACA,oCAIF,6BACE,wCAEA,qDACE,0CAGF,qCACE,qCACA,qCAIJ,4BACE,gDACA,+BAEA,oCACE,sCACA,qCACA,qCAKJ,wBACE,kDACA,iCAGF,wBACE,kDACA,mCAGF,wBACE,mDACA,iCAIJ,kBACE,cACA,YACA,gBACA,uBACA,mBAGF,wBACE,cACA,YACA,gBACA,uBACA,mBACA,oCAGF,iBACE,oBACA,mBACA,uBACA,qCACA,+CAEA,yBACE,yBAIJ,iBACE,kBACA,0BACA,SACA,OACA,WACA,eACA,sBACA,gCACA,sCACA,wCACA,kCACA,+BACA,iBACA,gBACA,kBACA,+BACA,gBACA,kCAEA,qBACE,SACA,YACA,aACA,mCAIJ,mBACE,WACA,sBACA,aACA,mBACA,8BACA,yBACA,kDACA,eACA,mCACA,yBACA,kCACA,mCACA,yCAEA,sDAEE,gDAGF,+BACE,yCAGF,+BACE,mBACA,oCAQN,UACE,eACA,QACA,aACA,mBACA,mCACA,0BAEA,kBACE,aAGF,iBACE,sCACA,kCACA,+BACA,4BACA,gBAGF,kBACE,6BACA,+CACA,mCACA,iCACA,2CACA,gBAGF,gBACE,6BAGF,kBACE,6BACA,4CACA,aACA,yBACA,yBAOJ,4BACE,eACA,cAGF,6BACE,0CACA,sCAIA,mBACE,eACA,QACA,mCACA,aACA,mBACA,uBACA,0BACA,qDAEA,2BACE,aAIJ,iBACE,sCACA,kCACA,gBACA,gBACA,+BACA,sDACA,gBAGF,iBACE,iCACA,2CACA,yCACA,2BACA,uEAGF,mBACE,mCACA,qCACA,6BACA,iBAGF,mBACE,aACA,yBACA,mBACA,oDACA,yBAIF,4DACA,kEACA,kEACA,8DAMF,SACE,sCACA,kCAEA,mBACE,wCAGF,mDACA,mDACA,mDAEA,4CACA,4CACA,6CAEA,gBACE,iCACA,2CACA,gBACA,mCACA,mCAOJ,2BACE,6BAGF,YACE,qBACA,sBACA,kBACA,wCACA,yCACA,8CAEA,uCACA,uCACA,uCACA,uCAMF,eACE,aACA,mBACA,uBACA,yBACA,iCAEA,qBACE,wCACA,sCACA,kCACA,iBACA,eACA,kCACA,iCACA,mCACA,eACA,uFAGA,0CACE,gDAGF,8BACE,WACA,mBAIJ,sBACE,aACA,mBACA,QAGF,qBACE,SACA,yBACA,eACA,YACA,kCACA,kCACA,iCACA,qCACA,eACA,gFAGA,2BACE,gDACA,mCAGF,6BACE,mCACA,2CAIJ,yBACE,eACA,kBACA,iCACA,oCAOJ,gBACE,aACA,sBACA,yBAEA,uBACE,mCACA,mCACA,yCACA,iCACA,yCAEA,gCACE,iCACA,4BAIJ,wBACE,aACA,yBAGF,wBACE,eACA,YACA,+BACA,kCACA,mCACA,mCACA,4CACA,wCACA,kCACA,eACA,kIAGA,gBACA,iBACE,yJAEF,oBACE,oEAEF,wBACA,4BAEA,6CACE,qCACA,sDAGF,sCACE,aACA,qCACA,qCAGF,iCACE,mBACA,8BACA,sDACA,0CAIJ,4BACE,WAEA,oDACE,WAGF,oDACE,OACA,YAQN,eACE,kBACA,oBACA,mBAEA,2CACE,0CAGF,wBACE,kBACA,QACA,UACA,eAGF,sBACE,wCACA,kCACA,sCACA,kDACA,kCACA,mCACA,mCACA,4HAKF,4DACE,kDACA,qCAGF,yBACE,mBAEA,iDACE,mBAGF,+CACE,WACA,mBAGF,qDACE,oCAQN,UACE,kCACA,mCACA,kCACA,+BAMF,mCACA,YACE,kBACA,UACA,WACA,UACA,YACA,gBACA,sBACA,mBACA","file":"bigtablet.min.css"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
(function(){'use strict';(function(k,g){typeof exports=="object"&&typeof module<"u"?module.exports=g():typeof define=="function"&&define.amd?define(g):(k=k||self,k.Bigtablet=g());})(void 0,function(){function k(n="bt"){return `${n}_${Math.random().toString(36).substring(2,9)}`}function g(n,a,o,e){return n.addEventListener(a,o,e),()=>n.removeEventListener(a,o,e)}function C(n,a=document){return a.querySelector(n)}function _(n,a=document){return Array.from(a.querySelectorAll(n))}function x(n,a={}){let o=typeof n=="string"?C(n):n;if(!o)return null;let e={placeholder:"Select...",disabled:false,onChange:null,...a},t={isOpen:false,value:e.defaultValue||null,activeIndex:-1,options:[]},y=o.dataset.options?JSON.parse(o.dataset.options):e.options||[];t.options=y;`${o.id||k("select")}_listbox`;let r=o.querySelector(".bt-select__control"),c=o.querySelector(".bt-select__list");if(!r||!c)return console.warn("Select: Missing required elements (.bt-select__control, .bt-select__list)"),null;function f(s){t.value=s;let l=t.options.find(m=>m.value===s),u=r.querySelector(".bt-select__value, .bt-select__placeholder");u&&(l?(u.textContent=l.label,u.classList.remove("bt-select__placeholder"),u.classList.add("bt-select__value")):(u.textContent=e.placeholder,u.classList.remove("bt-select__value"),u.classList.add("bt-select__placeholder"))),_(".bt-select__option",c).forEach((m,L)=>{m.classList.toggle("is-selected",t.options[L]?.value===s);}),e.onChange&&e.onChange(s,l);}function i(){if(e.disabled)return;t.isOpen=true,r.classList.add("is-open"),c.style.display="block";let s=r.getBoundingClientRect(),l=Math.min(t.options.length*40,288),u=window.innerHeight-s.bottom,m=s.top;u<l&&m>u?c.classList.add("bt-select__list--up"):c.classList.remove("bt-select__list--up");let L=t.options.findIndex(K=>K.value===t.value);t.activeIndex=L>=0?L:0,h();let D=r.querySelector(".bt-select__icon");D&&D.classList.add("is-open");}function d(){t.isOpen=false,r.classList.remove("is-open"),c.style.display="none";let s=r.querySelector(".bt-select__icon");s&&s.classList.remove("is-open");}function b(){t.isOpen?d():i();}function h(){_(".bt-select__option",c).forEach((s,l)=>{s.classList.toggle("is-active",l===t.activeIndex);});}function E(s){let l=t.options.length,u=t.activeIndex;for(let m=0;m<l;m++)if(u=(u+s+l)%l,!t.options[u].disabled){t.activeIndex=u,h();break}}function A(){let s=t.options[t.activeIndex];s&&!s.disabled&&(f(s.value),d());}function M(s){s.preventDefault(),b();}function P(s){if(!e.disabled)switch(s.key){case " ":case "Enter":s.preventDefault(),t.isOpen?A():i();break;case "ArrowDown":s.preventDefault(),t.isOpen?E(1):i();break;case "ArrowUp":s.preventDefault(),t.isOpen?E(-1):i();break;case "Home":s.preventDefault(),i(),t.activeIndex=t.options.findIndex(l=>!l.disabled),h();break;case "End":s.preventDefault(),i();for(let l=t.options.length-1;l>=0;l--)if(!t.options[l].disabled){t.activeIndex=l,h();break}break;case "Escape":s.preventDefault(),d();break}}function T(s){o.contains(s.target)||d();}function B(s){return function(l){l.preventDefault();let u=t.options[s];u&&!u.disabled&&(f(u.value),d());}}function H(s){return function(){t.options[s].disabled||(t.activeIndex=s,h());}}let O=[g(r,"click",M),g(r,"keydown",P),g(document,"mousedown",T)];return _(".bt-select__option",c).forEach((s,l)=>{O.push(g(s,"click",B(l))),O.push(g(s,"mouseenter",H(l)));}),c.style.display="none",e.defaultValue&&f(e.defaultValue),{getValue:()=>t.value,setValue:f,open:i,close:d,toggle:b,setDisabled:s=>{e.disabled=s,r.classList.toggle("is-disabled",s);},destroy:()=>{O.forEach(s=>s());}}}function S(n,a={}){let o=typeof n=="string"?C(n):n;if(!o)return null;let e={closeOnOverlay:true,closeOnEscape:true,onOpen:null,onClose:null,...a},t={isOpen:false};o.querySelector(".bt-modal__panel");function v(){t.isOpen=true,o.classList.add("is-open"),document.body.style.overflow="hidden",e.onOpen&&e.onOpen();}function p(){t.isOpen=false,o.classList.remove("is-open"),document.body.style.overflow="",e.onClose&&e.onClose();}function r(i){e.closeOnOverlay&&i.target===o&&p();}function c(i){e.closeOnEscape&&i.key==="Escape"&&t.isOpen&&p();}let f=[g(o,"click",r),g(document,"keydown",c)];return _("[data-modal-close]",o).forEach(i=>{f.push(g(i,"click",p));}),{isOpen:()=>t.isOpen,open:v,close:p,toggle:()=>t.isOpen?p():v(),destroy:()=>{f.forEach(i=>i()),document.body.style.overflow="";}}}function q(n={}){let a={title:"",message:"",variant:"info",confirmText:"\uD655\uC778",cancelText:"\uCDE8\uC18C",showCancel:false,actionsAlign:"right",onConfirm:null,onCancel:null,...n},o=document.createElement("div");o.className=`bt-alert__overlay bt-alert--${a.variant} is-open`,o.innerHTML=`
|
|
2
|
+
<div class="bt-alert__modal">
|
|
3
|
+
${a.title?`<div class="bt-alert__title">${a.title}</div>`:""}
|
|
4
|
+
<div class="bt-alert__message">${a.message}</div>
|
|
5
|
+
<div class="bt-alert__actions" style="justify-content: ${a.actionsAlign==="left"?"flex-start":a.actionsAlign==="center"?"center":"flex-end"}">
|
|
6
|
+
${a.showCancel?`<button class="bt-button bt-button--md bt-button--secondary" data-alert-cancel>${a.cancelText}</button>`:""}
|
|
7
|
+
<button class="bt-button bt-button--md bt-button--primary" data-alert-confirm>${a.confirmText}</button>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
`,document.body.appendChild(o),document.body.style.overflow="hidden";function e(){o.classList.remove("is-open"),setTimeout(()=>{o.remove(),document.body.style.overflow="";},200);}let t=o.querySelector("[data-alert-confirm]"),y=o.querySelector("[data-alert-cancel]");t&&t.addEventListener("click",()=>{a.onConfirm&&a.onConfirm(),e();}),y&&y.addEventListener("click",()=>{a.onCancel&&a.onCancel(),e();}),o.addEventListener("click",p=>{p.target===o&&e();});let v=p=>{p.key==="Escape"&&(e(),document.removeEventListener("keydown",v));};return document.addEventListener("keydown",v),{close:e}}function I(n,a={}){let o=typeof n=="string"?C(n):n;if(!o)return null;let e={defaultChecked:false,disabled:false,onChange:null,...a},t={checked:e.defaultChecked||o.classList.contains("bt-switch--on")};function y(r){t.checked=r,o.classList.toggle("bt-switch--on",r),e.onChange&&e.onChange(r);}function v(){!e.disabled&&!o.classList.contains("bt-switch--disabled")&&y(!t.checked);}let p=g(o,"click",v);return e.defaultChecked&&y(true),{isChecked:()=>t.checked,setChecked:y,toggle:v,setDisabled:r=>{e.disabled=r,o.classList.toggle("bt-switch--disabled",r);},destroy:()=>p()}}function $(n,a={}){let o=typeof n=="string"?C(n):n;if(!o)return null;let e={page:1,totalPages:1,sibling:2,onChange:null,...a};function t(c,f){let i=[];for(let d=c;d<=f;d++)i.push(d);return i}function y(c,f){if(f<=7)return t(1,f);let i=[],d=f,b=e.sibling;if(c<=b+2){for(let h of t(1,b+3))i.push(h);return i.push("ellipsis"),i.push(d),i}if(c>=d-b-1){i.push(1),i.push("ellipsis");for(let h of t(d-b-2,d))i.push(h);return i}i.push(1),i.push("ellipsis");for(let h of t(c-b,c+b))i.push(h);return i.push("ellipsis"),i.push(d),i}function v(){let c=y(e.page,e.totalPages),f=`
|
|
11
|
+
<button class="bt-pagination__item" ${e.page<=1?"disabled":""} data-action="prev" aria-label="Previous page">
|
|
12
|
+
\u2039
|
|
13
|
+
</button>
|
|
14
|
+
<div class="bt-pagination__pages">
|
|
15
|
+
`;c.forEach((b,h)=>{if(b==="ellipsis")f+='<span class="bt-pagination__ellipsis" aria-hidden="true">\u2026</span>';else {let E=b===e.page;f+=`
|
|
16
|
+
<button
|
|
17
|
+
class="bt-pagination__page${E?" bt-pagination__page--active":""}"
|
|
18
|
+
data-page="${b}"
|
|
19
|
+
${E?'aria-current="page"':""}
|
|
20
|
+
>
|
|
21
|
+
${b}
|
|
22
|
+
</button>
|
|
23
|
+
`;}}),f+=`
|
|
24
|
+
</div>
|
|
25
|
+
<button class="bt-pagination__item" ${e.page>=e.totalPages?"disabled":""} data-action="next" aria-label="Next page">
|
|
26
|
+
\u203A
|
|
27
|
+
</button>
|
|
28
|
+
`,o.innerHTML=f,_("[data-page]",o).forEach(b=>{b.addEventListener("click",()=>{let h=parseInt(b.dataset.page,10);p(h);});});let i=o.querySelector('[data-action="prev"]'),d=o.querySelector('[data-action="next"]');i&&i.addEventListener("click",()=>p(e.page-1)),d&&d.addEventListener("click",()=>p(e.page+1));}function p(c){c<1||c>e.totalPages||c===e.page||(e.page=c,v(),e.onChange&&e.onChange(c));}function r(c){e.totalPages=c,e.page>c&&(e.page=c),v();}return v(),{getPage:()=>e.page,setPage:p,setTotalPages:r,render:v}}function w(){_("[data-bt-select]").forEach(n=>{n._btSelect||(n._btSelect=x(n));}),_("[data-bt-modal]").forEach(n=>{n._btModal||(n._btModal=S(n));}),_("[data-bt-modal-open]").forEach(n=>{let a=n.dataset.btModalOpen,o=C(`#${a}`);o&&o._btModal&&n.addEventListener("click",()=>o._btModal.open());}),_("[data-bt-switch]").forEach(n=>{n._btSwitch||(n._btSwitch=I(n));}),_("[data-bt-pagination]").forEach(n=>{if(!n._btPagination){let a=parseInt(n.dataset.page,10)||1,o=parseInt(n.dataset.totalPages,10)||1;n._btPagination=$(n,{page:a,totalPages:o});}});}return typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",w):w()),{Select:x,Modal:S,Alert:q,Switch:I,Pagination:$,init:w,generateId:k,$:C,$$:_,on:g,version:"1.0.0"}});
|
|
29
|
+
/**
|
|
30
|
+
* Bigtablet Design System - Vanilla JavaScript
|
|
31
|
+
* For use with plain HTML/CSS/JS, Thymeleaf, JSP, etc.
|
|
32
|
+
*
|
|
33
|
+
* @version 1.0.0
|
|
34
|
+
* @license MIT
|
|
35
|
+
*/})();
|
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="ko">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Bigtablet Design System - Vanilla Examples</title>
|
|
7
|
+
|
|
8
|
+
<!-- Pretendard Font -->
|
|
9
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css">
|
|
10
|
+
|
|
11
|
+
<!-- Bigtablet CSS -->
|
|
12
|
+
<link rel="stylesheet" href="../bigtablet.css">
|
|
13
|
+
|
|
14
|
+
<style>
|
|
15
|
+
* {
|
|
16
|
+
margin: 0;
|
|
17
|
+
padding: 0;
|
|
18
|
+
box-sizing: border-box;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
body {
|
|
22
|
+
font-family: var(--bt-font-family, "Pretendard", sans-serif);
|
|
23
|
+
background: var(--bt-color-background-secondary, #fafafa);
|
|
24
|
+
color: var(--bt-color-text-primary, #1a1a1a);
|
|
25
|
+
line-height: 1.5;
|
|
26
|
+
padding: 2rem;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.container {
|
|
30
|
+
max-width: 960px;
|
|
31
|
+
margin: 0 auto;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
h1 {
|
|
35
|
+
font-size: 2rem;
|
|
36
|
+
font-weight: 700;
|
|
37
|
+
margin-bottom: 2rem;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
h2 {
|
|
41
|
+
font-size: 1.25rem;
|
|
42
|
+
font-weight: 600;
|
|
43
|
+
margin: 2rem 0 1rem;
|
|
44
|
+
padding-bottom: 0.5rem;
|
|
45
|
+
border-bottom: 1px solid var(--bt-color-border, #e5e5e5);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.section {
|
|
49
|
+
background: var(--bt-color-background, #fff);
|
|
50
|
+
border-radius: var(--bt-radius-lg, 12px);
|
|
51
|
+
padding: 1.5rem;
|
|
52
|
+
margin-bottom: 1.5rem;
|
|
53
|
+
box-shadow: var(--bt-shadow-sm, 0 2px 4px rgba(0,0,0,0.04));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.demo-row {
|
|
57
|
+
display: flex;
|
|
58
|
+
flex-wrap: wrap;
|
|
59
|
+
gap: 1rem;
|
|
60
|
+
align-items: center;
|
|
61
|
+
margin-bottom: 1rem;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.demo-row:last-child {
|
|
65
|
+
margin-bottom: 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
code {
|
|
69
|
+
background: var(--bt-color-background-neutral, #f3f3f3);
|
|
70
|
+
padding: 0.125rem 0.375rem;
|
|
71
|
+
border-radius: 4px;
|
|
72
|
+
font-size: 0.875rem;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
pre {
|
|
76
|
+
background: #1e293b;
|
|
77
|
+
color: #e2e8f0;
|
|
78
|
+
padding: 1rem;
|
|
79
|
+
border-radius: 8px;
|
|
80
|
+
overflow-x: auto;
|
|
81
|
+
font-size: 0.875rem;
|
|
82
|
+
margin-top: 1rem;
|
|
83
|
+
}
|
|
84
|
+
</style>
|
|
85
|
+
</head>
|
|
86
|
+
<body>
|
|
87
|
+
<div class="container">
|
|
88
|
+
<h1>Bigtablet Design System</h1>
|
|
89
|
+
<p style="margin-bottom: 2rem; color: var(--bt-color-text-secondary);">
|
|
90
|
+
Vanilla HTML/CSS/JS 환경에서 사용하는 예제입니다.
|
|
91
|
+
</p>
|
|
92
|
+
|
|
93
|
+
<!-- Button -->
|
|
94
|
+
<div class="section">
|
|
95
|
+
<h2>Button</h2>
|
|
96
|
+
<div class="demo-row">
|
|
97
|
+
<button class="bt-button bt-button--md bt-button--primary">Primary</button>
|
|
98
|
+
<button class="bt-button bt-button--md bt-button--secondary">Secondary</button>
|
|
99
|
+
<button class="bt-button bt-button--md bt-button--ghost">Ghost</button>
|
|
100
|
+
<button class="bt-button bt-button--md bt-button--danger">Danger</button>
|
|
101
|
+
</div>
|
|
102
|
+
<div class="demo-row">
|
|
103
|
+
<button class="bt-button bt-button--sm bt-button--primary">Small</button>
|
|
104
|
+
<button class="bt-button bt-button--md bt-button--primary">Medium</button>
|
|
105
|
+
<button class="bt-button bt-button--lg bt-button--primary">Large</button>
|
|
106
|
+
</div>
|
|
107
|
+
<div class="demo-row">
|
|
108
|
+
<button class="bt-button bt-button--md bt-button--primary" disabled>Disabled</button>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
<pre><code><button class="bt-button bt-button--md bt-button--primary">Primary</button>
|
|
112
|
+
<button class="bt-button bt-button--md bt-button--secondary">Secondary</button>
|
|
113
|
+
<button class="bt-button bt-button--md bt-button--ghost">Ghost</button>
|
|
114
|
+
<button class="bt-button bt-button--md bt-button--danger">Danger</button></code></pre>
|
|
115
|
+
</div>
|
|
116
|
+
|
|
117
|
+
<!-- TextField -->
|
|
118
|
+
<div class="section">
|
|
119
|
+
<h2>TextField</h2>
|
|
120
|
+
<div class="demo-row">
|
|
121
|
+
<div class="bt-text-field" style="width: 300px;">
|
|
122
|
+
<label class="bt-text-field__label">Label</label>
|
|
123
|
+
<div class="bt-text-field__wrap">
|
|
124
|
+
<input type="text" class="bt-text-field__input bt-text-field__input--outline bt-text-field__input--md" placeholder="Enter text...">
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
<div class="demo-row">
|
|
129
|
+
<div class="bt-text-field" style="width: 300px;">
|
|
130
|
+
<label class="bt-text-field__label">Filled Variant</label>
|
|
131
|
+
<div class="bt-text-field__wrap">
|
|
132
|
+
<input type="text" class="bt-text-field__input bt-text-field__input--filled bt-text-field__input--md" placeholder="Enter text...">
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
<div class="demo-row">
|
|
137
|
+
<div class="bt-text-field" style="width: 300px;">
|
|
138
|
+
<label class="bt-text-field__label">With Error</label>
|
|
139
|
+
<div class="bt-text-field__wrap">
|
|
140
|
+
<input type="text" class="bt-text-field__input bt-text-field__input--outline bt-text-field__input--md bt-text-field__input--error" value="Invalid value">
|
|
141
|
+
</div>
|
|
142
|
+
<span class="bt-text-field__helper bt-text-field__helper--error">This field is required</span>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<pre><code><div class="bt-text-field">
|
|
147
|
+
<label class="bt-text-field__label">Label</label>
|
|
148
|
+
<div class="bt-text-field__wrap">
|
|
149
|
+
<input type="text" class="bt-text-field__input bt-text-field__input--outline bt-text-field__input--md" placeholder="Enter text...">
|
|
150
|
+
</div>
|
|
151
|
+
</div></code></pre>
|
|
152
|
+
</div>
|
|
153
|
+
|
|
154
|
+
<!-- Checkbox -->
|
|
155
|
+
<div class="section">
|
|
156
|
+
<h2>Checkbox</h2>
|
|
157
|
+
<div class="demo-row">
|
|
158
|
+
<label class="bt-checkbox">
|
|
159
|
+
<input type="checkbox" class="bt-checkbox__input">
|
|
160
|
+
<span class="bt-checkbox__box"></span>
|
|
161
|
+
<span class="bt-checkbox__label">Checkbox Label</span>
|
|
162
|
+
</label>
|
|
163
|
+
</div>
|
|
164
|
+
<div class="demo-row">
|
|
165
|
+
<label class="bt-checkbox">
|
|
166
|
+
<input type="checkbox" class="bt-checkbox__input" checked>
|
|
167
|
+
<span class="bt-checkbox__box"></span>
|
|
168
|
+
<span class="bt-checkbox__label">Checked</span>
|
|
169
|
+
</label>
|
|
170
|
+
</div>
|
|
171
|
+
<div class="demo-row">
|
|
172
|
+
<label class="bt-checkbox">
|
|
173
|
+
<input type="checkbox" class="bt-checkbox__input" disabled>
|
|
174
|
+
<span class="bt-checkbox__box"></span>
|
|
175
|
+
<span class="bt-checkbox__label">Disabled</span>
|
|
176
|
+
</label>
|
|
177
|
+
</div>
|
|
178
|
+
|
|
179
|
+
<pre><code><label class="bt-checkbox">
|
|
180
|
+
<input type="checkbox" class="bt-checkbox__input">
|
|
181
|
+
<span class="bt-checkbox__box"></span>
|
|
182
|
+
<span class="bt-checkbox__label">Checkbox Label</span>
|
|
183
|
+
</label></code></pre>
|
|
184
|
+
</div>
|
|
185
|
+
|
|
186
|
+
<!-- Radio -->
|
|
187
|
+
<div class="section">
|
|
188
|
+
<h2>Radio</h2>
|
|
189
|
+
<div class="demo-row" style="flex-direction: column; align-items: flex-start;">
|
|
190
|
+
<label class="bt-radio">
|
|
191
|
+
<input type="radio" name="demo-radio" class="bt-radio__input" checked>
|
|
192
|
+
<span class="bt-radio__dot"></span>
|
|
193
|
+
<span class="bt-radio__label">Option 1</span>
|
|
194
|
+
</label>
|
|
195
|
+
<label class="bt-radio">
|
|
196
|
+
<input type="radio" name="demo-radio" class="bt-radio__input">
|
|
197
|
+
<span class="bt-radio__dot"></span>
|
|
198
|
+
<span class="bt-radio__label">Option 2</span>
|
|
199
|
+
</label>
|
|
200
|
+
<label class="bt-radio">
|
|
201
|
+
<input type="radio" name="demo-radio" class="bt-radio__input">
|
|
202
|
+
<span class="bt-radio__dot"></span>
|
|
203
|
+
<span class="bt-radio__label">Option 3</span>
|
|
204
|
+
</label>
|
|
205
|
+
</div>
|
|
206
|
+
|
|
207
|
+
<pre><code><label class="bt-radio">
|
|
208
|
+
<input type="radio" name="group" class="bt-radio__input">
|
|
209
|
+
<span class="bt-radio__dot"></span>
|
|
210
|
+
<span class="bt-radio__label">Option 1</span>
|
|
211
|
+
</label></code></pre>
|
|
212
|
+
</div>
|
|
213
|
+
|
|
214
|
+
<!-- Switch -->
|
|
215
|
+
<div class="section">
|
|
216
|
+
<h2>Switch</h2>
|
|
217
|
+
<div class="demo-row">
|
|
218
|
+
<button class="bt-switch" data-bt-switch>
|
|
219
|
+
<span class="bt-switch__thumb"></span>
|
|
220
|
+
</button>
|
|
221
|
+
<span>Off</span>
|
|
222
|
+
</div>
|
|
223
|
+
<div class="demo-row">
|
|
224
|
+
<button class="bt-switch bt-switch--on" data-bt-switch>
|
|
225
|
+
<span class="bt-switch__thumb"></span>
|
|
226
|
+
</button>
|
|
227
|
+
<span>On</span>
|
|
228
|
+
</div>
|
|
229
|
+
<div class="demo-row">
|
|
230
|
+
<button class="bt-switch bt-switch--sm" data-bt-switch>
|
|
231
|
+
<span class="bt-switch__thumb"></span>
|
|
232
|
+
</button>
|
|
233
|
+
<span>Small</span>
|
|
234
|
+
</div>
|
|
235
|
+
<div class="demo-row">
|
|
236
|
+
<button class="bt-switch bt-switch--lg" data-bt-switch>
|
|
237
|
+
<span class="bt-switch__thumb"></span>
|
|
238
|
+
</button>
|
|
239
|
+
<span>Large</span>
|
|
240
|
+
</div>
|
|
241
|
+
|
|
242
|
+
<pre><code><button class="bt-switch" data-bt-switch>
|
|
243
|
+
<span class="bt-switch__thumb"></span>
|
|
244
|
+
</button>
|
|
245
|
+
|
|
246
|
+
<!-- On state -->
|
|
247
|
+
<button class="bt-switch bt-switch--on" data-bt-switch>
|
|
248
|
+
<span class="bt-switch__thumb"></span>
|
|
249
|
+
</button></code></pre>
|
|
250
|
+
</div>
|
|
251
|
+
|
|
252
|
+
<!-- Select -->
|
|
253
|
+
<div class="section">
|
|
254
|
+
<h2>Select</h2>
|
|
255
|
+
<div class="demo-row">
|
|
256
|
+
<div class="bt-select" data-bt-select style="width: 300px;">
|
|
257
|
+
<label class="bt-select__label">Select Option</label>
|
|
258
|
+
<button type="button" class="bt-select__control bt-select__control--outline bt-select__control--md">
|
|
259
|
+
<span class="bt-select__placeholder">Select...</span>
|
|
260
|
+
<span class="bt-select__icon">
|
|
261
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
262
|
+
<path d="M6 9l6 6 6-6"/>
|
|
263
|
+
</svg>
|
|
264
|
+
</span>
|
|
265
|
+
</button>
|
|
266
|
+
<ul class="bt-select__list" style="display: none;">
|
|
267
|
+
<li class="bt-select__option" data-value="apple">Apple</li>
|
|
268
|
+
<li class="bt-select__option" data-value="banana">Banana</li>
|
|
269
|
+
<li class="bt-select__option" data-value="cherry">Cherry</li>
|
|
270
|
+
<li class="bt-select__option is-disabled" data-value="disabled">Disabled Option</li>
|
|
271
|
+
<li class="bt-select__option" data-value="elderberry">Elderberry</li>
|
|
272
|
+
</ul>
|
|
273
|
+
</div>
|
|
274
|
+
</div>
|
|
275
|
+
|
|
276
|
+
<pre><code><div class="bt-select" data-bt-select>
|
|
277
|
+
<label class="bt-select__label">Select Option</label>
|
|
278
|
+
<button type="button" class="bt-select__control bt-select__control--outline bt-select__control--md">
|
|
279
|
+
<span class="bt-select__placeholder">Select...</span>
|
|
280
|
+
<span class="bt-select__icon">▼</span>
|
|
281
|
+
</button>
|
|
282
|
+
<ul class="bt-select__list">
|
|
283
|
+
<li class="bt-select__option" data-value="apple">Apple</li>
|
|
284
|
+
<li class="bt-select__option" data-value="banana">Banana</li>
|
|
285
|
+
</ul>
|
|
286
|
+
</div></code></pre>
|
|
287
|
+
</div>
|
|
288
|
+
|
|
289
|
+
<!-- Card -->
|
|
290
|
+
<div class="section">
|
|
291
|
+
<h2>Card</h2>
|
|
292
|
+
<div class="demo-row">
|
|
293
|
+
<div class="bt-card bt-card--bordered bt-card--p-md" style="width: 300px;">
|
|
294
|
+
<div class="bt-card__title">Card Title</div>
|
|
295
|
+
<p>This is a card component with bordered style and medium padding.</p>
|
|
296
|
+
</div>
|
|
297
|
+
<div class="bt-card bt-card--shadow-md bt-card--p-md" style="width: 300px;">
|
|
298
|
+
<div class="bt-card__title">Shadow Card</div>
|
|
299
|
+
<p>This card uses shadow instead of border.</p>
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
302
|
+
|
|
303
|
+
<pre><code><div class="bt-card bt-card--bordered bt-card--p-md">
|
|
304
|
+
<div class="bt-card__title">Card Title</div>
|
|
305
|
+
<p>Card content goes here.</p>
|
|
306
|
+
</div></code></pre>
|
|
307
|
+
</div>
|
|
308
|
+
|
|
309
|
+
<!-- Spinner -->
|
|
310
|
+
<div class="section">
|
|
311
|
+
<h2>Spinner</h2>
|
|
312
|
+
<div class="demo-row">
|
|
313
|
+
<div class="bt-spinner bt-spinner--sm"></div>
|
|
314
|
+
<div class="bt-spinner bt-spinner--md"></div>
|
|
315
|
+
<div class="bt-spinner bt-spinner--lg"></div>
|
|
316
|
+
<div class="bt-spinner bt-spinner--xl"></div>
|
|
317
|
+
</div>
|
|
318
|
+
|
|
319
|
+
<pre><code><div class="bt-spinner bt-spinner--md"></div></code></pre>
|
|
320
|
+
</div>
|
|
321
|
+
|
|
322
|
+
<!-- Pagination -->
|
|
323
|
+
<div class="section">
|
|
324
|
+
<h2>Pagination</h2>
|
|
325
|
+
<nav class="bt-pagination" data-bt-pagination data-page="3" data-total-pages="10">
|
|
326
|
+
<!-- JS가 자동으로 렌더링 -->
|
|
327
|
+
</nav>
|
|
328
|
+
|
|
329
|
+
<pre><code><nav class="bt-pagination" data-bt-pagination data-page="3" data-total-pages="10">
|
|
330
|
+
<!-- JS가 자동으로 렌더링 -->
|
|
331
|
+
</nav>
|
|
332
|
+
|
|
333
|
+
<script>
|
|
334
|
+
// 또는 수동 초기화
|
|
335
|
+
const pagination = Bigtablet.Pagination('#my-pagination', {
|
|
336
|
+
page: 1,
|
|
337
|
+
totalPages: 10,
|
|
338
|
+
onChange: (page) => console.log('Page:', page)
|
|
339
|
+
});
|
|
340
|
+
</script></code></pre>
|
|
341
|
+
</div>
|
|
342
|
+
|
|
343
|
+
<!-- Modal -->
|
|
344
|
+
<div class="section">
|
|
345
|
+
<h2>Modal</h2>
|
|
346
|
+
<div class="demo-row">
|
|
347
|
+
<button class="bt-button bt-button--md bt-button--primary" data-bt-modal-open="demo-modal">
|
|
348
|
+
Open Modal
|
|
349
|
+
</button>
|
|
350
|
+
</div>
|
|
351
|
+
|
|
352
|
+
<div id="demo-modal" class="bt-modal" data-bt-modal>
|
|
353
|
+
<div class="bt-modal__panel" style="width: 400px;">
|
|
354
|
+
<div class="bt-modal__header">Modal Title</div>
|
|
355
|
+
<div class="bt-modal__body">
|
|
356
|
+
<p>This is the modal content. You can put any HTML here.</p>
|
|
357
|
+
</div>
|
|
358
|
+
<div class="bt-modal__footer">
|
|
359
|
+
<button class="bt-button bt-button--md bt-button--secondary" data-modal-close>Cancel</button>
|
|
360
|
+
<button class="bt-button bt-button--md bt-button--primary" data-modal-close>Confirm</button>
|
|
361
|
+
</div>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
|
|
365
|
+
<pre><code><button data-bt-modal-open="my-modal">Open Modal</button>
|
|
366
|
+
|
|
367
|
+
<div id="my-modal" class="bt-modal" data-bt-modal>
|
|
368
|
+
<div class="bt-modal__panel">
|
|
369
|
+
<div class="bt-modal__header">Title</div>
|
|
370
|
+
<div class="bt-modal__body">Content</div>
|
|
371
|
+
<div class="bt-modal__footer">
|
|
372
|
+
<button data-modal-close>Close</button>
|
|
373
|
+
</div>
|
|
374
|
+
</div>
|
|
375
|
+
</div></code></pre>
|
|
376
|
+
</div>
|
|
377
|
+
|
|
378
|
+
<!-- Alert -->
|
|
379
|
+
<div class="section">
|
|
380
|
+
<h2>Alert (JavaScript)</h2>
|
|
381
|
+
<div class="demo-row">
|
|
382
|
+
<button class="bt-button bt-button--md bt-button--primary" onclick="showInfoAlert()">Info Alert</button>
|
|
383
|
+
<button class="bt-button bt-button--md bt-button--secondary" onclick="showConfirmAlert()">Confirm Alert</button>
|
|
384
|
+
<button class="bt-button bt-button--md bt-button--danger" onclick="showErrorAlert()">Error Alert</button>
|
|
385
|
+
</div>
|
|
386
|
+
|
|
387
|
+
<pre><code>// Info Alert
|
|
388
|
+
Bigtablet.Alert({
|
|
389
|
+
title: '알림',
|
|
390
|
+
message: '작업이 완료되었습니다.',
|
|
391
|
+
variant: 'info'
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
// Confirm Alert
|
|
395
|
+
Bigtablet.Alert({
|
|
396
|
+
title: '확인',
|
|
397
|
+
message: '정말 삭제하시겠습니까?',
|
|
398
|
+
variant: 'warning',
|
|
399
|
+
showCancel: true,
|
|
400
|
+
onConfirm: () => console.log('Confirmed!'),
|
|
401
|
+
onCancel: () => console.log('Cancelled')
|
|
402
|
+
});</code></pre>
|
|
403
|
+
</div>
|
|
404
|
+
|
|
405
|
+
<!-- DatePicker -->
|
|
406
|
+
<div class="section">
|
|
407
|
+
<h2>DatePicker</h2>
|
|
408
|
+
<div class="demo-row">
|
|
409
|
+
<div class="bt-date-picker" style="width: 300px;">
|
|
410
|
+
<label class="bt-date-picker__label">
|
|
411
|
+
Date
|
|
412
|
+
<span class="bt-date-picker__label-required">*</span>
|
|
413
|
+
</label>
|
|
414
|
+
<div class="bt-date-picker__fields">
|
|
415
|
+
<select class="bt-date-picker__select">
|
|
416
|
+
<option value="">Year</option>
|
|
417
|
+
<option value="2024">2024</option>
|
|
418
|
+
<option value="2025">2025</option>
|
|
419
|
+
<option value="2026">2026</option>
|
|
420
|
+
</select>
|
|
421
|
+
<select class="bt-date-picker__select">
|
|
422
|
+
<option value="">Month</option>
|
|
423
|
+
<option value="1">1</option>
|
|
424
|
+
<option value="2">2</option>
|
|
425
|
+
<option value="3">3</option>
|
|
426
|
+
<option value="4">4</option>
|
|
427
|
+
<option value="5">5</option>
|
|
428
|
+
<option value="6">6</option>
|
|
429
|
+
<option value="7">7</option>
|
|
430
|
+
<option value="8">8</option>
|
|
431
|
+
<option value="9">9</option>
|
|
432
|
+
<option value="10">10</option>
|
|
433
|
+
<option value="11">11</option>
|
|
434
|
+
<option value="12">12</option>
|
|
435
|
+
</select>
|
|
436
|
+
<select class="bt-date-picker__select">
|
|
437
|
+
<option value="">Day</option>
|
|
438
|
+
<option value="1">1</option>
|
|
439
|
+
<option value="2">2</option>
|
|
440
|
+
<!-- ... -->
|
|
441
|
+
<option value="31">31</option>
|
|
442
|
+
</select>
|
|
443
|
+
</div>
|
|
444
|
+
</div>
|
|
445
|
+
</div>
|
|
446
|
+
|
|
447
|
+
<pre><code><div class="bt-date-picker">
|
|
448
|
+
<label class="bt-date-picker__label">Date</label>
|
|
449
|
+
<div class="bt-date-picker__fields">
|
|
450
|
+
<select class="bt-date-picker__select">
|
|
451
|
+
<option value="">Year</option>
|
|
452
|
+
<option value="2024">2024</option>
|
|
453
|
+
</select>
|
|
454
|
+
<select class="bt-date-picker__select">
|
|
455
|
+
<option value="">Month</option>
|
|
456
|
+
<option value="1">1</option>
|
|
457
|
+
</select>
|
|
458
|
+
<select class="bt-date-picker__select">
|
|
459
|
+
<option value="">Day</option>
|
|
460
|
+
<option value="1">1</option>
|
|
461
|
+
</select>
|
|
462
|
+
</div>
|
|
463
|
+
</div></code></pre>
|
|
464
|
+
</div>
|
|
465
|
+
|
|
466
|
+
<!-- FileInput -->
|
|
467
|
+
<div class="section">
|
|
468
|
+
<h2>FileInput</h2>
|
|
469
|
+
<div class="demo-row">
|
|
470
|
+
<div class="bt-file-input">
|
|
471
|
+
<input type="file" class="bt-file-input__control" id="file-input">
|
|
472
|
+
<label class="bt-file-input__label" for="file-input">Choose File</label>
|
|
473
|
+
</div>
|
|
474
|
+
</div>
|
|
475
|
+
|
|
476
|
+
<pre><code><div class="bt-file-input">
|
|
477
|
+
<input type="file" class="bt-file-input__control" id="file-input">
|
|
478
|
+
<label class="bt-file-input__label" for="file-input">Choose File</label>
|
|
479
|
+
</div></code></pre>
|
|
480
|
+
</div>
|
|
481
|
+
|
|
482
|
+
</div>
|
|
483
|
+
|
|
484
|
+
<!-- Bigtablet JS -->
|
|
485
|
+
<script src="../bigtablet.js"></script>
|
|
486
|
+
<script>
|
|
487
|
+
// Alert examples
|
|
488
|
+
function showInfoAlert() {
|
|
489
|
+
Bigtablet.Alert({
|
|
490
|
+
title: '알림',
|
|
491
|
+
message: '작업이 성공적으로 완료되었습니다.',
|
|
492
|
+
variant: 'info'
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
function showConfirmAlert() {
|
|
497
|
+
Bigtablet.Alert({
|
|
498
|
+
title: '확인',
|
|
499
|
+
message: '이 항목을 삭제하시겠습니까?',
|
|
500
|
+
variant: 'warning',
|
|
501
|
+
showCancel: true,
|
|
502
|
+
confirmText: '삭제',
|
|
503
|
+
cancelText: '취소',
|
|
504
|
+
onConfirm: () => console.log('삭제됨'),
|
|
505
|
+
onCancel: () => console.log('취소됨')
|
|
506
|
+
});
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
function showErrorAlert() {
|
|
510
|
+
Bigtablet.Alert({
|
|
511
|
+
title: '오류',
|
|
512
|
+
message: '요청을 처리하는 중 오류가 발생했습니다.',
|
|
513
|
+
variant: 'error'
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
// Select example with options
|
|
518
|
+
document.addEventListener('DOMContentLoaded', function() {
|
|
519
|
+
const selectEl = document.querySelector('[data-bt-select]');
|
|
520
|
+
if (selectEl && selectEl._btSelect) {
|
|
521
|
+
// Already initialized by auto-init
|
|
522
|
+
} else if (selectEl) {
|
|
523
|
+
const options = [
|
|
524
|
+
{ value: 'apple', label: 'Apple' },
|
|
525
|
+
{ value: 'banana', label: 'Banana' },
|
|
526
|
+
{ value: 'cherry', label: 'Cherry' },
|
|
527
|
+
{ value: 'disabled', label: 'Disabled Option', disabled: true },
|
|
528
|
+
{ value: 'elderberry', label: 'Elderberry' }
|
|
529
|
+
];
|
|
530
|
+
|
|
531
|
+
Bigtablet.Select(selectEl, {
|
|
532
|
+
options,
|
|
533
|
+
placeholder: 'Select a fruit...',
|
|
534
|
+
onChange: (value, option) => {
|
|
535
|
+
console.log('Selected:', value, option);
|
|
536
|
+
}
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
// Pagination change handler
|
|
541
|
+
const paginationEl = document.querySelector('[data-bt-pagination]');
|
|
542
|
+
if (paginationEl && paginationEl._btPagination) {
|
|
543
|
+
// You can set onChange after init if needed
|
|
544
|
+
}
|
|
545
|
+
});
|
|
546
|
+
</script>
|
|
547
|
+
</body>
|
|
548
|
+
</html>
|