@bigtablet/design-system 1.8.0 → 1.9.0

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/dist/index.css CHANGED
@@ -866,6 +866,77 @@
866
866
  box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.15) !important;
867
867
  }
868
868
 
869
+ /* src/ui/form/date-picker/style.scss */
870
+ .date_picker {
871
+ display: flex;
872
+ gap: 0.5rem;
873
+ }
874
+ .date_picker select {
875
+ min-width: 88px;
876
+ height: 44px;
877
+ padding: 0 0.75rem;
878
+ font-family: "Pretendard", sans-serif;
879
+ font-size: 0.9375rem;
880
+ line-height: 1.5;
881
+ color: #1a1a1a;
882
+ background-color: #ffffff;
883
+ border: 1px solid #e5e5e5;
884
+ border-radius: 6px;
885
+ cursor: pointer;
886
+ transition:
887
+ border-color 0.1s ease-out,
888
+ box-shadow 0.1s ease-out,
889
+ background-color 0.1s ease-out;
890
+ appearance: none;
891
+ background-image:
892
+ linear-gradient(
893
+ 45deg,
894
+ transparent 50%,
895
+ #666666 50%),
896
+ linear-gradient(
897
+ 135deg,
898
+ #666666 50%,
899
+ transparent 50%);
900
+ background-position: calc(100% - 16px) calc(50% - 3px), calc(100% - 11px) calc(50% - 3px);
901
+ background-size: 5px 5px;
902
+ background-repeat: no-repeat;
903
+ }
904
+ .date_picker select:hover:not(:disabled) {
905
+ border-color: #000000;
906
+ background-color: #fafafa;
907
+ }
908
+ .date_picker select:focus-visible {
909
+ outline: none;
910
+ border-color: #000000;
911
+ box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.15);
912
+ background-color: #ffffff;
913
+ }
914
+ .date_picker select:disabled {
915
+ cursor: not-allowed;
916
+ color: #9ca3af;
917
+ background-color: #fafafa;
918
+ border-color: rgba(0, 0, 0, 0.08);
919
+ }
920
+ .date_picker select option {
921
+ color: #1a1a1a;
922
+ }
923
+ .date_picker select:nth-child(1) {
924
+ min-width: 96px;
925
+ }
926
+ .date_picker select:nth-child(2),
927
+ .date_picker select:nth-child(3) {
928
+ min-width: 72px;
929
+ }
930
+ @media (max-width: 480px) {
931
+ .date_picker {
932
+ gap: 0.25rem;
933
+ }
934
+ .date_picker select {
935
+ min-width: 0;
936
+ flex: 1;
937
+ }
938
+ }
939
+
869
940
  /* src/ui/navigation/pagination/style.scss */
870
941
  .pagination {
871
942
  display: flex;
package/dist/index.d.ts CHANGED
@@ -123,6 +123,17 @@ interface TextFieldProps extends Omit<React.InputHTMLAttributes<HTMLInputElement
123
123
  }
124
124
  declare const TextField: React.ForwardRefExoticComponent<TextFieldProps & React.RefAttributes<HTMLInputElement>>;
125
125
 
126
+ type DatePickerMode = "year-month" | "year-month-day";
127
+ interface DatePickerProps {
128
+ value?: string;
129
+ onChange: (value: string) => void;
130
+ mode?: DatePickerMode;
131
+ startYear?: number;
132
+ endYear?: number;
133
+ disabled?: boolean;
134
+ }
135
+ declare const DatePicker: ({ value, onChange, mode, startYear, endYear, disabled, }: DatePickerProps) => react_jsx_runtime.JSX.Element;
136
+
126
137
  interface PaginationProps {
127
138
  page: number;
128
139
  totalPages: number;
@@ -139,4 +150,4 @@ interface ModalProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title">
139
150
  }
140
151
  declare const Modal: ({ open, onClose, closeOnOverlay, width, title, children, className, ...props }: ModalProps) => react_jsx_runtime.JSX.Element | null;
141
152
 
142
- export { AlertProvider, Button, Card, Checkbox, FileInput, Loading, Modal, Pagination, Radio, Select, type SelectOption, Switch, TextField, ToastProvider, useAlert, useToast };
153
+ export { AlertProvider, Button, Card, Checkbox, DatePicker, FileInput, Loading, Modal, Pagination, Radio, Select, type SelectOption, Switch, TextField, ToastProvider, useAlert, useToast };
package/dist/index.js CHANGED
@@ -524,6 +524,69 @@ var TextField = React3.forwardRef(
524
524
  }
525
525
  );
526
526
  TextField.displayName = "TextField";
527
+ var pad = (n) => String(n).padStart(2, "0");
528
+ var getDaysInMonth = (year, month) => new Date(year, month, 0).getDate();
529
+ var DatePicker = ({
530
+ value,
531
+ onChange,
532
+ mode = "year-month-day",
533
+ startYear = 1950,
534
+ endYear = (/* @__PURE__ */ new Date()).getFullYear() + 10,
535
+ disabled
536
+ }) => {
537
+ const [y, m, d] = value?.split("-").map(Number) ?? [];
538
+ const year = y ?? "";
539
+ const month = m ?? "";
540
+ const day = d ?? "";
541
+ const days = year && month ? getDaysInMonth(year, month) : 31;
542
+ const emit = (yy, mm, dd) => {
543
+ const result = mode === "year-month" ? `${yy}-${pad(mm)}-01` : `${yy}-${pad(mm)}-${pad(dd ?? 1)}`;
544
+ onChange(result);
545
+ };
546
+ return /* @__PURE__ */ jsxs("div", { className: "date_picker", children: [
547
+ /* @__PURE__ */ jsxs(
548
+ "select",
549
+ {
550
+ value: year,
551
+ disabled,
552
+ onChange: (e) => emit(Number(e.target.value), month || 1, day || 1),
553
+ children: [
554
+ /* @__PURE__ */ jsx("option", { value: "", disabled: true }),
555
+ Array.from(
556
+ { length: endYear - startYear + 1 },
557
+ (_, i) => startYear + i
558
+ ).map((y2) => /* @__PURE__ */ jsx("option", { value: y2, children: y2 }, y2))
559
+ ]
560
+ }
561
+ ),
562
+ /* @__PURE__ */ jsxs(
563
+ "select",
564
+ {
565
+ value: month,
566
+ disabled: disabled || !year,
567
+ onChange: (e) => emit(year, Number(e.target.value), day || 1),
568
+ children: [
569
+ /* @__PURE__ */ jsx("option", { value: "", disabled: true }),
570
+ Array.from({ length: 12 }, (_, i) => i + 1).map((m2) => /* @__PURE__ */ jsx("option", { value: m2, children: pad(m2) }, m2))
571
+ ]
572
+ }
573
+ ),
574
+ mode === "year-month-day" && /* @__PURE__ */ jsxs(
575
+ "select",
576
+ {
577
+ value: day,
578
+ disabled: disabled || !month,
579
+ onChange: (e) => emit(year, month, Number(e.target.value)),
580
+ children: [
581
+ /* @__PURE__ */ jsx("option", { value: "", disabled: true }),
582
+ Array.from({ length: days }, (_, i) => i + 1).map(
583
+ (d2) => /* @__PURE__ */ jsx("option", { value: d2, children: pad(d2) }, d2)
584
+ )
585
+ ]
586
+ }
587
+ )
588
+ ] });
589
+ };
527
590
  var range = (start, end) => {
528
591
  const out = [];
529
592
  for (let i = start; i <= end; i += 1) out.push(i);
@@ -632,4 +695,4 @@ var Modal = ({
632
695
  );
633
696
  };
634
697
 
635
- export { AlertProvider, Button, Card, Checkbox, FileInput, Loading, Modal, Pagination, Radio, Select, Switch, TextField, ToastProvider, useAlert, useToast };
698
+ export { AlertProvider, Button, Card, Checkbox, DatePicker, FileInput, Loading, Modal, Pagination, Radio, Select, Switch, TextField, ToastProvider, useAlert, useToast };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bigtablet/design-system",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "Bigtablet Design System UI Components",
5
5
  "type": "module",
6
6
  "types": "dist/index.d.ts",